fix create server sku not found error

This commit is contained in:
ioito
2019-07-06 15:47:56 +08:00
parent e86140f2d9
commit 59871ed340
4 changed files with 21 additions and 31 deletions
+1 -1
View File
@@ -1851,7 +1851,7 @@ func (self *SGuest) PerformChangeConfig(ctx context.Context, userCred mcclient.T
confs := jsonutils.NewDict()
skuId := jsonutils.GetAnyString(data, []string{"instance_type", "sku", "flavor"})
if len(skuId) > 0 {
sku, err := ServerSkuManager.FetchSkuByNameAndHypervisor(skuId, self.GetHypervisor(), true)
sku, err := ServerSkuManager.FetchSkuByNameAndProvider(skuId, self.GetDriver().GetProvider(), true)
if err != nil {
return nil, err
}
+4 -3
View File
@@ -980,7 +980,8 @@ func (manager *SGuestManager) ValidateCreateData(ctx context.Context, userCred m
var sku *SServerSku
skuName := input.InstanceType
if len(skuName) > 0 {
sku, err := ServerSkuManager.FetchSkuByNameAndHypervisor(skuName, hypervisor, true)
provider := GetDriver(input.Hypervisor).GetProvider()
sku, err := ServerSkuManager.FetchSkuByNameAndProvider(skuName, provider, true)
if err != nil {
return nil, err
}
@@ -2032,7 +2033,7 @@ func (self *SGuest) syncWithCloudVM(ctx context.Context, userCred mcclient.Token
}
if extVM.GetHypervisor() == api.HYPERVISOR_AWS {
sku, err := ServerSkuManager.FetchSkuByNameAndHypervisor(instanceType, extVM.GetHypervisor(), false)
sku, err := ServerSkuManager.FetchSkuByNameAndProvider(instanceType, api.CLOUD_PROVIDER_AWS, false)
if err == nil {
self.VmemSize = sku.MemorySizeMB
} else {
@@ -2136,7 +2137,7 @@ func (manager *SGuestManager) newCloudVM(ctx context.Context, userCred mcclient.
}
if extVM.GetHypervisor() == api.HYPERVISOR_AWS {
sku, err := ServerSkuManager.FetchSkuByNameAndHypervisor(instanceType, extVM.GetHypervisor(), false)
sku, err := ServerSkuManager.FetchSkuByNameAndProvider(instanceType, api.CLOUD_PROVIDER_AWS, false)
if err == nil {
guest.VmemSize = sku.MemorySizeMB
} else {
+13 -24
View File
@@ -763,25 +763,19 @@ func (manager *SServerSkuManager) ListItemFilter(ctx context.Context, q *sqlchem
return q, err
}
func (manager *SServerSkuManager) FetchSkuByNameAndHypervisor(name string, hypervisor string, checkConsistency bool) (*SServerSku, error) {
func (manager *SServerSkuManager) FetchSkuByNameAndProvider(name string, provider string, checkConsistency bool) (*SServerSku, error) {
q := manager.Query()
q = q.Equals("name", name)
if len(hypervisor) > 0 {
switch hypervisor {
case api.HYPERVISOR_BAREMETAL, api.HYPERVISOR_CONTAINER:
return nil, httperrors.NewNotImplementedError("%s not supported", hypervisor)
case api.HYPERVISOR_KVM, api.HYPERVISOR_ESXI, api.HYPERVISOR_XEN, api.HYPERVISOR_HYPERV:
q = q.Filter(sqlchemy.OR(
sqlchemy.IsEmpty(q.Field("provider")),
sqlchemy.IsNull(q.Field("provider")),
sqlchemy.Equals(q.Field("provider"), hypervisor),
))
default:
q = q.Equals("provider", hypervisor)
}
} else {
q = q.IsEmpty("provider")
switch provider {
case api.CLOUD_PROVIDER_ONECLOUD, api.CLOUD_PROVIDER_VMWARE, "":
q = q.Filter(sqlchemy.OR(
sqlchemy.IsNullOrEmpty(q.Field("provider")),
sqlchemy.Equals(q.Field("provider"), api.CLOUD_PROVIDER_ONECLOUD),
))
default:
q = q.Equals("provider", provider)
}
skus := make([]SServerSku, 0)
err := db.FetchModelObjects(manager, q, &skus)
if err != nil {
@@ -789,7 +783,7 @@ func (manager *SServerSkuManager) FetchSkuByNameAndHypervisor(name string, hyper
return nil, err
}
if len(skus) == 0 {
log.Errorf("no sku found for %s %s", name, hypervisor)
log.Errorf("no sku found for %s %s", name, provider)
return nil, httperrors.NewResourceNotFoundError2(manager.Keyword(), name)
}
if len(skus) == 1 {
@@ -806,14 +800,9 @@ func (manager *SServerSkuManager) FetchSkuByNameAndHypervisor(name string, hyper
return &skus[0], nil
}
func (manager *SServerSkuManager) GetSkuCountByProvider(provider string) (int, error) {
func (manager *SServerSkuManager) GetPublicCloudSkuCount() (int, error) {
q := manager.Query()
if len(provider) == 0 {
q = q.IsNotEmpty("provider")
} else {
q = q.Equals("provider", provider)
}
q = q.Filter(sqlchemy.In(q.Field("provider"), cloudprovider.GetPublicProviders()))
return q.CountWithError()
}
+3 -3
View File
@@ -346,13 +346,13 @@ func (self *SkusZoneList) SyncToLocalDB() error {
// 全量同步sku列表.
func SyncSkus(ctx context.Context, userCred mcclient.TokenCredential, isStart bool) {
if isStart {
cnt, err := ServerSkuManager.GetSkuCountByProvider("")
cnt, err := ServerSkuManager.GetPublicCloudSkuCount()
if err != nil {
log.Errorf("GetSkuCountByProvider fail %s", err)
log.Errorf("GetPublicCloudSkuCount fail %s", err)
return
}
if cnt > 0 {
log.Debugf("GetSkuCountByProvider synced skus, skip...")
log.Debugf("GetPublicCloudSkuCount synced skus, skip...")
return
}
}