From 53d771025e3fe33c89c9bc39dcbbaf3299b643be Mon Sep 17 00:00:00 2001 From: Qu Xuan Date: Tue, 2 Jun 2020 21:57:35 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=85=81=E8=AE=B8gcp=E5=88=9B=E5=BB=BAv?= =?UTF-8?q?pc=E6=97=B6=E4=B8=8D=E6=8C=87=E5=AE=9Acidr?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/compute/models/regiondrivers.go | 1 + pkg/compute/models/vpcs.go | 6 +++++- pkg/compute/regiondrivers/base.go | 4 ++++ pkg/compute/regiondrivers/google.go | 4 ++++ pkg/compute/regiondrivers/openstack.go | 4 ++++ 5 files changed, 18 insertions(+), 1 deletion(-) diff --git a/pkg/compute/models/regiondrivers.go b/pkg/compute/models/regiondrivers.go index 353e8596b7..32857b4530 100644 --- a/pkg/compute/models/regiondrivers.go +++ b/pkg/compute/models/regiondrivers.go @@ -86,6 +86,7 @@ type IRegionDriver interface { RequestDeleteLoadbalancerListenerRule(ctx context.Context, userCred mcclient.TokenCredential, lbr *SLoadbalancerListenerRule, task taskman.ITask) error ValidateCreateVpcData(ctx context.Context, userCred mcclient.TokenCredential, input api.VpcCreateInput) (api.VpcCreateInput, error) + IsVpcCreateNeedInputCidr() bool ValidateCreateEipData(ctx context.Context, userCred mcclient.TokenCredential, input *api.SElasticipCreateInput) error RequestCreateVpc(ctx context.Context, userCred mcclient.TokenCredential, region *SCloudregion, vpc *SVpc, task taskman.ITask) error RequestDeleteVpc(ctx context.Context, userCred mcclient.TokenCredential, region *SCloudregion, vpc *SVpc, task taskman.ITask) error diff --git a/pkg/compute/models/vpcs.go b/pkg/compute/models/vpcs.go index 9a1a409bb1..69de08b3b6 100644 --- a/pkg/compute/models/vpcs.go +++ b/pkg/compute/models/vpcs.go @@ -78,7 +78,7 @@ type SVpc struct { // CIDR地址段 // example: 192.168.222.0/24 - CidrBlock string `charset:"ascii" nullable:"true" list:"domain" create:"domain_required"` + CidrBlock string `charset:"ascii" nullable:"true" list:"domain" create:"domain_optional"` // 区域Id // CloudregionId string `width:"36" charset:"ascii" nullable:"false" list:"domain" create:"domain_required" default:"default"` @@ -660,6 +660,10 @@ func (manager *SVpcManager) ValidateCreateData( return input, errors.Wrapf(err, "region.GetDriver().ValidateCreateVpcData") } + if region.GetDriver().IsVpcCreateNeedInputCidr() && len(input.CidrBlock) == 0 { + return input, httperrors.NewMissingParameterError("cidr") + } + keys := GetVpcQuotaKeysFromCreateInput(input) quota := &SInfrasQuota{Vpc: 1} quota.SetKeys(keys) diff --git a/pkg/compute/regiondrivers/base.go b/pkg/compute/regiondrivers/base.go index 81165dd243..fe2c4b9cdc 100644 --- a/pkg/compute/regiondrivers/base.go +++ b/pkg/compute/regiondrivers/base.go @@ -203,6 +203,10 @@ func (self *SBaseRegionDriver) RequestBingToNatgateway(ctx context.Context, task return fmt.Errorf("Not implement RequestBindIPToNatgateway") } +func (self *SBaseRegionDriver) IsVpcCreateNeedInputCidr() bool { + return true +} + func (self *SBaseRegionDriver) RequestCreateVpc(ctx context.Context, userCred mcclient.TokenCredential, region *models.SCloudregion, vpc *models.SVpc, task taskman.ITask) error { return fmt.Errorf("Not implement RequestCreateVpc") } diff --git a/pkg/compute/regiondrivers/google.go b/pkg/compute/regiondrivers/google.go index 26bdc82c8e..56c50b7ccb 100644 --- a/pkg/compute/regiondrivers/google.go +++ b/pkg/compute/regiondrivers/google.go @@ -53,6 +53,10 @@ func (self *SGoogleRegionDriver) IsVpcBelongGlobalVpc() bool { return true } +func (self *SGoogleRegionDriver) IsVpcCreateNeedInputCidr() bool { + return false +} + func (self *SGoogleRegionDriver) RequestCreateVpc(ctx context.Context, userCred mcclient.TokenCredential, region *models.SCloudregion, vpc *models.SVpc, task taskman.ITask) error { taskman.LocalTaskRun(task, func() (jsonutils.JSONObject, error) { provider := vpc.GetCloudprovider() diff --git a/pkg/compute/regiondrivers/openstack.go b/pkg/compute/regiondrivers/openstack.go index eae1661151..4c175830d8 100644 --- a/pkg/compute/regiondrivers/openstack.go +++ b/pkg/compute/regiondrivers/openstack.go @@ -39,6 +39,10 @@ func (self *SOpenStackRegionDriver) GetProvider() string { return api.CLOUD_PROVIDER_OPENSTACK } +func (self *SOpenStackRegionDriver) IsVpcCreateNeedInputCidr() bool { + return false +} + func (self *SOpenStackRegionDriver) ValidateCreateLoadbalancerData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, data *jsonutils.JSONDict) (*jsonutils.JSONDict, error) { return nil, httperrors.NewNotImplementedError("%s does not currently support creating loadbalancer", self.GetProvider()) }