mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
servers filter by vpc
This commit is contained in:
@@ -395,6 +395,23 @@ func (manager *SGuestManager) ListItemFilter(ctx context.Context, q *sqlchemy.SQ
|
||||
q = q.In("host_id", sq)
|
||||
}
|
||||
|
||||
vpcFilter, err := queryDict.GetString("vpc")
|
||||
if err == nil {
|
||||
IVpc, err := VpcManager.FetchByIdOrName(userCred, vpcFilter)
|
||||
if err != nil {
|
||||
return nil, httperrors.NewResourceNotFoundError("Vpc %s not found", vpcFilter)
|
||||
}
|
||||
vpc := IVpc.(*SVpc)
|
||||
guestnetwork := GuestnetworkManager.Query().SubQuery()
|
||||
network := NetworkManager.Query().SubQuery()
|
||||
wire := WireManager.Query().SubQuery()
|
||||
sq := guestnetwork.Query(guestnetwork.Field("guest_id")).Join(network,
|
||||
sqlchemy.Equals(guestnetwork.Field("network_id"), network.Field("id"))).
|
||||
Join(wire, sqlchemy.Equals(network.Field("wire_id"), wire.Field("id"))).
|
||||
Filter(sqlchemy.Equals(wire.Field("vpc_id"), vpc.Id)).SubQuery()
|
||||
q = q.In("id", sq)
|
||||
}
|
||||
|
||||
diskFilter, _ := queryDict.GetString("disk")
|
||||
if len(diskFilter) > 0 {
|
||||
diskI, _ := DiskManager.FetchByIdOrName(userCred, diskFilter)
|
||||
@@ -1366,6 +1383,17 @@ func (self *SGuest) moreExtraInfo(extra *jsonutils.JSONDict) *jsonutils.JSONDict
|
||||
extra.Add(jsonutils.JSONTrue, "can_recycle")
|
||||
}
|
||||
|
||||
guestnetworks, _ := self.GetNetworks("")
|
||||
if len(guestnetworks) > 0 {
|
||||
guestnetwork := guestnetworks[0]
|
||||
network := guestnetwork.GetNetwork()
|
||||
if network != nil {
|
||||
vpc := network.GetVpc()
|
||||
extra.Set("vpc_id", jsonutils.NewString(vpc.Id))
|
||||
extra.Set("vpc", jsonutils.NewString(vpc.Name))
|
||||
}
|
||||
}
|
||||
|
||||
return extra
|
||||
}
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ type ServerListOptions struct {
|
||||
WithoutEip *bool `help:"Show Servers without EIP"`
|
||||
OsType string `help:"OS Type" choices:"linux|windows|vmware"`
|
||||
OrderByDisk string `help:"Order by disk" choices:"asc|desc"`
|
||||
Vpc string `help:"Vpc id or name"`
|
||||
|
||||
ResourceType string `help:"Resource type" choices:"shared|prepaid|dedicated"`
|
||||
|
||||
|
||||
Reference in New Issue
Block a user