From 0c0980d3f90104f93ee0a857da1e01fb28c8cb5a Mon Sep 17 00:00:00 2001 From: tangbin Date: Wed, 8 Apr 2020 14:37:45 +0800 Subject: [PATCH] huawei&qcloud&huawei elb bugfix --- pkg/apis/compute/loadbalancer.go | 3 +++ pkg/compute/models/loadbalancers.go | 7 ++++++- pkg/compute/regiondrivers/aws.go | 1 + pkg/compute/regiondrivers/huawei.go | 20 ++++++++++---------- pkg/compute/regiondrivers/qcloud.go | 2 +- pkg/hostman/hostdeployer/apis/deploy.pb.go | 3 ++- pkg/multicloud/huawei/region.go | 6 +++--- 7 files changed, 26 insertions(+), 16 deletions(-) diff --git a/pkg/apis/compute/loadbalancer.go b/pkg/apis/compute/loadbalancer.go index e159d2ce11..4b30b3a4a5 100644 --- a/pkg/apis/compute/loadbalancer.go +++ b/pkg/apis/compute/loadbalancer.go @@ -235,6 +235,9 @@ type LoadbalancerCreateInput struct { // 套餐名称 LoadbalancerSpec string `json:"loadbalancer_spec"` + // EIP ID + Eip string `json:"eip"` + // LB的其他配置信息 LBInfo jsonutils.JSONObject `json:"lb_info"` diff --git a/pkg/compute/models/loadbalancers.go b/pkg/compute/models/loadbalancers.go index ec4a4a6cbb..56a1542a50 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" @@ -423,7 +424,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.SManagedResourceBase.GetProviderName() == api.CLOUD_PROVIDER_HUAWEI || lb.SManagedResourceBase.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) @@ -433,6 +435,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 6b34ce15f2..fc85015572 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 5977c2b8df..1797c2f1b0 100644 --- a/pkg/compute/regiondrivers/huawei.go +++ b/pkg/compute/regiondrivers/huawei.go @@ -1850,20 +1850,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") } { @@ -1872,7 +1872,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{ @@ -1882,27 +1882,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, lb.GetCloudprovider()); 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 db0ebb4f85..9a24eb15e6 100644 --- a/pkg/compute/regiondrivers/qcloud.go +++ b/pkg/compute/regiondrivers/qcloud.go @@ -753,7 +753,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/hostman/hostdeployer/apis/deploy.pb.go b/pkg/hostman/hostdeployer/apis/deploy.pb.go index 5eec984d65..0ffa3d14bd 100644 --- a/pkg/hostman/hostdeployer/apis/deploy.pb.go +++ b/pkg/hostman/hostdeployer/apis/deploy.pb.go @@ -6,11 +6,12 @@ package apis import ( context "context" fmt "fmt" + math "math" + proto "github.com/golang/protobuf/proto" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - math "math" ) // Reference imports to suppress errors if they are not otherwise used. diff --git a/pkg/multicloud/huawei/region.go b/pkg/multicloud/huawei/region.go index 889d0cf37b..96621387e1 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