mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
guests: list usable guests for specified eip
This commit is contained in:
@@ -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"))).
|
||||
|
||||
Reference in New Issue
Block a user