mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-19 02:37:24 +08:00
Merge pull request #1441 from swordqiu/hotfix/qj-add-capability-brands
feature: capability add brands
This commit is contained in:
@@ -133,7 +133,8 @@ const (
|
||||
var VM_RUNNING_STATUS = []string{VM_START_START, VM_STARTING, VM_RUNNING, VM_BLOCK_STREAM}
|
||||
var VM_CREATING_STATUS = []string{VM_CREATE_NETWORK, VM_CREATE_DISK, VM_START_DEPLOY, VM_DEPLOYING}
|
||||
|
||||
var HYPERVISORS = []string{HYPERVISOR_KVM,
|
||||
var HYPERVISORS = []string{
|
||||
HYPERVISOR_KVM,
|
||||
HYPERVISOR_BAREMETAL,
|
||||
HYPERVISOR_ESXI,
|
||||
HYPERVISOR_CONTAINER,
|
||||
@@ -147,6 +148,12 @@ var HYPERVISORS = []string{HYPERVISOR_KVM,
|
||||
HYPERVISOR_ZSTACK,
|
||||
}
|
||||
|
||||
var ONECLOUD_HYPERVISORS = []string{
|
||||
HYPERVISOR_BAREMETAL,
|
||||
HYPERVISOR_KVM,
|
||||
HYPERVISOR_CONTAINER,
|
||||
}
|
||||
|
||||
var PUBLIC_CLOUD_HYPERVISORS = []string{
|
||||
HYPERVISOR_ALIYUN,
|
||||
HYPERVISOR_AWS,
|
||||
|
||||
@@ -35,6 +35,7 @@ import (
|
||||
|
||||
type SCapabilities struct {
|
||||
Hypervisors []string `json:",allowempty"`
|
||||
Brands []string `json:",allowempty"`
|
||||
ResourceTypes []string `json:",allowempty"`
|
||||
StorageTypes []string `json:",allowempty"`
|
||||
DataStorageTypes []string `json:",allowempty"`
|
||||
@@ -75,6 +76,7 @@ func GetCapabilities(ctx context.Context, userCred mcclient.TokenCredential, que
|
||||
domainId = ""
|
||||
}
|
||||
capa.Hypervisors = getHypervisors(region, zone, domainId)
|
||||
capa.Brands = getBrands(region, zone, domainId, capa.Hypervisors)
|
||||
capa.ResourceTypes = getResourceTypes(region, zone, domainId)
|
||||
capa.StorageTypes = getStorageTypes(region, zone, true, domainId)
|
||||
capa.DataStorageTypes = getStorageTypes(region, zone, false, domainId)
|
||||
@@ -125,6 +127,47 @@ func getDomainManagerSubq(domainId string) *sqlchemy.SSubQuery {
|
||||
return q.SubQuery()
|
||||
}
|
||||
|
||||
func getBrands(region *SCloudregion, zone *SZone, domainId string, hypervisors []string) []string {
|
||||
q := CloudaccountManager.Query("brand").IsTrue("enabled")
|
||||
if zone != nil {
|
||||
region = zone.GetRegion()
|
||||
}
|
||||
if region != nil {
|
||||
providers := CloudproviderManager.Query().SubQuery()
|
||||
providerregions := CloudproviderRegionManager.Query().SubQuery()
|
||||
q = q.Join(providers, sqlchemy.Equals(q.Field("id"), providers.Field("cloudaccount_id")))
|
||||
q = q.Join(providerregions, sqlchemy.Equals(providers.Field("id"), providerregions.Field("cloudprovider_id")))
|
||||
q = q.Filter(sqlchemy.Equals(providerregions.Field("region_id"), region.Id))
|
||||
}
|
||||
if len(domainId) > 0 {
|
||||
q = q.Filter(sqlchemy.OR(
|
||||
sqlchemy.IsTrue(q.Field("is_public")),
|
||||
sqlchemy.Equals(q.Field("domain_id"), domainId),
|
||||
))
|
||||
}
|
||||
q = q.Distinct()
|
||||
rows, err := q.Rows()
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
defer rows.Close()
|
||||
brands := make([]string, 0)
|
||||
for rows.Next() {
|
||||
var brand string
|
||||
rows.Scan(&brand)
|
||||
if len(brand) > 0 {
|
||||
brands = append(brands, brand)
|
||||
}
|
||||
}
|
||||
for _, hyper := range api.ONECLOUD_HYPERVISORS {
|
||||
if utils.IsInStringArray(hyper, hypervisors) {
|
||||
brands = append(brands, api.CLOUD_PROVIDER_ONECLOUD)
|
||||
break
|
||||
}
|
||||
}
|
||||
return brands
|
||||
}
|
||||
|
||||
func getHypervisors(region *SCloudregion, zone *SZone, domainId string) []string {
|
||||
q := HostManager.Query("host_type", "manager_id")
|
||||
if region != nil {
|
||||
|
||||
Reference in New Issue
Block a user