Azure: Filter disks with ToBeDetached flag from attach/detach

After the detach calls are made, any further updates with the disks in
the process of getting detached will complain with errors such as:

"
Cannot attach data disk '<disk name>' to VM '<vm name>' because the
disk's ToBeDetached flag is set to true. Please either remove the
disk from APIModel or set the ToBeDetached flag to false and then
try again
"

This PR will ensure that the disks with the ToBeDetached flag set are
filtered out before the update to the cloud is made.
This commit is contained in:
Krishnakumar R(KK) 2019-11-11 10:53:43 -08:00
parent 268663c9e3
commit c6b8207bfe
3 changed files with 18 additions and 8 deletions

View File

@ -302,3 +302,17 @@ func (c *controllerCommon) DisksAreAttached(diskNames []string, nodeName types.N
return attached, nil return attached, nil
} }
func filterDetachingDisks(unfilteredDisks []compute.DataDisk) []compute.DataDisk {
filteredDisks := []compute.DataDisk{}
for _, disk := range unfilteredDisks {
if disk.ToBeDetached != nil && *disk.ToBeDetached {
if disk.Name != nil {
klog.V(2).Infof("Filtering disk: %s with ToBeDetached flag set.", *disk.Name)
}
} else {
filteredDisks = append(filteredDisks, disk)
}
}
return filteredDisks
}

View File

@ -42,8 +42,7 @@ func (as *availabilitySet) AttachDisk(isManagedDisk bool, diskName, diskURI stri
return err return err
} }
disks := make([]compute.DataDisk, len(*vm.StorageProfile.DataDisks)) disks := filterDetachingDisks(*vm.StorageProfile.DataDisks)
copy(disks, *vm.StorageProfile.DataDisks)
if isManagedDisk { if isManagedDisk {
managedDisk := &compute.ManagedDiskParameters{ID: &diskURI} managedDisk := &compute.ManagedDiskParameters{ID: &diskURI}
@ -117,8 +116,7 @@ func (as *availabilitySet) DetachDisk(diskName, diskURI string, nodeName types.N
return nil, err return nil, err
} }
disks := make([]compute.DataDisk, len(*vm.StorageProfile.DataDisks)) disks := filterDetachingDisks(*vm.StorageProfile.DataDisks)
copy(disks, *vm.StorageProfile.DataDisks)
bFoundDisk := false bFoundDisk := false
for i, disk := range disks { for i, disk := range disks {

View File

@ -44,8 +44,7 @@ func (ss *scaleSet) AttachDisk(isManagedDisk bool, diskName, diskURI string, nod
disks := []compute.DataDisk{} disks := []compute.DataDisk{}
if vm.StorageProfile != nil && vm.StorageProfile.DataDisks != nil { if vm.StorageProfile != nil && vm.StorageProfile.DataDisks != nil {
disks = make([]compute.DataDisk, len(*vm.StorageProfile.DataDisks)) disks = filterDetachingDisks(*vm.StorageProfile.DataDisks)
copy(disks, *vm.StorageProfile.DataDisks)
} }
if isManagedDisk { if isManagedDisk {
managedDisk := &compute.ManagedDiskParameters{ID: &diskURI} managedDisk := &compute.ManagedDiskParameters{ID: &diskURI}
@ -123,8 +122,7 @@ func (ss *scaleSet) DetachDisk(diskName, diskURI string, nodeName types.NodeName
disks := []compute.DataDisk{} disks := []compute.DataDisk{}
if vm.StorageProfile != nil && vm.StorageProfile.DataDisks != nil { if vm.StorageProfile != nil && vm.StorageProfile.DataDisks != nil {
disks = make([]compute.DataDisk, len(*vm.StorageProfile.DataDisks)) disks = filterDetachingDisks(*vm.StorageProfile.DataDisks)
copy(disks, *vm.StorageProfile.DataDisks)
} }
bFoundDisk := false bFoundDisk := false
for i, disk := range disks { for i, disk := range disks {