mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 20:24:09 +00:00
Merge pull request #98350 from nilo19/bug/cherry-pick-482
Cherry pick #482 from cloud provider azure: aggregate errors when putting vmss
This commit is contained in:
commit
fadf85d6d0
@ -1429,10 +1429,15 @@ func (ss *scaleSet) ensureBackendPoolDeletedFromVMSS(service *v1.Service, backen
|
|||||||
vmssNamesMap[vmSetName] = true
|
vmssNamesMap[vmSetName] = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vmssUpdaters := make([]func() error, 0, len(vmssNamesMap))
|
||||||
|
errors := make([]error, 0, len(vmssNamesMap))
|
||||||
for vmssName := range vmssNamesMap {
|
for vmssName := range vmssNamesMap {
|
||||||
|
vmssName := vmssName
|
||||||
vmss, err := ss.getVMSS(vmssName, azcache.CacheReadTypeDefault)
|
vmss, err := ss.getVMSS(vmssName, azcache.CacheReadTypeDefault)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
klog.Errorf("ensureBackendPoolDeletedFromVMSS: failed to get VMSS %s: %v", vmssName, err)
|
||||||
|
errors = append(errors, err)
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
// When vmss is being deleted, CreateOrUpdate API would report "the vmss is being deleted" error.
|
// When vmss is being deleted, CreateOrUpdate API would report "the vmss is being deleted" error.
|
||||||
@ -1448,11 +1453,15 @@ func (ss *scaleSet) ensureBackendPoolDeletedFromVMSS(service *v1.Service, backen
|
|||||||
vmssNIC := *vmss.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations
|
vmssNIC := *vmss.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations
|
||||||
primaryNIC, err := ss.getPrimaryNetworkInterfaceConfigurationForScaleSet(vmssNIC, vmssName)
|
primaryNIC, err := ss.getPrimaryNetworkInterfaceConfigurationForScaleSet(vmssNIC, vmssName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
klog.Errorf("ensureBackendPoolDeletedFromVMSS: failed to get the primary network interface config of the VMSS %s: %v", vmssName, err)
|
||||||
|
errors = append(errors, err)
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
primaryIPConfig, err := getPrimaryIPConfigFromVMSSNetworkConfig(primaryNIC)
|
primaryIPConfig, err := getPrimaryIPConfigFromVMSSNetworkConfig(primaryNIC)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
klog.Errorf("ensureBackendPoolDeletedFromVMSS: failed to the primary IP config from the VMSS %s's network config : %v", vmssName, err)
|
||||||
|
errors = append(errors, err)
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
loadBalancerBackendAddressPools := []compute.SubResource{}
|
loadBalancerBackendAddressPools := []compute.SubResource{}
|
||||||
if primaryIPConfig.LoadBalancerBackendAddressPools != nil {
|
if primaryIPConfig.LoadBalancerBackendAddressPools != nil {
|
||||||
@ -1473,6 +1482,7 @@ func (ss *scaleSet) ensureBackendPoolDeletedFromVMSS(service *v1.Service, backen
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vmssUpdaters = append(vmssUpdaters, func() error {
|
||||||
// Compose a new vmss with added backendPoolID.
|
// Compose a new vmss with added backendPoolID.
|
||||||
primaryIPConfig.LoadBalancerBackendAddressPools = &newBackendPools
|
primaryIPConfig.LoadBalancerBackendAddressPools = &newBackendPools
|
||||||
newVMSS := compute.VirtualMachineScaleSet{
|
newVMSS := compute.VirtualMachineScaleSet{
|
||||||
@ -1489,9 +1499,21 @@ func (ss *scaleSet) ensureBackendPoolDeletedFromVMSS(service *v1.Service, backen
|
|||||||
klog.V(2).Infof("ensureBackendPoolDeletedFromVMSS begins to update vmss(%s) with backendPoolID %s", vmssName, backendPoolID)
|
klog.V(2).Infof("ensureBackendPoolDeletedFromVMSS begins to update vmss(%s) with backendPoolID %s", vmssName, backendPoolID)
|
||||||
rerr := ss.CreateOrUpdateVMSS(ss.ResourceGroup, vmssName, newVMSS)
|
rerr := ss.CreateOrUpdateVMSS(ss.ResourceGroup, vmssName, newVMSS)
|
||||||
if rerr != nil {
|
if rerr != nil {
|
||||||
klog.Errorf("ensureBackendPoolDeletedFromVMSS CreateOrUpdateVMSS(%s) with new backendPoolID %s, err: %v", vmssName, backendPoolID, err)
|
klog.Errorf("ensureBackendPoolDeletedFromVMSS CreateOrUpdateVMSS(%s) with new backendPoolID %s, err: %v", vmssName, backendPoolID, rerr)
|
||||||
return rerr.Error()
|
return rerr.Error()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
errs := utilerrors.AggregateGoroutines(vmssUpdaters...)
|
||||||
|
if errs != nil {
|
||||||
|
return utilerrors.Flatten(errs)
|
||||||
|
}
|
||||||
|
// Fail if there are other errors.
|
||||||
|
if len(errors) > 0 {
|
||||||
|
return utilerrors.Flatten(utilerrors.NewAggregate(errors))
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -2274,7 +2274,7 @@ func TestEnsureBackendPoolDeletedFromVMSS(t *testing.T) {
|
|||||||
backendPoolID: testLBBackendpoolID0,
|
backendPoolID: testLBBackendpoolID0,
|
||||||
expectedPutVMSS: true,
|
expectedPutVMSS: true,
|
||||||
vmssClientErr: &retry.Error{RawError: fmt.Errorf("error")},
|
vmssClientErr: &retry.Error{RawError: fmt.Errorf("error")},
|
||||||
expectedErr: fmt.Errorf("Retriable: false, RetryAfter: 0s, HTTPStatusCode: 0, RawError: error"),
|
expectedErr: utilerrors.NewAggregate([]error{fmt.Errorf("Retriable: false, RetryAfter: 0s, HTTPStatusCode: 0, RawError: error")}),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user