fix(region): filter vpcs by zone

This commit is contained in:
Qu Xuan
2021-10-29 14:32:28 +08:00
parent 6a9d681168
commit ce64d2dcc0
3 changed files with 26 additions and 0 deletions
+3
View File
@@ -62,6 +62,9 @@ type VpcListInput struct {
UsableResourceListInput
UsableVpcResourceListInput
// 过滤vpc底下有指定zone的ip子网
ZoneId string `json:"zone_id"`
// filter by globalvpc
Globalvpc string `json:"globalvpc"`
+22
View File
@@ -1146,6 +1146,28 @@ func (manager *SVpcManager) ListItemFilter(
}
}
if len(query.ZoneId) > 0 {
zoneObj, err := validators.ValidateModel(userCred, ZoneManager, &query.ZoneId)
if err != nil {
return nil, err
}
region, err := zoneObj.(*SZone).GetRegion()
if err != nil {
return nil, errors.Wrapf(err, "get zone %s region", zoneObj.GetName())
}
q = q.Equals("cloudregion_id", region.Id)
wires := WireManager.Query().SubQuery()
networks := NetworkManager.Query().SubQuery()
sq := wires.Query(wires.Field("vpc_id")).Join(networks, sqlchemy.Equals(wires.Field("id"), networks.Field("wire_id"))).Filter(
sqlchemy.OR(
sqlchemy.Equals(wires.Field("zone_id"), query.ZoneId),
sqlchemy.IsNullOrEmpty(wires.Field("zone_id")),
),
)
q = q.In("id", sq.SubQuery())
}
if query.IsDefault != nil {
if *query.IsDefault {
q = q.IsTrue("is_default")
+1
View File
@@ -29,6 +29,7 @@ type VpcListOptions struct {
DnsZoneId string `help:"Filter by DnsZone"`
InterVpcNetworkId string `help:"Filter by InterVpcNetwork"`
ExternalAccessMode string `help:"Filter by external access mode" choices:"distgw|eip|eip-distgw"`
ZoneId string `help:"Filter by zone which has networks"`
}
func (opts *VpcListOptions) GetContextId() string {