From 33b740cfd21edeed86428580c2f024557df8e34a Mon Sep 17 00:00:00 2001 From: Cheng Pan Date: Fri, 8 Nov 2019 20:14:58 +0000 Subject: [PATCH] Add translation logic for EBS storage class fstype parameter --- .../csi-translation-lib/plugins/aws_ebs.go | 15 +++++- .../plugins/aws_ebs_test.go | 48 +++++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/staging/src/k8s.io/csi-translation-lib/plugins/aws_ebs.go b/staging/src/k8s.io/csi-translation-lib/plugins/aws_ebs.go index 03eee92ad18..02a8ca1c42a 100644 --- a/staging/src/k8s.io/csi-translation-lib/plugins/aws_ebs.go +++ b/staging/src/k8s.io/csi-translation-lib/plugins/aws_ebs.go @@ -45,8 +45,21 @@ func NewAWSElasticBlockStoreCSITranslator() InTreePlugin { return &awsElasticBlockStoreCSITranslator{} } -// TranslateInTreeStorageClassParametersToCSI translates InTree EBS storage class parameters to CSI storage class +// TranslateInTreeStorageClassToCSI translates InTree EBS storage class parameters to CSI storage class func (t *awsElasticBlockStoreCSITranslator) TranslateInTreeStorageClassToCSI(sc *storage.StorageClass) (*storage.StorageClass, error) { + params := map[string]string{} + + for k, v := range sc.Parameters { + switch strings.ToLower(k) { + case "fstype": + params["csi.storage.k8s.io/fstype"] = v + default: + params[k] = v + } + } + + sc.Parameters = params + return sc, nil } diff --git a/staging/src/k8s.io/csi-translation-lib/plugins/aws_ebs_test.go b/staging/src/k8s.io/csi-translation-lib/plugins/aws_ebs_test.go index a79023b1a98..4e92c37e702 100644 --- a/staging/src/k8s.io/csi-translation-lib/plugins/aws_ebs_test.go +++ b/staging/src/k8s.io/csi-translation-lib/plugins/aws_ebs_test.go @@ -17,7 +17,10 @@ limitations under the License. package plugins import ( + "reflect" "testing" + + storage "k8s.io/api/storage/v1" ) func TestKubernetesVolumeIDToEBSVolumeID(t *testing.T) { @@ -64,3 +67,48 @@ func TestKubernetesVolumeIDToEBSVolumeID(t *testing.T) { }) } } + +func TestTranslateEBSInTreeStorageClassToCSI(t *testing.T) { + translator := NewAWSElasticBlockStoreCSITranslator() + + cases := []struct { + name string + sc *storage.StorageClass + expSc *storage.StorageClass + expErr bool + }{ + { + name: "translate normal", + sc: NewStorageClass(map[string]string{"foo": "bar"}, nil), + expSc: NewStorageClass(map[string]string{"foo": "bar"}, nil), + }, + { + name: "translate empty map", + sc: NewStorageClass(map[string]string{}, nil), + expSc: NewStorageClass(map[string]string{}, nil), + }, + + { + name: "translate with fstype", + sc: NewStorageClass(map[string]string{"fstype": "ext3"}, nil), + expSc: NewStorageClass(map[string]string{"csi.storage.k8s.io/fstype": "ext3"}, nil), + }, + } + + for _, tc := range cases { + t.Logf("Testing %v", tc.name) + got, err := translator.TranslateInTreeStorageClassToCSI(tc.sc) + if err != nil && !tc.expErr { + t.Errorf("Did not expect error but got: %v", err) + } + + if err == nil && tc.expErr { + t.Errorf("Expected error, but did not get one.") + } + + if !reflect.DeepEqual(got, tc.expSc) { + t.Errorf("Got parameters: %v, expected :%v", got, tc.expSc) + } + + } +}