fix: cloud-region filter by domain not support share_mode

This commit is contained in:
Qiu Jian
2019-11-22 17:26:56 +08:00
parent 3b50982c5c
commit 947f5632b3
4 changed files with 33 additions and 5 deletions
+8 -1
View File
@@ -126,8 +126,15 @@ func getDomainManagerSubq(domainId string) *sqlchemy.SSubQuery {
q := providers.Query(providers.Field("id"))
q = q.Join(accounts, sqlchemy.Equals(accounts.Field("id"), providers.Field("cloudaccount_id")))
q = q.Filter(sqlchemy.OR(
sqlchemy.Equals(accounts.Field("domain_id"), domainId),
sqlchemy.AND(
sqlchemy.Equals(providers.Field("domain_id"), domainId),
sqlchemy.Equals(accounts.Field("share_mode"), api.CLOUD_ACCOUNT_SHARE_MODE_PROVIDER_DOMAIN),
),
sqlchemy.Equals(accounts.Field("share_mode"), api.CLOUD_ACCOUNT_SHARE_MODE_SYSTEM),
sqlchemy.AND(
sqlchemy.Equals(accounts.Field("domain_id"), domainId),
sqlchemy.Equals(accounts.Field("share_mode"), api.CLOUD_ACCOUNT_SHARE_MODE_ACCOUNT_DOMAIN),
),
))
q = q.Filter(sqlchemy.Equals(accounts.Field("status"), api.CLOUD_PROVIDER_CONNECTED))
q = q.Filter(sqlchemy.IsTrue(accounts.Field("enabled")))
+8 -1
View File
@@ -1311,8 +1311,15 @@ func (manager *SCloudproviderManager) FilterByOwner(q *sqlchemy.SQuery, owner mc
cloudaccounts.Field("id"),
))
q = q.Filter(sqlchemy.OR(
sqlchemy.Equals(q.Field("domain_id"), owner.GetProjectDomainId()),
sqlchemy.AND(
sqlchemy.Equals(q.Field("domain_id"), owner.GetProjectDomainId()),
sqlchemy.Equals(cloudaccounts.Field("share_mode"), api.CLOUD_ACCOUNT_SHARE_MODE_PROVIDER_DOMAIN),
),
sqlchemy.Equals(cloudaccounts.Field("share_mode"), api.CLOUD_ACCOUNT_SHARE_MODE_SYSTEM),
sqlchemy.AND(
sqlchemy.Equals(cloudaccounts.Field("domain_id"), owner.GetProjectDomainId()),
sqlchemy.Equals(cloudaccounts.Field("share_mode"), api.CLOUD_ACCOUNT_SHARE_MODE_ACCOUNT_DOMAIN),
),
))
}
}
+9 -2
View File
@@ -538,8 +538,15 @@ func getCloudRegionIdByDomainId(domainId string) *sqlchemy.SSubQuery {
q2 = q2.Join(providers, sqlchemy.Equals(providers.Field("id"), cloudproviderregions.Field("cloudprovider_id")))
q2 = q2.Join(accounts, sqlchemy.Equals(providers.Field("cloudaccount_id"), accounts.Field("id")))
q2 = q2.Filter(sqlchemy.OR(
sqlchemy.Equals(accounts.Field("domain_id"), domainId),
sqlchemy.IsTrue(accounts.Field("is_public")),
sqlchemy.AND(
sqlchemy.Equals(providers.Field("domain_id"), domainId),
sqlchemy.Equals(accounts.Field("share_mode"), api.CLOUD_ACCOUNT_SHARE_MODE_PROVIDER_DOMAIN),
),
sqlchemy.Equals(accounts.Field("share_mode"), api.CLOUD_ACCOUNT_SHARE_MODE_SYSTEM),
sqlchemy.AND(
sqlchemy.Equals(accounts.Field("domain_id"), domainId),
sqlchemy.Equals(accounts.Field("share_mode"), api.CLOUD_ACCOUNT_SHARE_MODE_ACCOUNT_DOMAIN),
),
))
return sqlchemy.Union(q1, q2).Query().SubQuery()
+8 -1
View File
@@ -161,8 +161,15 @@ func managedResourceFilterByDomain(q *sqlchemy.SQuery, query jsonutils.JSONObjec
subq := providers.Query(providers.Field("id"))
subq = subq.Join(accounts, sqlchemy.Equals(providers.Field("cloudaccount_id"), accounts.Field("id")))
subq = subq.Filter(sqlchemy.OR(
sqlchemy.Equals(providers.Field("domain_id"), domain.GetId()),
sqlchemy.AND(
sqlchemy.Equals(providers.Field("domain_id"), domain.GetId()),
sqlchemy.Equals(accounts.Field("share_mode"), api.CLOUD_ACCOUNT_SHARE_MODE_PROVIDER_DOMAIN),
),
sqlchemy.Equals(accounts.Field("share_mode"), api.CLOUD_ACCOUNT_SHARE_MODE_SYSTEM),
sqlchemy.AND(
sqlchemy.Equals(accounts.Field("domain_id"), domain.GetId()),
sqlchemy.Equals(accounts.Field("share_mode"), api.CLOUD_ACCOUNT_SHARE_MODE_ACCOUNT_DOMAIN),
),
))
if len(filterField) == 0 {
q = q.Filter(sqlchemy.OR(