fix: cloud-provider-list support filter by cloudregion

This commit is contained in:
Qu Xuan
2020-05-12 14:05:25 +08:00
parent c275e20894
commit d271ff69f0
3 changed files with 21 additions and 1 deletions
+2
View File
@@ -222,6 +222,8 @@ type CloudproviderListInput struct {
UsableResourceListInput
CloudregionResourceInput
CapabilityListInput
SyncableBaseResourceListInput
+14 -1
View File
@@ -1030,7 +1030,7 @@ func (manager *SCloudproviderManager) ListItemFilter(
accountObj, err := CloudaccountManager.FetchByIdOrName(userCred, accountStr)
if err != nil {
if err == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError2(manager.Keyword(), accountStr)
return nil, httperrors.NewResourceNotFoundError2("cloudaccount", accountStr)
} else {
return nil, httperrors.NewGeneralError(err)
}
@@ -1063,6 +1063,19 @@ func (manager *SCloudproviderManager) ListItemFilter(
q = q.Filter(sqlchemy.In(q.Field("id"), sq.SubQuery()))
}
if len(query.Cloudregion) > 0 {
region, err := CloudregionManager.FetchByIdOrName(userCred, query.Cloudregion)
if err != nil {
if err == sql.ErrNoRows {
return nil, httperrors.NewResourceNotFoundError2("cloudregion", query.Cloudregion)
}
return nil, httperrors.NewGeneralError(err)
}
pr := CloudproviderRegionManager.Query().SubQuery()
sq := pr.Query(pr.Field("cloudprovider_id")).Equals("cloudregion_id", region.GetId()).Distinct()
q = q.In("id", sq)
}
q, err := manager.SEnabledStatusStandaloneResourceBaseManager.ListItemFilter(ctx, q, userCred, query.EnabledStatusStandaloneResourceListInput)
if err != nil {
return nil, errors.Wrap(err, "SEnabledStatusStandaloneResourceBaseManager.ListItemFilter")