From 18955db416148c2ae6306da363d336693de22eac Mon Sep 17 00:00:00 2001 From: andyzhangx Date: Fri, 2 Jul 2021 14:50:46 +0000 Subject: [PATCH] fix azure disk translation issue --- .../csi-translation-lib/plugins/azure_disk.go | 20 ++--- .../plugins/azure_disk_test.go | 77 ++++++++++++++++++- 2 files changed, 79 insertions(+), 18 deletions(-) diff --git a/staging/src/k8s.io/csi-translation-lib/plugins/azure_disk.go b/staging/src/k8s.io/csi-translation-lib/plugins/azure_disk.go index d47df35e5c4..59976b3e1c8 100644 --- a/staging/src/k8s.io/csi-translation-lib/plugins/azure_disk.go +++ b/staging/src/k8s.io/csi-translation-lib/plugins/azure_disk.go @@ -44,6 +44,7 @@ const ( var ( managedDiskPathRE = regexp.MustCompile(`.*/subscriptions/(?:.*)/resourceGroups/(?:.*)/providers/Microsoft.Compute/disks/(.+)`) unmanagedDiskPathRE = regexp.MustCompile(`http(?:.*)://(?:.*)/vhds/(.+)`) + managed = string(v1.AzureManagedDisk) ) var _ InTreePlugin = &azureDiskCSITranslator{} @@ -110,7 +111,7 @@ func (t *azureDiskCSITranslator) TranslateInTreeInlineVolumeToCSI(volume *v1.Vol CSI: &v1.CSIPersistentVolumeSource{ Driver: AzureDiskDriverName, VolumeHandle: azureSource.DataDiskURI, - VolumeAttributes: map[string]string{azureDiskKind: "Managed"}, + VolumeAttributes: map[string]string{azureDiskKind: managed}, }, }, AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce}, @@ -127,9 +128,7 @@ func (t *azureDiskCSITranslator) TranslateInTreeInlineVolumeToCSI(volume *v1.Vol pv.Spec.PersistentVolumeSource.CSI.FSType = *azureSource.FSType pv.Spec.PersistentVolumeSource.CSI.VolumeAttributes[azureDiskFSType] = *azureSource.FSType } - if azureSource.Kind != nil { - pv.Spec.PersistentVolumeSource.CSI.VolumeAttributes[azureDiskKind] = string(*azureSource.Kind) - } + pv.Spec.PersistentVolumeSource.CSI.VolumeAttributes[azureDiskKind] = managed return pv, nil } @@ -147,7 +146,7 @@ func (t *azureDiskCSITranslator) TranslateInTreePVToCSI(pv *v1.PersistentVolume) // refer to https://github.com/kubernetes-sigs/azuredisk-csi-driver/blob/master/docs/driver-parameters.md csiSource = &v1.CSIPersistentVolumeSource{ Driver: AzureDiskDriverName, - VolumeAttributes: map[string]string{azureDiskKind: "Managed"}, + VolumeAttributes: map[string]string{azureDiskKind: managed}, VolumeHandle: azureSource.DataDiskURI, } ) @@ -160,10 +159,7 @@ func (t *azureDiskCSITranslator) TranslateInTreePVToCSI(pv *v1.PersistentVolume) csiSource.FSType = *azureSource.FSType csiSource.VolumeAttributes[azureDiskFSType] = *azureSource.FSType } - - if azureSource.Kind != nil { - csiSource.VolumeAttributes[azureDiskKind] = string(*azureSource.Kind) - } + csiSource.VolumeAttributes[azureDiskKind] = managed if azureSource.ReadOnly != nil { csiSource.ReadOnly = *azureSource.ReadOnly @@ -208,11 +204,7 @@ func (t *azureDiskCSITranslator) TranslateCSIPVToInTree(pv *v1.PersistentVolume) if fsType, ok := csiSource.VolumeAttributes[azureDiskFSType]; ok && fsType != "" { azureSource.FSType = &fsType } - - if kind, ok := csiSource.VolumeAttributes[azureDiskKind]; ok && kind != "" { - diskKind := v1.AzureDataDiskKind(kind) - azureSource.Kind = &diskKind - } + azureSource.Kind = &managed } pv.Spec.CSI = nil diff --git a/staging/src/k8s.io/csi-translation-lib/plugins/azure_disk_test.go b/staging/src/k8s.io/csi-translation-lib/plugins/azure_disk_test.go index df855778773..ebc1149279c 100644 --- a/staging/src/k8s.io/csi-translation-lib/plugins/azure_disk_test.go +++ b/staging/src/k8s.io/csi-translation-lib/plugins/azure_disk_test.go @@ -166,6 +166,7 @@ func TestTranslateAzureDiskInTreePVToCSI(t *testing.T) { cachingMode := corev1.AzureDataDiskCachingMode("cachingmode") fsType := "fstype" readOnly := true + diskURI := "/subscriptions/12/resourceGroups/23/providers/Microsoft.Compute/disks/name" cases := []struct { name string @@ -178,18 +179,18 @@ func TestTranslateAzureDiskInTreePVToCSI(t *testing.T) { expErr: true, }, { - name: "no azure file volume", + name: "no azure disk volume", volume: &corev1.PersistentVolume{}, expErr: true, }, { - name: "azure file volume", + name: "azure disk volume", volume: &corev1.PersistentVolume{ Spec: corev1.PersistentVolumeSpec{ PersistentVolumeSource: corev1.PersistentVolumeSource{ AzureDisk: &corev1.AzureDiskVolumeSource{ CachingMode: &cachingMode, - DataDiskURI: "datadiskuri", + DataDiskURI: diskURI, FSType: &fsType, ReadOnly: &readOnly, }, @@ -208,7 +209,7 @@ func TestTranslateAzureDiskInTreePVToCSI(t *testing.T) { azureDiskFSType: fsType, azureDiskKind: "Managed", }, - VolumeHandle: "datadiskuri", + VolumeHandle: diskURI, }, }, }, @@ -233,6 +234,74 @@ func TestTranslateAzureDiskInTreePVToCSI(t *testing.T) { } } +func TestTranslateTranslateCSIPVToInTree(t *testing.T) { + cachingMode := corev1.AzureDataDiskCachingMode("cachingmode") + fsType := "fstype" + readOnly := true + diskURI := "/subscriptions/12/resourceGroups/23/providers/Microsoft.Compute/disks/name" + managed := v1.AzureManagedDisk + + translator := NewAzureDiskCSITranslator() + cases := []struct { + name string + volume *corev1.PersistentVolume + expVol *corev1.PersistentVolume + expErr bool + }{ + { + name: "azure disk volume", + volume: &corev1.PersistentVolume{ + Spec: corev1.PersistentVolumeSpec{ + PersistentVolumeSource: corev1.PersistentVolumeSource{ + CSI: &corev1.CSIPersistentVolumeSource{ + Driver: "disk.csi.azure.com", + FSType: "fstype", + ReadOnly: true, + VolumeAttributes: map[string]string{ + azureDiskCachingMode: "cachingmode", + azureDiskFSType: fsType, + azureDiskKind: "managed", + }, + VolumeHandle: diskURI, + }, + }, + }, + }, + expVol: &corev1.PersistentVolume{ + Spec: corev1.PersistentVolumeSpec{ + PersistentVolumeSource: corev1.PersistentVolumeSource{ + AzureDisk: &corev1.AzureDiskVolumeSource{ + CachingMode: &cachingMode, + DataDiskURI: diskURI, + FSType: &fsType, + ReadOnly: &readOnly, + Kind: &managed, + DiskName: "name", + }, + }, + }, + }, + expErr: false, + }, + } + + for _, tc := range cases { + t.Logf("Testing %v", tc.name) + got, err := translator.TranslateCSIPVToInTree(tc.volume) + 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.expVol) { + t.Errorf("Got parameters: %v, expected :%v", got, tc.expVol) + } + } +} + func TestTranslateInTreeStorageClassToCSI(t *testing.T) { translator := NewAzureDiskCSITranslator()