From 9c5402f15ca2363495d562360a5c2eec5978268b Mon Sep 17 00:00:00 2001 From: mhf Date: Wed, 28 Sep 2022 15:16:05 +0800 Subject: [PATCH] add modelarts nodecount --- pkg/apis/compute/modelarts_pool.go | 2 ++ pkg/cloudprovider/cloudprovider.go | 1 + pkg/cloudprovider/modelarts_pool.go | 1 + pkg/compute/models/modelarts_pools.go | 9 +++++++++ pkg/compute/tasks/modelarts_pool_create_task.go | 1 + pkg/mcclient/options/compute/modelarts_pool.go | 1 + pkg/multicloud/hcso/modelarts.go | 9 ++++++++- pkg/multicloud/huawei/modelarts_pool.go | 9 ++++++++- 8 files changed, 31 insertions(+), 2 deletions(-) diff --git a/pkg/apis/compute/modelarts_pool.go b/pkg/apis/compute/modelarts_pool.go index ff5c6270b5..cf65346140 100644 --- a/pkg/apis/compute/modelarts_pool.go +++ b/pkg/apis/compute/modelarts_pool.go @@ -33,6 +33,8 @@ type ModelartsPoolCreateInput struct { CloudregionResourceInput CloudproviderResourceInput + + NodeCount int } type ModelartsPoolUpdateInput struct { diff --git a/pkg/cloudprovider/cloudprovider.go b/pkg/cloudprovider/cloudprovider.go index 04765bf32e..db66f21c21 100644 --- a/pkg/cloudprovider/cloudprovider.go +++ b/pkg/cloudprovider/cloudprovider.go @@ -939,6 +939,7 @@ type ICloudModelartsPool interface { GetProjectId() string GetInstanceType() string GetWorkType() string + GetNodeCount() int } type ICloudModelartsPoolSku interface { diff --git a/pkg/cloudprovider/modelarts_pool.go b/pkg/cloudprovider/modelarts_pool.go index 1769785d04..da52cc6fd9 100644 --- a/pkg/cloudprovider/modelarts_pool.go +++ b/pkg/cloudprovider/modelarts_pool.go @@ -21,6 +21,7 @@ type ModelartsPoolCreateOption struct { PeriodNum uint AutoRenew uint InstanceType string + NodeCount int NetworkId string WorkType string diff --git a/pkg/compute/models/modelarts_pools.go b/pkg/compute/models/modelarts_pools.go index 0e41a6554c..f244038052 100644 --- a/pkg/compute/models/modelarts_pools.go +++ b/pkg/compute/models/modelarts_pools.go @@ -70,6 +70,7 @@ type SModelartsPool struct { SDeletePreventableResourceBase InstanceType string `width:"72" charset:"ascii" nullable:"true" list:"user" update:"user" create:"optional"` + NodeCount int `nullable:"false" list:"user" create:"required"` WorkType string `width:"72" charset:"ascii" nullable:"true" list:"user" update:"user" create:"optional"` // CPU 架构 x86|xarm CpuArch string `width:"16" charset:"ascii" nullable:"true" list:"user" create:"admin_optional" update:"admin"` @@ -149,6 +150,12 @@ func (man *SModelartsPoolManager) QueryDistinctExtraField(q *sqlchemy.SQuery, fi func (man *SModelartsPoolManager) ValidateCreateData(ctx context.Context, userCred mcclient.TokenCredential, ownerId mcclient.IIdentityProvider, query jsonutils.JSONObject, input api.ModelartsPoolCreateInput) (api.ModelartsPoolCreateInput, error) { var err error + if input.NodeCount <= 0 { + input.NodeCount = 1 + } + if input.NodeCount > 200 { + return input, errors.Wrap(errors.ErrNotSupported, "node count must between 1 and 200") + } _, err = validators.ValidateModel(userCred, CloudproviderManager, &input.CloudproviderId) if err != nil { return input, err @@ -400,6 +407,7 @@ func (self *SModelartsPool) SyncWithCloudModelartsPool(ctx context.Context, user self.InstanceType = instanceName self.WorkType = ext.GetWorkType() self.CpuArch = sku.CpuArch + self.NodeCount = ext.GetNodeCount() return nil }) if err != nil { @@ -428,6 +436,7 @@ func (self *SCloudregion) newFromCloudModelartsPool(ctx context.Context, userCre pool.Status = ext.GetStatus() pool.WorkType = ext.GetWorkType() pool.InstanceType = ext.GetInstanceType() + pool.NodeCount = ext.GetNodeCount() if createdAt := ext.GetCreatedAt(); !createdAt.IsZero() { pool.CreatedAt = createdAt } diff --git a/pkg/compute/tasks/modelarts_pool_create_task.go b/pkg/compute/tasks/modelarts_pool_create_task.go index 2a14081beb..891a9ef293 100644 --- a/pkg/compute/tasks/modelarts_pool_create_task.go +++ b/pkg/compute/tasks/modelarts_pool_create_task.go @@ -56,6 +56,7 @@ func (self *ModelartsPoolCreateTask) OnInit(ctx context.Context, obj db.IStandal Name: pool.Name, InstanceType: pool.InstanceType, WorkType: pool.WorkType, + NodeCount: pool.NodeCount, } ipool, err := iRegion.CreateIModelartsPool(opts) diff --git a/pkg/mcclient/options/compute/modelarts_pool.go b/pkg/mcclient/options/compute/modelarts_pool.go index e6b9395a49..b20772935b 100644 --- a/pkg/mcclient/options/compute/modelarts_pool.go +++ b/pkg/mcclient/options/compute/modelarts_pool.go @@ -46,6 +46,7 @@ type ModelartsPoolCreateOption struct { InstanceType string `help:"Instance Type"` WorkType string `help:"Work Type"` CpuArch string `help:"Cpu Arch"` + NodeCount int `help:"Node Count"` CloudregionId string `help:"Cloud Region ID"` } diff --git a/pkg/multicloud/hcso/modelarts.go b/pkg/multicloud/hcso/modelarts.go index 52c46b14ea..41077da1a5 100644 --- a/pkg/multicloud/hcso/modelarts.go +++ b/pkg/multicloud/hcso/modelarts.go @@ -145,7 +145,7 @@ func (self *SRegion) CreateIModelartsPool(args *cloudprovider.ModelartsPoolCreat "resources": []map[string]interface{}{ { "flavor": args.InstanceType, - "count": 1, + "count": args.NodeCount, }, }, }, @@ -349,3 +349,10 @@ func (self *SModelartsPool) GetInstanceType() string { func (self *SModelartsPool) GetWorkType() string { return strings.Join(self.Spec.Scope, ",") } + +func (self *SModelartsPool) GetNodeCount() int { + if len(self.Spec.Resource) < 1 { + return 0 + } + return self.Spec.Resource[0].Count +} diff --git a/pkg/multicloud/huawei/modelarts_pool.go b/pkg/multicloud/huawei/modelarts_pool.go index 8bc1848de7..1dd1565f98 100644 --- a/pkg/multicloud/huawei/modelarts_pool.go +++ b/pkg/multicloud/huawei/modelarts_pool.go @@ -144,7 +144,7 @@ func (self *SRegion) CreateIModelartsPool(args *cloudprovider.ModelartsPoolCreat "resources": []map[string]interface{}{ { "flavor": args.InstanceType, - "count": 1, + "count": args.NodeCount, }, }, }, @@ -348,3 +348,10 @@ func (self *SModelartsPool) GetInstanceType() string { func (self *SModelartsPool) GetWorkType() string { return strings.Join(self.Spec.Scope, ",") } + +func (self *SModelartsPool) GetNodeCount() int { + if len(self.Spec.Resource) < 1 { + return 0 + } + return self.Spec.Resource[0].Count +}