guests: list usable guests for specified eip

This commit is contained in:
Yousong Zhou
2020-05-28 15:51:20 +08:00
parent 2390e352f8
commit df4d80fbd9
+11 -4
View File
@@ -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"))).