mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-08-31 01:35:56 +08:00
fix create server sku not found error
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
@@ -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()
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user