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:
		| @@ -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")}), | ||||||
| 		}, | 		}, | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Kubernetes Prow Robot
					Kubernetes Prow Robot