Merge pull request #5139 from ioito/automated-cherry-pick-of-#5138-upstream-release-3.1

Automated cherry pick of #5138: fix: 避免未过滤掉同一个network底下的guest
This commit is contained in:
yunion-ci-robot
2020-02-18 14:46:39 +08:00
committed by GitHub
+7 -13
View File
@@ -284,20 +284,14 @@ func (manager *SGuestManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQ
sqlchemy.Equals(zoneTable.Field("id"), hostTable.Field("zone_id"))).Equals("manager_id", eip.ManagerId)
if len(eip.NetworkId) > 0 {
network, err := eip.GetNetwork()
if err != nil {
return nil, err
}
zone := network.getZone()
sq := hostQ.Filter(sqlchemy.Equals(zoneTable.Field("id"), zone.GetId())).SubQuery()
q = q.In("host_id", sq)
} else {
region := eip.GetRegion()
regionTable := CloudregionManager.Query().SubQuery()
sq := hostQ.Join(regionTable, sqlchemy.Equals(zoneTable.Field("cloudregion_id"), regionTable.Field("id"))).
Filter(sqlchemy.Equals(regionTable.Field("id"), region.GetId())).SubQuery()
q = q.In("host_id", sq)
sq := GuestnetworkManager.Query("guest_id").Equals("network_id", eip.NetworkId).SubQuery()
q = q.NotIn("id", sq)
}
region := eip.GetRegion()
regionTable := CloudregionManager.Query().SubQuery()
sq := hostQ.Join(regionTable, sqlchemy.Equals(zoneTable.Field("cloudregion_id"), regionTable.Field("id"))).
Filter(sqlchemy.Equals(regionTable.Field("id"), region.GetId())).SubQuery()
q = q.In("host_id", sq)
}
q, err = managedResourceFilterByRegion(q, query.RegionalFilterListInput, "host_id", func() *sqlchemy.SQuery {