Skip to content

Commit

Permalink
elasticips: make manager, region arguments optional
Browse files Browse the repository at this point in the history
  • Loading branch information
yousong committed May 28, 2020
1 parent 0bf41ca commit 8e1b6de
Showing 1 changed file with 25 additions and 22 deletions.
47 changes: 25 additions & 22 deletions pkg/compute/models/elasticips.go
Expand Up @@ -772,24 +772,29 @@ func (manager *SElasticipManager) getEipByExtEip(ctx context.Context, userCred m
}

func (manager *SElasticipManager) ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, input api.SElasticipCreateInput) (*jsonutils.JSONDict, error) {
var (
region *SCloudregion
provider *SCloudprovider
err error
)
for _, cloudregion := range []string{input.Cloudregion, input.Region, input.RegionId} {
if len(cloudregion) > 0 {
input.Cloudregion = cloudregion
break
}
}
if len(input.Cloudregion) == 0 {
return nil, httperrors.NewMissingParameterError("cloudregion")
if input.Cloudregion == "" {
input.Cloudregion = api.DEFAULT_REGION_ID
}
_region, err := CloudregionManager.FetchByIdOrName(nil, input.Cloudregion)
if err != nil {
if obj, err := CloudregionManager.FetchByIdOrName(nil, input.Cloudregion); err != nil {
if err != sql.ErrNoRows {
return nil, httperrors.NewGeneralError(err)
} else {
return nil, httperrors.NewResourceNotFoundError("Region %s not found", input.Cloudregion)
}
} else {
region = obj.(*SCloudregion)
}
region := _region.(*SCloudregion)
input.CloudregionId = region.GetId()

for _, cloudprovider := range []string{input.Cloudprovider, input.Manager, input.ManagerId} {
Expand All @@ -798,20 +803,18 @@ func (manager *SElasticipManager) ValidateCreateData(ctx context.Context, userCr
break
}
}
if len(input.Cloudprovider) == 0 {
return nil, httperrors.NewMissingParameterError("cloudprovider")
}

providerObj, err := CloudproviderManager.FetchByIdOrName(nil, input.Cloudprovider)
if err != nil {
if err != sql.ErrNoRows {
return nil, httperrors.NewGeneralError(err)
} else {
return nil, httperrors.NewResourceNotFoundError("Cloud provider %s not found", input.Cloudprovider)
if input.Cloudprovider != "" {
providerObj, err := CloudproviderManager.FetchByIdOrName(nil, input.Cloudprovider)
if err != nil {
if err != sql.ErrNoRows {
return nil, httperrors.NewGeneralError(err)
} else {
return nil, httperrors.NewResourceNotFoundError("Cloud provider %s not found", input.Cloudprovider)
}
}
provider = providerObj.(*SCloudprovider)
input.ManagerId = provider.Id
}
provider := providerObj.(*SCloudprovider)
input.ManagerId = provider.Id

// publicIp cannot be created standalone
input.Mode = api.EIP_MODE_STANDALONE_EIP
Expand All @@ -824,19 +827,19 @@ func (manager *SElasticipManager) ValidateCreateData(ctx context.Context, userCr
return nil, httperrors.NewInputParameterError("charge type %s not supported", input.ChargeType)
}

input.VirtualResourceCreateInput, err = manager.SVirtualResourceBaseManager.ValidateCreateData(ctx, userCred, ownerId, query, input.VirtualResourceCreateInput)
if err != nil {
if input.VirtualResourceCreateInput, err = manager.SVirtualResourceBaseManager.ValidateCreateData(ctx, userCred, ownerId, query, input.VirtualResourceCreateInput); err != nil {
return nil, err
}

err = region.GetDriver().ValidateCreateEipData(ctx, userCred, &input)
if err = region.GetDriver().ValidateCreateEipData(ctx, userCred, &input); err != nil {
return nil, err
}

//避免参数重名后还有pending.eip残留
eipPendingUsage := &SRegionQuota{Eip: 1}
quotaKeys := fetchRegionalQuotaKeys(rbacutils.ScopeProject, ownerId, region, provider)
eipPendingUsage.SetKeys(quotaKeys)
err = quotas.CheckSetPendingQuota(ctx, userCred, eipPendingUsage)
if err != nil {
if err = quotas.CheckSetPendingQuota(ctx, userCred, eipPendingUsage); err != nil {
return nil, err
}

Expand Down

0 comments on commit 8e1b6de

Please sign in to comment.