Merge pull request #17519 from ioito/hotfix/qx-server-template-filter-by-cloud-env

fix(region): support filter by cloud_env for servertemplate
This commit is contained in:
Zexi Li
2023-07-13 21:45:52 +08:00
committed by GitHub
+18
View File
@@ -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)
}