diff --git a/pkg/compute/models/loadbalancers.go b/pkg/compute/models/loadbalancers.go index 9756ef2e15..a32c6885af 100644 --- a/pkg/compute/models/loadbalancers.go +++ b/pkg/compute/models/loadbalancers.go @@ -24,6 +24,7 @@ import ( "yunion.io/x/log" "yunion.io/x/pkg/errors" "yunion.io/x/pkg/util/compare" + "yunion.io/x/pkg/utils" "yunion.io/x/sqlchemy" "yunion.io/x/onecloud/pkg/apis" @@ -335,7 +336,8 @@ func (lb *SLoadbalancer) GetCreateLoadbalancerParams(iRegion cloudprovider.IClou if lb.ChargeType == api.LB_CHARGE_TYPE_BY_BANDWIDTH { params.EgressMbps = lb.EgressMbps } - if lb.AddressType == api.LB_ADDR_TYPE_INTRANET || lb.GetProviderName() == api.CLOUD_PROVIDER_HUAWEI || lb.GetProviderName() == api.CLOUD_PROVIDER_AWS { + + if lb.AddressType == api.LB_ADDR_TYPE_INTRANET || utils.IsInStringArray(lb.SManagedResourceBase.GetProviderName(), []string{api.CLOUD_PROVIDER_HUAWEI, api.CLOUD_PROVIDER_AWS, api.CLOUD_PROVIDER_QCLOUD}) { vpc := lb.GetVpc() if vpc == nil { return nil, fmt.Errorf("failed to find vpc for lb %s", lb.Name) @@ -345,6 +347,9 @@ func (lb *SLoadbalancer) GetCreateLoadbalancerParams(iRegion cloudprovider.IClou return nil, err } params.VpcID = iVpc.GetId() + } + + if lb.AddressType == api.LB_ADDR_TYPE_INTRANET || utils.IsInStringArray(lb.SManagedResourceBase.GetProviderName(), []string{api.CLOUD_PROVIDER_HUAWEI, api.CLOUD_PROVIDER_AWS}) { networks, err := lb.GetNetworks() if err != nil { return nil, fmt.Errorf("failed to find network for lb %s: %s", lb.Name, err) diff --git a/pkg/compute/regiondrivers/aws.go b/pkg/compute/regiondrivers/aws.go index 15f7672b7c..a4d42f6674 100644 --- a/pkg/compute/regiondrivers/aws.go +++ b/pkg/compute/regiondrivers/aws.go @@ -85,6 +85,7 @@ func validateAwsLbNetwork(ownerId mcclient.IIdentityProvider, data *jsonutils.JS q = q.Join(wires, sqlchemy.Equals(q.Field("wire_id"), wires.Field("id"))) q = q.Filter(sqlchemy.Equals(wires.Field("vpc_id"), vpc.GetId())) q = q.Filter(sqlchemy.NotEquals(wires.Field("zone_id"), zone.GetId())) + q = q.Equals("project_id", network.ProjectId) err := q.First(secondNet) if err != nil { return nil, httperrors.NewInputParameterError("required at least %d subnet.", requiredMin) diff --git a/pkg/compute/regiondrivers/huawei.go b/pkg/compute/regiondrivers/huawei.go index b28502a8e5..7d737e9c1e 100644 --- a/pkg/compute/regiondrivers/huawei.go +++ b/pkg/compute/regiondrivers/huawei.go @@ -1851,20 +1851,20 @@ func (self *SHuaWeiRegionDriver) RequestCreateLoadbalancer(ctx context.Context, taskman.LocalTaskRun(task, func() (jsonutils.JSONObject, error) { iRegion, err := lb.GetIRegion() if err != nil { - return nil, err + return nil, errors.Wrap(err, "Huawei.RequestCreateLoadbalancer.GetIRegion") } params, err := lb.GetCreateLoadbalancerParams(iRegion) if err != nil { - return nil, err + return nil, errors.Wrap(err, "Huawei.RequestCreateLoadbalancer.GetCreateLoadbalancerParams") } iLoadbalancer, err := iRegion.CreateILoadBalancer(params) if err != nil { - return nil, err + return nil, errors.Wrap(err, "Huawei.RequestCreateLoadbalancer.CreateILoadBalancer") } lb.SetModelManager(models.LoadbalancerManager, lb) if err := db.SetExternalId(lb, userCred, iLoadbalancer.GetGlobalId()); err != nil { - return nil, err + return nil, errors.Wrap(err, "Huawei.RequestCreateLoadbalancer.SetExternalId") } { @@ -1873,7 +1873,7 @@ func (self *SHuaWeiRegionDriver) RequestCreateLoadbalancer(ctx context.Context, if len(eipId) > 0 { ieip, err := iRegion.GetIEipById(eipId) if err != nil { - return nil, err + return nil, errors.Wrap(err, "Huawei.RequestCreateLoadbalancer.GetIEipById") } conf := &cloudprovider.AssociateConfig{ @@ -1883,27 +1883,27 @@ func (self *SHuaWeiRegionDriver) RequestCreateLoadbalancer(ctx context.Context, err = ieip.Associate(conf) if err != nil { - return nil, err + return nil, errors.Wrap(err, "Huawei.RequestCreateLoadbalancer.Associate") } eip, err := db.FetchByExternalId(models.ElasticipManager, ieip.GetGlobalId()) if err != nil { - return nil, err + return nil, errors.Wrap(err, "Huawei.RequestCreateLoadbalancer.FetchByExternalId") } err = eip.(*models.SElasticip).SyncWithCloudEip(ctx, userCred, lb.GetCloudprovider(), ieip, lb.GetOwnerId()) if err != nil { - return nil, err + return nil, errors.Wrap(err, "Huawei.RequestCreateLoadbalancer.SyncWithCloudEip") } } } if err := lb.SyncWithCloudLoadbalancer(ctx, userCred, iLoadbalancer, nil); err != nil { - return nil, err + return nil, errors.Wrap(err, "Huawei.RequestCreateLoadbalancer.SyncWithCloudLoadbalancer") } lbbgs, err := iLoadbalancer.GetILoadBalancerBackendGroups() if err != nil { - return nil, err + return nil, errors.Wrap(err, "Huawei.RequestCreateLoadbalancer.GetILoadBalancerBackendGroups") } if len(lbbgs) > 0 { provider := lb.GetCloudprovider() diff --git a/pkg/compute/regiondrivers/qcloud.go b/pkg/compute/regiondrivers/qcloud.go index d4181e4525..87f753665a 100644 --- a/pkg/compute/regiondrivers/qcloud.go +++ b/pkg/compute/regiondrivers/qcloud.go @@ -754,7 +754,7 @@ func (self *SQcloudRegionDriver) ValidateUpdateLoadbalancerListenerData(ctx cont return nil, httperrors.NewInputParameterError("backend group %s(%s) belongs to loadbalancer %s instead of %s", lbbg.Name, lbbg.Id, lbbg.LoadbalancerId, lblis.LoadbalancerId) } else { - if utils.IsInStringArray(lblis.ListenerType, []string{api.LB_LISTENER_TYPE_TCP, api.LB_LISTENER_TYPE_UDP}) { + if lbbg != nil && utils.IsInStringArray(lblis.ListenerType, []string{api.LB_LISTENER_TYPE_TCP, api.LB_LISTENER_TYPE_UDP}) { cachedLbbgs, err := lbbg.GetQcloudCachedlbbg() if err != nil { return nil, err diff --git a/pkg/multicloud/huawei/region.go b/pkg/multicloud/huawei/region.go index efb2709a31..e961987793 100644 --- a/pkg/multicloud/huawei/region.go +++ b/pkg/multicloud/huawei/region.go @@ -878,7 +878,7 @@ func (self *SRegion) CreateLoadBalancer(loadbalancer *cloudprovider.SLoadbalance ret := SLoadbalancer{} subnet, err := self.getNetwork(loadbalancer.NetworkIDs[0]) if err != nil { - return ret, err + return ret, errors.Wrap(err, "SRegion.CreateLoadBalancer.getNetwork") } params := jsonutils.NewDict() @@ -893,7 +893,7 @@ func (self *SRegion) CreateLoadBalancer(loadbalancer *cloudprovider.SLoadbalance err = DoCreate(self.ecsClient.Elb.Create, params, &ret) if err != nil { - return ret, err + return ret, errors.Wrap(err, "SRegion.CreateLoadBalancer.DoCreate") } ret.region = self @@ -902,7 +902,7 @@ func (self *SRegion) CreateLoadBalancer(loadbalancer *cloudprovider.SLoadbalance if len(loadbalancer.EipID) > 0 { err := self.AssociateEipWithPortId(loadbalancer.EipID, ret.VipPortID) if err != nil { - return ret, err + return ret, errors.Wrap(err, "SRegion.CreateLoadBalancer.AssociateEipWithPortId") } } return ret, nil