Merge pull request #1622 from ioito/hotfix/qx-network-filter

兼容zone及usable参数
This commit is contained in:
yunion-ci-robot
2019-07-09 23:05:56 +08:00
committed by GitHub
2 changed files with 20 additions and 3 deletions
+5
View File
@@ -49,4 +49,9 @@ var (
NETWORK_TYPE_PXE,
NETWORK_TYPE_IPMI,
}
REGINAL_NETWORK_PROVIDERS = []string{
CLOUD_PROVIDER_HUAWEI,
CLOUD_PROVIDER_UCLOUD,
}
)
+15 -3
View File
@@ -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),