From 6b41341ba70bf2745bebcc504c2c86b66fd035b3 Mon Sep 17 00:00:00 2001 From: andyzhangx Date: Sat, 16 May 2020 02:48:41 +0000 Subject: [PATCH] fix: azure file migration support on annotation behavior change --- .../csi-translation-lib/plugins/azure_file.go | 15 ++++++- .../plugins/azure_file_test.go | 39 +++++++++++++++++++ 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/staging/src/k8s.io/csi-translation-lib/plugins/azure_file.go b/staging/src/k8s.io/csi-translation-lib/plugins/azure_file.go index 76a3b86dbb4..40ab66740f2 100644 --- a/staging/src/k8s.io/csi-translation-lib/plugins/azure_file.go +++ b/staging/src/k8s.io/csi-translation-lib/plugins/azure_file.go @@ -41,6 +41,8 @@ const ( secretNameTemplate = "azure-storage-account-%s-secret" defaultSecretNamespace = "default" + + resourceGroupAnnotation = "kubernetes.io/azure-file-resource-group" ) var _ InTreePlugin = &azureFileCSITranslator{} @@ -116,7 +118,11 @@ func (t *azureFileCSITranslator) TranslateInTreePVToCSI(pv *v1.PersistentVolume) klog.Warningf("getStorageAccountName(%s) returned with error: %v", azureSource.SecretName, err) accountName = azureSource.SecretName } - volumeID := fmt.Sprintf(volumeIDTemplate, "", accountName, azureSource.ShareName, "") + resourceGroup := "" + if v, ok := pv.ObjectMeta.Annotations[resourceGroupAnnotation]; ok { + resourceGroup = v + } + volumeID := fmt.Sprintf(volumeIDTemplate, resourceGroup, accountName, azureSource.ShareName, "") var ( // refer to https://github.com/kubernetes-sigs/azurefile-csi-driver/blob/master/docs/driver-parameters.md @@ -155,6 +161,7 @@ func (t *azureFileCSITranslator) TranslateCSIPVToInTree(pv *v1.PersistentVolume) ReadOnly: csiSource.ReadOnly, } + resourceGroup := "" if csiSource.NodeStageSecretRef != nil && csiSource.NodeStageSecretRef.Name != "" { azureSource.SecretName = csiSource.NodeStageSecretRef.Name azureSource.SecretNamespace = &csiSource.NodeStageSecretRef.Namespace @@ -164,16 +171,20 @@ func (t *azureFileCSITranslator) TranslateCSIPVToInTree(pv *v1.PersistentVolume) } } } else { - _, storageAccount, fileShareName, _, err := getFileShareInfo(csiSource.VolumeHandle) + rg, storageAccount, fileShareName, _, err := getFileShareInfo(csiSource.VolumeHandle) if err != nil { return nil, err } azureSource.ShareName = fileShareName azureSource.SecretName = fmt.Sprintf(secretNameTemplate, storageAccount) + resourceGroup = rg } pv.Spec.CSI = nil pv.Spec.AzureFile = azureSource + if resourceGroup != "" { + pv.ObjectMeta.Annotations[resourceGroupAnnotation] = resourceGroup + } return pv, nil } diff --git a/staging/src/k8s.io/csi-translation-lib/plugins/azure_file_test.go b/staging/src/k8s.io/csi-translation-lib/plugins/azure_file_test.go index ab2b3ee0cf8..ffc4be5d29e 100644 --- a/staging/src/k8s.io/csi-translation-lib/plugins/azure_file_test.go +++ b/staging/src/k8s.io/csi-translation-lib/plugins/azure_file_test.go @@ -224,6 +224,45 @@ func TestTranslateAzureFileInTreePVToCSI(t *testing.T) { }, }, }, + { + name: "azure file volume with rg annotation", + volume: &corev1.PersistentVolume{ + ObjectMeta: metav1.ObjectMeta{ + Name: "file.csi.azure.com-sharename", + Annotations: map[string]string{resourceGroupAnnotation: "rg"}, + }, + Spec: corev1.PersistentVolumeSpec{ + PersistentVolumeSource: corev1.PersistentVolumeSource{ + AzureFile: &corev1.AzureFilePersistentVolumeSource{ + ShareName: "sharename", + SecretName: "secretname", + SecretNamespace: &secretNamespace, + ReadOnly: true, + }, + }, + }, + }, + expVol: &corev1.PersistentVolume{ + ObjectMeta: metav1.ObjectMeta{ + Name: "file.csi.azure.com-sharename", + Annotations: map[string]string{resourceGroupAnnotation: "rg"}, + }, + Spec: corev1.PersistentVolumeSpec{ + PersistentVolumeSource: corev1.PersistentVolumeSource{ + CSI: &corev1.CSIPersistentVolumeSource{ + Driver: "file.csi.azure.com", + ReadOnly: true, + NodeStageSecretRef: &corev1.SecretReference{ + Name: "secretname", + Namespace: secretNamespace, + }, + VolumeAttributes: map[string]string{azureFileShareName: "sharename"}, + VolumeHandle: "rg#secretname#sharename#", + }, + }, + }, + }, + }, } for _, tc := range cases {