Merge pull request #12116 from tb365/automated-cherry-pick-of-#12114-upstream-release-3.8

Automated cherry pick of #12114: NetworkUsableZoneIds remove duplicate zone ids
This commit is contained in:
Zexi Li
2021-09-06 21:48:01 +08:00
committed by GitHub
2 changed files with 18 additions and 7 deletions
+7 -5
View File
@@ -510,9 +510,9 @@ func usableFilter(q *sqlchemy.SQuery, public_cloud bool) (*sqlchemy.SQuery, erro
providerTable := usableCloudProviders().SubQuery()
providerRegionTable := CloudproviderRegionManager.Query().SubQuery()
subq := providerRegionTable.Query(sqlchemy.DISTINCT("cloudregion_id", providerRegionTable.Field("cloudregion_id")))
subq = subq.Join(providerTable, sqlchemy.Equals(providerRegionTable.Field("cloudprovider_id"), providerTable.Field("id")))
q = q.Filter(sqlchemy.In(q.Field("cloudregion_id"), subq.SubQuery()))
_subq := providerRegionTable.Query(sqlchemy.DISTINCT("cloudregion_id", providerRegionTable.Field("cloudregion_id")))
subq := _subq.Join(providerTable, sqlchemy.Equals(providerRegionTable.Field("cloudprovider_id"), providerTable.Field("id"))).SubQuery()
q.Join(subq, sqlchemy.Equals(q.Field("cloudregion_id"), subq.Field("cloudregion_id")))
}
// 过滤出network usable的sku
@@ -701,10 +701,12 @@ func (manager *SServerSkuManager) ListItemFilter(
cloudEnvStr := query.CloudEnv
if cloudEnvStr == api.CLOUD_ENV_PUBLIC_CLOUD {
publicCloud = true
q = q.Filter(sqlchemy.In(q.Field("provider"), CloudproviderManager.GetPublicProviderProvidersQuery()))
pq := CloudproviderManager.GetPublicProviderProvidersQuery()
q = q.Join(pq, sqlchemy.Equals(q.Field("provider"), pq.Field("provider")))
}
if cloudEnvStr == api.CLOUD_ENV_PRIVATE_CLOUD {
q = q.Filter(sqlchemy.In(q.Field("provider"), CloudproviderManager.GetPrivateProviderProvidersQuery()))
pq := CloudproviderManager.GetPrivateProviderProvidersQuery()
q = q.Join(pq, sqlchemy.Equals(q.Field("provider"), pq.Field("provider")))
}
if cloudEnvStr == api.CLOUD_ENV_ON_PREMISE {
q = q.Filter(
+11 -2
View File
@@ -560,7 +560,7 @@ func NetworkUsableZoneIds(usableNet, usableVpc bool, query *api.ZoneListInput) (
if err != nil {
return nil, errors.Wrap(err, "zoneUsableVpc")
}
ret, err := usableZoneQ1(vpcs, usableNet)
r1, err := usableZoneQ1(vpcs, usableNet)
if err != nil {
return nil, errors.Wrap(err, "usableZoneQ1")
}
@@ -569,7 +569,16 @@ func NetworkUsableZoneIds(usableNet, usableVpc bool, query *api.ZoneListInput) (
return nil, errors.Wrap(err, "usableZoneQ2")
}
ret = append(ret, r2...)
r1 = append(r1, r2...)
// remove dupliates
ret := make([]string, 0)
rm := make(map[string]bool)
for _, zone := range r1 {
if _, ok := rm[zone]; !ok {
rm[zone] = true
ret = append(ret, zone)
}
}
return ret, nil
}