mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
Merge pull request #12317 from ioito/hotfix/qx-readonly-capability
fix(region): read only capability
This commit is contained in:
@@ -41,6 +41,8 @@ const (
|
||||
)
|
||||
|
||||
const (
|
||||
READ_ONLY_SUFFIX = ".readonly"
|
||||
|
||||
CLOUD_CAPABILITY_PROJECT = "project"
|
||||
CLOUD_CAPABILITY_COMPUTE = "compute"
|
||||
CLOUD_CAPABILITY_NETWORK = "network"
|
||||
|
||||
@@ -18,6 +18,7 @@ import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"yunion.io/x/jsonutils"
|
||||
"yunion.io/x/log"
|
||||
@@ -37,17 +38,20 @@ import (
|
||||
)
|
||||
|
||||
type SCapabilities struct {
|
||||
Hypervisors []string `json:",allowempty"`
|
||||
Brands []string `json:",allowempty"`
|
||||
DisabledBrands []string `json:",allowempty"`
|
||||
ComputeEngineBrands []string `json:",allowempty"`
|
||||
DisabledComputeEngineBrands []string `json:",allowempty"`
|
||||
RdsEngineBrands []string `json:",allowempty"`
|
||||
RedisEngineBrands []string `json:",allowempty"`
|
||||
LoadbalancerEngineBrands []string `json:",allowempty"`
|
||||
DisabledRdsEngineBrands []string `json:",allowempty"`
|
||||
CloudIdBrands []string `json:",allowempty"`
|
||||
DisabledCloudIdBrands []string `json:",allowempty"`
|
||||
Hypervisors []string `json:",allowempty"`
|
||||
|
||||
Brands []string `json:",allowempty"`
|
||||
DisabledBrands []string `json:",allowempty"`
|
||||
ComputeEngineBrands []string `json:",allowempty"`
|
||||
DisabledComputeEngineBrands []string `json:",allowempty"`
|
||||
RdsEngineBrands []string `json:",allowempty"`
|
||||
DisabledRdsEngineBrands []string `json:",allowempty"`
|
||||
RedisEngineBrands []string `json:",allowempty"`
|
||||
DisabledRedisEngineBrands []string `json:",allowempty"`
|
||||
LoadbalancerEngineBrands []string `json:",allowempty"`
|
||||
DisabledLoadbalancerEngineBrands []string `json:",allowempty"`
|
||||
CloudIdBrands []string `json:",allowempty"`
|
||||
DisabledCloudIdBrands []string `json:",allowempty"`
|
||||
// 支持SAML 2.0
|
||||
SamlAuthBrands []string `json:",allowempty"`
|
||||
DisabledSamlAuthBrands []string `json:",allowempty"`
|
||||
@@ -60,21 +64,53 @@ type SCapabilities struct {
|
||||
CdnBrands []string `json:",allowempty"`
|
||||
DisabledCdnBrands []string `json:",allowempty"`
|
||||
PublicIpBrands []string `json:",allowempty"`
|
||||
DisabledPublicIpBrands []string `json:",allowempty"`
|
||||
NetworkManageBrands []string `json:",allowempty"`
|
||||
DisabledNetworkManageBrands []string `json:",allowempty"`
|
||||
ObjectStorageBrands []string `json:",allowempty"`
|
||||
DisabledObjectStorageBrands []string `json:",allowempty"`
|
||||
ResourceTypes []string `json:",allowempty"`
|
||||
StorageTypes []string `json:",allowempty"` // going to remove on 2.14
|
||||
DataStorageTypes []string `json:",allowempty"` // going to remove on 2.14
|
||||
GPUModels []string `json:",allowempty"`
|
||||
HostCpuArchs []string `json:",allowempty"` // x86_64 aarch64
|
||||
MinNicCount int
|
||||
MaxNicCount int
|
||||
MinDataDiskCount int
|
||||
MaxDataDiskCount int
|
||||
SchedPolicySupport bool
|
||||
Usable bool
|
||||
|
||||
ReadOnlyBrands []string `json:",allowempty"`
|
||||
ReadOnlyDisabledBrands []string `json:",allowempty"`
|
||||
ReadOnlyComputeEngineBrands []string `json:",allowempty"`
|
||||
ReadOnlyDisabledComputeEngineBrands []string `json:",allowempty"`
|
||||
ReadOnlyRdsEngineBrands []string `json:",allowempty"`
|
||||
ReadOnlyDisabledRdsEngineBrands []string `json:",allowempty"`
|
||||
ReadOnlyRedisEngineBrands []string `json:",allowempty"`
|
||||
ReadOnlyDisabledRedisEngineBrands []string `json:",allowempty"`
|
||||
ReadOnlyLoadbalancerEngineBrands []string `json:",allowempty"`
|
||||
ReadOnlyDisabledLoadbalancerEngineBrands []string `json:",allowempty"`
|
||||
ReadOnlyCloudIdBrands []string `json:",allowempty"`
|
||||
ReadOnlyDisabledCloudIdBrands []string `json:",allowempty"`
|
||||
// 支持SAML 2.0
|
||||
ReadOnlySamlAuthBrands []string `json:",allowempty"`
|
||||
ReadOnlyDisabledSamlAuthBrands []string `json:",allowempty"`
|
||||
ReadOnlyNatBrands []string `json:",allowempty"`
|
||||
ReadOnlyDisabledNatBrands []string `json:",allowempty"`
|
||||
ReadOnlyNasBrands []string `json:",allowempty"`
|
||||
ReadOnlyDisabledNasBrands []string `json:",allowempty"`
|
||||
ReadOnlyWafBrands []string `json:",allowempty"`
|
||||
ReadOnlyDisabledWafBrands []string `json:",allowempty"`
|
||||
ReadOnlyCdnBrands []string `json:",allowempty"`
|
||||
ReadOnlyDisabledCdnBrands []string `json:",allowempty"`
|
||||
ReadOnlyPublicIpBrands []string `json:",allowempty"`
|
||||
ReadOnlyDisabledPublicIpBrands []string `json:",allowempty"`
|
||||
ReadOnlyNetworkManageBrands []string `json:",allowempty"`
|
||||
ReadOnlyDisabledNetworkManageBrands []string `json:",allowempty"`
|
||||
ReadOnlyObjectStorageBrands []string `json:",allowempty"`
|
||||
ReadOnlyDisabledObjectStorageBrands []string `json:",allowempty"`
|
||||
|
||||
ResourceTypes []string `json:",allowempty"`
|
||||
StorageTypes []string `json:",allowempty"` // going to remove on 2.14
|
||||
DataStorageTypes []string `json:",allowempty"` // going to remove on 2.14
|
||||
GPUModels []string `json:",allowempty"`
|
||||
HostCpuArchs []string `json:",allowempty"` // x86_64 aarch64
|
||||
MinNicCount int
|
||||
MaxNicCount int
|
||||
MinDataDiskCount int
|
||||
MaxDataDiskCount int
|
||||
SchedPolicySupport bool
|
||||
Usable bool
|
||||
|
||||
// Deprecated
|
||||
PublicNetworkCount int
|
||||
@@ -295,20 +331,24 @@ func getDBInstanceInfo(region *SCloudregion, zone *SZone) map[string]map[string]
|
||||
|
||||
// set all brands, compute engine brands, network manage brands, object storage brands
|
||||
func getBrands(region *SCloudregion, zone *SZone, domainId string, capa *SCapabilities) {
|
||||
capa.Brands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.True, "")
|
||||
capa.ComputeEngineBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.True, cloudprovider.CLOUD_CAPABILITY_COMPUTE)
|
||||
capa.RdsEngineBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.True, cloudprovider.CLOUD_CAPABILITY_RDS)
|
||||
capa.RedisEngineBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.True, cloudprovider.CLOUD_CAPABILITY_CACHE)
|
||||
capa.NetworkManageBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.True, cloudprovider.CLOUD_CAPABILITY_NETWORK)
|
||||
capa.ObjectStorageBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.True, cloudprovider.CLOUD_CAPABILITY_OBJECTSTORE)
|
||||
capa.CloudIdBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.True, cloudprovider.CLOUD_CAPABILITY_CLOUDID)
|
||||
capa.PublicIpBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.True, cloudprovider.CLOUD_CAPABILITY_PUBLIC_IP)
|
||||
capa.LoadbalancerEngineBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.True, cloudprovider.CLOUD_CAPABILITY_LOADBALANCER)
|
||||
capa.SamlAuthBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.True, cloudprovider.CLOUD_CAPABILITY_SAML_AUTH)
|
||||
capa.NatBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.True, cloudprovider.CLOUD_CAPABILITY_NAT)
|
||||
capa.NasBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.True, cloudprovider.CLOUD_CAPABILITY_NAS)
|
||||
capa.WafBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.True, cloudprovider.CLOUD_CAPABILITY_WAF)
|
||||
capa.CdnBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.True, cloudprovider.CLOUD_CAPABILITY_CDN)
|
||||
brands, err := CloudaccountManager.getBrandsOfCapability(region, zone, domainId)
|
||||
if err != nil {
|
||||
log.Errorf("getBrandsOfCapability: %v", err)
|
||||
}
|
||||
brandMaps := map[string]map[string]bool{}
|
||||
for _, brand := range brands {
|
||||
_, ok := brandMaps[brand.Brand]
|
||||
if !ok {
|
||||
brandMaps[brand.Brand] = map[string]bool{}
|
||||
}
|
||||
_, ok = brandMaps[brand.Brand][brand.Capability]
|
||||
if !ok {
|
||||
brandMaps[brand.Brand][brand.Capability] = brand.Enabled
|
||||
}
|
||||
if brand.Enabled {
|
||||
brandMaps[brand.Brand][brand.Capability] = true
|
||||
}
|
||||
}
|
||||
|
||||
if utils.IsInStringArray(api.HYPERVISOR_KVM, capa.Hypervisors) || utils.IsInStringArray(api.HYPERVISOR_BAREMETAL, capa.Hypervisors) {
|
||||
capa.Brands = append(capa.Brands, api.ONECLOUD_BRAND_ONECLOUD)
|
||||
@@ -319,19 +359,72 @@ func getBrands(region *SCloudregion, zone *SZone, domainId string, capa *SCapabi
|
||||
capa.LoadbalancerEngineBrands = append(capa.LoadbalancerEngineBrands, api.ONECLOUD_BRAND_ONECLOUD)
|
||||
}
|
||||
|
||||
capa.NetworkManageBrands = append(capa.NetworkManageBrands, api.ONECLOUD_BRAND_ONECLOUD)
|
||||
var appendBrand = func(enabled *[]string, disabled *[]string, readOnlyEnabled *[]string, readOnlyDisabled *[]string, brand, capability string, isEnable, readOnly bool) {
|
||||
if readOnly {
|
||||
if isEnable {
|
||||
*readOnlyEnabled = append(*readOnlyEnabled, brand)
|
||||
if capability == cloudprovider.CLOUD_CAPABILITY_COMPUTE && !utils.IsInStringArray(brand, capa.ReadOnlyBrands) {
|
||||
capa.ReadOnlyBrands = append(capa.ReadOnlyBrands, brand)
|
||||
}
|
||||
} else {
|
||||
*readOnlyDisabled = append(*readOnlyDisabled, brand)
|
||||
if capability == cloudprovider.CLOUD_CAPABILITY_COMPUTE && !utils.IsInStringArray(brand, capa.ReadOnlyDisabledBrands) {
|
||||
capa.ReadOnlyDisabledBrands = append(capa.ReadOnlyDisabledBrands, brand)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if isEnable {
|
||||
*enabled = append(*enabled, brand)
|
||||
if capability == cloudprovider.CLOUD_CAPABILITY_COMPUTE && !utils.IsInStringArray(brand, capa.Brands) {
|
||||
capa.Brands = append(capa.Brands, brand)
|
||||
}
|
||||
} else {
|
||||
*disabled = append(*disabled, brand)
|
||||
if capability == cloudprovider.CLOUD_CAPABILITY_COMPUTE && !utils.IsInStringArray(brand, capa.DisabledBrands) {
|
||||
capa.DisabledBrands = append(capa.DisabledBrands, brand)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
capa.DisabledBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.False, "")
|
||||
capa.DisabledComputeEngineBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.False, cloudprovider.CLOUD_CAPABILITY_COMPUTE)
|
||||
capa.DisabledRdsEngineBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.False, cloudprovider.CLOUD_CAPABILITY_RDS)
|
||||
capa.DisabledNetworkManageBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.False, cloudprovider.CLOUD_CAPABILITY_NETWORK)
|
||||
capa.DisabledObjectStorageBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.False, cloudprovider.CLOUD_CAPABILITY_OBJECTSTORE)
|
||||
capa.DisabledCloudIdBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.False, cloudprovider.CLOUD_CAPABILITY_CLOUDID)
|
||||
capa.DisabledSamlAuthBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.False, cloudprovider.CLOUD_CAPABILITY_SAML_AUTH)
|
||||
capa.DisabledNatBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.False, cloudprovider.CLOUD_CAPABILITY_NAT)
|
||||
capa.DisabledNasBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.False, cloudprovider.CLOUD_CAPABILITY_NAS)
|
||||
capa.DisabledNasBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.False, cloudprovider.CLOUD_CAPABILITY_WAF)
|
||||
capa.DisabledCdnBrands, _ = CloudaccountManager.getBrandsOfCapability(region, zone, domainId, tristate.False, cloudprovider.CLOUD_CAPABILITY_CDN)
|
||||
for brand, info := range brandMaps {
|
||||
for capability, enabled := range info {
|
||||
readOnly := false
|
||||
if strings.HasSuffix(capability, cloudprovider.READ_ONLY_SUFFIX) {
|
||||
readOnly = true
|
||||
capability = strings.TrimSuffix(capability, cloudprovider.READ_ONLY_SUFFIX)
|
||||
}
|
||||
switch capability {
|
||||
case cloudprovider.CLOUD_CAPABILITY_COMPUTE:
|
||||
appendBrand(&capa.ComputeEngineBrands, &capa.DisabledComputeEngineBrands, &capa.ReadOnlyComputeEngineBrands, &capa.ReadOnlyDisabledComputeEngineBrands, brand, capability, enabled, readOnly)
|
||||
case cloudprovider.CLOUD_CAPABILITY_RDS:
|
||||
appendBrand(&capa.RdsEngineBrands, &capa.DisabledRdsEngineBrands, &capa.ReadOnlyRdsEngineBrands, &capa.ReadOnlyDisabledRdsEngineBrands, brand, capability, enabled, readOnly)
|
||||
case cloudprovider.CLOUD_CAPABILITY_CACHE:
|
||||
appendBrand(&capa.RedisEngineBrands, &capa.DisabledRedisEngineBrands, &capa.ReadOnlyRedisEngineBrands, &capa.ReadOnlyDisabledRedisEngineBrands, brand, capability, enabled, readOnly)
|
||||
case cloudprovider.CLOUD_CAPABILITY_NETWORK:
|
||||
appendBrand(&capa.NetworkManageBrands, &capa.DisabledNetworkManageBrands, &capa.ReadOnlyNetworkManageBrands, &capa.ReadOnlyDisabledNetworkManageBrands, brand, capability, enabled, readOnly)
|
||||
case cloudprovider.CLOUD_CAPABILITY_OBJECTSTORE:
|
||||
appendBrand(&capa.ObjectStorageBrands, &capa.DisabledObjectStorageBrands, &capa.ReadOnlyObjectStorageBrands, &capa.ReadOnlyDisabledObjectStorageBrands, brand, capability, enabled, readOnly)
|
||||
case cloudprovider.CLOUD_CAPABILITY_CLOUDID:
|
||||
appendBrand(&capa.CloudIdBrands, &capa.DisabledCloudIdBrands, &capa.ReadOnlyCloudIdBrands, &capa.ReadOnlyDisabledCloudIdBrands, brand, capability, enabled, readOnly)
|
||||
case cloudprovider.CLOUD_CAPABILITY_PUBLIC_IP:
|
||||
appendBrand(&capa.PublicIpBrands, &capa.DisabledPublicIpBrands, &capa.ReadOnlyPublicIpBrands, &capa.ReadOnlyDisabledPublicIpBrands, brand, capability, enabled, readOnly)
|
||||
case cloudprovider.CLOUD_CAPABILITY_LOADBALANCER:
|
||||
appendBrand(&capa.LoadbalancerEngineBrands, &capa.DisabledLoadbalancerEngineBrands, &capa.ReadOnlyLoadbalancerEngineBrands, &capa.ReadOnlyDisabledLoadbalancerEngineBrands, brand, capability, enabled, readOnly)
|
||||
case cloudprovider.CLOUD_CAPABILITY_SAML_AUTH:
|
||||
appendBrand(&capa.SamlAuthBrands, &capa.DisabledSamlAuthBrands, &capa.ReadOnlySamlAuthBrands, &capa.ReadOnlyDisabledSamlAuthBrands, brand, capability, enabled, readOnly)
|
||||
case cloudprovider.CLOUD_CAPABILITY_NAT:
|
||||
appendBrand(&capa.NatBrands, &capa.DisabledNatBrands, &capa.ReadOnlyNatBrands, &capa.ReadOnlyDisabledNatBrands, brand, capability, enabled, readOnly)
|
||||
case cloudprovider.CLOUD_CAPABILITY_NAS:
|
||||
appendBrand(&capa.NasBrands, &capa.DisabledNasBrands, &capa.ReadOnlyNasBrands, &capa.ReadOnlyDisabledNasBrands, brand, capability, enabled, readOnly)
|
||||
case cloudprovider.CLOUD_CAPABILITY_WAF:
|
||||
appendBrand(&capa.WafBrands, &capa.DisabledWafBrands, &capa.ReadOnlyWafBrands, &capa.ReadOnlyDisabledWafBrands, brand, capability, enabled, readOnly)
|
||||
case cloudprovider.CLOUD_CAPABILITY_CDN:
|
||||
appendBrand(&capa.CdnBrands, &capa.DisabledCdnBrands, &capa.ReadOnlyCdnBrands, &capa.ReadOnlyDisabledCdnBrands, brand, capability, enabled, readOnly)
|
||||
default:
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
@@ -2509,16 +2509,9 @@ func (manager *SCloudaccountManager) queryCloudAccountByCapability(region *SClou
|
||||
providers := CloudproviderManager.Query().SubQuery()
|
||||
q := manager.Query()
|
||||
q = q.Join(providers, sqlchemy.Equals(q.Field("id"), providers.Field("cloudaccount_id")))
|
||||
if len(capability) > 0 {
|
||||
cloudproviderCapabilities := CloudproviderCapabilityManager.Query().SubQuery()
|
||||
q = q.Join(cloudproviderCapabilities, sqlchemy.Equals(providers.Field("id"), cloudproviderCapabilities.Field("cloudprovider_id")))
|
||||
q = q.Filter(sqlchemy.Equals(cloudproviderCapabilities.Field("capability"), capability))
|
||||
}
|
||||
if enabled.IsTrue() {
|
||||
q = q.IsTrue("enabled")
|
||||
} else if enabled.IsFalse() {
|
||||
q = q.IsFalse("enabled")
|
||||
}
|
||||
cloudproviderCapabilities := CloudproviderCapabilityManager.Query().SubQuery()
|
||||
q = q.Join(cloudproviderCapabilities, sqlchemy.Equals(providers.Field("id"), cloudproviderCapabilities.Field("cloudprovider_id")))
|
||||
q = q.Filter(sqlchemy.Equals(cloudproviderCapabilities.Field("capability"), capability))
|
||||
if zone != nil {
|
||||
region, _ = zone.GetRegion()
|
||||
}
|
||||
@@ -2529,42 +2522,54 @@ func (manager *SCloudaccountManager) queryCloudAccountByCapability(region *SClou
|
||||
}
|
||||
if len(domainId) > 0 {
|
||||
q = manager.filterByDomainId(q, domainId)
|
||||
/*q = q.Filter(sqlchemy.OR(
|
||||
sqlchemy.AND(
|
||||
sqlchemy.Equals(q.Field("share_mode"), api.CLOUD_ACCOUNT_SHARE_MODE_ACCOUNT_DOMAIN),
|
||||
sqlchemy.Equals(q.Field("domain_id"), domainId),
|
||||
),
|
||||
sqlchemy.Equals(q.Field("share_mode"), api.CLOUD_ACCOUNT_SHARE_MODE_SYSTEM),
|
||||
sqlchemy.AND(
|
||||
sqlchemy.Equals(q.Field("share_mode"), api.CLOUD_ACCOUNT_SHARE_MODE_PROVIDER_DOMAIN),
|
||||
sqlchemy.Equals(providers.Field("domain_id"), domainId),
|
||||
),
|
||||
))*/
|
||||
}
|
||||
return q
|
||||
}
|
||||
|
||||
func (manager *SCloudaccountManager) getBrandsOfCapability(region *SCloudregion, zone *SZone, domainId string, enabled tristate.TriState, capability string) ([]string, error) {
|
||||
subq := manager.queryCloudAccountByCapability(region, zone, domainId, enabled, capability).SubQuery()
|
||||
q := subq.Query(subq.Field("brand")).Distinct()
|
||||
rows, err := q.Rows()
|
||||
if err != nil {
|
||||
if errors.Cause(err) != sql.ErrNoRows {
|
||||
return nil, errors.Wrap(err, "rows")
|
||||
}
|
||||
return []string{}, nil
|
||||
type sBrandCapability struct {
|
||||
Brand string
|
||||
Enabled bool
|
||||
Capability string
|
||||
}
|
||||
|
||||
func (manager *SCloudaccountManager) getBrandsOfCapability(region *SCloudregion, zone *SZone, domainId string) ([]sBrandCapability, error) {
|
||||
accounts := manager.Query("id", "enabled", "brand")
|
||||
if len(domainId) > 0 {
|
||||
accounts = manager.filterByDomainId(accounts, domainId)
|
||||
}
|
||||
ret := make([]string, 0)
|
||||
defer rows.Close()
|
||||
for rows.Next() {
|
||||
var brand string
|
||||
err := rows.Scan(&brand)
|
||||
|
||||
accountSQ := accounts.SubQuery()
|
||||
providers := CloudproviderManager.Query().SubQuery()
|
||||
q := CloudproviderCapabilityManager.Query("capability")
|
||||
|
||||
q.AppendField(accountSQ.Field("enabled"))
|
||||
q.AppendField(accountSQ.Field("brand"))
|
||||
|
||||
q = q.Join(providers, sqlchemy.Equals(q.Field("cloudprovider_id"), providers.Field("id")))
|
||||
q = q.Join(accountSQ, sqlchemy.Equals(providers.Field("cloudaccount_id"), accountSQ.Field("id")))
|
||||
|
||||
if zone != nil {
|
||||
var err error
|
||||
region, err = zone.GetRegion()
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "rows.Scan")
|
||||
return nil, errors.Wrapf(err, "GetRegion")
|
||||
}
|
||||
ret = append(ret, brand)
|
||||
}
|
||||
return ret, nil
|
||||
if region != nil {
|
||||
providerregions := CloudproviderRegionManager.Query().SubQuery()
|
||||
q = q.Join(providerregions, sqlchemy.Equals(q.Field("cloudprovider_id"), providerregions.Field("cloudprovider_id"))).Filter(
|
||||
sqlchemy.Equals(providerregions.Field("cloudregion_id"), region.Id),
|
||||
)
|
||||
}
|
||||
|
||||
q = q.Distinct()
|
||||
|
||||
result := []sBrandCapability{}
|
||||
err := q.All(&result)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "q.All")
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (account *SCloudaccount) getAccountShareInfo() apis.SAccountShareInfo {
|
||||
|
||||
@@ -70,6 +70,7 @@ func (manager *SCloudproviderCapabilityManager) setRegionCapabilities(ctx contex
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "manager.getCapabilities")
|
||||
}
|
||||
|
||||
oldCapas := stringutils2.NewSortedStrings(oldCapabilities)
|
||||
newCapas := stringutils2.NewSortedStrings(capabilities)
|
||||
deleted, _, added := stringutils2.Split(oldCapas, newCapas)
|
||||
|
||||
@@ -689,9 +689,9 @@ func (region *SAliyunClient) GetCapabilities() []string {
|
||||
cloudprovider.CLOUD_CAPABILITY_NAT,
|
||||
cloudprovider.CLOUD_CAPABILITY_NAS,
|
||||
cloudprovider.CLOUD_CAPABILITY_WAF,
|
||||
cloudprovider.CLOUD_CAPABILITY_MONGO_DB,
|
||||
cloudprovider.CLOUD_CAPABILITY_ES,
|
||||
cloudprovider.CLOUD_CAPABILITY_KAFKA,
|
||||
cloudprovider.CLOUD_CAPABILITY_MONGO_DB + cloudprovider.READ_ONLY_SUFFIX,
|
||||
cloudprovider.CLOUD_CAPABILITY_ES + cloudprovider.READ_ONLY_SUFFIX,
|
||||
cloudprovider.CLOUD_CAPABILITY_KAFKA + cloudprovider.READ_ONLY_SUFFIX,
|
||||
}
|
||||
return caps
|
||||
}
|
||||
|
||||
@@ -600,8 +600,8 @@ func (self *SAwsClient) GetCapabilities() []string {
|
||||
cloudprovider.CLOUD_CAPABILITY_NETWORK,
|
||||
cloudprovider.CLOUD_CAPABILITY_LOADBALANCER,
|
||||
cloudprovider.CLOUD_CAPABILITY_OBJECTSTORE,
|
||||
cloudprovider.CLOUD_CAPABILITY_RDS,
|
||||
cloudprovider.CLOUD_CAPABILITY_CACHE,
|
||||
cloudprovider.CLOUD_CAPABILITY_RDS + cloudprovider.READ_ONLY_SUFFIX,
|
||||
cloudprovider.CLOUD_CAPABILITY_CACHE + cloudprovider.READ_ONLY_SUFFIX,
|
||||
// cloudprovider.CLOUD_CAPABILITY_EVENT,
|
||||
cloudprovider.CLOUD_CAPABILITY_CLOUDID,
|
||||
cloudprovider.CLOUD_CAPABILITY_DNSZONE,
|
||||
|
||||
@@ -985,16 +985,16 @@ func (self *SAzureClient) GetCapabilities() []string {
|
||||
cloudprovider.CLOUD_CAPABILITY_PROJECT,
|
||||
cloudprovider.CLOUD_CAPABILITY_COMPUTE,
|
||||
cloudprovider.CLOUD_CAPABILITY_NETWORK,
|
||||
cloudprovider.CLOUD_CAPABILITY_LOADBALANCER,
|
||||
cloudprovider.CLOUD_CAPABILITY_LOADBALANCER + cloudprovider.READ_ONLY_SUFFIX,
|
||||
cloudprovider.CLOUD_CAPABILITY_OBJECTSTORE,
|
||||
cloudprovider.CLOUD_CAPABILITY_RDS,
|
||||
cloudprovider.CLOUD_CAPABILITY_CACHE,
|
||||
cloudprovider.CLOUD_CAPABILITY_RDS + cloudprovider.READ_ONLY_SUFFIX,
|
||||
cloudprovider.CLOUD_CAPABILITY_CACHE + cloudprovider.READ_ONLY_SUFFIX,
|
||||
cloudprovider.CLOUD_CAPABILITY_EVENT,
|
||||
cloudprovider.CLOUD_CAPABILITY_CLOUDID,
|
||||
cloudprovider.CLOUD_CAPABILITY_SAML_AUTH,
|
||||
cloudprovider.CLOUD_CAPABILITY_WAF,
|
||||
cloudprovider.CLOUD_CAPABILITY_CACHE,
|
||||
cloudprovider.CLOUD_CAPABILITY_APP,
|
||||
cloudprovider.CLOUD_CAPABILITY_CACHE + cloudprovider.READ_ONLY_SUFFIX,
|
||||
cloudprovider.CLOUD_CAPABILITY_APP + cloudprovider.READ_ONLY_SUFFIX,
|
||||
}
|
||||
return caps
|
||||
}
|
||||
|
||||
@@ -237,7 +237,7 @@ func (self *SCloudpodsClient) GetRegions() ([]SRegion, error) {
|
||||
|
||||
func (self *SCloudpodsClient) GetCapabilities() []string {
|
||||
return []string{
|
||||
cloudprovider.CLOUD_CAPABILITY_PROJECT,
|
||||
cloudprovider.CLOUD_CAPABILITY_PROJECT + cloudprovider.READ_ONLY_SUFFIX,
|
||||
cloudprovider.CLOUD_CAPABILITY_COMPUTE,
|
||||
cloudprovider.CLOUD_CAPABILITY_NETWORK,
|
||||
}
|
||||
|
||||
@@ -144,8 +144,8 @@ func (ec *SEcloudClient) GetRegionById(id string) (*SRegion, error) {
|
||||
|
||||
func (ec *SEcloudClient) GetCapabilities() []string {
|
||||
caps := []string{
|
||||
cloudprovider.CLOUD_CAPABILITY_COMPUTE,
|
||||
cloudprovider.CLOUD_CAPABILITY_NETWORK,
|
||||
cloudprovider.CLOUD_CAPABILITY_COMPUTE + cloudprovider.READ_ONLY_SUFFIX,
|
||||
cloudprovider.CLOUD_CAPABILITY_NETWORK + cloudprovider.READ_ONLY_SUFFIX,
|
||||
}
|
||||
return caps
|
||||
}
|
||||
|
||||
@@ -211,10 +211,14 @@ func (p *SJdcloudProvider) GetCloudRegionExternalIdPrefix() string {
|
||||
}
|
||||
|
||||
func (p *SJdcloudProvider) GetCapabilities() []string {
|
||||
iRegions := p.GetIRegions()
|
||||
if len(iRegions) > 0 {
|
||||
return iRegions[0].GetCapabilities()
|
||||
}
|
||||
caps := []string{
|
||||
cloudprovider.CLOUD_CAPABILITY_COMPUTE,
|
||||
cloudprovider.CLOUD_CAPABILITY_NETWORK,
|
||||
cloudprovider.CLOUD_CAPABILITY_RDS,
|
||||
cloudprovider.CLOUD_CAPABILITY_COMPUTE + cloudprovider.READ_ONLY_SUFFIX,
|
||||
cloudprovider.CLOUD_CAPABILITY_NETWORK + cloudprovider.READ_ONLY_SUFFIX,
|
||||
cloudprovider.CLOUD_CAPABILITY_RDS + cloudprovider.READ_ONLY_SUFFIX,
|
||||
}
|
||||
return caps
|
||||
}
|
||||
|
||||
@@ -337,7 +337,8 @@ func (r *SRegion) GetProvider() string {
|
||||
|
||||
func (r *SRegion) GetCapabilities() []string {
|
||||
return []string{
|
||||
cloudprovider.CLOUD_CAPABILITY_COMPUTE,
|
||||
cloudprovider.CLOUD_CAPABILITY_NETWORK,
|
||||
cloudprovider.CLOUD_CAPABILITY_COMPUTE + cloudprovider.READ_ONLY_SUFFIX,
|
||||
cloudprovider.CLOUD_CAPABILITY_NETWORK + cloudprovider.READ_ONLY_SUFFIX,
|
||||
cloudprovider.CLOUD_CAPABILITY_RDS + cloudprovider.READ_ONLY_SUFFIX,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1097,10 +1097,10 @@ func (self *SQcloudClient) GetCapabilities() []string {
|
||||
cloudprovider.CLOUD_CAPABILITY_PUBLIC_IP,
|
||||
cloudprovider.CLOUD_CAPABILITY_INTERVPCNETWORK,
|
||||
cloudprovider.CLOUD_CAPABILITY_SAML_AUTH,
|
||||
cloudprovider.CLOUD_CAPABILITY_MONGO_DB,
|
||||
cloudprovider.CLOUD_CAPABILITY_ES,
|
||||
cloudprovider.CLOUD_CAPABILITY_KAFKA,
|
||||
cloudprovider.CLOUD_CAPABILITY_CDN,
|
||||
cloudprovider.CLOUD_CAPABILITY_MONGO_DB + cloudprovider.READ_ONLY_SUFFIX,
|
||||
cloudprovider.CLOUD_CAPABILITY_ES + cloudprovider.READ_ONLY_SUFFIX,
|
||||
cloudprovider.CLOUD_CAPABILITY_KAFKA + cloudprovider.READ_ONLY_SUFFIX,
|
||||
cloudprovider.CLOUD_CAPABILITY_CDN + cloudprovider.READ_ONLY_SUFFIX,
|
||||
}
|
||||
return caps
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user