diff --git a/pkg/apis/compute/modelarts_pool.go b/pkg/apis/compute/modelarts_pool.go index 21a4108aba..fdaae29c02 100644 --- a/pkg/apis/compute/modelarts_pool.go +++ b/pkg/apis/compute/modelarts_pool.go @@ -46,6 +46,7 @@ type ModelartsPoolDetails struct { apis.SExternalizedResourceBase SBillingResourceBase ManagedResourceInfo + CloudregionResourceInfo } func (self ModelartsPoolDetails) GetMetricTags() map[string]string { @@ -66,6 +67,7 @@ type ModelartsPoolListInput struct { apis.VirtualResourceListInput apis.ExternalizedResourceBaseListInput ManagedResourceListInput + RegionalFilterListInput apis.DeletePreventableResourceBaseListInput } diff --git a/pkg/apis/compute/modelarts_pool_sku.go b/pkg/apis/compute/modelarts_pool_sku.go index 0a7ffe4d43..0b4e4537da 100644 --- a/pkg/apis/compute/modelarts_pool_sku.go +++ b/pkg/apis/compute/modelarts_pool_sku.go @@ -19,7 +19,7 @@ import "yunion.io/x/onecloud/pkg/apis" type ModelartsPoolSkuDetails struct { apis.EnabledStatusStandaloneResourceDetails ManagedResourceInfo - // CloudregionResourceInfo + CloudregionResourceInfo } const ( @@ -31,5 +31,6 @@ type ModelartsPoolSkuListInput struct { apis.EnabledStatusStandaloneResourceListInput apis.ExternalizedResourceBaseListInput + RegionalFilterListInput ManagedResourceListInput } diff --git a/pkg/cloudprovider/cloudprovider.go b/pkg/cloudprovider/cloudprovider.go index 9728e2c7be..04765bf32e 100644 --- a/pkg/cloudprovider/cloudprovider.go +++ b/pkg/cloudprovider/cloudprovider.go @@ -316,11 +316,6 @@ type ICloudProvider interface { CreateICloudCDNDomain(opts *CdnCreateOptions) (ICloudCDNDomain, error) GetMetrics(opts *MetricListOptions) ([]MetricValues, error) - - GetIModelartsPools() ([]ICloudModelartsPool, error) - GetIModelartsPoolById(id string) (ICloudModelartsPool, error) - CreateIModelartsPool(pool *ModelartsPoolCreateOption) (ICloudModelartsPool, error) - GetIModelartsPoolSku() ([]ICloudModelartsPoolSku, error) } func IsSupportCapability(prod ICloudProvider, capa string) bool { diff --git a/pkg/cloudprovider/resources.go b/pkg/cloudprovider/resources.go index 5928545953..df138d7024 100644 --- a/pkg/cloudprovider/resources.go +++ b/pkg/cloudprovider/resources.go @@ -194,6 +194,11 @@ type ICloudRegion interface { GetICloudKubeClusterById(id string) (ICloudKubeCluster, error) GetICloudTablestores() ([]ICloudTablestore, error) + + GetIModelartsPools() ([]ICloudModelartsPool, error) + GetIModelartsPoolById(id string) (ICloudModelartsPool, error) + CreateIModelartsPool(pool *ModelartsPoolCreateOption) (ICloudModelartsPool, error) + GetIModelartsPoolSku() ([]ICloudModelartsPoolSku, error) } type ICloudZone interface { diff --git a/pkg/compute/models/cloudsync.go b/pkg/compute/models/cloudsync.go index cd9c6125ff..2a07b236a7 100644 --- a/pkg/compute/models/cloudsync.go +++ b/pkg/compute/models/cloudsync.go @@ -1883,8 +1883,8 @@ func syncPublicCloudProviderInfo( } if cloudprovider.IsSupportModelartsPool(driver) && syncRange.NeedSyncResource(cloudprovider.CLOUD_CAPABILITY_MODELARTES) { - syncModelartsPools(ctx, userCred, syncResults, provider, driver) - syncModelartsPoolSku(ctx, userCred, syncResults, provider, driver) + syncModelartsPoolSkus(ctx, userCred, syncResults, provider, localRegion, remoteRegion) + syncModelartsPools(ctx, userCred, syncResults, provider, localRegion, remoteRegion) } return nil @@ -2347,26 +2347,26 @@ func syncTablestore(ctx context.Context, userCred mcclient.TokenCredential, sync return nil } -func syncModelartsPools(ctx context.Context, userCred mcclient.TokenCredential, syncResults SSyncResultSet, provider *SCloudprovider, driver cloudprovider.ICloudProvider) error { - ipools, err := driver.GetIModelartsPools() +func syncModelartsPools(ctx context.Context, userCred mcclient.TokenCredential, syncResults SSyncResultSet, provider *SCloudprovider, localRegion *SCloudregion, remoteRegion cloudprovider.ICloudRegion) error { + ipools, err := remoteRegion.GetIModelartsPools() if err != nil { msg := fmt.Sprintf("GetIModelartsPools for provider %s failed %s", err, ipools) log.Errorf(msg) return err } - result := provider.SyncModelartsPools(ctx, userCred, ipools) + result := localRegion.SyncModelartsPools(ctx, userCred, provider, ipools) log.Infof("SyncModelartsPools for region %s result: %s", provider.GetName(), result.Result()) return nil } -func syncModelartsPoolSkus(ctx context.Context, userCred mcclient.TokenCredential, syncResults SSyncResultSet, provider *SCloudprovider, driver cloudprovider.ICloudProvider) error { - ipools, err := driver.GetIModelartsPoolSku() +func syncModelartsPoolSkus(ctx context.Context, userCred mcclient.TokenCredential, syncResults SSyncResultSet, provider *SCloudprovider, localRegion *SCloudregion, remoteRegion cloudprovider.ICloudRegion) error { + ipools, err := remoteRegion.GetIModelartsPoolSku() if err != nil { msg := fmt.Sprintf("GetIModelartsPoolSku for provider %s failed %s", err, ipools) log.Errorf(msg) return err } - result := provider.SyncModelartsPoolSkus(ctx, userCred, ipools) + result := localRegion.SyncModelartsPoolSkus(ctx, userCred, provider, ipools) log.Infof("SyncModelartsPoolSkus for region %s result: %s", provider.GetName(), result.Result()) return nil } diff --git a/pkg/compute/models/modelarts_pool_sku.go b/pkg/compute/models/modelarts_pool_sku.go index 54b55344ee..1f5379c499 100644 --- a/pkg/compute/models/modelarts_pool_sku.go +++ b/pkg/compute/models/modelarts_pool_sku.go @@ -16,7 +16,6 @@ package models import ( "context" - "fmt" "yunion.io/x/jsonutils" "yunion.io/x/log" @@ -37,6 +36,7 @@ type SModelartsPoolSkuManager struct { db.SExternalizedResourceBaseManager db.SEnabledStatusStandaloneResourceBaseManager + SCloudregionResourceBaseManager SManagedResourceBaseManager } @@ -59,6 +59,7 @@ type SModelartsPoolSku struct { SManagedResourceBase db.SEnabledStatusStandaloneResourceBase db.SExternalizedResourceBase + SCloudregionResourceBase Type string `width:"128" charset:"ascii" nullable:"true" list:"user" create:"admin_optional" update:"admin"` // 资源规格类型 // CPU 架构 x86|xarm @@ -100,6 +101,10 @@ func (man *SModelartsPoolSkuManager) ListItemFilter( if err != nil { return nil, errors.Wrap(err, "SManagedResourceBaseManager.ListItemFilter") } + q, err = man.SCloudregionResourceBaseManager.ListItemFilter(ctx, q, userCred, query.RegionalFilterListInput) + if err != nil { + return nil, errors.Wrap(err, "SCloudregionResourceBaseManager.ListItemFilter") + } return q, nil } @@ -122,6 +127,10 @@ func (man *SModelartsPoolSkuManager) OrderByExtraFields( if err != nil { return nil, errors.Wrap(err, "SManagedResourceBaseManager.OrderByExtraFields") } + q, err = man.SCloudregionResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query.RegionalFilterListInput) + if err != nil { + return nil, errors.Wrap(err, "SCloudregionResourceBaseManager.OrderByExtraFields") + } return q, nil } @@ -148,11 +157,13 @@ func (manager *SModelartsPoolSkuManager) FetchCustomizeColumns( rows := make([]api.ModelartsPoolSkuDetails, len(objs)) enabledRows := manager.SEnabledStatusStandaloneResourceBaseManager.FetchCustomizeColumns(ctx, userCred, query, objs, fields, isList) manRows := manager.SManagedResourceBaseManager.FetchCustomizeColumns(ctx, userCred, query, objs, fields, isList) + regRows := manager.SCloudregionResourceBaseManager.FetchCustomizeColumns(ctx, userCred, query, objs, fields, isList) for i := range rows { rows[i] = api.ModelartsPoolSkuDetails{ EnabledStatusStandaloneResourceDetails: enabledRows[i], ManagedResourceInfo: manRows[i], + CloudregionResourceInfo: regRows[i], } } @@ -179,8 +190,11 @@ func (manager *SModelartsPoolSkuManager) ListItemExportKeys(ctx context.Context, return q, nil } -func (self *SCloudprovider) GetModelartsPoolSkus() ([]SModelartsPoolSku, error) { - q := ModelartsPoolSkuManager.Query() +func (self *SCloudregion) GetModelartsPoolSkus(managerId string) ([]SModelartsPoolSku, error) { + q := ModelartsPoolSkuManager.Query().Equals("cloudregion_id", self.Id) + if len(managerId) > 0 { + q = q.Equals("manager_id", managerId) + } ret := []SModelartsPoolSku{} err := db.FetchModelObjects(ModelartsPoolSkuManager, q, &ret) if err != nil { @@ -189,12 +203,12 @@ func (self *SCloudprovider) GetModelartsPoolSkus() ([]SModelartsPoolSku, error) return ret, nil } -func (self *SCloudprovider) SyncModelartsPoolSkus(ctx context.Context, userCred mcclient.TokenCredential, exts []cloudprovider.ICloudModelartsPoolSku) compare.SyncResult { +func (self *SCloudregion) SyncModelartsPoolSkus(ctx context.Context, userCred mcclient.TokenCredential, provider *SCloudprovider, exts []cloudprovider.ICloudModelartsPoolSku) compare.SyncResult { // 加锁防止重入 lockman.LockRawObject(ctx, self.Provider, "modelarts-pool-sku") defer lockman.ReleaseRawObject(ctx, self.Provider, "modelarts-pool-sku") result := compare.SyncResult{} - dbPoolSku, err := self.GetModelartsPoolSkus() + dbPoolSku, err := self.GetModelartsPoolSkus(provider.Id) if err != nil { result.Error(err) return result @@ -233,7 +247,7 @@ func (self *SCloudprovider) SyncModelartsPoolSkus(ctx context.Context, userCred // 创建本地没有的云上资源 for i := 0; i < len(added); i++ { - err := self.newFromCloudModelartsPoolSku(ctx, userCred, added[i]) + err := self.newFromCloudModelartsPoolSku(ctx, userCred, provider, added[i]) if err != nil { result.AddError(err) continue @@ -262,9 +276,10 @@ func (self *SModelartsPoolSku) syncWithCloudSku(ctx context.Context, userCred mc return err } -func (self *SCloudprovider) newFromCloudModelartsPoolSku(ctx context.Context, userCred mcclient.TokenCredential, isku cloudprovider.ICloudModelartsPoolSku) error { +func (self *SCloudregion) newFromCloudModelartsPoolSku(ctx context.Context, userCred mcclient.TokenCredential, provider *SCloudprovider, isku cloudprovider.ICloudModelartsPoolSku) error { sku := SModelartsPoolSku{} sku.SetModelManager(ModelartsPoolSkuManager, &sku) + sku.CloudregionId = self.Id sku.Name = isku.GetName() sku.CpuCount = isku.GetCpuCoreCount() sku.CpuArch = isku.GetCpuArch() @@ -277,17 +292,6 @@ func (self *SCloudprovider) newFromCloudModelartsPoolSku(ctx context.Context, us sku.NpuType = isku.GetNpuType() sku.NpuSize = isku.GetNpuSize() sku.ExternalId = isku.GetGlobalId() + sku.ManagerId = provider.Id return ModelartsPoolSkuManager.TableSpec().Insert(ctx, &sku) } - -func syncModelartsPoolSku(ctx context.Context, userCred mcclient.TokenCredential, syncResults SSyncResultSet, provider *SCloudprovider, driver cloudprovider.ICloudProvider) error { - ipools, err := driver.GetIModelartsPoolSku() - if err != nil { - msg := fmt.Sprintf("GetIModelartsPoolsSku for provider %s failed %s", err, ipools) - log.Errorf(msg) - return err - } - result := provider.SyncModelartsPoolSkus(ctx, userCred, ipools) - log.Infof("SyncModelartsPools for region %s result: %s", provider.GetName(), result.Result()) - return nil -} diff --git a/pkg/compute/models/modelarts_pools.go b/pkg/compute/models/modelarts_pools.go index 64c6a9a295..48a3fdd65e 100644 --- a/pkg/compute/models/modelarts_pools.go +++ b/pkg/compute/models/modelarts_pools.go @@ -20,6 +20,7 @@ import ( "time" "yunion.io/x/jsonutils" + "yunion.io/x/log" "yunion.io/x/pkg/errors" "yunion.io/x/pkg/util/compare" "yunion.io/x/sqlchemy" @@ -41,6 +42,7 @@ type SModelartsPoolManager struct { db.SExternalizedResourceBaseManager SDeletePreventableResourceBaseManager + SCloudregionResourceBaseManager SManagedResourceBaseManager } @@ -64,6 +66,7 @@ type SModelartsPool struct { SManagedResourceBase SBillingResourceBase + SCloudregionResourceBase SDeletePreventableResourceBase InstanceType string `width:"72" charset:"ascii" nullable:"true" list:"user" update:"user" create:"optional"` @@ -73,7 +76,7 @@ type SModelartsPool struct { } func (manager *SModelartsPoolManager) GetContextManagers() [][]db.IModelManager { - return [][]db.IModelManager{} + return [][]db.IModelManager{{CloudregionManager}} } // Pool实例列表 @@ -100,7 +103,10 @@ func (man *SModelartsPoolManager) ListItemFilter( if err != nil { return nil, errors.Wrap(err, "SManagedResourceBaseManager.ListItemFilter") } - + q, err = man.SCloudregionResourceBaseManager.ListItemFilter(ctx, q, userCred, query.RegionalFilterListInput) + if err != nil { + return nil, errors.Wrap(err, "SCloudregionResourceBaseManager.ListItemFilter") + } return q, nil } @@ -114,6 +120,10 @@ func (man *SModelartsPoolManager) OrderByExtraFields( if err != nil { return nil, errors.Wrap(err, "SVirtualResourceBaseManager.OrderByExtraFields") } + q, err = man.SCloudregionResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query.RegionalFilterListInput) + if err != nil { + return nil, errors.Wrap(err, "SCloudregionResourceBaseManager.OrderByExtraFields") + } q, err = man.SManagedResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query.ManagedResourceListInput) if err != nil { return nil, errors.Wrap(err, "SManagedResourceBaseManager.OrderByExtraFields") @@ -126,6 +136,10 @@ func (man *SModelartsPoolManager) QueryDistinctExtraField(q *sqlchemy.SQuery, fi if err == nil { return q, nil } + q, err = man.SCloudregionResourceBaseManager.QueryDistinctExtraField(q, field) + if err == nil { + return q, nil + } q, err = man.SManagedResourceBaseManager.QueryDistinctExtraField(q, field) if err == nil { return q, nil @@ -148,11 +162,13 @@ func (manager *SModelartsPoolManager) FetchCustomizeColumns( rows := make([]api.ModelartsPoolDetails, len(objs)) virtRows := manager.SVirtualResourceBaseManager.FetchCustomizeColumns(ctx, userCred, query, objs, fields, isList) manRows := manager.SManagedResourceBaseManager.FetchCustomizeColumns(ctx, userCred, query, objs, fields, isList) + regRows := manager.SCloudregionResourceBaseManager.FetchCustomizeColumns(ctx, userCred, query, objs, fields, isList) for i := range rows { rows[i] = api.ModelartsPoolDetails{ - VirtualResourceDetails: virtRows[i], - ManagedResourceInfo: manRows[i], + VirtualResourceDetails: virtRows[i], + ManagedResourceInfo: manRows[i], + CloudregionResourceInfo: regRows[i], } } @@ -176,8 +192,11 @@ func (manager *SModelartsPoolManager) ListItemExportKeys(ctx context.Context, } return q, nil } -func (self *SCloudprovider) GetPools() ([]SModelartsPool, error) { - q := ModelartsPoolManager.Query().Equals("manager_id", self.Id) +func (self *SCloudregion) GetPools(managerId string) ([]SModelartsPool, error) { + q := ModelartsPoolManager.Query().Equals("cloudregion_id", self.Id) + if len(managerId) > 0 { + q = q.Equals("manager_id", managerId) + } ret := []SModelartsPool{} err := db.FetchModelObjects(ModelartsPoolManager, q, &ret) if err != nil { @@ -186,12 +205,12 @@ func (self *SCloudprovider) GetPools() ([]SModelartsPool, error) { return ret, nil } -func (self *SCloudprovider) SyncModelartsPools(ctx context.Context, userCred mcclient.TokenCredential, exts []cloudprovider.ICloudModelartsPool) compare.SyncResult { +func (self *SCloudregion) SyncModelartsPools(ctx context.Context, userCred mcclient.TokenCredential, provider *SCloudprovider, exts []cloudprovider.ICloudModelartsPool) compare.SyncResult { // 加锁防止重入 - lockman.LockRawObject(ctx, ModelartsPoolManager.KeywordPlural(), fmt.Sprintf("%s", self.Id)) - defer lockman.ReleaseRawObject(ctx, ModelartsPoolManager.KeywordPlural(), fmt.Sprintf("%s", self.Id)) + lockman.LockRawObject(ctx, ModelartsPoolManager.KeywordPlural(), fmt.Sprintf("%s-%s", provider.Id, self.Id)) + defer lockman.ReleaseRawObject(ctx, ModelartsPoolManager.KeywordPlural(), fmt.Sprintf("%s-%s", provider.Id, self.Id)) result := compare.SyncResult{} - dbPools, err := self.GetPools() + dbPools, err := self.GetPools(provider.Id) if err != nil { result.Error(err) return result @@ -230,7 +249,7 @@ func (self *SCloudprovider) SyncModelartsPools(ctx context.Context, userCred mcc // 创建本地没有的云上资源 for i := 0; i < len(added); i++ { - _, err := self.newFromCloudModelartsPool(ctx, userCred, self, added[i]) + _, err := self.newFromCloudModelartsPool(ctx, userCred, provider, added[i]) if err != nil { result.AddError(err) continue @@ -241,7 +260,8 @@ func (self *SCloudprovider) SyncModelartsPools(ctx context.Context, userCred mcc } // 判断资源是否可以删除 -func (self *SModelartsPool) ValidateDeleteCondition(ctx context.Context) error { +func (self *SModelartsPool) ValidateDeleteCondition(ctx context.Context, info jsonutils.JSONObject) error { + log.Errorln("this is IN Validata") if self.DisableDelete.IsTrue() { return httperrors.NewInvalidStatusError("ModelartsPool is locked, cannot delete") } @@ -313,14 +333,6 @@ func (self *SModelartsPool) CustomizeDelete(ctx context.Context, userCred mcclie return self.StartDeleteTask(ctx, userCred, "") } -func (self *SModelartsPool) GetICloudModelartsPool(ctx context.Context) (cloudprovider.ICloudModelartsPool, error) { - iProvider, err := self.GetDriver(ctx) - if err != nil { - return nil, errors.Wrap(err, "self.GetDriver") - } - return iProvider.GetIModelartsPoolById(self.ExternalId) -} - func (self *SModelartsPool) StartDeleteTask(ctx context.Context, userCred mcclient.TokenCredential, parentTaskId string) error { task, err := taskman.TaskManager.NewTask(ctx, "ModelartsPoolDeleteTask", self, userCred, nil, parentTaskId, "", nil) if err != nil { @@ -331,16 +343,28 @@ func (self *SModelartsPool) StartDeleteTask(ctx context.Context, userCred mcclie return nil } +func (self *SModelartsPool) GetIRegion() (cloudprovider.ICloudRegion, error) { + region, err := self.GetRegion() + if err != nil { + return nil, errors.Wrapf(err, "GetRegion") + } + provider, err := self.GetDriver(context.Background()) + if err != nil { + return nil, errors.Wrap(err, "self.GetDriver") + } + return provider.GetIRegionById(region.GetExternalId()) +} + // 获取云上对应的资源 func (self *SModelartsPool) GetIModelartsPool() (cloudprovider.ICloudModelartsPool, error) { if len(self.ExternalId) == 0 { return nil, errors.Wrapf(cloudprovider.ErrNotFound, "empty externalId") } - iProvider, err := self.GetDriver(context.Background()) + iRegion, err := self.GetIRegion() if err != nil { return nil, errors.Wrap(err, "self.GetDriver") } - return iProvider.GetIModelartsPoolById(self.ExternalId) + return iRegion.GetIModelartsPoolById(self.ExternalId) } // 同步资源属性 @@ -374,11 +398,12 @@ func (self *SModelartsPool) SyncWithCloudModelartsPool(ctx context.Context, user return nil } -func (self *SCloudprovider) newFromCloudModelartsPool(ctx context.Context, userCred mcclient.TokenCredential, provider *SCloudprovider, ext cloudprovider.ICloudModelartsPool) (*SModelartsPool, error) { +func (self *SCloudregion) newFromCloudModelartsPool(ctx context.Context, userCred mcclient.TokenCredential, provider *SCloudprovider, ext cloudprovider.ICloudModelartsPool) (*SModelartsPool, error) { pool := SModelartsPool{} pool.SetModelManager(ModelartsPoolManager, &pool) pool.ExternalId = ext.GetGlobalId() + pool.CloudregionId = self.Id pool.ManagerId = provider.Id pool.IsEmulated = ext.IsEmulated() pool.Status = ext.GetStatus() diff --git a/pkg/compute/tasks/modelarts_pool_create_task.go b/pkg/compute/tasks/modelarts_pool_create_task.go index 6a693688c2..9335c0249e 100644 --- a/pkg/compute/tasks/modelarts_pool_create_task.go +++ b/pkg/compute/tasks/modelarts_pool_create_task.go @@ -52,13 +52,13 @@ func (self *ModelartsPoolCreateTask) OnInit(ctx context.Context, obj db.IStandal InstanceType: pool.InstanceType, WorkType: pool.WorkType, } - iProvider, err := pool.GetDriver(ctx) + iRegion, err := pool.GetIRegion() if err != nil { self.taskFailed(ctx, pool, errors.Wrapf(err, "pool.GetDriver")) return } - ipool, err := iProvider.CreateIModelartsPool(opts) + ipool, err := iRegion.CreateIModelartsPool(opts) if err != nil { self.taskFailed(ctx, pool, errors.Wrapf(err, "iProvider.CreateIModelartsPool")) return diff --git a/pkg/multicloud/huawei/modelarts_pool.go b/pkg/multicloud/huawei/modelarts_pool.go index 89dc73b105..54e869bb72 100644 --- a/pkg/multicloud/huawei/modelarts_pool.go +++ b/pkg/multicloud/huawei/modelarts_pool.go @@ -29,6 +29,7 @@ import ( type SModelartsPool struct { client *SHuaweiClient + region *SRegion multicloud.SResourceBase Metadata SModelartsPoolMetadata `json:"metadata"` @@ -87,9 +88,9 @@ type SModelartsPoolNetworkMetadata struct { CreationTimestamp string `json:"creationTimestamp"` } -func (self *SHuaweiClient) GetIModelartsPools() ([]cloudprovider.ICloudModelartsPool, error) { +func (self *SRegion) GetIModelartsPools() ([]cloudprovider.ICloudModelartsPool, error) { pools := make([]SModelartsPool, 0) - resObj, err := self.modelartsPoolList("pools", nil) + resObj, err := self.client.modelartsPoolList("pools", nil) if err != nil { return nil, errors.Wrap(err, "region.GetPools") } @@ -99,14 +100,16 @@ func (self *SHuaweiClient) GetIModelartsPools() ([]cloudprovider.ICloudModelarts } res := make([]cloudprovider.ICloudModelartsPool, len(pools)) for i := 0; i < len(pools); i++ { - pools[i].client = self + pools[i].region = self + pools[i].client = self.GetClient() res[i] = &pools[i] } + return res, nil } -func (self *SHuaweiClient) CreateIModelartsPool(args *cloudprovider.ModelartsPoolCreateOption) (cloudprovider.ICloudModelartsPool, error) { - netObj, err := self.modelartsPoolNetworkList("network", nil) +func (self *SRegion) CreateIModelartsPool(args *cloudprovider.ModelartsPoolCreateOption) (cloudprovider.ICloudModelartsPool, error) { + netObj, err := self.client.modelartsPoolNetworkList("network", nil) if err != nil { return nil, errors.Wrap(err, "SHuaweiClient.GetPools") } @@ -116,7 +119,7 @@ func (self *SHuaweiClient) CreateIModelartsPool(args *cloudprovider.ModelartsPoo if len(netRes) != 0 { netId = netRes[0].Metadata.Name } else { - createNetObj, err := self.CreatePoolNetworks() + createNetObj, err := self.client.CreatePoolNetworks() if err != nil { return nil, errors.Wrap(err, "SHuaweiClient.CreatePoolNetworks") } @@ -148,7 +151,7 @@ func (self *SHuaweiClient) CreateIModelartsPool(args *cloudprovider.ModelartsPoo }, }, } - obj, err := self.modelartsPoolCreate("pools", params) + obj, err := self.client.modelartsPoolCreate("pools", params) if err != nil { return nil, errors.Wrap(err, "SHuaweiClient.GetPools") } @@ -156,19 +159,20 @@ func (self *SHuaweiClient) CreateIModelartsPool(args *cloudprovider.ModelartsPoo obj.Unmarshal(&pool) res := []cloudprovider.ICloudModelartsPool{} for i := 0; i < 1; i++ { - pool.client = self + pool.region = self + pool.client = self.GetClient() res = append(res, pool) } return res[0], nil } -func (self *SHuaweiClient) DeletePool(poolName string) (jsonutils.JSONObject, error) { - return self.modelartsPoolDelete("pools", poolName, nil) +func (self *SRegion) DeletePool(poolName string) (jsonutils.JSONObject, error) { + return self.client.modelartsPoolDelete("pools", poolName, nil) } -func (self *SHuaweiClient) GetIModelartsPoolById(poolId string) (cloudprovider.ICloudModelartsPool, error) { - obj, err := self.modelartsPoolById(poolId, nil) +func (self *SRegion) GetIModelartsPoolById(poolId string) (cloudprovider.ICloudModelartsPool, error) { + obj, err := self.client.modelartsPoolById(poolId, nil) if err != nil { if strings.Contains(err.Error(), "not found") { return nil, errors.Wrapf(cloudprovider.ErrNotFound, "") @@ -179,14 +183,15 @@ func (self *SHuaweiClient) GetIModelartsPoolById(poolId string) (cloudprovider.I obj.Unmarshal(&pool) res := []cloudprovider.ICloudModelartsPool{} for i := 0; i < 1; i++ { - pool.client = self + pool.region = self + pool.client = self.GetClient() res = append(res, pool) } return res[0], nil } -func (self *SHuaweiClient) MonitorPool(poolId string) (*SModelartsMetrics, error) { - resObj, err := self.modelartsPoolMonitor(poolId, nil) +func (self *SRegion) MonitorPool(poolId string) (*SModelartsMetrics, error) { + resObj, err := self.client.modelartsPoolMonitor(poolId, nil) if err != nil { return nil, errors.Wrapf(err, "send request error") } @@ -333,7 +338,7 @@ func (self *SModelartsPool) SetTags(tags map[string]string, replace bool) error } func (self *SModelartsPool) Delete() error { - _, err := self.client.DeletePool(self.GetId()) + _, err := self.region.DeletePool(self.GetId()) if err != nil { return err } diff --git a/pkg/multicloud/huawei/modelarts_pool_sku.go b/pkg/multicloud/huawei/modelarts_pool_sku.go index 40c057d37d..0eaf8a4a9c 100644 --- a/pkg/multicloud/huawei/modelarts_pool_sku.go +++ b/pkg/multicloud/huawei/modelarts_pool_sku.go @@ -55,10 +55,10 @@ type SModelartsResourceflavorsStatus struct { Phase map[string]interface{} `json:"phase"` } -func (self *SHuaweiClient) GetIModelartsPoolSku() ([]cloudprovider.ICloudModelartsPoolSku, error) { +func (self *SRegion) GetIModelartsPoolSku() ([]cloudprovider.ICloudModelartsPoolSku, error) { params := make(map[string]interface{}) resourceflavors := make([]SModelartsPoolSku, 0) - obj, err := self.modelartsResourceflavors("resourceflavors", params) + obj, err := self.client.modelartsResourceflavors("resourceflavors", params) if err != nil { return nil, errors.Wrap(err, "region.modelartsResourceflavors") } diff --git a/pkg/multicloud/huawei/provider/provider.go b/pkg/multicloud/huawei/provider/provider.go index e226f79e0c..951873ea56 100644 --- a/pkg/multicloud/huawei/provider/provider.go +++ b/pkg/multicloud/huawei/provider/provider.go @@ -304,23 +304,3 @@ func (self *SHuaweiProvider) CreateICloudSAMLProvider(opts *cloudprovider.SAMLPr } return sp, nil } - -func (self *SHuaweiProvider) CreateIModelartsPool(args *cloudprovider.ModelartsPoolCreateOption) (cloudprovider.ICloudModelartsPool, error) { - return self.client.CreateIModelartsPool(args) -} - -func (self *SHuaweiProvider) GetIModelartsPoolById(poolId string) (cloudprovider.ICloudModelartsPool, error) { - return self.client.GetIModelartsPoolById(poolId) -} - -func (self *SHuaweiProvider) GetIModelartsPools() ([]cloudprovider.ICloudModelartsPool, error) { - return self.client.GetIModelartsPools() -} - -func (self *SHuaweiProvider) GetMetrics(opts *cloudprovider.MetricListOptions) ([]cloudprovider.MetricValues, error) { - return self.client.GetMetrics(opts) -} - -func (self *SHuaweiProvider) GetIModelartsPoolSku() ([]cloudprovider.ICloudModelartsPoolSku, error) { - return self.client.GetIModelartsPoolSku() -} diff --git a/pkg/multicloud/huawei/shell/modelarts_pool.go b/pkg/multicloud/huawei/shell/modelarts_pool.go index c72f3c0fd4..8dcbad583c 100644 --- a/pkg/multicloud/huawei/shell/modelarts_pool.go +++ b/pkg/multicloud/huawei/shell/modelarts_pool.go @@ -29,7 +29,7 @@ func init() { } shellutils.R(&ModelartsPoolListOption{}, "modelarts-pool-list", "List Modelarts Pool", func(cli *huawei.SRegion, args *ModelartsPoolListOption) error { - pools, err := cli.GetClient().GetIModelartsPools() + pools, err := cli.GetIModelartsPools() if err != nil { return err } @@ -38,7 +38,7 @@ func init() { }) shellutils.R(&ModelartsPoolListOption{}, "modelarts-pool-detail", "List pool", func(cli *huawei.SRegion, args *ModelartsPoolListOption) error { - pools, err := cli.GetClient().GetIModelartsPoolById(args.PoolId) + pools, err := cli.GetIModelartsPoolById(args.PoolId) if err != nil { return err } @@ -47,7 +47,7 @@ func init() { }) shellutils.R(&cloudprovider.ModelartsPoolCreateOption{}, "modelarts-pool-create", "Create Modelarts Pool", func(cli *huawei.SRegion, args *cloudprovider.ModelartsPoolCreateOption) error { - res, err := cli.GetClient().CreateIModelartsPool(args) + res, err := cli.CreateIModelartsPool(args) if err != nil { return err } @@ -57,7 +57,7 @@ func init() { }) shellutils.R(&ModelartsPoolListOption{}, "modelarts-pool-delete", "Delete Modelarts Pool", func(cli *huawei.SRegion, args *ModelartsPoolListOption) error { - res, err := cli.GetClient().DeletePool(args.PoolId) + res, err := cli.DeletePool(args.PoolId) if err != nil { return err } @@ -67,7 +67,7 @@ func init() { }) shellutils.R(&ModelartsPoolListOption{}, "modelarts-pool-monitor", "Delete Modelarts Pool", func(cli *huawei.SRegion, args *ModelartsPoolListOption) error { - res, err := cli.GetClient().MonitorPool(args.PoolId) + res, err := cli.MonitorPool(args.PoolId) if err != nil { return err } diff --git a/pkg/multicloud/huawei/shell/modelarts_pool_sku.go b/pkg/multicloud/huawei/shell/modelarts_pool_sku.go index cfcd24e0ca..fdf6c62a32 100644 --- a/pkg/multicloud/huawei/shell/modelarts_pool_sku.go +++ b/pkg/multicloud/huawei/shell/modelarts_pool_sku.go @@ -25,7 +25,7 @@ func init() { PoolName string `help:"Pool Name"` } shellutils.R(&ModelartsResourceflavorsListOption{}, "modelarts-sku-list", "List Modelarts Pool", func(cli *huawei.SRegion, args *ModelartsResourceflavorsListOption) error { - resourceflavors, err := cli.GetClient().GetIModelartsPoolSku() + resourceflavors, err := cli.GetIModelartsPoolSku() if err != nil { return err } diff --git a/pkg/multicloud/region_base.go b/pkg/multicloud/region_base.go index 7d590ac7ab..26cba186e0 100644 --- a/pkg/multicloud/region_base.go +++ b/pkg/multicloud/region_base.go @@ -376,3 +376,19 @@ func (self *SRegionEipBase) GetIEips() ([]cloudprovider.ICloudEIP, error) { func (self *SRegionEipBase) CreateEIP(eip *cloudprovider.SEip) (cloudprovider.ICloudEIP, error) { return nil, errors.Wrapf(cloudprovider.ErrNotImplemented, "CreateEIP") } + +func (self *SRegion) GetIModelartsPools() ([]cloudprovider.ICloudModelartsPool, error) { + return nil, errors.Wrapf(cloudprovider.ErrNotImplemented, "GetIModelartsPools") +} + +func (self *SRegion) GetIModelartsPoolById(id string) (cloudprovider.ICloudModelartsPool, error) { + return nil, errors.Wrapf(cloudprovider.ErrNotImplemented, "GetIModelartsPoolDetail") +} + +func (self *SRegion) CreateIModelartsPool(pool *cloudprovider.ModelartsPoolCreateOption) (cloudprovider.ICloudModelartsPool, error) { + return nil, errors.Wrapf(cloudprovider.ErrNotImplemented, "CreateIModelartsPool") +} + +func (self *SRegion) GetIModelartsPoolSku() ([]cloudprovider.ICloudModelartsPoolSku, error) { + return nil, errors.Wrapf(cloudprovider.ErrNotImplemented, "GetIModelartsPoolSku") +}