region capability: fix regional public network not found

This commit is contained in:
Zexi
2019-07-30 17:29:19 +08:00
parent 17ca6c4281
commit 6ee87a7009
3 changed files with 19 additions and 5 deletions
+1 -1
View File
@@ -50,7 +50,7 @@ var (
NETWORK_TYPE_IPMI,
}
REGINAL_NETWORK_PROVIDERS = []string{
REGIONAL_NETWORK_PROVIDERS = []string{
CLOUD_PROVIDER_HUAWEI,
CLOUD_PROVIDER_UCLOUD,
}
+17 -3
View File
@@ -350,6 +350,10 @@ func getNetworkPublicCount(region *SCloudregion, zone *SZone, domainId string) (
}
func getNetworkCountByFilter(region *SCloudregion, zone *SZone, domainId string, isPublic tristate.TriState) (int, error) {
if zone != nil && region == nil {
region = zone.GetRegion()
}
vpcs := VpcManager.Query().SubQuery()
wires := WireManager.Query().SubQuery()
networks := NetworkManager.Query().SubQuery()
@@ -363,11 +367,21 @@ func getNetworkCountByFilter(region *SCloudregion, zone *SZone, domainId string,
}
}
q = q.Join(wires, sqlchemy.Equals(networks.Field("wire_id"), wires.Field("id")))
if region != nil {
subq := getRegionZoneSubq(region)
q = q.Filter(sqlchemy.In(wires.Field("zone_id"), subq))
if utils.IsInStringArray(region.Provider, api.REGIONAL_NETWORK_PROVIDERS) {
wires := WireManager.Query().SubQuery()
vpcs := VpcManager.Query().SubQuery()
subq := 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"), subq))
} else {
subq := getRegionZoneSubq(region)
q = q.Filter(sqlchemy.In(wires.Field("zone_id"), subq))
}
}
if zone != nil {
if zone != nil && !utils.IsInStringArray(region.Provider, api.REGIONAL_NETWORK_PROVIDERS) {
q = q.Filter(sqlchemy.Equals(wires.Field("zone_id"), zone.Id))
}
if len(domainId) > 0 {
+1 -1
View File
@@ -1580,7 +1580,7 @@ func (manager *SNetworkManager) ListItemFilter(ctx context.Context, q *sqlchemy.
}
zone := zoneObj.(*SZone)
region := zone.GetRegion()
if utils.IsInStringArray(region.Provider, api.REGINAL_NETWORK_PROVIDERS) {
if utils.IsInStringArray(region.Provider, api.REGIONAL_NETWORK_PROVIDERS) {
wires := WireManager.Query().SubQuery()
vpcs := VpcManager.Query().SubQuery()