From 1e4898f18a4c695ec8f48b488c29ff49df76caee Mon Sep 17 00:00:00 2001 From: Zexi Date: Mon, 15 Apr 2019 15:05:44 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20capability=20=E6=8E=A5=E5=8F=A3=E6=B2=A1?= =?UTF-8?q?=E6=9C=89=E8=80=83=E8=99=91=20cloudaccount=20=E7=9A=84=E7=A6=81?= =?UTF-8?q?=E7=94=A8=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/compute/models/capabilities.go | 14 ++++++++------ pkg/compute/models/cloudproviders.go | 22 ++++++++++++++++++++++ 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/pkg/compute/models/capabilities.go b/pkg/compute/models/capabilities.go index 788b812172..f4655d6113 100644 --- a/pkg/compute/models/capabilities.go +++ b/pkg/compute/models/capabilities.go @@ -72,7 +72,7 @@ func getRegionZoneSubq(region *SCloudregion) *sqlchemy.SSubQuery { } func getHypervisors(region *SCloudregion, zone *SZone) []string { - q := HostManager.Query("host_type") + q := HostManager.Query("host_type", "manager_id") if region != nil { subq := getRegionZoneSubq(region) q = q.Filter(sqlchemy.In(q.Field("zone_id"), subq)) @@ -92,8 +92,9 @@ func getHypervisors(region *SCloudregion, zone *SZone) []string { hypervisors := make([]string, 0) for rows.Next() { var hostType string - rows.Scan(&hostType) - if len(hostType) > 0 { + var managerId string + rows.Scan(&hostType, &managerId) + if len(hostType) > 0 && IsProviderAccountEnabled(managerId) { hypervisors = append(hypervisors, HOSTTYPE_HYPERVISOR[hostType]) } } @@ -101,7 +102,7 @@ func getHypervisors(region *SCloudregion, zone *SZone) []string { } func getResourceTypes(region *SCloudregion, zone *SZone) []string { - q := HostManager.Query("resource_type") + q := HostManager.Query("resource_type", "manager_id") if region != nil { subq := getRegionZoneSubq(region) q = q.Filter(sqlchemy.In(q.Field("zone_id"), subq)) @@ -120,8 +121,9 @@ func getResourceTypes(region *SCloudregion, zone *SZone) []string { resourceTypes := make([]string, 0) for rows.Next() { var resType string - rows.Scan(&resType) - if len(resType) > 0 { + var managerId string + rows.Scan(&resType, &managerId) + if len(resType) > 0 && IsProviderAccountEnabled(managerId) { resourceTypes = append(resourceTypes, resType) } } diff --git a/pkg/compute/models/cloudproviders.go b/pkg/compute/models/cloudproviders.go index b8768974ec..9638677022 100644 --- a/pkg/compute/models/cloudproviders.go +++ b/pkg/compute/models/cloudproviders.go @@ -600,6 +600,28 @@ func (manager *SCloudproviderManager) FetchCloudproviderById(providerId string) return providerObj.(*SCloudprovider) } +func IsProviderAccountEnabled(providerId string) bool { + if len(providerId) == 0 { + return true + } + return CloudproviderManager.IsProviderAccountEnabled(providerId) +} + +func (manager *SCloudproviderManager) IsProviderAccountEnabled(providerId string) bool { + providerObj := manager.FetchCloudproviderById(providerId) + if providerObj == nil { + return false + } + if !providerObj.Enabled { + return false + } + account := providerObj.GetCloudaccount() + if account == nil { + return false + } + return account.Enabled +} + func (manager *SCloudproviderManager) FetchCloudproviderByIdOrName(providerId string) *SCloudprovider { providerObj, err := manager.FetchByIdOrName(nil, providerId) if err != nil {