mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-21 14:19:49 +08:00
Merge pull request #1622 from ioito/hotfix/qx-network-filter
兼容zone及usable参数
This commit is contained in:
@@ -49,4 +49,9 @@ var (
|
||||
NETWORK_TYPE_PXE,
|
||||
NETWORK_TYPE_IPMI,
|
||||
}
|
||||
|
||||
REGINAL_NETWORK_PROVIDERS = []string{
|
||||
CLOUD_PROVIDER_HUAWEI,
|
||||
CLOUD_PROVIDER_UCLOUD,
|
||||
}
|
||||
)
|
||||
|
||||
@@ -1506,8 +1506,20 @@ func (manager *SNetworkManager) ListItemFilter(ctx context.Context, q *sqlchemy.
|
||||
if err != nil {
|
||||
return nil, httperrors.NewNotFoundError("Zone %s not found", zoneStr)
|
||||
}
|
||||
sq := WireManager.Query("id").Equals("zone_id", zoneObj.GetId())
|
||||
q = q.Filter(sqlchemy.In(q.Field("wire_id"), sq.SubQuery()))
|
||||
zone := zoneObj.(*SZone)
|
||||
region := zone.GetRegion()
|
||||
if utils.IsInStringArray(region.Provider, api.REGINAL_NETWORK_PROVIDERS) {
|
||||
wires := WireManager.Query().SubQuery()
|
||||
vpcs := VpcManager.Query().SubQuery()
|
||||
|
||||
sq := wires.Query(wires.Field("id")).
|
||||
Join(vpcs, sqlchemy.Equals(wires.Field("vpc_id"), vpcs.Field("id"))).
|
||||
Filter(sqlchemy.Equals(vpcs.Field("cloudregion_id"), region.Id))
|
||||
q = q.Filter(sqlchemy.In(q.Field("wire_id"), sq.SubQuery()))
|
||||
} else {
|
||||
sq := WireManager.Query("id").Equals("zone_id", zoneObj.GetId())
|
||||
q = q.Filter(sqlchemy.In(q.Field("wire_id"), sq.SubQuery()))
|
||||
}
|
||||
}
|
||||
|
||||
vpcStr, _ := query.GetString("vpc")
|
||||
@@ -1547,7 +1559,7 @@ func (manager *SNetworkManager) ListItemFilter(ctx context.Context, q *sqlchemy.
|
||||
|
||||
sq := wires.Query(wires.Field("id")).
|
||||
Join(vpcs, sqlchemy.Equals(wires.Field("vpc_id"), vpcs.Field("id"))).
|
||||
Join(zones, sqlchemy.Equals(wires.Field("zone_id"), zones.Field("id"))).
|
||||
Join(zones, sqlchemy.OR(sqlchemy.Equals(wires.Field("zone_id"), zones.Field("id")), sqlchemy.IsNullOrEmpty(wires.Field("zone_id")))).
|
||||
Join(regions, sqlchemy.Equals(zones.Field("cloudregion_id"), regions.Field("id"))).
|
||||
Filter(sqlchemy.AND(
|
||||
sqlchemy.Equals(vpcs.Field("status"), api.VPC_STATUS_AVAILABLE),
|
||||
|
||||
Reference in New Issue
Block a user