From 9d0f27f7341339e2e05c6decc14a181ea8e3743d Mon Sep 17 00:00:00 2001 From: tb365 Date: Wed, 14 Jul 2021 10:03:25 +0800 Subject: [PATCH 1/2] azure lb sync listener frontip fix --- pkg/multicloud/azure/loadbalancer.go | 53 ++++++++++++++++---- pkg/multicloud/azure/loadbalancerlistener.go | 2 +- 2 files changed, 45 insertions(+), 10 deletions(-) diff --git a/pkg/multicloud/azure/loadbalancer.go b/pkg/multicloud/azure/loadbalancer.go index a26ad20a49..af0c733fa2 100644 --- a/pkg/multicloud/azure/loadbalancer.go +++ b/pkg/multicloud/azure/loadbalancer.go @@ -16,7 +16,7 @@ import ( type SLoadbalancer struct { region *SRegion - eip cloudprovider.ICloudEIP + eips []cloudprovider.ICloudEIP lbbgs []cloudprovider.ICloudLoadbalancerBackendGroup listeners []cloudprovider.ICloudLoadbalancerListener @@ -79,7 +79,7 @@ func (self *SLoadbalancer) Refresh() error { return errors.Wrap(err, "jsonutils.Update") } - self.eip = nil + self.eips = nil self.lbbgs = nil self.listeners = nil return nil @@ -273,20 +273,55 @@ func (self *SLoadbalancer) getEipIds() []string { } func (self *SLoadbalancer) GetIEIP() (cloudprovider.ICloudEIP, error) { - if self.eip != nil { - return self.eip, nil + ieips, err := self.GetIEIPS() + if err != nil { + return nil, errors.Wrap(err, "GetIEIPS") } - eips := self.getEipIds() - if len(eips) > 0 { - eip, err := self.region.GetIEipById(eips[0]) - self.eip = eip - return eip, err + if len(ieips) > 0 { + return self.eips[0], nil } return nil, nil } +func (self *SLoadbalancer) GetIEIPById(eipId string) (cloudprovider.ICloudEIP, error) { + ieips, err := self.GetIEIPS() + if err != nil { + return nil, errors.Wrap(err, "GetIEIPS") + } + + for i := range ieips { + if ieips[i].GetId() == eipId { + return ieips[i], nil + } + } + + return nil, errors.Wrap(cloudprovider.ErrNotFound, eipId) +} + +func (self *SLoadbalancer) GetIEIPS() ([]cloudprovider.ICloudEIP, error) { + if self.eips != nil { + return self.eips, nil + } + + eips := self.getEipIds() + ieips := make([]cloudprovider.ICloudEIP, 0) + for i := range eips { + ieip, err := self.region.GetIEipById(eips[i]) + if err != nil { + return nil, errors.Wrap(err, "GetIEIP") + } + ieips = append(ieips, ieip) + } + + if len(ieips) > 0 { + self.eips = ieips + } + + return self.eips, nil +} + func (self *SLoadbalancer) Delete(ctx context.Context) error { return errors.Wrap(cloudprovider.ErrNotImplemented, "Delete") } diff --git a/pkg/multicloud/azure/loadbalancerlistener.go b/pkg/multicloud/azure/loadbalancerlistener.go index 3a7cfcbd09..492139d1ea 100644 --- a/pkg/multicloud/azure/loadbalancerlistener.go +++ b/pkg/multicloud/azure/loadbalancerlistener.go @@ -148,7 +148,7 @@ func (self *SLoadBalancerListener) GetSysTags() map[string]string { func (self *SLoadBalancerListener) GetTags() (map[string]string, error) { if self.fp != nil { if self.fp.Properties.PublicIPAddress != nil && len(self.fp.Properties.PublicIPAddress.ID) > 0 { - eip, _ := self.lb.GetIEIP() + eip, _ := self.lb.GetIEIPById(self.fp.Properties.PublicIPAddress.ID) if eip != nil { return map[string]string{"FrontendIP": eip.GetIpAddr()}, nil } From 05729f87ff97fc8e8e3a4995e4f3247d4d381d69 Mon Sep 17 00:00:00 2001 From: tb365 Date: Wed, 14 Jul 2021 11:31:44 +0800 Subject: [PATCH 2/2] azure health check fix --- pkg/multicloud/azure/loadbalancerlistener.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/pkg/multicloud/azure/loadbalancerlistener.go b/pkg/multicloud/azure/loadbalancerlistener.go index 492139d1ea..af5865e269 100644 --- a/pkg/multicloud/azure/loadbalancerlistener.go +++ b/pkg/multicloud/azure/loadbalancerlistener.go @@ -259,7 +259,9 @@ func (self *SLoadBalancerListener) GetHealthCheckInterval() int { } switch self.GetHealthCheckType() { case api.LB_HEALTH_CHECK_HTTP, api.LB_HEALTH_CHECK_HTTPS: - return self.healthcheck.Properties.Interval + if self.healthcheck.Properties.Interval > 0 { + return self.healthcheck.Properties.Interval + } } return self.healthcheck.Properties.IntervalInSeconds @@ -275,10 +277,12 @@ func (self *SLoadBalancerListener) GetHealthCheckFail() int { } switch self.GetHealthCheckType() { case api.LB_HEALTH_CHECK_HTTP, api.LB_HEALTH_CHECK_HTTPS: - return self.healthcheck.Properties.UnhealthyThreshold + if self.healthcheck.Properties.UnhealthyThreshold > 0 { + return self.healthcheck.Properties.UnhealthyThreshold + } } - return self.healthcheck.Properties.IntervalInSeconds + return self.healthcheck.Properties.NumberOfProbes } func (self *SLoadBalancerListener) GetHealthCheckReq() string {