From df4d80fbd98f569e8e05382189f0e6ab2d4b71dc Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Tue, 19 May 2020 09:38:40 +0800 Subject: [PATCH] guests: list usable guests for specified eip --- pkg/compute/models/guests.go | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/pkg/compute/models/guests.go b/pkg/compute/models/guests.go index bd14f3d57e..e2326804f2 100644 --- a/pkg/compute/models/guests.go +++ b/pkg/compute/models/guests.go @@ -323,15 +323,22 @@ func (manager *SGuestManager) ListItemFilter( return nil, httperrors.NewGeneralError(err) } eip := eipObj.(*SElasticip) - hostTable := HostManager.Query().SubQuery() - zoneTable := ZoneManager.Query().SubQuery() - hostQ := hostTable.Query(hostTable.Field("id")).Join(zoneTable, - sqlchemy.Equals(zoneTable.Field("id"), hostTable.Field("zone_id"))).Equals("manager_id", eip.ManagerId) if len(eip.NetworkId) > 0 { sq := GuestnetworkManager.Query("guest_id").Equals("network_id", eip.NetworkId).SubQuery() q = q.NotIn("id", sq) } + + hostTable := HostManager.Query().SubQuery() + zoneTable := ZoneManager.Query().SubQuery() + hostQ := hostTable.Query(hostTable.Field("id")) + hostQ = hostQ.Join(zoneTable, + sqlchemy.Equals(zoneTable.Field("id"), hostTable.Field("zone_id"))) + if eip.ManagerId != "" { + hostQ = hostQ.Equals("manager_id", eip.ManagerId) + } else { + hostQ = hostQ.IsNullOrEmpty("manager_id") + } region := eip.GetRegion() regionTable := CloudregionManager.Query().SubQuery() sq := hostQ.Join(regionTable, sqlchemy.Equals(zoneTable.Field("cloudregion_id"), regionTable.Field("id"))).