diff --git a/pkg/compute/models/guest_template.go b/pkg/compute/models/guest_template.go index 01989f95fd..ba9854f13d 100644 --- a/pkg/compute/models/guest_template.go +++ b/pkg/compute/models/guest_template.go @@ -28,6 +28,7 @@ import ( "yunion.io/x/sqlchemy" "yunion.io/x/onecloud/pkg/apis" + api "yunion.io/x/onecloud/pkg/apis/compute" computeapis "yunion.io/x/onecloud/pkg/apis/compute" "yunion.io/x/onecloud/pkg/cloudcommon/cmdline" "yunion.io/x/onecloud/pkg/cloudcommon/db" @@ -644,6 +645,23 @@ func (manager *SGuestTemplateManager) ListItemFilter( return nil, errors.Wrap(err, "SVpcResourceBaseManager.ListItemFilter") } } + if len(input.CloudEnv) > 0 { + cloudregions := CloudregionManager.Query().SubQuery() + q = q.Join(cloudregions, sqlchemy.Equals(q.Field("cloudregion_id"), cloudregions.Field("id"))) + switch input.CloudEnv { + case api.CLOUD_ENV_PUBLIC_CLOUD: + q = q.Filter(sqlchemy.In(cloudregions.Field("provider"), CloudproviderManager.GetPublicProviderProvidersQuery())) + case api.CLOUD_ENV_PRIVATE_CLOUD: + q = q.Filter(sqlchemy.In(cloudregions.Field("provider"), CloudproviderManager.GetPrivateProviderProvidersQuery())) + case api.CLOUD_ENV_ON_PREMISE: + q = q.Filter(sqlchemy.Equals(cloudregions.Field("provider"), api.CLOUD_PROVIDER_ONECLOUD)) + case api.CLOUD_ENV_PRIVATE_ON_PREMISE: + q = q.Filter(sqlchemy.OR( + sqlchemy.Equals(cloudregions.Field("provider"), api.CLOUD_PROVIDER_ONECLOUD), + sqlchemy.In(cloudregions.Field("provider"), CloudproviderManager.GetPrivateProviderProvidersQuery()), + )) + } + } if len(input.BillingType) > 0 { q = q.Equals("billing_type", input.BillingType) }