diff --git a/pkg/apis/compute/elasticips_const.go b/pkg/apis/compute/elasticips_const.go index 788a968866..1ae5540a96 100644 --- a/pkg/apis/compute/elasticips_const.go +++ b/pkg/apis/compute/elasticips_const.go @@ -43,10 +43,6 @@ const ( EIP_CHARGE_TYPE_BY_TRAFFIC = "traffic" EIP_CHARGE_TYPE_BY_BANDWIDTH = "bandwidth" EIP_CHARGE_TYPE_DEFAULT = EIP_CHARGE_TYPE_BY_TRAFFIC - - // EIP associate resource type - EIP_ASSOCIATE_TYPE_VM = "server" - EIP_ASSOCIATE_TYPE_ELB = "elb" ) var ( diff --git a/pkg/cloudprovider/resources.go b/pkg/cloudprovider/resources.go index 169c2f781a..113d037a41 100644 --- a/pkg/cloudprovider/resources.go +++ b/pkg/cloudprovider/resources.go @@ -490,7 +490,7 @@ type ICloudLoadbalancer interface { GetIEIP() (ICloudEIP, error) - Delete() error + Delete(ctx context.Context) error Start() error Stop() error @@ -501,7 +501,7 @@ type ICloudLoadbalancer interface { CreateILoadBalancerBackendGroup(group *SLoadbalancerBackendGroup) (ICloudLoadbalancerBackendGroup, error) GetILoadBalancerBackendGroupById(groupId string) (ICloudLoadbalancerBackendGroup, error) - CreateILoadBalancerListener(listener *SLoadbalancerListener) (ICloudLoadbalancerListener, error) + CreateILoadBalancerListener(ctx context.Context, listener *SLoadbalancerListener) (ICloudLoadbalancerListener, error) GetILoadBalancerListenerById(listenerId string) (ICloudLoadbalancerListener, error) } @@ -551,9 +551,9 @@ type ICloudLoadbalancerListener interface { Start() error Stop() error - Sync(listener *SLoadbalancerListener) error + Sync(ctx context.Context, listener *SLoadbalancerListener) error - Delete() error + Delete(ctx context.Context) error } type ICloudLoadbalancerListenerRule interface { @@ -565,7 +565,7 @@ type ICloudLoadbalancerListenerRule interface { GetCondition() string GetBackendGroupId() string - Delete() error + Delete(ctx context.Context) error } type ICloudLoadbalancerBackendGroup interface { @@ -583,8 +583,8 @@ type ICloudLoadbalancerBackendGroup interface { AddBackendServer(serverId string, weight int, port int) (ICloudLoadbalancerBackend, error) RemoveBackendServer(serverId string, weight int, port int) error - Delete() error - Sync(group *SLoadbalancerBackendGroup) error + Delete(ctx context.Context) error + Sync(ctx context.Context, group *SLoadbalancerBackendGroup) error } type ICloudLoadbalancerBackend interface { @@ -595,7 +595,7 @@ type ICloudLoadbalancerBackend interface { GetBackendType() string GetBackendRole() string GetBackendId() string - SyncConf(port, weight int) error + SyncConf(ctx context.Context, port, weight int) error } type ICloudLoadbalancerCertificate interface { diff --git a/pkg/compute/models/loadbalancercertificates.go b/pkg/compute/models/loadbalancercertificates.go index 0e615641b5..6f15c9345c 100644 --- a/pkg/compute/models/loadbalancercertificates.go +++ b/pkg/compute/models/loadbalancercertificates.go @@ -131,6 +131,7 @@ func (lbcert *SLoadbalancerCertificate) GetExtraDetails(ctx context.Context, use func (lbcert *SLoadbalancerCertificate) ValidateDeleteCondition(ctx context.Context) error { men := []db.IModelManager{ + LoadbalancerListenerManager, CachedLoadbalancerCertificateManager, } lbcertId := lbcert.Id diff --git a/pkg/compute/models/loadbalancernetworks.go b/pkg/compute/models/loadbalancernetworks.go index 2569911c1b..8806c1fd25 100644 --- a/pkg/compute/models/loadbalancernetworks.go +++ b/pkg/compute/models/loadbalancernetworks.go @@ -152,7 +152,7 @@ func (m *SLoadbalancernetworkManager) DeleteLoadbalancerNetwork(ctx context.Cont } func (m *SLoadbalancernetworkManager) syncLoadbalancerNetwork(ctx context.Context, userCred mcclient.TokenCredential, req *SLoadbalancerNetworkRequestData) error { - _network, err := db.FetchByExternalId(NetworkManager, req.NetworkId) + _network, err := db.FetchById(NetworkManager, req.NetworkId) if err != nil { return err } diff --git a/pkg/compute/models/loadbalancers.go b/pkg/compute/models/loadbalancers.go index ca665c45f4..9756ef2e15 100644 --- a/pkg/compute/models/loadbalancers.go +++ b/pkg/compute/models/loadbalancers.go @@ -586,6 +586,18 @@ func (man *SLoadbalancerManager) SyncLoadbalancers(ctx context.Context, userCred return localLbs, remoteLbs, syncResult } +func getExtLbNetworkIds(extLb cloudprovider.ICloudLoadbalancer) []string { + extNetworkIds := extLb.GetNetworkIds() + lbNetworkIds := []string{} + for _, networkId := range extNetworkIds { + if network, err := db.FetchByExternalId(NetworkManager, networkId); err == nil && network != nil { + lbNetworkIds = append(lbNetworkIds, network.GetId()) + } + } + + return lbNetworkIds +} + func (man *SLoadbalancerManager) newFromCloudLoadbalancer(ctx context.Context, userCred mcclient.TokenCredential, provider *SCloudprovider, extLb cloudprovider.ICloudLoadbalancer, region *SCloudregion, syncOwnerId mcclient.IIdentityProvider) (*SLoadbalancer, error) { lb := SLoadbalancer{} lb.SetModelManager(man, &lb) @@ -606,13 +618,7 @@ func (man *SLoadbalancerManager) newFromCloudLoadbalancer(ctx context.Context, u lb.ChargeType = extLb.GetChargeType() lb.EgressMbps = extLb.GetEgressMbps() lb.ExternalId = extLb.GetGlobalId() - networkIds := extLb.GetNetworkIds() - lbNetworkIds := []string{} - for _, networkId := range networkIds { - if network, err := db.FetchByExternalId(NetworkManager, networkId); err == nil && network != nil { - lbNetworkIds = append(lbNetworkIds, network.GetId()) - } - } + lbNetworkIds := getExtLbNetworkIds(extLb) lb.NetworkId = strings.Join(lbNetworkIds, ",") if vpcId := extLb.GetVpcId(); len(vpcId) > 0 { @@ -639,7 +645,7 @@ func (man *SLoadbalancerManager) newFromCloudLoadbalancer(ctx context.Context, u db.OpsLog.LogEvent(&lb, db.ACT_CREATE, lb.GetShortDesc(ctx), userCred) - lb.syncLoadbalancerNetwork(ctx, userCred, networkIds) + lb.syncLoadbalancerNetwork(ctx, userCred, lbNetworkIds) return &lb, nil } @@ -797,8 +803,9 @@ func (lb *SLoadbalancer) SyncWithCloudLoadbalancer(ctx context.Context, userCred db.OpsLog.LogSyncUpdate(lb, diff, userCred) + networkIds := getExtLbNetworkIds(extLb) SyncCloudProject(userCred, lb, syncOwnerId, extLb, lb.ManagerId) - lb.syncLoadbalancerNetwork(ctx, userCred, extLb.GetNetworkIds()) + lb.syncLoadbalancerNetwork(ctx, userCred, networkIds) return err } diff --git a/pkg/compute/regiondrivers/aws.go b/pkg/compute/regiondrivers/aws.go index a8f4011641..15f7672b7c 100644 --- a/pkg/compute/regiondrivers/aws.go +++ b/pkg/compute/regiondrivers/aws.go @@ -1008,7 +1008,7 @@ func (self *SAwsRegionDriver) RequestCreateLoadbalancerListener(ctx context.Cont return nil, errors.Wrap(err, "awsRegionDriver.RequestCreateLoadbalancerListener.GetICloudLoadbalancerBackendGroup") } // 服务器组已经存在,直接同步即可 - if err := ilbbg.Sync(params); err != nil { + if err := ilbbg.Sync(ctx, params); err != nil { return nil, errors.Wrap(err, "awsRegionDriver.RequestCreateLoadbalancerListener.Sync") } } else { @@ -1037,7 +1037,7 @@ func (self *SAwsRegionDriver) RequestCreateLoadbalancerListener(ctx context.Cont if err != nil { return nil, errors.Wrap(err, "awsRegionDriver.RequestCreateLoadbalancerListener.GetILoadBalancerById") } - iListener, err := iLoadbalancer.CreateILoadBalancerListener(params) + iListener, err := iLoadbalancer.CreateILoadBalancerListener(ctx, params) if err != nil { return nil, errors.Wrap(err, "awsRegionDriver.RequestCreateLoadbalancerListener.CreateILoadBalancerListener") } @@ -1140,7 +1140,7 @@ func (self *SAwsRegionDriver) RequestDeleteLoadbalancerBackendGroup(ctx context. return nil, errors.Wrap(err, "AwsRegionDriver.RequestDeleteLoadbalancerBackendGroup.GetILoadBalancerBackendGroupById") } - err = iLoadbalancerBackendGroup.Delete() + err = iLoadbalancerBackendGroup.Delete(ctx) if err != nil { return nil, errors.Wrap(err, "AwsRegionDriver.RequestDeleteLoadbalancerBackendGroup.DeleteExtBackendGroup") } @@ -1211,7 +1211,7 @@ func (self *SAwsRegionDriver) RequestDeleteLoadbalancer(ctx context.Context, use } } - err = iLoadbalancer.Delete() + err = iLoadbalancer.Delete(ctx) if err != nil { if err != cloudprovider.ErrNotFound { return nil, errors.Wrap(err, "AwsRegionDriver.RequestDeleteLoadbalancer.Delete") @@ -1228,7 +1228,7 @@ func (self *SAwsRegionDriver) RequestDeleteLoadbalancer(ctx context.Context, use // delete remote lbbgs for i := range ilbbgs { ilbbg := ilbbgs[i] - err = ilbbg.Delete() + err = ilbbg.Delete(ctx) if err != nil { return nil, errors.Wrap(err, "AwsRegionDriver.RequestDeleteLoadbalancerBackendGroup.DeleteExtBackendGroup") } @@ -1316,7 +1316,7 @@ func (self *SAwsRegionDriver) RequestSyncLoadbalancerListener(ctx context.Contex if err != nil { return nil, errors.Wrap(err, "awsRegionDriver.RequestSyncLoadbalancerListener.GetILoadBalancerListenerById") } - if err := iListener.Sync(params); err != nil { + if err := iListener.Sync(ctx, params); err != nil { return nil, errors.Wrap(err, "awsRegionDriver.RequestSyncLoadbalancerListener.Sync") } if err := iListener.Refresh(); err != nil { diff --git a/pkg/compute/regiondrivers/huawei.go b/pkg/compute/regiondrivers/huawei.go index 5d955d362c..b28502a8e5 100644 --- a/pkg/compute/regiondrivers/huawei.go +++ b/pkg/compute/regiondrivers/huawei.go @@ -1142,7 +1142,7 @@ func (self *SHuaWeiRegionDriver) RequestSyncLoadbalancerBackendGroup(ctx context return nil, errors.Wrap(err, "HuaWeiRegionDriver.Sync.GetILoadBalancerBackendGroupById") } - err = ilbbg.Sync(groupInput) + err = ilbbg.Sync(ctx, groupInput) if err != nil { return nil, errors.Wrap(err, "HuaWeiRegionDriver.Sync.LoadbalancerBackendGroup") } @@ -1219,7 +1219,7 @@ func (self *SHuaWeiRegionDriver) RequestCreateLoadbalancerListener(ctx context.C if err != nil { return nil, errors.Wrap(err, "huaweiRegionDriver.RequestCreateLoadbalancerListener.GetILoadBalancerById") } - iListener, err := iLoadbalancer.CreateILoadBalancerListener(params) + iListener, err := iLoadbalancer.CreateILoadBalancerListener(ctx, params) if err != nil { return nil, errors.Wrap(err, "huaweiRegionDriver.RequestCreateLoadbalancerListener.CreateILoadBalancerListener") } @@ -1368,7 +1368,7 @@ func (self *SHuaWeiRegionDriver) RequestSyncLoadbalancerListener(ctx context.Con if err != nil { return nil, err } - if err := iListener.Sync(params); err != nil { + if err := iListener.Sync(ctx, params); err != nil { return nil, err } @@ -1438,7 +1438,7 @@ func deleteHuaweiLoadbalancerListenerRule(ctx context.Context, userCred mcclient lbbgId := irule.GetBackendGroupId() - err = irule.Delete() + err = irule.Delete(ctx) if err != nil && err != cloudprovider.ErrNotFound { return errors.Wrap(err, "HuaWeiRegionDriver.Rule.Delete") } @@ -1486,7 +1486,7 @@ func deleteHuaweiLoadbalancerBackendGroup(ctx context.Context, userCred mcclient } } - err = ilbbg.Delete() + err = ilbbg.Delete(ctx) if err != nil && err != cloudprovider.ErrNotFound { return errors.Wrap(err, "HuaWeiRegionDriver.BackendGroup.Delete") } @@ -1636,7 +1636,7 @@ func (self *SHuaWeiRegionDriver) RequestDeleteLoadbalancerListener(ctx context.C } params.BackendGroupID = "" - err = iListener.Sync(params) + err = iListener.Sync(ctx, params) if err != nil { return nil, err } else { @@ -1708,7 +1708,7 @@ func (self *SHuaWeiRegionDriver) RequestDeleteLoadbalancerListener(ctx context.C } } - return nil, iListener.Delete() + return nil, iListener.Delete(ctx) }) return nil } @@ -1780,7 +1780,7 @@ func (self *SHuaWeiRegionDriver) RequestDeleteLoadbalancerBackendGroup(ctx conte } } - err = iLoadbalancerBackendGroup.Delete() + err = iLoadbalancerBackendGroup.Delete(ctx) if err != nil { return nil, errors.Wrap(err, "huaweiRegionDriver.RequestDeleteLoadbalancerBackendGroup.Delete") } @@ -1972,7 +1972,7 @@ func (self *SHuaWeiRegionDriver) RequestSyncLoadbalancerBackend(ctx context.Cont return nil, errors.Wrap(err, "huaweiRegionDriver.RequestSyncLoadbalancerBackend.GetILoadbalancerBackendById") } - err = iBackend.SyncConf(lbb.Port, lbb.Weight) + err = iBackend.SyncConf(ctx, lbb.Port, lbb.Weight) if err != nil { return nil, errors.Wrap(err, "huaweiRegionDriver.RequestSyncLoadbalancerBackend.SyncConf") } diff --git a/pkg/compute/regiondrivers/managedvirtual.go b/pkg/compute/regiondrivers/managedvirtual.go index bb711004c3..ace3fc400b 100644 --- a/pkg/compute/regiondrivers/managedvirtual.go +++ b/pkg/compute/regiondrivers/managedvirtual.go @@ -279,7 +279,7 @@ func (self *SManagedVirtualizationRegionDriver) RequestDeleteLoadbalancer(ctx co } return nil, err } - return nil, iLoadbalancer.Delete() + return nil, iLoadbalancer.Delete(ctx) }) return nil } @@ -538,7 +538,7 @@ func (self *SManagedVirtualizationRegionDriver) RequestDeleteLoadbalancerBackend return nil, err } - err = iLoadbalancerBackendGroup.Delete() + err = iLoadbalancerBackendGroup.Delete(ctx) if err != nil { return nil, err } @@ -670,7 +670,7 @@ func (self *SManagedVirtualizationRegionDriver) RequestSyncLoadbalancerBackend(c return nil, errors.Wrap(err, "regionDriver.RequestSyncLoadbalancerBackend.GetILoadbalancerBackendById") } - err = iBackend.SyncConf(lbb.Port, lbb.Weight) + err = iBackend.SyncConf(ctx, lbb.Port, lbb.Weight) if err != nil { return nil, errors.Wrap(err, "regionDriver.RequestSyncLoadbalancerBackend.SyncConf") } @@ -773,7 +773,7 @@ func (self *SManagedVirtualizationRegionDriver) RequestCreateLoadbalancerListene if err != nil { return nil, errors.Wrapf(err, "iRegion.GetILoadBalancerById(%s)", loadbalancer.ExternalId) } - iListener, err := iLoadbalancer.CreateILoadBalancerListener(params) + iListener, err := iLoadbalancer.CreateILoadBalancerListener(ctx, params) if err != nil { return nil, errors.Wrap(err, "iLoadbalancer.CreateILoadBalancerListener") } @@ -819,7 +819,7 @@ func (self *SManagedVirtualizationRegionDriver) RequestDeleteLoadbalancerListene return nil, errors.Wrap(err, "RegionDriver.RequestDeleteLoadbalancerListener.GetILoadBalancerListenerById") } - return nil, iListener.Delete() + return nil, iListener.Delete(ctx) }) return nil } @@ -945,7 +945,7 @@ func (self *SManagedVirtualizationRegionDriver) RequestSyncLoadbalancerListener( if err != nil { return nil, errors.Wrap(err, "regionDriver.RequestSyncLoadbalancerListener.GetIListener") } - if err := iListener.Sync(params); err != nil { + if err := iListener.Sync(ctx, params); err != nil { return nil, errors.Wrap(err, "regionDriver.RequestSyncLoadbalancerListener.SyncListener") } if err := iListener.Refresh(); err != nil { @@ -1088,7 +1088,7 @@ func (self *SManagedVirtualizationRegionDriver) RequestDeleteLoadbalancerListene } return nil, err } - return nil, iListenerRule.Delete() + return nil, iListenerRule.Delete(ctx) }) return nil } diff --git a/pkg/compute/regiondrivers/qcloud.go b/pkg/compute/regiondrivers/qcloud.go index fb94f9fd60..d4181e4525 100644 --- a/pkg/compute/regiondrivers/qcloud.go +++ b/pkg/compute/regiondrivers/qcloud.go @@ -133,6 +133,10 @@ func (self *SQcloudRegionDriver) ValidateCreateLoadbalancerListenerData(ctx cont return nil, httperrors.NewInputParameterError("backend group %s(%s) belongs to loadbalancer %s instead of %s", lbbg.Name, lbbg.Id, lbbg.LoadbalancerId, lb.Id) } else { + if lbbg != nil { + data.Set("backend_group_id", jsonutils.NewString(lbbg.GetId())) + } + if utils.IsInStringArray(listenerType, []string{api.LB_LISTENER_TYPE_TCP, api.LB_LISTENER_TYPE_UDP}) { if lbbg == nil { return nil, httperrors.NewMissingParameterError("backend_group_id") @@ -529,9 +533,9 @@ func (self *SQcloudRegionDriver) RequestCreateLoadbalancerListener(ctx context.C } if len(lbcert.ExternalId) == 0 { - err = self.RequestCreateLoadbalancerCertificate(ctx, userCred, lbcert, task) + _, err = self.createLoadbalancerCertificate(ctx, userCred, lbcert) if err != nil { - return nil, errors.Wrap(err, "qcloudRegionDriver.RequestCreateLoadbalancerListener.RequestCreateLoadbalancerCertificate") + return nil, errors.Wrap(err, "qcloudRegionDriver.RequestCreateLoadbalancerListener.createLoadbalancerCertificate") } } @@ -561,7 +565,7 @@ func (self *SQcloudRegionDriver) RequestCreateLoadbalancerListener(ctx context.C if err != nil { return nil, errors.Wrap(err, "qcloudRegionDriver.RequestCreateLoadbalancerListener.GetILoadBalancerById") } - iListener, err := iLoadbalancer.CreateILoadBalancerListener(params) + iListener, err := iLoadbalancer.CreateILoadBalancerListener(ctx, params) if err != nil { return nil, errors.Wrap(err, "qcloudRegionDriver.RequestCreateLoadbalancerListener.CreateILoadBalancerListener") } @@ -1092,7 +1096,7 @@ func (self *SQcloudRegionDriver) RequestSyncLoadbalancerBackend(ctx context.Cont return nil, errors.Wrap(err, "qcloudRegionDriver.RequestSyncLoadbalancerBackend.GetILoadbalancerBackendById") } - err = iBackend.SyncConf(lbb.Port, lbb.Weight) + err = iBackend.SyncConf(ctx, lbb.Port, lbb.Weight) if err != nil { return nil, errors.Wrap(err, "qcloudRegionDriver.RequestSyncLoadbalancerBackend.SyncConf") } @@ -1320,7 +1324,7 @@ func (self *SQcloudRegionDriver) RequestSyncLoadbalancerListener(ctx context.Con if err != nil { return nil, errors.Wrap(err, "regionDriver.RequestSyncLoadbalancerListener.GetIListener") } - if err := iListener.Sync(params); err != nil { + if err := iListener.Sync(ctx, params); err != nil { return nil, errors.Wrap(err, "regionDriver.RequestSyncLoadbalancerListener.SyncListener") } if err := iListener.Refresh(); err != nil { diff --git a/pkg/compute/tasks/loadbalancer_listener_create_task.go b/pkg/compute/tasks/loadbalancer_listener_create_task.go index 2c4fc2226b..1bcfaee6db 100644 --- a/pkg/compute/tasks/loadbalancer_listener_create_task.go +++ b/pkg/compute/tasks/loadbalancer_listener_create_task.go @@ -80,7 +80,7 @@ func onHuaweiLoadbalancerListenerCreateComplete(ctx context.Context, lblis *mode return } // 服务器组已经存在,直接同步即可 - if err := ilbbg.Sync(groupParams); err != nil { + if err := ilbbg.Sync(ctx, groupParams); err != nil { self.taskFail(ctx, lblis, err.Error()) return } else { diff --git a/pkg/compute/tasks/loadbalancer_listener_rule_create_task.go b/pkg/compute/tasks/loadbalancer_listener_rule_create_task.go index 54e3bb5e02..55287a8529 100644 --- a/pkg/compute/tasks/loadbalancer_listener_rule_create_task.go +++ b/pkg/compute/tasks/loadbalancer_listener_rule_create_task.go @@ -82,7 +82,7 @@ func onHuaiweiPrepareLoadbalancerBackendgroup(ctx context.Context, region *model } groupParams.ListenerID = "" // 服务器组已经存在,直接同步即可 - if err := ilbbg.Sync(groupParams); err != nil { + if err := ilbbg.Sync(ctx, groupParams); err != nil { self.taskFail(ctx, lbr, err.Error()) return } else { @@ -133,7 +133,7 @@ func onAwsPrepareLoadbalancerBackendgroup(ctx context.Context, region *models.SC } // 服务器组已经存在,直接同步即可 - if err := ilbbg.Sync(params); err != nil { + if err := ilbbg.Sync(ctx, params); err != nil { self.taskFail(ctx, lbr, err.Error()) return } diff --git a/pkg/multicloud/aliyun/loadbalancer.go b/pkg/multicloud/aliyun/loadbalancer.go index 543325aafc..caf421116d 100644 --- a/pkg/multicloud/aliyun/loadbalancer.go +++ b/pkg/multicloud/aliyun/loadbalancer.go @@ -15,6 +15,7 @@ package aliyun import ( + "context" "fmt" "strings" "time" @@ -172,7 +173,7 @@ func (region *SRegion) GetLoadbalancerDetail(loadbalancerId string) (*SLoadbalan return &lb, body.Unmarshal(&lb) } -func (lb *SLoadbalancer) Delete() error { +func (lb *SLoadbalancer) Delete(ctx context.Context) error { params := map[string]string{} params["RegionId"] = lb.region.RegionId params["LoadBalancerId"] = lb.LoadBalancerId @@ -232,7 +233,7 @@ func (lb *SLoadbalancer) CreateILoadBalancerBackendGroup(group *cloudprovider.SL } } -func (lb *SLoadbalancer) CreateILoadBalancerListener(listener *cloudprovider.SLoadbalancerListener) (cloudprovider.ICloudLoadbalancerListener, error) { +func (lb *SLoadbalancer) CreateILoadBalancerListener(ctx context.Context, listener *cloudprovider.SLoadbalancerListener) (cloudprovider.ICloudLoadbalancerListener, error) { switch listener.ListenerType { case api.LB_LISTENER_TYPE_TCP: return lb.region.CreateLoadbalancerTCPListener(lb, listener) diff --git a/pkg/multicloud/aliyun/loadbalancerbackend.go b/pkg/multicloud/aliyun/loadbalancerbackend.go index d15bf61cb2..7e0e964725 100644 --- a/pkg/multicloud/aliyun/loadbalancerbackend.go +++ b/pkg/multicloud/aliyun/loadbalancerbackend.go @@ -15,6 +15,7 @@ package aliyun import ( + "context" "fmt" "yunion.io/x/jsonutils" @@ -104,7 +105,7 @@ func (backend *SLoadbalancerBackend) GetProjectId() string { return "" } -func (backend *SLoadbalancerBackend) SyncConf(port, weight int) error { +func (backend *SLoadbalancerBackend) SyncConf(ctx context.Context, port, weight int) error { err := backend.lbbg.lb.region.RemoveBackendVServer(backend.lbbg.lb.LoadBalancerId, backend.lbbg.VServerGroupId, backend.ServerId, backend.Port) if err != nil { return err diff --git a/pkg/multicloud/aliyun/loadbalancerbackendgroup.go b/pkg/multicloud/aliyun/loadbalancerbackendgroup.go index 2f74917c9f..11681a4a58 100644 --- a/pkg/multicloud/aliyun/loadbalancerbackendgroup.go +++ b/pkg/multicloud/aliyun/loadbalancerbackendgroup.go @@ -15,6 +15,7 @@ package aliyun import ( + "context" "fmt" "yunion.io/x/jsonutils" @@ -214,7 +215,7 @@ func (region *SRegion) UpdateLoadBalancerBackendGroupName(name, groupId string) return err } -func (backendgroup *SLoadbalancerBackendGroup) Sync(group *cloudprovider.SLoadbalancerBackendGroup) error { +func (backendgroup *SLoadbalancerBackendGroup) Sync(ctx context.Context, group *cloudprovider.SLoadbalancerBackendGroup) error { if group == nil { return nil } @@ -233,7 +234,7 @@ func (region *SRegion) DeleteLoadBalancerBackendGroup(groupId string) error { return err } -func (backendgroup *SLoadbalancerBackendGroup) Delete() error { +func (backendgroup *SLoadbalancerBackendGroup) Delete(ctx context.Context) error { return backendgroup.lb.region.DeleteLoadBalancerBackendGroup(backendgroup.VServerGroupId) } diff --git a/pkg/multicloud/aliyun/loadbalancerdefaultbackend.go b/pkg/multicloud/aliyun/loadbalancerdefaultbackend.go index 2b35f19ca5..76353ca6ae 100644 --- a/pkg/multicloud/aliyun/loadbalancerdefaultbackend.go +++ b/pkg/multicloud/aliyun/loadbalancerdefaultbackend.go @@ -15,6 +15,7 @@ package aliyun import ( + "context" "fmt" "yunion.io/x/jsonutils" @@ -81,7 +82,7 @@ func (backend *SLoadbalancerDefaultBackend) GetProjectId() string { return "" } -func (backend *SLoadbalancerDefaultBackend) SyncConf(port, weight int) error { +func (backend *SLoadbalancerDefaultBackend) SyncConf(ctx context.Context, port, weight int) error { params := map[string]string{} params["RegionId"] = backend.lbbg.lb.region.RegionId params["LoadBalancerId"] = backend.lbbg.lb.LoadBalancerId diff --git a/pkg/multicloud/aliyun/loadbalancerdefaultbackendgroup.go b/pkg/multicloud/aliyun/loadbalancerdefaultbackendgroup.go index dc1a99dce6..c6cdb4ce52 100644 --- a/pkg/multicloud/aliyun/loadbalancerdefaultbackendgroup.go +++ b/pkg/multicloud/aliyun/loadbalancerdefaultbackendgroup.go @@ -15,6 +15,7 @@ package aliyun import ( + "context" "fmt" "yunion.io/x/jsonutils" @@ -113,11 +114,11 @@ func (backendgroup *SLoadbalancerDefaultBackendGroup) GetILoadbalancerBackendByI return nil, cloudprovider.ErrNotFound } -func (backendgroup *SLoadbalancerDefaultBackendGroup) Sync(group *cloudprovider.SLoadbalancerBackendGroup) error { +func (backendgroup *SLoadbalancerDefaultBackendGroup) Sync(ctx context.Context, group *cloudprovider.SLoadbalancerBackendGroup) error { return cloudprovider.ErrNotSupported } -func (backendgroup *SLoadbalancerDefaultBackendGroup) Delete() error { +func (backendgroup *SLoadbalancerDefaultBackendGroup) Delete(ctx context.Context) error { return cloudprovider.ErrNotSupported } diff --git a/pkg/multicloud/aliyun/loadbalancerhttplistener.go b/pkg/multicloud/aliyun/loadbalancerhttplistener.go index bae499f478..1315f8fc3a 100644 --- a/pkg/multicloud/aliyun/loadbalancerhttplistener.go +++ b/pkg/multicloud/aliyun/loadbalancerhttplistener.go @@ -15,6 +15,7 @@ package aliyun import ( + "context" "fmt" "yunion.io/x/jsonutils" @@ -298,7 +299,7 @@ func (region *SRegion) CreateLoadbalancerHTTPListener(lb *SLoadbalancer, listene return iListener, nil } -func (listerner *SLoadbalancerHTTPListener) Delete() error { +func (listerner *SLoadbalancerHTTPListener) Delete(ctx context.Context) error { return listerner.lb.region.DeleteLoadbalancerListener(listerner.lb.LoadBalancerId, listerner.ListenerPort) } @@ -361,7 +362,7 @@ func (region *SRegion) SyncLoadbalancerHTTPListener(lb *SLoadbalancer, listener return err } -func (listerner *SLoadbalancerHTTPListener) Sync(lblis *cloudprovider.SLoadbalancerListener) error { +func (listerner *SLoadbalancerHTTPListener) Sync(ctx context.Context, lblis *cloudprovider.SLoadbalancerListener) error { return listerner.lb.region.SyncLoadbalancerHTTPListener(listerner.lb, lblis) } diff --git a/pkg/multicloud/aliyun/loadbalancerhttpslistener.go b/pkg/multicloud/aliyun/loadbalancerhttpslistener.go index 4e3c687ab5..51e0641d6a 100644 --- a/pkg/multicloud/aliyun/loadbalancerhttpslistener.go +++ b/pkg/multicloud/aliyun/loadbalancerhttpslistener.go @@ -15,6 +15,7 @@ package aliyun import ( + "context" "fmt" "yunion.io/x/jsonutils" @@ -328,7 +329,7 @@ func (region *SRegion) CreateLoadbalancerHTTPSListener(lb *SLoadbalancer, listen return iListener, nil } -func (listerner *SLoadbalancerHTTPSListener) Delete() error { +func (listerner *SLoadbalancerHTTPSListener) Delete(ctx context.Context) error { return listerner.lb.region.DeleteLoadbalancerListener(listerner.lb.LoadBalancerId, listerner.ListenerPort) } @@ -383,7 +384,7 @@ func (region *SRegion) SyncLoadbalancerHTTPSListener(lb *SLoadbalancer, listener return err } -func (listerner *SLoadbalancerHTTPSListener) Sync(lblis *cloudprovider.SLoadbalancerListener) error { +func (listerner *SLoadbalancerHTTPSListener) Sync(ctx context.Context, lblis *cloudprovider.SLoadbalancerListener) error { return listerner.lb.region.SyncLoadbalancerHTTPSListener(listerner.lb, lblis) } diff --git a/pkg/multicloud/aliyun/loadbalancerlistenerrule.go b/pkg/multicloud/aliyun/loadbalancerlistenerrule.go index 9144740d72..4a6418d1a3 100644 --- a/pkg/multicloud/aliyun/loadbalancerlistenerrule.go +++ b/pkg/multicloud/aliyun/loadbalancerlistenerrule.go @@ -15,10 +15,12 @@ package aliyun import ( + "context" "fmt" "yunion.io/x/jsonutils" + api "yunion.io/x/onecloud/pkg/apis/compute" "yunion.io/x/onecloud/pkg/cloudprovider" ) @@ -47,7 +49,7 @@ func (lbr *SLoadbalancerListenerRule) GetGlobalId() string { } func (lbr *SLoadbalancerListenerRule) GetStatus() string { - return "" + return api.LB_STATUS_ENABLED } func (lbr *SLoadbalancerListenerRule) GetMetadata() *jsonutils.JSONDict { @@ -116,7 +118,7 @@ func (region *SRegion) GetLoadbalancerListenerRules(loadbalancerId string, liste return rules, body.Unmarshal(&rules, "Rules", "Rule") } -func (lbr *SLoadbalancerListenerRule) Delete() error { +func (lbr *SLoadbalancerListenerRule) Delete(ctx context.Context) error { if lbr.httpListener != nil { return lbr.httpListener.lb.region.DeleteLoadbalancerListenerRule(lbr.RuleId) } diff --git a/pkg/multicloud/aliyun/loadbalancermasterslavebackend.go b/pkg/multicloud/aliyun/loadbalancermasterslavebackend.go index 0b066f3a60..2f6b91c868 100644 --- a/pkg/multicloud/aliyun/loadbalancermasterslavebackend.go +++ b/pkg/multicloud/aliyun/loadbalancermasterslavebackend.go @@ -15,6 +15,7 @@ package aliyun import ( + "context" "fmt" "strings" @@ -85,6 +86,6 @@ func (backend *SLoadbalancerMasterSlaveBackend) GetProjectId() string { return "" } -func (backend *SLoadbalancerMasterSlaveBackend) SyncConf(port, weight int) error { +func (backend *SLoadbalancerMasterSlaveBackend) SyncConf(ctx context.Context, port, weight int) error { return cloudprovider.ErrNotSupported } diff --git a/pkg/multicloud/aliyun/loadbalancermasterslavebackendgroup.go b/pkg/multicloud/aliyun/loadbalancermasterslavebackendgroup.go index 028bb9aca6..f6983cfb6d 100644 --- a/pkg/multicloud/aliyun/loadbalancermasterslavebackendgroup.go +++ b/pkg/multicloud/aliyun/loadbalancermasterslavebackendgroup.go @@ -15,6 +15,7 @@ package aliyun import ( + "context" "fmt" "yunion.io/x/jsonutils" @@ -185,7 +186,7 @@ func (region *SRegion) GetLoadbalancerMasterSlaveBackendgroupById(groupId string return group, body.Unmarshal(group) } -func (backendgroup *SLoadbalancerMasterSlaveBackendGroup) Sync(group *cloudprovider.SLoadbalancerBackendGroup) error { +func (backendgroup *SLoadbalancerMasterSlaveBackendGroup) Sync(ctx context.Context, group *cloudprovider.SLoadbalancerBackendGroup) error { return nil } @@ -197,7 +198,7 @@ func (region *SRegion) DeleteLoadbalancerMasterSlaveBackendgroup(groupId string) return err } -func (backendgroup *SLoadbalancerMasterSlaveBackendGroup) Delete() error { +func (backendgroup *SLoadbalancerMasterSlaveBackendGroup) Delete(ctx context.Context) error { return backendgroup.lb.region.DeleteLoadbalancerMasterSlaveBackendgroup(backendgroup.MasterSlaveServerGroupId) } diff --git a/pkg/multicloud/aliyun/loadbalancertcplistener.go b/pkg/multicloud/aliyun/loadbalancertcplistener.go index fbabcd59d6..307d05251b 100644 --- a/pkg/multicloud/aliyun/loadbalancertcplistener.go +++ b/pkg/multicloud/aliyun/loadbalancertcplistener.go @@ -15,6 +15,7 @@ package aliyun import ( + "context" "fmt" "yunion.io/x/jsonutils" @@ -324,7 +325,7 @@ func (region *SRegion) CreateLoadbalancerTCPListener(lb *SLoadbalancer, listener return iListener, nil } -func (listerner *SLoadbalancerTCPListener) Delete() error { +func (listerner *SLoadbalancerTCPListener) Delete(ctx context.Context) error { return listerner.lb.region.DeleteLoadbalancerListener(listerner.lb.LoadBalancerId, listerner.ListenerPort) } @@ -350,7 +351,7 @@ func (region *SRegion) SyncLoadbalancerTCPListener(lb *SLoadbalancer, listener * return err } -func (listerner *SLoadbalancerTCPListener) Sync(lblis *cloudprovider.SLoadbalancerListener) error { +func (listerner *SLoadbalancerTCPListener) Sync(ctx context.Context, lblis *cloudprovider.SLoadbalancerListener) error { return listerner.lb.region.SyncLoadbalancerTCPListener(listerner.lb, lblis) } diff --git a/pkg/multicloud/aliyun/loadbalancerudplistener.go b/pkg/multicloud/aliyun/loadbalancerudplistener.go index 6087d72997..dd38ad5858 100644 --- a/pkg/multicloud/aliyun/loadbalancerudplistener.go +++ b/pkg/multicloud/aliyun/loadbalancerudplistener.go @@ -15,6 +15,7 @@ package aliyun import ( + "context" "fmt" "yunion.io/x/jsonutils" @@ -250,7 +251,7 @@ func (region *SRegion) CreateLoadbalancerUDPListener(lb *SLoadbalancer, listener return iListener, nil } -func (listerner *SLoadbalancerUDPListener) Delete() error { +func (listerner *SLoadbalancerUDPListener) Delete(ctx context.Context) error { return listerner.lb.region.DeleteLoadbalancerListener(listerner.lb.LoadBalancerId, listerner.ListenerPort) } @@ -276,7 +277,7 @@ func (region *SRegion) SyncLoadbalancerUDPListener(lb *SLoadbalancer, listener * return err } -func (listerner *SLoadbalancerUDPListener) Sync(lblis *cloudprovider.SLoadbalancerListener) error { +func (listerner *SLoadbalancerUDPListener) Sync(ctx context.Context, lblis *cloudprovider.SLoadbalancerListener) error { return listerner.lb.region.SyncLoadbalancerUDPListener(listerner.lb, lblis) } diff --git a/pkg/multicloud/aws/loadbalancer.go b/pkg/multicloud/aws/loadbalancer.go index f271f3012d..45c193ec39 100644 --- a/pkg/multicloud/aws/loadbalancer.go +++ b/pkg/multicloud/aws/loadbalancer.go @@ -15,6 +15,7 @@ package aws import ( + "context" "fmt" "sort" "strconv" @@ -184,7 +185,7 @@ func (self *SElb) GetEgressMbps() int { return 0 } -func (self *SElb) Delete() error { +func (self *SElb) Delete(ctx context.Context) error { return self.region.DeleteElb(self.GetId()) } @@ -240,7 +241,7 @@ func (self *SElb) GetILoadBalancerBackendGroupById(groupId string) (cloudprovide return self.region.GetElbBackendgroup(groupId) } -func (self *SElb) CreateILoadBalancerListener(listener *cloudprovider.SLoadbalancerListener) (cloudprovider.ICloudLoadbalancerListener, error) { +func (self *SElb) CreateILoadBalancerListener(ctx context.Context, listener *cloudprovider.SLoadbalancerListener) (cloudprovider.ICloudLoadbalancerListener, error) { ret, err := self.region.CreateElbListener(listener) if err != nil { return nil, err diff --git a/pkg/multicloud/aws/loadbalancerbackend.go b/pkg/multicloud/aws/loadbalancerbackend.go index fde3c39ad3..9bfd05a8d3 100644 --- a/pkg/multicloud/aws/loadbalancerbackend.go +++ b/pkg/multicloud/aws/loadbalancerbackend.go @@ -15,6 +15,7 @@ package aws import ( + "context" "fmt" "yunion.io/x/jsonutils" @@ -93,7 +94,7 @@ func (self *SElbBackend) GetBackendId() string { return self.Target.ID } -func (self *SElbBackend) SyncConf(port, weight int) error { +func (self *SElbBackend) SyncConf(ctx context.Context, port, weight int) error { return self.region.SyncElbBackend(self.GetId(), self.GetBackendId(), self.Target.Port, port) } diff --git a/pkg/multicloud/aws/loadbalancerbackendgroup.go b/pkg/multicloud/aws/loadbalancerbackendgroup.go index c5d9e01a04..bba87bd7de 100644 --- a/pkg/multicloud/aws/loadbalancerbackendgroup.go +++ b/pkg/multicloud/aws/loadbalancerbackendgroup.go @@ -15,6 +15,7 @@ package aws import ( + "context" "fmt" "strconv" "strings" @@ -216,11 +217,11 @@ func (self *SElbBackendGroup) RemoveBackendServer(serverId string, weight int, p return self.region.RemoveElbBackend(self.GetId(), serverId, weight, port) } -func (self *SElbBackendGroup) Delete() error { +func (self *SElbBackendGroup) Delete(ctx context.Context) error { return self.region.DeleteElbBackendGroup(self.GetId()) } -func (self *SElbBackendGroup) Sync(group *cloudprovider.SLoadbalancerBackendGroup) error { +func (self *SElbBackendGroup) Sync(ctx context.Context, group *cloudprovider.SLoadbalancerBackendGroup) error { return self.region.SyncELbBackendGroup(self.GetId(), group) } diff --git a/pkg/multicloud/aws/loadbalancerlistener.go b/pkg/multicloud/aws/loadbalancerlistener.go index 4734cb0e6d..6aa0347a6c 100644 --- a/pkg/multicloud/aws/loadbalancerlistener.go +++ b/pkg/multicloud/aws/loadbalancerlistener.go @@ -15,6 +15,7 @@ package aws import ( + "context" "encoding/json" "fmt" "strconv" @@ -449,11 +450,11 @@ func (self *SElbListener) Stop() error { return cloudprovider.ErrNotSupported } -func (self *SElbListener) Sync(listener *cloudprovider.SLoadbalancerListener) error { +func (self *SElbListener) Sync(ctx context.Context, listener *cloudprovider.SLoadbalancerListener) error { return self.region.SyncElbListener(self, listener) } -func (self *SElbListener) Delete() error { +func (self *SElbListener) Delete(ctx context.Context) error { return self.region.DeleteElbListener(self.GetId()) } diff --git a/pkg/multicloud/aws/loadbalancerlistenerrule.go b/pkg/multicloud/aws/loadbalancerlistenerrule.go index 7c97ea6384..cb28ffc5b8 100644 --- a/pkg/multicloud/aws/loadbalancerlistenerrule.go +++ b/pkg/multicloud/aws/loadbalancerlistenerrule.go @@ -15,6 +15,7 @@ package aws import ( + "context" "encoding/json" "fmt" "strings" @@ -160,7 +161,7 @@ func (self *SElbListenerRule) GetBackendGroupId() string { return "" } -func (self *SElbListenerRule) Delete() error { +func (self *SElbListenerRule) Delete(ctx context.Context) error { return self.region.DeleteElbListenerRule(self.GetId()) } diff --git a/pkg/multicloud/ctyun/eip.go b/pkg/multicloud/ctyun/eip.go index 8cb4693dee..51daa0126e 100644 --- a/pkg/multicloud/ctyun/eip.go +++ b/pkg/multicloud/ctyun/eip.go @@ -146,7 +146,7 @@ func (self *SEip) GetAssociationType() string { for i := range orders { order := orders[i] if strings.Contains(order.ResourceType, "LOADBALANCER") { - return api.EIP_ASSOCIATE_TYPE_ELB + return api.EIP_ASSOCIATE_TYPE_LOADBALANCER } else { return api.EIP_ASSOCIATE_TYPE_SERVER } diff --git a/pkg/multicloud/huawei/eip.go b/pkg/multicloud/huawei/eip.go index bfda1b7d6b..cdbd048943 100644 --- a/pkg/multicloud/huawei/eip.go +++ b/pkg/multicloud/huawei/eip.go @@ -16,9 +16,11 @@ package huawei import ( "fmt" + "strings" "time" "yunion.io/x/jsonutils" + "yunion.io/x/log" billing_api "yunion.io/x/onecloud/pkg/apis/billing" api "yunion.io/x/onecloud/pkg/apis/compute" @@ -163,11 +165,17 @@ func (self *SEipAddress) GetPort() *Port { func (self *SEipAddress) GetAssociationType() string { port := self.GetPort() - if port != nil { - return port.GetAssociateType() + if port == nil { + log.Errorf("SEipAddress.GetAssociationType port not found %#v", self) + return api.EIP_ASSOCIATE_TYPE_UNKNOWN } - return "" + owner := port.DeviceOwner + if strings.Contains(owner, "LOADBALANCER") { + return api.EIP_ASSOCIATE_TYPE_LOADBALANCER + } else { + return api.EIP_ASSOCIATE_TYPE_SERVER + } } func (self *SEipAddress) GetAssociationExternalId() string { diff --git a/pkg/multicloud/huawei/loadbalancer.go b/pkg/multicloud/huawei/loadbalancer.go index dc0368d2bb..7659fdd2c3 100644 --- a/pkg/multicloud/huawei/loadbalancer.go +++ b/pkg/multicloud/huawei/loadbalancer.go @@ -15,10 +15,12 @@ package huawei import ( + "context" "fmt" "time" "yunion.io/x/jsonutils" + "yunion.io/x/log" api "yunion.io/x/onecloud/pkg/apis/compute" "yunion.io/x/onecloud/pkg/cloudprovider" @@ -152,9 +154,16 @@ func (self *SLoadbalancer) GetNetworkIds() []string { func (self *SLoadbalancer) GetNetwork() *SNetwork { if self.subnet == nil { - net, err := self.region.getNetwork(self.VipSubnetID) + port, err := self.region.GetPort(self.VipPortID) if err == nil { - self.subnet = net + net, err := self.region.getNetwork(port.NetworkID) + if err == nil { + self.subnet = net + } else { + log.Debugf("huawei.SLoadbalancer.getNetwork %s", err) + } + } else { + log.Debugf("huawei.SLoadbalancer.GetPort %s", err) } } @@ -216,7 +225,7 @@ func (self *SLoadbalancer) GetEgressMbps() int { } // https://support.huaweicloud.com/api-elb/zh-cn_topic_0141008275.html -func (self *SLoadbalancer) Delete() error { +func (self *SLoadbalancer) Delete(ctx context.Context) error { return self.region.DeleteLoadBalancer(self.GetId()) } @@ -286,7 +295,7 @@ func (self *SLoadbalancer) GetILoadBalancerBackendGroupById(groupId string) (clo return ret, nil } -func (self *SLoadbalancer) CreateILoadBalancerListener(listener *cloudprovider.SLoadbalancerListener) (cloudprovider.ICloudLoadbalancerListener, error) { +func (self *SLoadbalancer) CreateILoadBalancerListener(ctx context.Context, listener *cloudprovider.SLoadbalancerListener) (cloudprovider.ICloudLoadbalancerListener, error) { ret, err := self.region.CreateLoadBalancerListener(listener) if err != nil { return nil, err diff --git a/pkg/multicloud/huawei/loadbalancer_backend.go b/pkg/multicloud/huawei/loadbalancer_backend.go index aa82a59b6d..56651a87df 100644 --- a/pkg/multicloud/huawei/loadbalancer_backend.go +++ b/pkg/multicloud/huawei/loadbalancer_backend.go @@ -15,6 +15,8 @@ package huawei import ( + "context" + "yunion.io/x/jsonutils" "yunion.io/x/log" "yunion.io/x/pkg/utils" @@ -120,7 +122,7 @@ func (self *SElbBackend) GetBackendId() string { return "" } -func (self *SElbBackend) SyncConf(port, weight int) error { +func (self *SElbBackend) SyncConf(ctx context.Context, port, weight int) error { if port > 0 { log.Warningf("Elb backend SyncConf unsupport modify port") } diff --git a/pkg/multicloud/huawei/loadbalancer_backendgroup.go b/pkg/multicloud/huawei/loadbalancer_backendgroup.go index a18fdb3caa..24f34a232a 100644 --- a/pkg/multicloud/huawei/loadbalancer_backendgroup.go +++ b/pkg/multicloud/huawei/loadbalancer_backendgroup.go @@ -15,6 +15,7 @@ package huawei import ( + "context" "fmt" "strings" "time" @@ -312,7 +313,7 @@ func (self *SElbBackendGroup) RemoveBackendServer(backendId string, weight int, return cloudprovider.WaitDeleted(ibackend, 2*time.Second, 30*time.Second) } -func (self *SElbBackendGroup) Delete() error { +func (self *SElbBackendGroup) Delete(ctx context.Context) error { if len(self.HealthMonitorID) > 0 { err := self.region.DeleteLoadbalancerHealthCheck(self.HealthMonitorID) if err != nil { @@ -344,7 +345,7 @@ func (self *SElbBackendGroup) Delete() error { return cloudprovider.WaitDeleted(self, 2*time.Second, 30*time.Second) } -func (self *SElbBackendGroup) Sync(group *cloudprovider.SLoadbalancerBackendGroup) error { +func (self *SElbBackendGroup) Sync(ctx context.Context, group *cloudprovider.SLoadbalancerBackendGroup) error { if group == nil { return nil } diff --git a/pkg/multicloud/huawei/loadbalancer_listener.go b/pkg/multicloud/huawei/loadbalancer_listener.go index f22cb3e327..191cc33f97 100644 --- a/pkg/multicloud/huawei/loadbalancer_listener.go +++ b/pkg/multicloud/huawei/loadbalancer_listener.go @@ -15,6 +15,7 @@ package huawei import ( + "context" "time" "yunion.io/x/jsonutils" @@ -550,11 +551,11 @@ default_pool_id对应的后端云服务器组的protocol和监听器的protocol 监听器的protocol为UDP时,后端云服务器组的protocol必须为UDP。 监听器的protocol为HTTP或TERMINATED_HTTPS时,后端云服务器组的protocol必须为HTTP。 */ -func (self *SElbListener) Sync(listener *cloudprovider.SLoadbalancerListener) error { +func (self *SElbListener) Sync(ctx context.Context, listener *cloudprovider.SLoadbalancerListener) error { return self.lb.region.UpdateLoadBalancerListener(self.GetId(), listener) } -func (self *SElbListener) Delete() error { +func (self *SElbListener) Delete(ctx context.Context) error { err := DoDelete(self.lb.region.ecsClient.ElbListeners.Delete, self.GetId(), nil, nil) if err != nil { return err diff --git a/pkg/multicloud/huawei/loadbalancer_listener_rule.go b/pkg/multicloud/huawei/loadbalancer_listener_rule.go index 3a3b508fea..b132d0fc02 100644 --- a/pkg/multicloud/huawei/loadbalancer_listener_rule.go +++ b/pkg/multicloud/huawei/loadbalancer_listener_rule.go @@ -15,6 +15,8 @@ package huawei import ( + "context" + "yunion.io/x/jsonutils" "yunion.io/x/log" @@ -161,7 +163,7 @@ func (self *SElbListenerPolicy) GetBackendGroupId() string { return self.RedirectPoolID } -func (self *SElbListenerPolicy) Delete() error { +func (self *SElbListenerPolicy) Delete(ctx context.Context) error { return self.region.DeleteLoadBalancerPolicy(self.GetId()) } diff --git a/pkg/multicloud/qcloud/loadbalancer.go b/pkg/multicloud/qcloud/loadbalancer.go index 48906e7fae..fa82fbee80 100644 --- a/pkg/multicloud/qcloud/loadbalancer.go +++ b/pkg/multicloud/qcloud/loadbalancer.go @@ -15,6 +15,7 @@ package qcloud import ( + "context" "fmt" "strconv" "strings" @@ -25,6 +26,7 @@ import ( "yunion.io/x/pkg/utils" api "yunion.io/x/onecloud/pkg/apis/compute" + "yunion.io/x/onecloud/pkg/cloudcommon/db/lockman" "yunion.io/x/onecloud/pkg/cloudprovider" "yunion.io/x/onecloud/pkg/multicloud" ) @@ -83,7 +85,10 @@ func (self *SLoadbalancer) GetEgressMbps() int { } // https://cloud.tencent.com/document/product/214/30689 -func (self *SLoadbalancer) Delete() error { +func (self *SLoadbalancer) Delete(ctx context.Context) error { + lockman.LockRawObject(ctx, "qcloud.SLoadbalancer.Delete", self.region.client.ownerId) + defer lockman.ReleaseRawObject(ctx, "qcloud.SLoadbalancer.Delete", self.region.client.ownerId) + if self.Forward == LB_TYPE_APPLICATION { _, err := self.region.DeleteLoadbalancer(self.GetId()) if err != nil { @@ -144,7 +149,10 @@ func onecloudHealthCodeToQcloud(codes string) int { // https://cloud.tencent.com/document/product/214/30693 // todo: 1.限制比较多必须加参数校验 2.Onecloud 不支持双向证书可能存在兼容性问题 // 应用型负载均衡 传统型不支持设置SNI -func (self *SLoadbalancer) CreateILoadBalancerListener(listener *cloudprovider.SLoadbalancerListener) (cloudprovider.ICloudLoadbalancerListener, error) { +func (self *SLoadbalancer) CreateILoadBalancerListener(ctx context.Context, listener *cloudprovider.SLoadbalancerListener) (cloudprovider.ICloudLoadbalancerListener, error) { + lockman.LockRawObject(ctx, "qcloud.SLoadbalancer.CreateILoadBalancerListener", self.region.client.ownerId) + defer lockman.ReleaseRawObject(ctx, "qcloud.SLoadbalancer.CreateILoadBalancerListener", self.region.client.ownerId) + sniSwitch := 0 hc := getHealthCheck(listener) cert := getCertificate(listener) diff --git a/pkg/multicloud/qcloud/loadbalancer_backend.go b/pkg/multicloud/qcloud/loadbalancer_backend.go index f14b13741a..5e4b3d7498 100644 --- a/pkg/multicloud/qcloud/loadbalancer_backend.go +++ b/pkg/multicloud/qcloud/loadbalancer_backend.go @@ -15,11 +15,13 @@ package qcloud import ( + "context" "fmt" "yunion.io/x/jsonutils" api "yunion.io/x/onecloud/pkg/apis/compute" + "yunion.io/x/onecloud/pkg/cloudcommon/db/lockman" "yunion.io/x/onecloud/pkg/cloudprovider" ) @@ -189,7 +191,10 @@ func (self *SLBBackend) GetProjectId() string { return "" } -func (self *SLBBackend) SyncConf(port, weight int) error { +func (self *SLBBackend) SyncConf(ctx context.Context, port, weight int) error { + lockman.LockRawObject(ctx, "qcloud.SLBBackend.SyncConf", self.group.lb.region.client.ownerId) + defer lockman.ReleaseRawObject(ctx, "qcloud.SLBBackend.SyncConf", self.group.lb.region.client.ownerId) + err := self.group.UpdateBackendServer(self.InstanceID, self.Weight, self.Port, weight, port) if err != nil { return err diff --git a/pkg/multicloud/qcloud/loadbalancer_backendgroup.go b/pkg/multicloud/qcloud/loadbalancer_backendgroup.go index a7608ffe84..bb62d5174a 100644 --- a/pkg/multicloud/qcloud/loadbalancer_backendgroup.go +++ b/pkg/multicloud/qcloud/loadbalancer_backendgroup.go @@ -15,6 +15,7 @@ package qcloud import ( + "context" "fmt" "strconv" "strings" @@ -299,12 +300,12 @@ func (self *SLBBackendGroup) UpdateBackendServer(serverId string, oldWeight, old } // 腾讯云无后端服务器组。 -func (self *SLBBackendGroup) Delete() error { +func (self *SLBBackendGroup) Delete(ctx context.Context) error { return fmt.Errorf("Please remove related listener/rule frist") } // 腾讯云无后端服务器组 -func (self *SLBBackendGroup) Sync(group *cloudprovider.SLoadbalancerBackendGroup) error { +func (self *SLBBackendGroup) Sync(ctx context.Context, group *cloudprovider.SLoadbalancerBackendGroup) error { return nil } diff --git a/pkg/multicloud/qcloud/loadbalancer_listener.go b/pkg/multicloud/qcloud/loadbalancer_listener.go index f086730a68..5091ded55a 100644 --- a/pkg/multicloud/qcloud/loadbalancer_listener.go +++ b/pkg/multicloud/qcloud/loadbalancer_listener.go @@ -15,6 +15,7 @@ package qcloud import ( + "context" "fmt" "strconv" "strings" @@ -23,6 +24,7 @@ import ( "yunion.io/x/jsonutils" api "yunion.io/x/onecloud/pkg/apis/compute" + "yunion.io/x/onecloud/pkg/cloudcommon/db/lockman" "yunion.io/x/onecloud/pkg/cloudprovider" ) @@ -144,7 +146,10 @@ func (self *SLBListener) Stop() error { } // https://cloud.tencent.com/document/product/214/30677 -func (self *SLBListener) Sync(listener *cloudprovider.SLoadbalancerListener) error { +func (self *SLBListener) Sync(ctx context.Context, listener *cloudprovider.SLoadbalancerListener) error { + lockman.LockRawObject(ctx, "qcloud.SLBListener.Sync", self.lb.region.client.ownerId) + defer lockman.ReleaseRawObject(ctx, "qcloud.SLBListener.Sync", self.lb.region.client.ownerId) + hc := getHealthCheck(listener) cert := getCertificate(listener) requestId, err := self.lb.region.UpdateLoadbalancerListener( @@ -163,7 +168,10 @@ func (self *SLBListener) Sync(listener *cloudprovider.SLoadbalancerListener) err return self.lb.region.WaitLBTaskSuccess(requestId, 5*time.Second, 60*time.Second) } -func (self *SLBListener) Delete() error { +func (self *SLBListener) Delete(ctx context.Context) error { + lockman.LockRawObject(ctx, "qcloud.SLBListener.Delete", self.lb.region.client.ownerId) + defer lockman.ReleaseRawObject(ctx, "qcloud.SLBListener.Delete", self.lb.region.client.ownerId) + requestId, err := self.lb.region.DeleteLoadbalancerListener(self.lb.Forward, self.lb.GetId(), self.GetId()) if err != nil { return err @@ -597,6 +605,10 @@ func (self *SRegion) deleteClassicLoadbalancerListener(lbid string, listenerId s // 返回requestID func (self *SRegion) DeleteLoadbalancerListener(t LB_TYPE, lbid string, listenerId string) (string, error) { + ctx := context.Background() + lockman.LockRawObject(ctx, "qcloud.SRegion.DeleteLoadbalancerListener", self.client.ownerId) + defer lockman.ReleaseRawObject(ctx, "qcloud.SRegion.DeleteLoadbalancerListener", self.client.ownerId) + if len(lbid) == 0 { return "", fmt.Errorf("loadbalancer id should not be empty") } diff --git a/pkg/multicloud/qcloud/loadbalancer_listenerrule.go b/pkg/multicloud/qcloud/loadbalancer_listenerrule.go index 98de9c700d..46e524eb2f 100644 --- a/pkg/multicloud/qcloud/loadbalancer_listenerrule.go +++ b/pkg/multicloud/qcloud/loadbalancer_listenerrule.go @@ -15,12 +15,14 @@ package qcloud import ( + "context" "fmt" "time" "yunion.io/x/jsonutils" api "yunion.io/x/onecloud/pkg/apis/compute" + "yunion.io/x/onecloud/pkg/cloudcommon/db/lockman" "yunion.io/x/onecloud/pkg/cloudprovider" ) @@ -37,7 +39,10 @@ type SLBListenerRule struct { } // https://cloud.tencent.com/document/api/214/30688 -func (self *SLBListenerRule) Delete() error { +func (self *SLBListenerRule) Delete(ctx context.Context) error { + lockman.LockRawObject(ctx, "qcloud.SLBListenerRule.Delete", self.listener.lb.region.client.ownerId) + defer lockman.ReleaseRawObject(ctx, "qcloud.SLBListenerRule.Delete", self.listener.lb.region.client.ownerId) + _, err := self.listener.lb.region.DeleteLBListenerRule(self.listener.lb.GetId(), self.listener.GetId(), self.GetId()) if err != nil { return err