mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
Merge pull request #6297 from ioito/hotfix/qx-cloudprovider-list-filter
fix: cloud-provider-list support filter by cloudregion
This commit is contained in:
@@ -34,6 +34,7 @@ func init() {
|
||||
HasObjectStorage bool `help:"filter cloudproviders that has object storage"`
|
||||
NoObjectStorage bool `help:"filter cloudproviders that has no object storage"`
|
||||
Capability []string `help:"capability filter" choices:"project|compute|network|loadbalancer|objectstore|rds|cache|event"`
|
||||
Cloudregion string `help:"filter cloudproviders by cloudregion"`
|
||||
}
|
||||
R(&CloudproviderListOptions{}, "cloud-provider-list", "List cloud providers", func(s *mcclient.ClientSession, args *CloudproviderListOptions) error {
|
||||
var params *jsonutils.JSONDict
|
||||
@@ -57,6 +58,10 @@ func init() {
|
||||
if len(args.Capability) > 0 {
|
||||
params.Add(jsonutils.NewStringArray(args.Capability), "capability")
|
||||
}
|
||||
|
||||
if len(args.Cloudregion) > 0 {
|
||||
params.Add(jsonutils.NewString(args.Cloudregion), "cloudregion")
|
||||
}
|
||||
}
|
||||
result, err := modules.Cloudproviders.List(s, params)
|
||||
if err != nil {
|
||||
|
||||
@@ -222,6 +222,8 @@ type CloudproviderListInput struct {
|
||||
|
||||
UsableResourceListInput
|
||||
|
||||
CloudregionResourceInput
|
||||
|
||||
CapabilityListInput
|
||||
|
||||
SyncableBaseResourceListInput
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user