From a4f086fa6eb76ae7c148e87d3550174aa5fc50f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Tue, 24 Sep 2024 18:10:16 +0800 Subject: [PATCH] fix(region): filter cloudproviders by regional network zone (#21287) --- pkg/compute/models/cloudproviders.go | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/pkg/compute/models/cloudproviders.go b/pkg/compute/models/cloudproviders.go index cfca2863c4..50a6523b6a 100644 --- a/pkg/compute/models/cloudproviders.go +++ b/pkg/compute/models/cloudproviders.go @@ -1275,13 +1275,20 @@ func (manager *SCloudproviderManager) ListItemFilter( var region *SCloudregion if len(query.ZoneId) > 0 { - _, err := validators.ValidateModel(ctx, userCred, ZoneManager, &query.ZoneId) + zoneObj, err := validators.ValidateModel(ctx, userCred, ZoneManager, &query.ZoneId) if err != nil { return nil, err } - vpcs := VpcManager.Query("manager_id").Distinct() - wires := WireManager.Query().Equals("zone_id", query.ZoneId).SubQuery() - vpcs = vpcs.Join(wires, sqlchemy.Equals(vpcs.Field("id"), wires.Field("vpc_id"))) + zone = zoneObj.(*SZone) + region, err = zone.GetRegion() + if err != nil { + return nil, err + } + vpcs := VpcManager.Query("manager_id").Equals("cloudregion_id", region.Id).Distinct() + if !utils.IsInStringArray(region.Provider, api.REGIONAL_NETWORK_PROVIDERS) { + wires := WireManager.Query().Equals("zone_id", query.ZoneId).SubQuery() + vpcs = vpcs.Join(wires, sqlchemy.Equals(vpcs.Field("id"), wires.Field("vpc_id"))) + } wireManager := WireManager.Query("manager_id").Equals("zone_id", query.ZoneId).Distinct().SubQuery() q = q.Filter( sqlchemy.OR(