diff --git a/go.mod b/go.mod index 5cb5b00d2c..1089bde041 100644 --- a/go.mod +++ b/go.mod @@ -84,7 +84,7 @@ require ( k8s.io/client-go v0.19.3 k8s.io/cluster-bootstrap v0.19.3 moul.io/http2curl/v2 v2.3.0 - yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20221121093718-ceb2d0e88331 + yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20221122060402-9ac1c621d6d7 yunion.io/x/executor v0.0.0-20211018100936-39a2cd966656 yunion.io/x/jsonutils v1.0.1-0.20220819091305-3bab322ab4fd yunion.io/x/log v1.0.0 diff --git a/go.sum b/go.sum index 9b3f86c3dd..dae88f42a4 100644 --- a/go.sum +++ b/go.sum @@ -1176,8 +1176,8 @@ sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= -yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20221121093718-ceb2d0e88331 h1:2Llg6nfloPMWhgB4CjxFdbH1QaThsWs8DayYhPK9N9E= -yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20221121093718-ceb2d0e88331/go.mod h1:drc/WDD65r6wI1tSejk19xcl9QwmzZlgJGXN7a9o2KQ= +yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20221122060402-9ac1c621d6d7 h1:TEpAIggwNfnq63LWkXsBVQUXjHKXqhTPUQsGdqNppn4= +yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20221122060402-9ac1c621d6d7/go.mod h1:drc/WDD65r6wI1tSejk19xcl9QwmzZlgJGXN7a9o2KQ= yunion.io/x/executor v0.0.0-20211018100936-39a2cd966656 h1:0zlZD5uhZoIHgLVAWCz2aHaYk2ZrNsACCYD7R6EIBII= yunion.io/x/executor v0.0.0-20211018100936-39a2cd966656/go.mod h1:Uxuou9WQIeJXNpy7t2fPLL0BYLvLiMvGQwY7Qc6aSws= yunion.io/x/jsonutils v0.0.0-20190625054549-a964e1e8a051/go.mod h1:4N0/RVzsYL3kH3WE/H1BjUQdFiWu50JGCFQuuy+Z634= diff --git a/pkg/apis/compute/modelarts_pool.go b/pkg/apis/compute/modelarts_pool.go index efd581e881..259a81a9a6 100644 --- a/pkg/apis/compute/modelarts_pool.go +++ b/pkg/apis/compute/modelarts_pool.go @@ -39,7 +39,8 @@ type ModelartsPoolCreateInput struct { CloudregionResourceInput CloudproviderResourceInput - NodeCount int + NodeCount int `json:"node_count"` + Cidr string `json:"cidr"` } type ModelartsPoolUpdateInput struct { diff --git a/pkg/apis/compute/modelarts_pool_sku.go b/pkg/apis/compute/modelarts_pool_sku.go index 528b989ee7..ddbf577fb1 100644 --- a/pkg/apis/compute/modelarts_pool_sku.go +++ b/pkg/apis/compute/modelarts_pool_sku.go @@ -36,5 +36,6 @@ type ModelartsPoolSkuListInput struct { apis.ExternalizedResourceBaseListInput RegionalFilterListInput - ManagedResourceListInput + ProcessorType string + CpuArch string } diff --git a/pkg/compute/models/modelarts_pool_sku.go b/pkg/compute/models/modelarts_pool_sku.go index 57937a8932..d72966482a 100644 --- a/pkg/compute/models/modelarts_pool_sku.go +++ b/pkg/compute/models/modelarts_pool_sku.go @@ -19,7 +19,6 @@ import ( "yunion.io/x/cloudmux/pkg/cloudprovider" "yunion.io/x/jsonutils" - "yunion.io/x/log" "yunion.io/x/pkg/errors" "yunion.io/x/pkg/util/compare" "yunion.io/x/sqlchemy" @@ -56,7 +55,6 @@ func init() { } type SModelartsPoolSku struct { - SManagedResourceBase db.SEnabledStatusStandaloneResourceBase db.SExternalizedResourceBase SCloudregionResourceBase @@ -76,6 +74,8 @@ type SModelartsPoolSku struct { NpuSize int `nullable:"true" list:"user" create:"admin_optional" update:"admin"` // 内存 Memory int `nullable:"true" list:"user" create:"admin_optional" update:"admin"` + // 处理器类型 + ProcessorType string `width:"128" charset:"ascii" nullable:"true" list:"user" create:"admin_optional" update:"admin"` } func (manager *SModelartsPoolSkuManager) GetContextManagers() [][]db.IModelManager { @@ -97,15 +97,16 @@ func (man *SModelartsPoolSkuManager) ListItemFilter( if err != nil { return nil, errors.Wrap(err, "SExternalizedResourceBaseManager.ListItemFilter") } - q, err = man.SManagedResourceBaseManager.ListItemFilter(ctx, q, userCred, query.ManagedResourceListInput) - 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") } - + if len(query.CpuArch) > 0 { + q = q.Equals("cpu_arch", query.CpuArch) + } + if len(query.ProcessorType) > 0 { + q = q.Equals("processor_type", query.ProcessorType) + } return q, nil } @@ -123,10 +124,6 @@ func (man *SModelartsPoolSkuManager) OrderByExtraFields( if err != nil { return nil, errors.Wrap(err, "SExternalizedResourceBaseManager.ListItemFilter") } - q, err = man.SManagedResourceBaseManager.OrderByExtraFields(ctx, q, userCred, query.ManagedResourceListInput) - 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") @@ -190,11 +187,8 @@ func (manager *SModelartsPoolSkuManager) ListItemExportKeys(ctx context.Context, return q, nil } -func (self *SCloudregion) GetModelartsPoolSkus(managerId string) ([]SModelartsPoolSku, error) { +func (self *SCloudregion) GetModelartsPoolSkus() ([]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 { @@ -208,7 +202,7 @@ func (self *SCloudregion) SyncModelartsPoolSkus(ctx context.Context, userCred mc lockman.LockRawObject(ctx, self.Provider, "modelarts-pool-sku") defer lockman.ReleaseRawObject(ctx, self.Provider, "modelarts-pool-sku") result := compare.SyncResult{} - dbPoolSku, err := self.GetModelartsPoolSkus(provider.Id) + dbPoolSku, err := self.GetModelartsPoolSkus() if err != nil { result.Error(err) return result @@ -236,7 +230,6 @@ func (self *SCloudregion) SyncModelartsPoolSkus(ctx context.Context, userCred mc // 和云上资源属性进行同步 for i := 0; i < len(commondb); i++ { - log.Errorln("this is commonext", commonext[i]) err := commondb[i].syncWithCloudSku(ctx, userCred, commonext[i]) if err != nil { result.UpdateError(err) @@ -271,6 +264,7 @@ func (self *SModelartsPoolSku) syncWithCloudSku(ctx context.Context, userCred mc self.NpuType = isku.GetNpuType() self.NpuSize = isku.GetNpuSize() self.ExternalId = isku.GetGlobalId() + self.ProcessorType = isku.GetProcessorType() return nil }) return err @@ -283,6 +277,7 @@ func (self *SCloudregion) newFromCloudModelartsPoolSku(ctx context.Context, user sku.Name = isku.GetName() sku.CpuCount = isku.GetCpuCoreCount() sku.CpuArch = isku.GetCpuArch() + sku.ProcessorType = isku.GetProcessorType() sku.Status = isku.GetStatus() sku.Type = isku.GetPoolType() sku.CreatedAt = isku.GetCreatedAt() @@ -292,6 +287,5 @@ func (self *SCloudregion) newFromCloudModelartsPoolSku(ctx context.Context, user sku.NpuType = isku.GetNpuType() sku.NpuSize = isku.GetNpuSize() sku.ExternalId = isku.GetGlobalId() - sku.ManagerId = provider.Id return ModelartsPoolSkuManager.TableSpec().Insert(ctx, &sku) } diff --git a/pkg/compute/models/modelarts_pools.go b/pkg/compute/models/modelarts_pools.go index 267c3fb2a3..cc1b82c2c2 100644 --- a/pkg/compute/models/modelarts_pools.go +++ b/pkg/compute/models/modelarts_pools.go @@ -23,6 +23,7 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/pkg/errors" "yunion.io/x/pkg/util/compare" + "yunion.io/x/pkg/util/netutils" "yunion.io/x/sqlchemy" billing_api "yunion.io/x/onecloud/pkg/apis/billing" @@ -74,6 +75,7 @@ type SModelartsPool struct { 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"` + Cidr string `width:"32" charset:"ascii" nullable:"true" list:"user" create:"admin_optional"` } func (manager *SModelartsPoolManager) GetContextManagers() [][]db.IModelManager { @@ -156,6 +158,13 @@ func (man *SModelartsPoolManager) ValidateCreateData(ctx context.Context, userCr if input.NodeCount > 200 { return input, errors.Wrap(errors.ErrNotSupported, "node count must between 1 and 200") } + if len(input.Cidr) == 0 { + input.Cidr = "192.168.128.0/17" + } + _, err = netutils.NewIPV4Prefix(input.Cidr) + if err != nil { + return input, httperrors.NewInputParameterError("invalid cidr: %s", input.Cidr) + } _, err = validators.ValidateModel(userCred, CloudproviderManager, &input.CloudproviderId) if err != nil { return input, err diff --git a/pkg/compute/tasks/modelarts_pool_create_task.go b/pkg/compute/tasks/modelarts_pool_create_task.go index 1a0180cb73..c7b9fc431c 100644 --- a/pkg/compute/tasks/modelarts_pool_create_task.go +++ b/pkg/compute/tasks/modelarts_pool_create_task.go @@ -58,6 +58,7 @@ func (self *ModelartsPoolCreateTask) OnInit(ctx context.Context, obj db.IStandal InstanceType: pool.InstanceType, WorkType: pool.WorkType, NodeCount: pool.NodeCount, + Cidr: pool.Cidr, } ipool, err := iRegion.CreateIModelartsPool(opts) @@ -72,7 +73,7 @@ func (self *ModelartsPoolCreateTask) OnInit(ctx context.Context, obj db.IStandal } // withDelay - time.Sleep(30 * time.Second) + time.Sleep(2 * time.Minute) err = cloudprovider.WaitMultiStatus(ipool, []string{api.MODELARTS_POOL_STATUS_RUNNING, api.MODELARTS_POOL_STATUS_CREATE_FAILED}, 15*time.Second, 2*time.Hour) if err != nil { pool.SetStatus(self.UserCred, api.MODELARTS_POOL_STATUS_TIMEOUT, err.Error()) diff --git a/pkg/mcclient/options/compute/modelarts_pool.go b/pkg/mcclient/options/compute/modelarts_pool.go index f826539960..8f3c25b242 100644 --- a/pkg/mcclient/options/compute/modelarts_pool.go +++ b/pkg/mcclient/options/compute/modelarts_pool.go @@ -47,6 +47,7 @@ type ModelartsPoolCreateOption struct { WorkType string `help:"Work Type"` CpuArch string `help:"Cpu Arch"` NodeCount int `help:"Node Count"` + Cidr string `help:"Network Cidr"` CloudregionId string `help:"Cloud Region ID"` } diff --git a/vendor/modules.txt b/vendor/modules.txt index b8088aa375..e01f0eba8a 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1439,7 +1439,7 @@ sigs.k8s.io/structured-merge-diff/v4/value # sigs.k8s.io/yaml v1.2.0 ## explicit; go 1.12 sigs.k8s.io/yaml -# yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20221121093718-ceb2d0e88331 +# yunion.io/x/cloudmux v0.3.10-0-alpha.1.0.20221122060402-9ac1c621d6d7 ## explicit; go 1.18 yunion.io/x/cloudmux/pkg/apis yunion.io/x/cloudmux/pkg/apis/billing diff --git a/vendor/yunion.io/x/cloudmux/pkg/cloudprovider/cloudprovider.go b/vendor/yunion.io/x/cloudmux/pkg/cloudprovider/cloudprovider.go index cd32e5ac56..bf8c3defe5 100644 --- a/vendor/yunion.io/x/cloudmux/pkg/cloudprovider/cloudprovider.go +++ b/vendor/yunion.io/x/cloudmux/pkg/cloudprovider/cloudprovider.go @@ -959,4 +959,5 @@ type ICloudModelartsPoolSku interface { GetGpuType() string GetNpuSize() int GetNpuType() string + GetProcessorType() string } diff --git a/vendor/yunion.io/x/cloudmux/pkg/multicloud/hcso/hcso.go b/vendor/yunion.io/x/cloudmux/pkg/multicloud/hcso/hcso.go index b4c57cdc25..95e1903630 100644 --- a/vendor/yunion.io/x/cloudmux/pkg/multicloud/hcso/hcso.go +++ b/vendor/yunion.io/x/cloudmux/pkg/multicloud/hcso/hcso.go @@ -152,6 +152,12 @@ func (cli *SHuaweiClient) modelartsPoolNetworkDetail(networkName string) (jsonut return cli.request(httputils.GET, uri, url.Values{}, nil) } +func (cli *SHuaweiClient) modelartsPoolNetworkDelete(networkName string) (jsonutils.JSONObject, error) { + endpoint := cli.resetEndpoint(cli.endpoints.Modelarts, "modelarts") + uri := fmt.Sprintf("https://%s/v1/%s/networks/%s", endpoint, cli.projectId, networkName) + return cli.request(httputils.DELETE, uri, url.Values{}, nil) +} + func (self *SHuaweiClient) modelartsPoolNetworkCreate(params map[string]interface{}) (jsonutils.JSONObject, error) { endpoint := self.resetEndpoint(self.endpoints.Modelarts, "modelarts") uri := fmt.Sprintf("https://%s/v1/%s/networks", endpoint, self.projectId) diff --git a/vendor/yunion.io/x/cloudmux/pkg/multicloud/hcso/modelarts.go b/vendor/yunion.io/x/cloudmux/pkg/multicloud/hcso/modelarts.go index 7907ffed5c..91056b8060 100644 --- a/vendor/yunion.io/x/cloudmux/pkg/multicloud/hcso/modelarts.go +++ b/vendor/yunion.io/x/cloudmux/pkg/multicloud/hcso/modelarts.go @@ -156,10 +156,10 @@ func (self *SRegion) CreateIModelartsPool(args *cloudprovider.ModelartsPoolCreat return nil, errors.Wrap(err, "SHuaweiClient.NetworkDetail") } netStatus, _ := netDetailObj.GetString("status", "phase") - if netStatus == "Creating" { - time.Sleep(10 * time.Second) - } else { + if netStatus == "Active" { break + } else { + time.Sleep(10 * time.Second) } } } diff --git a/vendor/yunion.io/x/cloudmux/pkg/multicloud/huawei/modelarts_pool.go b/vendor/yunion.io/x/cloudmux/pkg/multicloud/huawei/modelarts_pool.go index 92a70e5a72..8757108cba 100644 --- a/vendor/yunion.io/x/cloudmux/pkg/multicloud/huawei/modelarts_pool.go +++ b/vendor/yunion.io/x/cloudmux/pkg/multicloud/huawei/modelarts_pool.go @@ -155,10 +155,10 @@ func (self *SRegion) CreateIModelartsPool(args *cloudprovider.ModelartsPoolCreat return nil, errors.Wrap(err, "SHuaweiClient.NetworkDetail") } netStatus, _ := netDetailObj.GetString("status", "phase") - if netStatus == "Creating" { - time.Sleep(10 * time.Second) - } else { + if netStatus == "Active" { break + } else { + time.Sleep(10 * time.Second) } } }