From 2acc7d5894cc060ccc5189bf3251d6698628032d Mon Sep 17 00:00:00 2001 From: Alexander Block Date: Mon, 21 Nov 2016 22:36:27 +0100 Subject: [PATCH] Allow backendpools in Azure Load Balancers which are not owned by cloud provider Instead of bailing out when we find another backend pool, we just ignore other backend pools and add ours to the list of existing. Fixes #36880 --- .../providers/azure/azure_loadbalancer.go | 31 +++++++++++++------ 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/pkg/cloudprovider/providers/azure/azure_loadbalancer.go b/pkg/cloudprovider/providers/azure/azure_loadbalancer.go index bd26a41c528..a8a54bab1a9 100644 --- a/pkg/cloudprovider/providers/azure/azure_loadbalancer.go +++ b/pkg/cloudprovider/providers/azure/azure_loadbalancer.go @@ -272,18 +272,29 @@ func (az *Cloud) reconcileLoadBalancer(lb network.LoadBalancer, pip *network.Pub // Ensure LoadBalancer's Backend Pool Configuration if wantLb { - if lb.Properties.BackendAddressPools == nil || - len(*lb.Properties.BackendAddressPools) == 0 { - lb.Properties.BackendAddressPools = &[]network.BackendAddressPool{ - { - Name: to.StringPtr(lbBackendPoolName), - }, + newBackendPools := []network.BackendAddressPool{} + if lb.Properties.BackendAddressPools != nil { + newBackendPools = *lb.Properties.BackendAddressPools + } + + foundBackendPool := false + for _, bp := range newBackendPools { + if strings.EqualFold(*bp.Name, lbBackendPoolName) { + glog.V(10).Infof("reconcile(%s)(%t): lb backendpool - found wanted backendpool. not adding anything", serviceName, wantLb) + foundBackendPool = true + break + } else { + glog.V(10).Infof("reconcile(%s)(%t): lb backendpool - found other backendpool %s", serviceName, wantLb, *bp.Name) } - glog.V(10).Infof("reconcile(%s)(%t): lb backendpool - adding", serviceName, wantLb) + } + if !foundBackendPool { + newBackendPools = append(newBackendPools, network.BackendAddressPool{ + Name: to.StringPtr(lbBackendPoolName), + }) + glog.V(10).Infof("reconcile(%s)(%t): lb backendpool - adding backendpool", serviceName, wantLb) + dirtyLb = true - } else if len(*lb.Properties.BackendAddressPools) != 1 || - !strings.EqualFold(*(*lb.Properties.BackendAddressPools)[0].Name, lbBackendPoolName) { - return lb, false, fmt.Errorf("loadbalancer is misconfigured with a different backend pool") + lb.Properties.BackendAddressPools = &newBackendPools } }