diff --git a/pkg/compute/skus/skus.go b/pkg/compute/skus/skus.go index 23cd3ce508..823d1fd3bc 100644 --- a/pkg/compute/skus/skus.go +++ b/pkg/compute/skus/skus.go @@ -208,6 +208,9 @@ func (self *SkusZone) getExternalZone() (string, string, string) { if len(parts) == 3 { // provider, region, zone return parts[0], parts[1], parts[2] + } else if len(parts) == 2 && parts[0] == models.CLOUD_PROVIDER_AZURE { + // azure 没有zone的概念 + return parts[0], parts[1], parts[1] } log.Debugf("SkusZone invalid external zone id %s", self.ExternalZoneId) @@ -235,9 +238,17 @@ func (self *SkusZoneList) initData(provider string, region models.SCloudregion, } } -func (self *SkusZoneList) Refresh() error { - provideIds := cloudprovider.GetRegistedProviderIds() - for _, p := range provideIds { +func (self *SkusZoneList) Refresh(providerIds *[]string) error { + self.Data = []*SkusZone{} + + var pIds []string + if providerIds == nil { + pIds = cloudprovider.GetRegistedProviderIds() + } else { + pIds = *providerIds + } + + for _, p := range pIds { regions, e := models.CloudregionManager.GetRegionByProvider(p) if e != nil { return e @@ -288,7 +299,7 @@ func (self *SkusZoneList) SyncToLocalDB() error { func SyncSkus(ctx context.Context, userCred mcclient.TokenCredential) { skus := SkusZoneList{} - if e := skus.Refresh(); e != nil { + if e := skus.Refresh(nil); e != nil { log.Errorf("SyncSkus refresh failed, %s", e.Error()) } @@ -296,3 +307,17 @@ func SyncSkus(ctx context.Context, userCred mcclient.TokenCredential) { log.Errorf("SyncSkus sync to local db failed, %s", e.Error()) } } + + +func SyncSkusByProviderIds(providerIds []string) error { + skus := SkusZoneList{} + if e := skus.Refresh(&providerIds); e != nil { + return fmt.Errorf("SyncSkus refresh failed, %s", e.Error()) + } + + if e := skus.SyncToLocalDB(); e != nil { + return fmt.Errorf("SyncSkus sync to local db failed, %s", e.Error()) + } + + return nil +} \ No newline at end of file diff --git a/pkg/compute/tasks/cloud_account_sync_task.go b/pkg/compute/tasks/cloud_account_sync_task.go index 6806cf5508..ec5c79e24c 100644 --- a/pkg/compute/tasks/cloud_account_sync_task.go +++ b/pkg/compute/tasks/cloud_account_sync_task.go @@ -7,6 +7,7 @@ import ( "yunion.io/x/onecloud/pkg/cloudcommon/db" "yunion.io/x/onecloud/pkg/cloudcommon/db/taskman" "yunion.io/x/onecloud/pkg/compute/models" + "yunion.io/x/onecloud/pkg/compute/skus" ) type CloudAccountSyncInfoTask struct { @@ -82,6 +83,11 @@ func (self *CloudAccountSyncInfoTask) OnCloudaccountSyncComplete(ctx context.Con if account != nil { account.SetStatus(self.UserCred, models.CLOUD_PROVIDER_CONNECTED, "") } + + // sync skus + if err := skus.SyncSkusByProviderIds([]string{cloudprovider.GetId()}); err != nil { + self.SetStageFailed(ctx, err.Error()) + } } self.SetStageComplete(ctx, nil) } diff --git a/pkg/util/aws/image.go b/pkg/util/aws/image.go index 62fe86210a..2df0ae1f4b 100644 --- a/pkg/util/aws/image.go +++ b/pkg/util/aws/image.go @@ -87,7 +87,6 @@ func (self *SImage) GetStatus() string { } func (self *SImage) Refresh() error { - // todo: GetImage new, err := self.storageCache.region.GetImage(self.ImageId) if err != nil { return err @@ -173,7 +172,11 @@ func (self *SRegion) ExportImage(instanceId string, imageId string) (*ImageExpor } func (self *SRegion) GetImage(imageId string) (*SImage, error) { - images, _, err := self.GetImages("", ImageOwnerSelf, []string{imageId}, "", 0, 1) + if len(imageId) == 0 { + return nil, fmt.Errorf("image id should not be empty") + } + + images, _, err := self.GetImages("", ImageOwnerType(""), []string{imageId}, "", 0, 1) if err != nil { return nil, err } @@ -184,7 +187,11 @@ func (self *SRegion) GetImage(imageId string) (*SImage, error) { } func (self *SRegion) GetImageByName(name string) (*SImage, error) { - images, _, err := self.GetImages("", ImageOwnerSelf, nil, name, 0, 1) + if len(name) == 0 { + return nil, fmt.Errorf("image name should not be empty") + } + + images, _, err := self.GetImages("", ImageOwnerType(""), nil, name, 0, 1) if err != nil { return nil, err }