Merge pull request #103439 from andyzhangx/azure-managed-disk-translation-issue
fix azure disk translation issue due to lower case `managed` kind
This commit is contained in:
commit
dadecb2c89
@ -44,6 +44,7 @@ const (
|
|||||||
var (
|
var (
|
||||||
managedDiskPathRE = regexp.MustCompile(`.*/subscriptions/(?:.*)/resourceGroups/(?:.*)/providers/Microsoft.Compute/disks/(.+)`)
|
managedDiskPathRE = regexp.MustCompile(`.*/subscriptions/(?:.*)/resourceGroups/(?:.*)/providers/Microsoft.Compute/disks/(.+)`)
|
||||||
unmanagedDiskPathRE = regexp.MustCompile(`http(?:.*)://(?:.*)/vhds/(.+)`)
|
unmanagedDiskPathRE = regexp.MustCompile(`http(?:.*)://(?:.*)/vhds/(.+)`)
|
||||||
|
managed = string(v1.AzureManagedDisk)
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ InTreePlugin = &azureDiskCSITranslator{}
|
var _ InTreePlugin = &azureDiskCSITranslator{}
|
||||||
@ -99,6 +100,9 @@ func (t *azureDiskCSITranslator) TranslateInTreeInlineVolumeToCSI(volume *v1.Vol
|
|||||||
}
|
}
|
||||||
|
|
||||||
azureSource := volume.AzureDisk
|
azureSource := volume.AzureDisk
|
||||||
|
if azureSource.Kind != nil && !strings.EqualFold(string(*azureSource.Kind), managed) {
|
||||||
|
return nil, fmt.Errorf("kind(%v) is not supported in csi migration", *azureSource.Kind)
|
||||||
|
}
|
||||||
pv := &v1.PersistentVolume{
|
pv := &v1.PersistentVolume{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
// Must be unique per disk as it is used as the unique part of the
|
// Must be unique per disk as it is used as the unique part of the
|
||||||
@ -110,7 +114,7 @@ func (t *azureDiskCSITranslator) TranslateInTreeInlineVolumeToCSI(volume *v1.Vol
|
|||||||
CSI: &v1.CSIPersistentVolumeSource{
|
CSI: &v1.CSIPersistentVolumeSource{
|
||||||
Driver: AzureDiskDriverName,
|
Driver: AzureDiskDriverName,
|
||||||
VolumeHandle: azureSource.DataDiskURI,
|
VolumeHandle: azureSource.DataDiskURI,
|
||||||
VolumeAttributes: map[string]string{azureDiskKind: "Managed"},
|
VolumeAttributes: map[string]string{azureDiskKind: managed},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce},
|
AccessModes: []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce},
|
||||||
@ -127,9 +131,7 @@ func (t *azureDiskCSITranslator) TranslateInTreeInlineVolumeToCSI(volume *v1.Vol
|
|||||||
pv.Spec.PersistentVolumeSource.CSI.FSType = *azureSource.FSType
|
pv.Spec.PersistentVolumeSource.CSI.FSType = *azureSource.FSType
|
||||||
pv.Spec.PersistentVolumeSource.CSI.VolumeAttributes[azureDiskFSType] = *azureSource.FSType
|
pv.Spec.PersistentVolumeSource.CSI.VolumeAttributes[azureDiskFSType] = *azureSource.FSType
|
||||||
}
|
}
|
||||||
if azureSource.Kind != nil {
|
pv.Spec.PersistentVolumeSource.CSI.VolumeAttributes[azureDiskKind] = managed
|
||||||
pv.Spec.PersistentVolumeSource.CSI.VolumeAttributes[azureDiskKind] = string(*azureSource.Kind)
|
|
||||||
}
|
|
||||||
|
|
||||||
return pv, nil
|
return pv, nil
|
||||||
}
|
}
|
||||||
@ -147,11 +149,15 @@ func (t *azureDiskCSITranslator) TranslateInTreePVToCSI(pv *v1.PersistentVolume)
|
|||||||
// refer to https://github.com/kubernetes-sigs/azuredisk-csi-driver/blob/master/docs/driver-parameters.md
|
// refer to https://github.com/kubernetes-sigs/azuredisk-csi-driver/blob/master/docs/driver-parameters.md
|
||||||
csiSource = &v1.CSIPersistentVolumeSource{
|
csiSource = &v1.CSIPersistentVolumeSource{
|
||||||
Driver: AzureDiskDriverName,
|
Driver: AzureDiskDriverName,
|
||||||
VolumeAttributes: map[string]string{azureDiskKind: "Managed"},
|
VolumeAttributes: map[string]string{azureDiskKind: managed},
|
||||||
VolumeHandle: azureSource.DataDiskURI,
|
VolumeHandle: azureSource.DataDiskURI,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if azureSource.Kind != nil && !strings.EqualFold(string(*azureSource.Kind), managed) {
|
||||||
|
return nil, fmt.Errorf("kind(%v) is not supported in csi migration", *azureSource.Kind)
|
||||||
|
}
|
||||||
|
|
||||||
if azureSource.CachingMode != nil {
|
if azureSource.CachingMode != nil {
|
||||||
csiSource.VolumeAttributes[azureDiskCachingMode] = string(*azureSource.CachingMode)
|
csiSource.VolumeAttributes[azureDiskCachingMode] = string(*azureSource.CachingMode)
|
||||||
}
|
}
|
||||||
@ -160,10 +166,7 @@ func (t *azureDiskCSITranslator) TranslateInTreePVToCSI(pv *v1.PersistentVolume)
|
|||||||
csiSource.FSType = *azureSource.FSType
|
csiSource.FSType = *azureSource.FSType
|
||||||
csiSource.VolumeAttributes[azureDiskFSType] = *azureSource.FSType
|
csiSource.VolumeAttributes[azureDiskFSType] = *azureSource.FSType
|
||||||
}
|
}
|
||||||
|
csiSource.VolumeAttributes[azureDiskKind] = managed
|
||||||
if azureSource.Kind != nil {
|
|
||||||
csiSource.VolumeAttributes[azureDiskKind] = string(*azureSource.Kind)
|
|
||||||
}
|
|
||||||
|
|
||||||
if azureSource.ReadOnly != nil {
|
if azureSource.ReadOnly != nil {
|
||||||
csiSource.ReadOnly = *azureSource.ReadOnly
|
csiSource.ReadOnly = *azureSource.ReadOnly
|
||||||
@ -208,11 +211,7 @@ func (t *azureDiskCSITranslator) TranslateCSIPVToInTree(pv *v1.PersistentVolume)
|
|||||||
if fsType, ok := csiSource.VolumeAttributes[azureDiskFSType]; ok && fsType != "" {
|
if fsType, ok := csiSource.VolumeAttributes[azureDiskFSType]; ok && fsType != "" {
|
||||||
azureSource.FSType = &fsType
|
azureSource.FSType = &fsType
|
||||||
}
|
}
|
||||||
|
azureSource.Kind = &managed
|
||||||
if kind, ok := csiSource.VolumeAttributes[azureDiskKind]; ok && kind != "" {
|
|
||||||
diskKind := v1.AzureDataDiskKind(kind)
|
|
||||||
azureSource.Kind = &diskKind
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pv.Spec.CSI = nil
|
pv.Spec.CSI = nil
|
||||||
|
@ -98,6 +98,7 @@ func TestGetDiskName(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestTranslateAzureDiskInTreeStorageClassToCSI(t *testing.T) {
|
func TestTranslateAzureDiskInTreeStorageClassToCSI(t *testing.T) {
|
||||||
|
sharedBlobDiskKind := v1.AzureDedicatedBlobDisk
|
||||||
translator := NewAzureDiskCSITranslator()
|
translator := NewAzureDiskCSITranslator()
|
||||||
|
|
||||||
cases := []struct {
|
cases := []struct {
|
||||||
@ -141,6 +142,19 @@ func TestTranslateAzureDiskInTreeStorageClassToCSI(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "azure disk volume with non-managed kind",
|
||||||
|
volume: &corev1.Volume{
|
||||||
|
VolumeSource: corev1.VolumeSource{
|
||||||
|
AzureDisk: &corev1.AzureDiskVolumeSource{
|
||||||
|
DiskName: "diskname",
|
||||||
|
DataDiskURI: "datadiskuri",
|
||||||
|
Kind: &sharedBlobDiskKind,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expErr: true,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tc := range cases {
|
for _, tc := range cases {
|
||||||
@ -163,9 +177,11 @@ func TestTranslateAzureDiskInTreeStorageClassToCSI(t *testing.T) {
|
|||||||
func TestTranslateAzureDiskInTreePVToCSI(t *testing.T) {
|
func TestTranslateAzureDiskInTreePVToCSI(t *testing.T) {
|
||||||
translator := NewAzureDiskCSITranslator()
|
translator := NewAzureDiskCSITranslator()
|
||||||
|
|
||||||
|
sharedBlobDiskKind := v1.AzureDedicatedBlobDisk
|
||||||
cachingMode := corev1.AzureDataDiskCachingMode("cachingmode")
|
cachingMode := corev1.AzureDataDiskCachingMode("cachingmode")
|
||||||
fsType := "fstype"
|
fsType := "fstype"
|
||||||
readOnly := true
|
readOnly := true
|
||||||
|
diskURI := "/subscriptions/12/resourceGroups/23/providers/Microsoft.Compute/disks/name"
|
||||||
|
|
||||||
cases := []struct {
|
cases := []struct {
|
||||||
name string
|
name string
|
||||||
@ -178,18 +194,18 @@ func TestTranslateAzureDiskInTreePVToCSI(t *testing.T) {
|
|||||||
expErr: true,
|
expErr: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "no azure file volume",
|
name: "no azure disk volume",
|
||||||
volume: &corev1.PersistentVolume{},
|
volume: &corev1.PersistentVolume{},
|
||||||
expErr: true,
|
expErr: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "azure file volume",
|
name: "azure disk volume",
|
||||||
volume: &corev1.PersistentVolume{
|
volume: &corev1.PersistentVolume{
|
||||||
Spec: corev1.PersistentVolumeSpec{
|
Spec: corev1.PersistentVolumeSpec{
|
||||||
PersistentVolumeSource: corev1.PersistentVolumeSource{
|
PersistentVolumeSource: corev1.PersistentVolumeSource{
|
||||||
AzureDisk: &corev1.AzureDiskVolumeSource{
|
AzureDisk: &corev1.AzureDiskVolumeSource{
|
||||||
CachingMode: &cachingMode,
|
CachingMode: &cachingMode,
|
||||||
DataDiskURI: "datadiskuri",
|
DataDiskURI: diskURI,
|
||||||
FSType: &fsType,
|
FSType: &fsType,
|
||||||
ReadOnly: &readOnly,
|
ReadOnly: &readOnly,
|
||||||
},
|
},
|
||||||
@ -208,12 +224,29 @@ func TestTranslateAzureDiskInTreePVToCSI(t *testing.T) {
|
|||||||
azureDiskFSType: fsType,
|
azureDiskFSType: fsType,
|
||||||
azureDiskKind: "Managed",
|
azureDiskKind: "Managed",
|
||||||
},
|
},
|
||||||
VolumeHandle: "datadiskuri",
|
VolumeHandle: diskURI,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "azure disk volume with non-managed kind",
|
||||||
|
volume: &corev1.PersistentVolume{
|
||||||
|
Spec: corev1.PersistentVolumeSpec{
|
||||||
|
PersistentVolumeSource: corev1.PersistentVolumeSource{
|
||||||
|
AzureDisk: &corev1.AzureDiskVolumeSource{
|
||||||
|
CachingMode: &cachingMode,
|
||||||
|
DataDiskURI: diskURI,
|
||||||
|
FSType: &fsType,
|
||||||
|
ReadOnly: &readOnly,
|
||||||
|
Kind: &sharedBlobDiskKind,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
expErr: true,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tc := range cases {
|
for _, tc := range cases {
|
||||||
@ -233,6 +266,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) {
|
func TestTranslateInTreeStorageClassToCSI(t *testing.T) {
|
||||||
translator := NewAzureDiskCSITranslator()
|
translator := NewAzureDiskCSITranslator()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user