diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_loadbalancer.go b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_loadbalancer.go index 972ed686d11..b896146102c 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_loadbalancer.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_loadbalancer.go @@ -1447,14 +1447,29 @@ func (az *Cloud) reconcileLoadBalancer(clusterName string, service *v1.Service, } klog.V(10).Infof("EnsureBackendPoolDeleted(%s) for service %s: end", lbBackendPoolID, serviceName) - // Remove the LB. - klog.V(10).Infof("reconcileLoadBalancer: az.DeleteLB(%q): start", lbName) - err = az.DeleteLB(service, lbName) + existingLBs, err := az.ListLB(service) if err != nil { - klog.V(2).Infof("reconcileLoadBalancer for service(%s) abort backoff: lb(%s) - deleting; no remaining frontendIPConfigurations", serviceName, lbName) + klog.Errorf("reconcileLoadBalancer: failed to list load balancer for servcie %q: %s", serviceName, err.Error()) return nil, err } - klog.V(10).Infof("az.DeleteLB(%q): end", lbName) + + foundLB := false + for _, existingLB := range existingLBs { + if strings.EqualFold(lbName, to.String(existingLB.Name)) { + foundLB = true + break + } + } + // Remove the LB if it exists. + if foundLB { + klog.V(10).Infof("reconcileLoadBalancer: az.DeleteLB(%q): start", lbName) + err = az.DeleteLB(service, lbName) + if err != nil { + klog.V(2).Infof("reconcileLoadBalancer for service(%s) abort backoff: lb(%s) - deleting; no remaining frontendIPConfigurations", serviceName, lbName) + return nil, err + } + klog.V(10).Infof("az.DeleteLB(%q): end", lbName) + } } } else { klog.V(2).Infof("reconcileLoadBalancer: reconcileLoadBalancer for service(%s): lb(%s) - updating", serviceName, lbName) diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_test.go b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_test.go index 170a88ed04d..529d4d91822 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_test.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_test.go @@ -591,7 +591,7 @@ func testLoadBalancerServiceAutoModeDeleteSelection(t *testing.T, isInternal boo mockLBsClient.EXPECT().Get(gomock.Any(), az.ResourceGroup, *lb.Name, gomock.Any()).Return(expectedLBs[0], nil).MaxTimes(2) } mockLBsClient.EXPECT().Delete(gomock.Any(), az.ResourceGroup, gomock.Any()).Return(nil).AnyTimes() - mockLBsClient.EXPECT().List(gomock.Any(), az.ResourceGroup).Return(expectedLBs, nil).MaxTimes(3) + mockLBsClient.EXPECT().List(gomock.Any(), az.ResourceGroup).Return(expectedLBs, nil).MaxTimes(4) // expected is MIN(index, availabilitySetCount) expectedNumOfLB := int(math.Min(float64(index), float64(availabilitySetCount)))