From c1c57b88af9d7c0454abcb6c08b49348b49166eb Mon Sep 17 00:00:00 2001 From: Qiu Jian Date: Fri, 19 Apr 2019 12:00:53 +0800 Subject: [PATCH] fix: add cloud_env filter of private_or_onpremise --- pkg/apis/compute/cloudaccount_const.go | 2 ++ pkg/compute/models/cloudregions.go | 8 ++++++++ pkg/compute/models/zones.go | 10 ++++++++++ pkg/mcclient/options/base.go | 2 +- 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/pkg/apis/compute/cloudaccount_const.go b/pkg/apis/compute/cloudaccount_const.go index 2e0f6c31eb..9b266cf966 100644 --- a/pkg/apis/compute/cloudaccount_const.go +++ b/pkg/apis/compute/cloudaccount_const.go @@ -50,4 +50,6 @@ const ( CLOUD_ENV_PUBLIC_CLOUD = "public" CLOUD_ENV_PRIVATE_CLOUD = "private" CLOUD_ENV_ON_PREMISE = "onpremise" + + CLOUD_ENV_PRIVATE_ON_PREMISE = "private_or_onpremise" ) diff --git a/pkg/compute/models/cloudregions.go b/pkg/compute/models/cloudregions.go index 063ee7ab1a..d9a7ffbf64 100644 --- a/pkg/compute/models/cloudregions.go +++ b/pkg/compute/models/cloudregions.go @@ -431,6 +431,14 @@ func (manager *SCloudregionManager) ListItemFilter(ctx context.Context, q *sqlch )) } + if cloudEnvStr == api.CLOUD_ENV_PRIVATE_ON_PREMISE { + q = q.Filter(sqlchemy.OR( + sqlchemy.In(q.Field("provider"), cloudprovider.GetPrivateProviders()), + sqlchemy.In(q.Field("provider"), cloudprovider.GetOnPremiseProviders()), + sqlchemy.IsNullOrEmpty(q.Field("provider")), + )) + } + if jsonutils.QueryBoolean(query, "is_managed", false) { q = q.IsNotEmpty("external_id") } diff --git a/pkg/compute/models/zones.go b/pkg/compute/models/zones.go index 28c1c40a60..3bee111d88 100644 --- a/pkg/compute/models/zones.go +++ b/pkg/compute/models/zones.go @@ -547,6 +547,16 @@ func (manager *SZoneManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQu )) q = q.In("cloudregion_id", subq.SubQuery()) } + if cloudEnvStr == api.CLOUD_ENV_PRIVATE_ON_PREMISE { + regions := CloudregionManager.Query().SubQuery() + subq := regions.Query(regions.Field("id")) + subq = subq.Filter(sqlchemy.OR( + sqlchemy.In(regions.Field("provider"), cloudprovider.GetPrivateProviders()), + sqlchemy.In(regions.Field("provider"), cloudprovider.GetOnPremiseProviders()), + sqlchemy.IsNullOrEmpty(regions.Field("provider")), + )) + q = q.In("cloudregion_id", subq.SubQuery()) + } if jsonutils.QueryBoolean(query, "is_managed", false) { q = q.IsNotEmpty("external_id") } diff --git a/pkg/mcclient/options/base.go b/pkg/mcclient/options/base.go index 296c237ae7..bc079235a6 100644 --- a/pkg/mcclient/options/base.go +++ b/pkg/mcclient/options/base.go @@ -207,7 +207,7 @@ type BaseListOptions struct { Manager string `help:"List objects belonging to the cloud provider" json:"manager,omitempty"` Account string `help:"List objects belonging to the cloud account" json:"account,omitempty"` Provider string `help:"List objects from the provider" choices:"OneCloud|VMware|Aliyun|Qcloud|Azure|Aws|Huawei|Openstack|Ucloud" json:"provider,omitempty"` - CloudEnv string `help:"Cloud environment" choices:"public|private|onpremise" json:"cloud_env,omitempty"` + CloudEnv string `help:"Cloud environment" choices:"public|private|onpremise|private_or_onpremise" json:"cloud_env,omitempty"` PublicCloud *bool `help:"List objects belonging to public cloud" json:"public_cloud"` PrivateCloud *bool `help:"List objects belonging to private cloud" json:"private_cloud"` IsOnPremise *bool `help:"List objects belonging to on premise infrastructures" token:"on-premise" json:"is_on_premise"`