Skip to content

Commit

Permalink
fix: usage for schetag not accurate
Browse files Browse the repository at this point in the history
  • Loading branch information
Qiu Jian committed May 21, 2020
1 parent daf9db8 commit 1dfef4d
Show file tree
Hide file tree
Showing 16 changed files with 124 additions and 40 deletions.
8 changes: 4 additions & 4 deletions pkg/cloudcommon/db/rbac.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,20 +43,20 @@ func isObjectRbacAllowed(model IModel, userCred mcclient.TokenCredential, action
case rbacutils.ScopeSystem:
requireScope = rbacutils.ScopeSystem
case rbacutils.ScopeDomain:
if ownerId != nil && objOwnerId != nil && (ownerId.GetProjectDomainId() == objOwnerId.GetProjectDomainId() || (model.IsSharable(ownerId) && action == policy.PolicyActionGet)) {
if ownerId != nil && objOwnerId != nil && (ownerId.GetProjectDomainId() == objOwnerId.GetProjectDomainId() || objOwnerId.GetProjectDomainId() == "" || (model.IsSharable(ownerId) && action == policy.PolicyActionGet)) {
requireScope = rbacutils.ScopeDomain
} else {
requireScope = rbacutils.ScopeSystem
}
case rbacutils.ScopeUser:
if ownerId != nil && objOwnerId != nil && (ownerId.GetUserId() == objOwnerId.GetUserId() || (model.IsSharable(ownerId) && action == policy.PolicyActionGet)) {
if ownerId != nil && objOwnerId != nil && (ownerId.GetUserId() == objOwnerId.GetUserId() || objOwnerId.GetUserId() == "" || (model.IsSharable(ownerId) && action == policy.PolicyActionGet)) {
requireScope = rbacutils.ScopeUser
} else {
requireScope = rbacutils.ScopeSystem
}
default:
// objOwnerId should not be nil
if ownerId != nil && objOwnerId != nil && (ownerId.GetProjectId() == objOwnerId.GetProjectId() || (model.IsSharable(ownerId) && action == policy.PolicyActionGet)) {
if ownerId != nil && objOwnerId != nil && (ownerId.GetProjectId() == objOwnerId.GetProjectId() || objOwnerId.GetProjectId() == "" || (model.IsSharable(ownerId) && action == policy.PolicyActionGet)) {
requireScope = rbacutils.ScopeProject
} else if ownerId != nil && objOwnerId != nil && ownerId.GetProjectDomainId() == objOwnerId.GetProjectDomainId() {
requireScope = rbacutils.ScopeDomain
Expand All @@ -70,7 +70,7 @@ func isObjectRbacAllowed(model IModel, userCred mcclient.TokenCredential, action
if !requireScope.HigherThan(scope) {
return nil
}
return httperrors.NewForbiddenError(fmt.Sprintf("not enough privilege(require:%s,allow:%s)", requireScope, scope))
return httperrors.NewForbiddenError(fmt.Sprintf("not enough privilege(require:%s,allow:%s:resource:%s)", requireScope, scope, resScope))
}

func isJointObjectRbacAllowed(item IJointModel, userCred mcclient.TokenCredential, action string, extra ...string) error {
Expand Down
2 changes: 1 addition & 1 deletion pkg/compute/models/buckets.go
Original file line number Diff line number Diff line change
Expand Up @@ -1198,7 +1198,7 @@ func (manager *SBucketManager) usageQByCloudEnv(q *sqlchemy.SQuery, providers []
}

func (manager *SBucketManager) usageQByRanges(q *sqlchemy.SQuery, rangeObjs []db.IStandaloneModel) *sqlchemy.SQuery {
return RangeObjectsFilter(q, rangeObjs, q.Field("cloudregion_id"), nil, q.Field("manager_id"))
return RangeObjectsFilter(q, rangeObjs, q.Field("cloudregion_id"), nil, q.Field("manager_id"), nil, nil)
}

func (manager *SBucketManager) usageQ(q *sqlchemy.SQuery, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string) *sqlchemy.SQuery {
Expand Down
2 changes: 1 addition & 1 deletion pkg/compute/models/dbinstances.go
Original file line number Diff line number Diff line change
Expand Up @@ -1623,7 +1623,7 @@ func (man *SDBInstanceManager) TotalCount(
q := man.Query()
q = scopeOwnerIdFilter(q, scope, ownerId)
q = CloudProviderFilter(q, q.Field("manager_id"), providers, brands, cloudEnv)
q = RangeObjectsFilter(q, rangeObjs, q.Field("cloudregion_id"), nil, q.Field("manager_id"))
q = RangeObjectsFilter(q, rangeObjs, q.Field("cloudregion_id"), nil, q.Field("manager_id"), nil, nil)
return q.CountWithError()
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/compute/models/disks.go
Original file line number Diff line number Diff line change
Expand Up @@ -1558,7 +1558,7 @@ func totalDiskSize(
storages := StorageManager.Query().SubQuery()
q = q.Join(storages, sqlchemy.Equals(storages.Field("id"), disks.Field("storage_id")))
q = CloudProviderFilter(q, storages.Field("manager_id"), providers, brands, cloudEnv)
q = RangeObjectsFilter(q, rangeObjs, nil, storages.Field("zone_id"), storages.Field("manager_id"))
q = RangeObjectsFilter(q, rangeObjs, nil, storages.Field("zone_id"), storages.Field("manager_id"), nil, storages.Field("id"))
if len(hypervisors) > 0 {
hoststorages := HoststorageManager.Query().SubQuery()
hosts := HostManager.Query().SubQuery()
Expand Down
2 changes: 1 addition & 1 deletion pkg/compute/models/elasticcache_instances.go
Original file line number Diff line number Diff line change
Expand Up @@ -1453,7 +1453,7 @@ func (man *SElasticcacheManager) TotalCount(
q = q.Join(vpcs, sqlchemy.Equals(q.Field("vpc_id"), vpcs.Field("id")))
q = scopeOwnerIdFilter(q, scope, ownerId)
q = CloudProviderFilter(q, vpcs.Field("manager_id"), providers, brands, cloudEnv)
q = RangeObjectsFilter(q, rangeObjs, vpcs.Field("cloudregion_id"), nil, vpcs.Field("manager_id"))
q = RangeObjectsFilter(q, rangeObjs, vpcs.Field("cloudregion_id"), nil, vpcs.Field("manager_id"), nil, nil)
return q.CountWithError()
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/compute/models/elasticips.go
Original file line number Diff line number Diff line change
Expand Up @@ -1349,7 +1349,7 @@ func (manager *SElasticipManager) usageQByCloudEnv(q *sqlchemy.SQuery, providers
}

func (manager *SElasticipManager) usageQByRanges(q *sqlchemy.SQuery, rangeObjs []db.IStandaloneModel) *sqlchemy.SQuery {
return RangeObjectsFilter(q, rangeObjs, q.Field("cloudregion_id"), nil, q.Field("manager_id"))
return RangeObjectsFilter(q, rangeObjs, q.Field("cloudregion_id"), nil, q.Field("manager_id"), nil, nil)
}

func (manager *SElasticipManager) usageQ(q *sqlchemy.SQuery, rangeObjs []db.IStandaloneModel, providers []string, brands []string, cloudEnv string) *sqlchemy.SQuery {
Expand Down
122 changes: 103 additions & 19 deletions pkg/compute/models/filters.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,55 +22,139 @@ import (
"yunion.io/x/onecloud/pkg/util/rbacutils"
)

func RangeObjectsFilter(q *sqlchemy.SQuery, rangeObjs []db.IStandaloneModel, regionField sqlchemy.IQueryField, zoneField sqlchemy.IQueryField, managerField sqlchemy.IQueryField) *sqlchemy.SQuery {
func RangeObjectsFilter(q *sqlchemy.SQuery, rangeObjs []db.IStandaloneModel, regionField sqlchemy.IQueryField, zoneField sqlchemy.IQueryField, managerField sqlchemy.IQueryField, hostField sqlchemy.IQueryField, storageField sqlchemy.IQueryField) *sqlchemy.SQuery {
for _, rangeObj := range rangeObjs {
q = rangeObjFilter(q, rangeObj, regionField, zoneField, managerField)
q = rangeObjFilter(q, rangeObj, regionField, zoneField, managerField, hostField, storageField)
}
return q
}

func rangeObjFilter(q *sqlchemy.SQuery, rangeObj db.IStandaloneModel, regionField sqlchemy.IQueryField, zoneField sqlchemy.IQueryField, managerField sqlchemy.IQueryField) *sqlchemy.SQuery {
func rangeObjFilter(q *sqlchemy.SQuery, rangeObj db.IStandaloneModel, regionField sqlchemy.IQueryField, zoneField sqlchemy.IQueryField, managerField sqlchemy.IQueryField, hostField sqlchemy.IQueryField, storageField sqlchemy.IQueryField) *sqlchemy.SQuery {
if rangeObj == nil {
return q
}
kw := rangeObj.Keyword()
switch kw {
case "zone":
zone := rangeObj.(*SZone)
if regionField != nil {
q = q.Filter(sqlchemy.Equals(regionField, zone.CloudregionId))
if hostField != nil {
hosts := HostManager.Query("id", "zone_id").SubQuery()
q = q.Join(hosts, sqlchemy.Equals(hosts.Field("id"), hostField))
q = q.Filter(sqlchemy.Equals(hosts.Field("zone_id"), zone.Id))
} else if storageField != nil {
storages := StorageManager.Query("id", "zone_id").SubQuery()
q = q.Join(storages, sqlchemy.Equals(storages.Field("id"), storageField))
q = q.Filter(sqlchemy.Equals(storages.Field("zone_id"), zone.Id))
} else if zoneField != nil {
q = q.Filter(sqlchemy.Equals(zoneField, zone.Id))
} else if regionField != nil {
q = q.Filter(sqlchemy.Equals(regionField, zone.CloudregionId))
}
case "wire":
wire := rangeObj.(*SWire)
if regionField != nil {
vpc := wire.GetVpc()
q = q.Filter(sqlchemy.Equals(regionField, vpc.CloudregionId))
if hostField != nil {
hostwires := HostwireManager.Query("host_id", "wire_id").SubQuery()
q = q.Join(hostwires, sqlchemy.Equals(hostwires.Field("host_id"), hostField))
q = q.Filter(sqlchemy.Equals(hostwires.Field("wire_id"), wire.Id))
} else if storageField != nil {
hostwires := HostwireManager.Query("host_id", "wire_id").SubQuery()
hoststorages := HoststorageManager.Query("host_id", "storage_id").SubQuery()
q = q.Join(hoststorages, sqlchemy.Equals(hoststorages.Field("storage_id"), storageField))
q = q.Join(hostwires, sqlchemy.Equals(hoststorages.Field("host_id"), hostwires.Field("host_id")))
q = q.Filter(sqlchemy.Equals(hostwires.Field("wire_id"), wire.Id))
} else if zoneField != nil {
q = q.Filter(sqlchemy.Equals(zoneField, wire.ZoneId))
} else if regionField != nil {
vpc := wire.GetVpc()
q = q.Filter(sqlchemy.Equals(regionField, vpc.CloudregionId))
}
case "host":
host := rangeObj.(*SHost)
if regionField != nil {
if hostField != nil {
q = q.Filter(sqlchemy.Equals(hostField, host.Id))
} else if storageField != nil {
hoststorages := HoststorageManager.Query("host_id", "storage_id").SubQuery()
q = q.Join(hoststorages, sqlchemy.Equals(hoststorages.Field("storage_id"), storageField))
q = q.Filter(sqlchemy.Equals(hoststorages.Field("host_id"), host.Id))
} else if zoneField != nil {
q = q.Filter(sqlchemy.Equals(zoneField, host.ZoneId))
} else if regionField != nil {
zone := host.GetZone()
q = q.Filter(sqlchemy.Equals(regionField, zone.CloudregionId))
}
case "storage":
storage := rangeObj.(*SStorage)
if hostField != nil {
hoststorages := HoststorageManager.Query("host_id", "storage_id").SubQuery()
q = q.Join(hoststorages, sqlchemy.Equals(hoststorages.Field("host_id"), hostField))
q = q.Filter(sqlchemy.Equals(hoststorages.Field("storage_id"), storage.Id))
} else if storageField != nil {
q = q.Filter(sqlchemy.Equals(storageField, storage.Id))
} else if zoneField != nil {
q = q.Filter(sqlchemy.Equals(zoneField, host.ZoneId))
q = q.Filter(sqlchemy.Equals(zoneField, storage.ZoneId))
} else if regionField != nil {
zone := storage.GetZone()
q = q.Filter(sqlchemy.Equals(regionField, zone.CloudregionId))
}
case "cloudprovider":
q = q.Filter(sqlchemy.Equals(managerField, rangeObj.GetId()))
if hostField != nil {
hosts := HostManager.Query("id", "manager_id").SubQuery()
q = q.Join(hosts, sqlchemy.Equals(hosts.Field("id"), hostField))
q = q.Filter(sqlchemy.Equals(hosts.Field("manager_id"), rangeObj.GetId()))
} else if storageField != nil {
storages := StorageManager.Query("id", "manager_id").SubQuery()
q = q.Join(storages, sqlchemy.Equals(storages.Field("id"), storageField))
q = q.Filter(sqlchemy.Equals(storages.Field("manager_id"), rangeObj.GetId()))
} else if managerField != nil {
q = q.Filter(sqlchemy.Equals(managerField, rangeObj.GetId()))
}
case "cloudaccount":
cloudproviders := CloudproviderManager.Query().SubQuery()
subq := cloudproviders.Query(cloudproviders.Field("id")).Equals("cloudaccount_id", rangeObj.GetId()).SubQuery()
q = q.Filter(sqlchemy.In(managerField, subq))
if hostField != nil {
hosts := HostManager.Query("id", "manager_id").SubQuery()
providers := CloudproviderManager.Query("id", "cloudaccount_id").SubQuery()
q = q.Join(hosts, sqlchemy.Equals(hosts.Field("id"), hostField))
q = q.Join(providers, sqlchemy.Equals(hosts.Field("manager_id"), providers.Field("id")))
q = q.Filter(sqlchemy.Equals(providers.Field("cloudaccount_id"), rangeObj.GetId()))
} else if storageField != nil {
storages := StorageManager.Query("id", "manager_id").SubQuery()
providers := CloudproviderManager.Query("id", "cloudaccount_id").SubQuery()
q = q.Join(storages, sqlchemy.Equals(storages.Field("id"), storageField))
q = q.Join(providers, sqlchemy.Equals(storages.Field("manager_id"), providers.Field("id")))
q = q.Filter(sqlchemy.Equals(providers.Field("cloudaccount_id"), rangeObj.GetId()))
} else if managerField != nil {
providers := CloudproviderManager.Query("id", "cloudaccount_id").SubQuery()
q = q.Join(providers, sqlchemy.Equals(providers.Field("id"), managerField))
q = q.Filter(sqlchemy.Equals(providers.Field("cloudaccount_id"), rangeObj.GetId()))
}
case "cloudregion":
if regionField != nil {
q = q.Filter(sqlchemy.Equals(regionField, rangeObj.GetId()))
if hostField != nil {
hosts := HostManager.Query("id", "zone_id").SubQuery()
zones := ZoneManager.Query("id", "cloudregion_id").SubQuery()
q = q.Join(hosts, sqlchemy.Equals(hosts.Field("id"), hostField))
q = q.Join(zones, sqlchemy.Equals(zones.Field("id"), hosts.Field("zone_id")))
q = q.Filter(sqlchemy.Equals(zones.Field("cloudregion_id"), rangeObj.GetId()))
} else if storageField != nil {
storages := StorageManager.Query("id", "zone_id").SubQuery()
zones := ZoneManager.Query("id", "cloudregion_id").SubQuery()
q = q.Join(storages, sqlchemy.Equals(storages.Field("id"), storageField))
q = q.Join(zones, sqlchemy.Equals(zones.Field("id"), storages.Field("zone_id")))
q = q.Filter(sqlchemy.Equals(zones.Field("cloudregion_id"), rangeObj.GetId()))
} else if zoneField != nil {
zones := ZoneManager.Query().SubQuery()
subq := zones.Query(zones.Field("id")).Equals("cloudregion_id", rangeObj.GetId()).SubQuery()
q = q.Filter(sqlchemy.In(zoneField, subq))
zones := ZoneManager.Query("id", "cloudregion_id").SubQuery()
q = q.Join(zones, sqlchemy.Equals(zones.Field("id"), zoneField))
q = q.Filter(sqlchemy.Equals(zones.Field("cloudregion_id"), rangeObj.GetId()))
} else if regionField != nil {
q = q.Filter(sqlchemy.Equals(regionField, rangeObj.GetId()))
}
case "schedtag":
if hostField != nil {
hostschedtags := HostschedtagManager.Query("host_id", "schedtag_id").SubQuery()
q = q.Join(hostschedtags, sqlchemy.Equals(hostschedtags.Field("host_id"), hostField))
q = q.Filter(sqlchemy.Equals(hostschedtags.Field("schedtag_id"), rangeObj.GetId()))
} else if storageField != nil {
storageschedtags := StorageschedtagManager.Query("storage_id", "schedtag_id").SubQuery()
q = q.Join(storageschedtags, sqlchemy.Equals(storageschedtags.Field("storage_id"), storageField))
q = q.Filter(sqlchemy.Equals(storageschedtags.Field("schedtag_id"), rangeObj.GetId()))
}
}
return q
Expand Down
2 changes: 1 addition & 1 deletion pkg/compute/models/guestnetworks.go
Original file line number Diff line number Diff line change
Expand Up @@ -652,7 +652,7 @@ func totalGuestNicCount(
q = q.Join(hosts, sqlchemy.Equals(guests.Field("host_id"), hosts.Field("id")))

q = CloudProviderFilter(q, hosts.Field("manager_id"), providers, brands, cloudEnv)
q = RangeObjectsFilter(q, rangeObjs, nil, hosts.Field("zone_id"), hosts.Field("manager_id"))
q = RangeObjectsFilter(q, rangeObjs, nil, hosts.Field("zone_id"), hosts.Field("manager_id"), hosts.Field("id"), nil)

switch scope {
case rbacutils.ScopeSystem:
Expand Down
2 changes: 1 addition & 1 deletion pkg/compute/models/loadbalancernetworks.go
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,7 @@ func totalLBNicCount(
case rbacutils.ScopeProject:
q = q.Filter(sqlchemy.Equals(lbs.Field("tenant_id"), ownerId.GetProjectId()))
}
q = RangeObjectsFilter(q, rangeObjs, nil, lbs.Field("zone_id"), lbs.Field("manager_id"))
q = RangeObjectsFilter(q, rangeObjs, nil, lbs.Field("zone_id"), lbs.Field("manager_id"), nil, nil)
q = CloudProviderFilter(q, lbs.Field("manager_id"), providers, brands, cloudEnv)
return q.CountWithError()
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/compute/models/loadbalancers.go
Original file line number Diff line number Diff line change
Expand Up @@ -1068,7 +1068,7 @@ func (man *SLoadbalancerManager) TotalCount(
q := man.Query()
q = scopeOwnerIdFilter(q, scope, ownerId)
q = CloudProviderFilter(q, q.Field("manager_id"), providers, brands, cloudEnv)
q = RangeObjectsFilter(q, rangeObjs, nil, q.Field("zone_id"), q.Field("manager_id"))
q = RangeObjectsFilter(q, rangeObjs, nil, q.Field("zone_id"), q.Field("manager_id"), nil, nil)
return q.CountWithError()
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/compute/models/snapshots.go
Original file line number Diff line number Diff line change
Expand Up @@ -816,7 +816,7 @@ func TotalSnapshotCount(scope rbacutils.TRbacScope, ownerId mcclient.IIdentityPr
q = q.Equals("tenant_id", ownerId.GetProjectId())
}

q = RangeObjectsFilter(q, rangeObjs, q.Field("cloudregion_id"), nil, q.Field("manager_id"))
q = RangeObjectsFilter(q, rangeObjs, q.Field("cloudregion_id"), nil, q.Field("manager_id"), nil, nil)
q = CloudProviderFilter(q, q.Field("manager_id"), providers, brands, cloudEnv)
q = q.Equals("created_by", api.SNAPSHOT_MANUAL)
q = q.Equals("fake_deleted", false)
Expand Down
2 changes: 1 addition & 1 deletion pkg/compute/models/storages.go
Original file line number Diff line number Diff line change
Expand Up @@ -950,7 +950,7 @@ func (manager *SStorageManager) totalCapacityQ(

if len(rangeObjs) > 0 || len(providers) > 0 || len(brands) > 0 || cloudEnv != "" {
q = CloudProviderFilter(q, storages.Field("manager_id"), providers, brands, cloudEnv)
q = RangeObjectsFilter(q, rangeObjs, nil, storages.Field("zone_id"), storages.Field("manager_id"))
q = RangeObjectsFilter(q, rangeObjs, nil, storages.Field("zone_id"), storages.Field("manager_id"), nil, storages.Field("id"))
}

q = q.Distinct()
Expand Down
2 changes: 1 addition & 1 deletion pkg/compute/models/usage.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,6 @@ func AttachUsageQuery(
}
}
q = CloudProviderFilter(q, hosts.Field("manager_id"), providers, brands, cloudEnv)
q = RangeObjectsFilter(q, rangeObjs, nil, hosts.Field("zone_id"), hosts.Field("manager_id"))
q = RangeObjectsFilter(q, rangeObjs, nil, hosts.Field("zone_id"), hosts.Field("manager_id"), hosts.Field("id"), nil)
return q
}
2 changes: 1 addition & 1 deletion pkg/compute/models/vpcs.go
Original file line number Diff line number Diff line change
Expand Up @@ -1085,7 +1085,7 @@ func (manager *SVpcManager) totalCount(
q = q.Equals("domain_id", ownerId.GetProjectDomainId())
}
q = CloudProviderFilter(q, q.Field("manager_id"), providers, brands, cloudEnv)
q = RangeObjectsFilter(q, rangeObjs, q.Field("cloudregion_id"), nil, q.Field("manager_id"))
q = RangeObjectsFilter(q, rangeObjs, q.Field("cloudregion_id"), nil, q.Field("manager_id"), nil, nil)

cnt, _ := q.CountWithError()

Expand Down
4 changes: 2 additions & 2 deletions pkg/compute/models/wires.go
Original file line number Diff line number Diff line change
Expand Up @@ -450,7 +450,7 @@ func (manager *SWireManager) totalCountQ(
hostsQ = CloudProviderFilter(hostsQ, hostsQ.Field("manager_id"), providers, brands, cloudEnv)
}
if len(rangeObjs) > 0 {
hostsQ = RangeObjectsFilter(hostsQ, rangeObjs, nil, hostsQ.Field("zone_id"), hostsQ.Field("manager_id"))
hostsQ = RangeObjectsFilter(hostsQ, rangeObjs, nil, hostsQ.Field("zone_id"), hostsQ.Field("manager_id"), hostsQ.Field("id"), nil)
}
hosts := hostsQ.SubQuery()
groups := filterByScopeOwnerId(GroupManager.Query(), scope, ownerId).SubQuery()
Expand All @@ -459,7 +459,7 @@ func (manager *SWireManager) totalCountQ(
lbsQ = CloudProviderFilter(lbsQ, lbsQ.Field("manager_id"), providers, brands, cloudEnv)
}
if len(rangeObjs) > 0 {
lbsQ = RangeObjectsFilter(lbsQ, rangeObjs, lbsQ.Field("cloudregion_id"), lbsQ.Field("zone_id"), lbsQ.Field("manager_id"))
lbsQ = RangeObjectsFilter(lbsQ, rangeObjs, lbsQ.Field("cloudregion_id"), lbsQ.Field("zone_id"), lbsQ.Field("manager_id"), nil, nil)
}
lbs := lbsQ.SubQuery()

Expand Down
6 changes: 3 additions & 3 deletions pkg/compute/usages/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -531,7 +531,7 @@ func RegionUsage(rangeObjs []db.IStandaloneModel, providers []string, brands []s
if len(rangeObjs) > 0 || len(providers) > 0 || len(brands) > 0 || len(cloudEnv) > 0 {
subq := models.VpcManager.Query("cloudregion_id")
subq = models.CloudProviderFilter(subq, subq.Field("manager_id"), providers, brands, cloudEnv)
subq = models.RangeObjectsFilter(subq, rangeObjs, nil, nil, subq.Field("manager_id"))
subq = models.RangeObjectsFilter(subq, rangeObjs, nil, nil, subq.Field("manager_id"), nil, nil)
q = q.In("id", subq.SubQuery())
}

Expand All @@ -546,7 +546,7 @@ func ZoneUsage(rangeObjs []db.IStandaloneModel, providers []string, brands []str
if len(rangeObjs) > 0 || len(providers) > 0 || len(brands) > 0 || len(cloudEnv) > 0 {
subq := models.HostManager.Query("zone_id")
subq = models.CloudProviderFilter(subq, subq.Field("manager_id"), providers, brands, cloudEnv)
subq = models.RangeObjectsFilter(subq, rangeObjs, nil, nil, subq.Field("manager_id"))
subq = models.RangeObjectsFilter(subq, rangeObjs, nil, nil, subq.Field("manager_id"), nil, nil)
q = q.In("id", subq.SubQuery())
}

Expand All @@ -559,7 +559,7 @@ func VpcUsage(prefix string, providers []string, brands []string, cloudEnv strin
q := models.VpcManager.Query().IsFalse("is_emulated")
if len(rangeObjs) > 0 || len(providers) > 0 || len(brands) > 0 || len(cloudEnv) > 0 {
q = models.CloudProviderFilter(q, q.Field("manager_id"), providers, brands, cloudEnv)
q = models.RangeObjectsFilter(q, rangeObjs, nil, nil, q.Field("manager_id"))
q = models.RangeObjectsFilter(q, rangeObjs, nil, nil, q.Field("manager_id"), nil, nil)
}
if scope == rbacutils.ScopeDomain {
q = q.Equals("domain_id", ownerId.GetProjectDomainId())
Expand Down

0 comments on commit 1dfef4d

Please sign in to comment.