Merge pull request #1441 from swordqiu/hotfix/qj-add-capability-brands

feature: capability add brands
This commit is contained in:
yunion-ci-robot
2019-07-01 10:04:53 +08:00
committed by GitHub
2 changed files with 51 additions and 1 deletions
+8 -1
View File
@@ -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,
+43
View File
@@ -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 {