Compare commits
8 Commits
d120740b00
...
7402375a2e
Author | SHA1 | Date |
---|---|---|
|
7402375a2e | |
|
fe28feeee9 | |
|
3472e5a002 | |
|
1ebb9c67d4 | |
|
e0f926e138 | |
|
19fcb9aadd | |
|
4725dea395 | |
|
20b333f544 |
|
@ -28,7 +28,7 @@ var (
|
|||
func TestGet(t *testing.T) {
|
||||
|
||||
convey.Convey(aiconf.Octopus, t, func() {
|
||||
o, err := octopus.New(Jcs, aiconf.Cfg[aiconf.Octopus].URL, aiconf.Cfg[aiconf.Octopus].Username, aiconf.Cfg[aiconf.Octopus].Password, aiconf.Octopus, platform.Id(123))
|
||||
o, err := octopus.New(Jcs, aiconf.Cfg[aiconf.Octopus].URL, aiconf.Cfg[aiconf.Octopus].Username, aiconf.Cfg[aiconf.Octopus].Password, aiconf.Octopus, platform.Id("123"))
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
|
@ -51,7 +51,7 @@ func TestGet(t *testing.T) {
|
|||
})
|
||||
|
||||
convey.Convey(aiconf.OpenI, t, func() {
|
||||
o, _ := openI.New(Jcs, aiconf.Cfg[aiconf.OpenI].Username, aiconf.Cfg[aiconf.OpenI].Password, aiconf.Cfg[aiconf.OpenI].APIKey, aiconf.OpenI, platform.Id(123), aiconf.Cfg[aiconf.OpenI].DataRepo)
|
||||
o, _ := openI.New(Jcs, aiconf.Cfg[aiconf.OpenI].Username, aiconf.Cfg[aiconf.OpenI].Password, aiconf.Cfg[aiconf.OpenI].APIKey, aiconf.OpenI, platform.Id("123"), aiconf.Cfg[aiconf.OpenI].DataRepo)
|
||||
common.InitClient()
|
||||
|
||||
alg := NewAlgorithm(o.Alg)
|
||||
|
@ -102,7 +102,7 @@ func TestCreate(t *testing.T) {
|
|||
//o, _ := openI.New("nudt-ysz", "", "8cff1d2db9171462c02901d086d13221389fd082", platform.Id(123), "data")
|
||||
//common.InitClient()
|
||||
|
||||
oct, _ := octopus.New(Jcs, aiconf.Cfg[aiconf.Octopus].URL, aiconf.Cfg[aiconf.Octopus].Username, aiconf.Cfg[aiconf.Octopus].Password, aiconf.Octopus, platform.Id(123))
|
||||
oct, _ := octopus.New(Jcs, aiconf.Cfg[aiconf.Octopus].URL, aiconf.Cfg[aiconf.Octopus].Username, aiconf.Cfg[aiconf.Octopus].Password, aiconf.Octopus, platform.Id("123"))
|
||||
|
||||
alg := NewAlgorithm(oct.Alg)
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ import (
|
|||
|
||||
func TestDataset(t *testing.T) {
|
||||
convey.Convey(aiconf.OpenI, t, func() {
|
||||
o, _ := openI.New(Jcs, aiconf.Cfg[aiconf.OpenI].Username, aiconf.Cfg[aiconf.OpenI].Password, aiconf.Cfg[aiconf.OpenI].APIKey, aiconf.OpenI, platform.Id(123), aiconf.Cfg[aiconf.OpenI].DataRepo)
|
||||
o, _ := openI.New(Jcs, aiconf.Cfg[aiconf.OpenI].Username, aiconf.Cfg[aiconf.OpenI].Password, aiconf.Cfg[aiconf.OpenI].APIKey, aiconf.OpenI, platform.Id("123"), aiconf.Cfg[aiconf.OpenI].DataRepo)
|
||||
common.InitClient()
|
||||
|
||||
ds := NewDataset(o.Ds)
|
||||
|
@ -62,7 +62,7 @@ func TestDataset(t *testing.T) {
|
|||
})
|
||||
|
||||
convey.Convey(aiconf.Octopus, t, func() {
|
||||
oct, _ := octopus.New(Jcs, aiconf.Cfg[aiconf.Octopus].URL, aiconf.Cfg[aiconf.Octopus].Username, aiconf.Cfg[aiconf.Octopus].Password, aiconf.Octopus, platform.Id(123))
|
||||
oct, _ := octopus.New(Jcs, aiconf.Cfg[aiconf.Octopus].URL, aiconf.Cfg[aiconf.Octopus].Username, aiconf.Cfg[aiconf.Octopus].Password, aiconf.Octopus, platform.Id("123"))
|
||||
|
||||
ds := NewDataset(oct.Ds)
|
||||
|
||||
|
@ -90,7 +90,7 @@ func TestCreateDataset(t *testing.T) {
|
|||
//o, _ := openI.New(aiconf.Cfg[aiconf.OpenI].Username, aiconf.Cfg[aiconf.OpenI].Password, aiconf.Cfg[aiconf.OpenI].APIKey, aiconf.OpenI, platform.Id(123), aiconf.Cfg[aiconf.OpenI].DataRepo)
|
||||
//common.InitClient()
|
||||
|
||||
oct, _ := octopus.New(Jcs, aiconf.Cfg[aiconf.Octopus].URL, aiconf.Cfg[aiconf.Octopus].Username, aiconf.Cfg[aiconf.Octopus].Password, aiconf.Octopus, platform.Id(123))
|
||||
oct, _ := octopus.New(Jcs, aiconf.Cfg[aiconf.Octopus].URL, aiconf.Cfg[aiconf.Octopus].Username, aiconf.Cfg[aiconf.Octopus].Password, aiconf.Octopus, platform.Id("123"))
|
||||
|
||||
ds := NewDataset(oct.Ds)
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ import (
|
|||
|
||||
func TestImage(t *testing.T) {
|
||||
convey.Convey(aiconf.OpenI, t, func() {
|
||||
o, _ := openI.New(Jcs, aiconf.Cfg[aiconf.OpenI].Username, aiconf.Cfg[aiconf.OpenI].Password, aiconf.Cfg[aiconf.OpenI].APIKey, aiconf.OpenI, platform.Id(123), aiconf.Cfg[aiconf.OpenI].DataRepo)
|
||||
o, _ := openI.New(Jcs, aiconf.Cfg[aiconf.OpenI].Username, aiconf.Cfg[aiconf.OpenI].Password, aiconf.Cfg[aiconf.OpenI].APIKey, aiconf.OpenI, platform.Id("123"), aiconf.Cfg[aiconf.OpenI].DataRepo)
|
||||
|
||||
common.InitClient()
|
||||
i := NewImage(o.Img)
|
||||
|
@ -83,7 +83,7 @@ func TestImage(t *testing.T) {
|
|||
|
||||
func TestOctopusImage(t *testing.T) {
|
||||
convey.Convey(aiconf.Octopus, t, func() {
|
||||
o, _ := octopus.New(Jcs, aiconf.Cfg[aiconf.Octopus].URL, aiconf.Cfg[aiconf.Octopus].Username, aiconf.Cfg[aiconf.Octopus].Password, aiconf.Octopus, platform.Id(123))
|
||||
o, _ := octopus.New(Jcs, aiconf.Cfg[aiconf.Octopus].URL, aiconf.Cfg[aiconf.Octopus].Username, aiconf.Cfg[aiconf.Octopus].Password, aiconf.Octopus, platform.Id("123"))
|
||||
|
||||
i := NewImage(o.Img)
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ import (
|
|||
func TestCreateModel(t *testing.T) {
|
||||
|
||||
convey.Convey("Create Model", t, func() {
|
||||
o, _ := openI.New(Jcs, aiconf.Cfg[aiconf.OpenI].Username, aiconf.Cfg[aiconf.OpenI].Password, aiconf.Cfg[aiconf.OpenI].APIKey, aiconf.OpenI, platform.Id(123), aiconf.Cfg[aiconf.OpenI].DataRepo)
|
||||
o, _ := openI.New(Jcs, aiconf.Cfg[aiconf.OpenI].Username, aiconf.Cfg[aiconf.OpenI].Password, aiconf.Cfg[aiconf.OpenI].APIKey, aiconf.OpenI, platform.Id("123"), aiconf.Cfg[aiconf.OpenI].DataRepo)
|
||||
common.InitClient()
|
||||
|
||||
mdl := NewModel(o.Mdl)
|
||||
|
|
|
@ -16,7 +16,7 @@ import (
|
|||
|
||||
func TestResource(t *testing.T) {
|
||||
convey.Convey(aiconf.OpenI, t, func() {
|
||||
o, _ := openI.New(Jcs, aiconf.Cfg[aiconf.OpenI].Username, aiconf.Cfg[aiconf.OpenI].Password, aiconf.Cfg[aiconf.OpenI].APIKey, aiconf.OpenI, platform.Id(123), aiconf.Cfg[aiconf.OpenI].DataRepo)
|
||||
o, _ := openI.New(Jcs, aiconf.Cfg[aiconf.OpenI].Username, aiconf.Cfg[aiconf.OpenI].Password, aiconf.Cfg[aiconf.OpenI].APIKey, aiconf.OpenI, platform.Id("123"), aiconf.Cfg[aiconf.OpenI].DataRepo)
|
||||
|
||||
common.InitClient()
|
||||
res := NewResource(o.Res)
|
||||
|
@ -97,7 +97,7 @@ func TestResource(t *testing.T) {
|
|||
|
||||
func TestGetResourceSpecs(t *testing.T) {
|
||||
convey.Convey(aiconf.OpenI, t, func() {
|
||||
o, _ := openI.New(Jcs, aiconf.Cfg[aiconf.OpenI].Username, aiconf.Cfg[aiconf.OpenI].Password, aiconf.Cfg[aiconf.OpenI].APIKey, aiconf.OpenI, platform.Id(123), aiconf.Cfg[aiconf.OpenI].DataRepo)
|
||||
o, _ := openI.New(Jcs, aiconf.Cfg[aiconf.OpenI].Username, aiconf.Cfg[aiconf.OpenI].Password, aiconf.Cfg[aiconf.OpenI].APIKey, aiconf.OpenI, platform.Id("123"), aiconf.Cfg[aiconf.OpenI].DataRepo)
|
||||
|
||||
common.InitClient()
|
||||
res := NewResource(o.Res)
|
||||
|
@ -116,7 +116,7 @@ func TestGetResourceSpecs(t *testing.T) {
|
|||
})
|
||||
|
||||
convey.Convey(aiconf.Octopus, t, func() {
|
||||
oct, _ := octopus.New(Jcs, aiconf.Cfg[aiconf.Octopus].URL, aiconf.Cfg[aiconf.Octopus].Username, aiconf.Cfg[aiconf.Octopus].Password, aiconf.Octopus, platform.Id(123))
|
||||
oct, _ := octopus.New(Jcs, aiconf.Cfg[aiconf.Octopus].URL, aiconf.Cfg[aiconf.Octopus].Username, aiconf.Cfg[aiconf.Octopus].Password, aiconf.Octopus, platform.Id("123"))
|
||||
|
||||
res := NewResource(oct.Res)
|
||||
|
||||
|
|
|
@ -30,7 +30,7 @@ func NewService(platforms ...platform.IPlatform) (*Service, error) {
|
|||
s := &Service{}
|
||||
for _, pf := range platforms {
|
||||
if err := s.registerPlatform(pf); err != nil {
|
||||
return nil, fmt.Errorf("failed to register platform %d: %w", pf.Id(), err)
|
||||
return nil, fmt.Errorf("failed to register platform %s: %w", pf.Id(), err)
|
||||
}
|
||||
}
|
||||
return s, nil
|
||||
|
@ -107,7 +107,7 @@ func (s *Service) AllTrainResources(ctx context.Context) ([]*resource.Spec, erro
|
|||
defer mu.Unlock()
|
||||
|
||||
if err != nil {
|
||||
errList = append(errList, fmt.Errorf("platform %d: %w", id, err))
|
||||
errList = append(errList, fmt.Errorf("platform %s: %w", id, err))
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -324,12 +324,12 @@ func loadFromSyncMap[T any](m *sync.Map, id platform.Id, resourceType string) (T
|
|||
var zero T
|
||||
val, ok := m.Load(id)
|
||||
if !ok {
|
||||
return zero, fmt.Errorf("%s for platform ID %d not found", resourceType, id)
|
||||
return zero, fmt.Errorf("%s for platform ID %s not found", resourceType, id)
|
||||
}
|
||||
|
||||
result, ok := val.(T)
|
||||
if !ok {
|
||||
return zero, fmt.Errorf("invalid %s type for platform ID %d", resourceType, id)
|
||||
return zero, fmt.Errorf("invalid %s type for platform ID %s", resourceType, id)
|
||||
}
|
||||
|
||||
return result, nil
|
||||
|
|
|
@ -16,7 +16,7 @@ import (
|
|||
|
||||
func TestAlgorithm_Train(t *testing.T) {
|
||||
convey.Convey("Test Service", t, func() {
|
||||
o, _ := openI.New(Jcs, aiconf.Cfg[aiconf.OpenI].Username, aiconf.Cfg[aiconf.OpenI].Password, aiconf.Cfg[aiconf.OpenI].APIKey, aiconf.OpenI, platform.Id(123), aiconf.Cfg[aiconf.OpenI].DataRepo)
|
||||
o, _ := openI.New(Jcs, aiconf.Cfg[aiconf.OpenI].Username, aiconf.Cfg[aiconf.OpenI].Password, aiconf.Cfg[aiconf.OpenI].APIKey, aiconf.OpenI, platform.Id("123"), aiconf.Cfg[aiconf.OpenI].DataRepo)
|
||||
//oct, _ := octopus.New(aiconf.Cfg[aiconf.Octopus].URL, aiconf.Cfg[aiconf.Octopus].Username, aiconf.Cfg[aiconf.Octopus].Password, platform.Id(456))
|
||||
|
||||
common.InitClient()
|
||||
|
@ -71,10 +71,10 @@ func TestAlgorithm_Train(t *testing.T) {
|
|||
|
||||
func TestService(t *testing.T) {
|
||||
convey.Convey("Test Service", t, func() {
|
||||
o, _ := openI.New(Jcs, aiconf.Cfg[aiconf.OpenI].Username, aiconf.Cfg[aiconf.OpenI].Password, aiconf.Cfg[aiconf.OpenI].APIKey, aiconf.OpenI, platform.Id(123), aiconf.Cfg[aiconf.OpenI].DataRepo)
|
||||
o, _ := openI.New(Jcs, aiconf.Cfg[aiconf.OpenI].Username, aiconf.Cfg[aiconf.OpenI].Password, aiconf.Cfg[aiconf.OpenI].APIKey, aiconf.OpenI, platform.Id("123"), aiconf.Cfg[aiconf.OpenI].DataRepo)
|
||||
common.InitClient()
|
||||
|
||||
o1, err := octopus.New(nil, aiconf.Cfg[aiconf.Octopus].URL, aiconf.Cfg[aiconf.Octopus].Username, aiconf.Cfg[aiconf.Octopus].Password, aiconf.Octopus, platform.Id(456))
|
||||
o1, err := octopus.New(nil, aiconf.Cfg[aiconf.Octopus].URL, aiconf.Cfg[aiconf.Octopus].Username, aiconf.Cfg[aiconf.Octopus].Password, aiconf.Octopus, platform.Id("456"))
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@ import (
|
|||
|
||||
func TestOpenITask(t *testing.T) {
|
||||
convey.Convey(aiconf.OpenI, t, func() {
|
||||
o, _ := openI.New(Jcs, aiconf.Cfg[aiconf.OpenI].Username, aiconf.Cfg[aiconf.OpenI].Password, aiconf.Cfg[aiconf.OpenI].APIKey, aiconf.OpenI, platform.Id(123), aiconf.Cfg[aiconf.OpenI].DataRepo)
|
||||
o, _ := openI.New(Jcs, aiconf.Cfg[aiconf.OpenI].Username, aiconf.Cfg[aiconf.OpenI].Password, aiconf.Cfg[aiconf.OpenI].APIKey, aiconf.OpenI, platform.Id("123"), aiconf.Cfg[aiconf.OpenI].DataRepo)
|
||||
common.InitClient()
|
||||
|
||||
tps := &task.TrainParams{
|
||||
|
@ -64,7 +64,7 @@ func TestOpenITask(t *testing.T) {
|
|||
|
||||
func TestResultSync(t *testing.T) {
|
||||
convey.Convey(aiconf.OpenI, t, func() {
|
||||
o, _ := openI.New(Jcs, aiconf.Cfg[aiconf.OpenI].Username, aiconf.Cfg[aiconf.OpenI].Password, aiconf.Cfg[aiconf.OpenI].APIKey, aiconf.OpenI, platform.Id(123), aiconf.Cfg[aiconf.OpenI].DataRepo)
|
||||
o, _ := openI.New(Jcs, aiconf.Cfg[aiconf.OpenI].Username, aiconf.Cfg[aiconf.OpenI].Password, aiconf.Cfg[aiconf.OpenI].APIKey, aiconf.OpenI, platform.Id("123"), aiconf.Cfg[aiconf.OpenI].DataRepo)
|
||||
common.InitClient()
|
||||
|
||||
src := &aicom.Source{
|
||||
|
@ -99,7 +99,7 @@ func TestResultSync(t *testing.T) {
|
|||
|
||||
func TestOctopusTask(t *testing.T) {
|
||||
convey.Convey(aiconf.Octopus, t, func() {
|
||||
o, _ := octopus.New(Jcs, aiconf.Cfg[aiconf.Octopus].URL, aiconf.Cfg[aiconf.Octopus].Username, aiconf.Cfg[aiconf.Octopus].Password, aiconf.Octopus, platform.Id(123))
|
||||
o, _ := octopus.New(Jcs, aiconf.Cfg[aiconf.Octopus].URL, aiconf.Cfg[aiconf.Octopus].Username, aiconf.Cfg[aiconf.Octopus].Password, aiconf.Octopus, platform.Id("123"))
|
||||
|
||||
tps := &task.TrainParams{
|
||||
TaskName: "testTask123",
|
||||
|
|
|
@ -48,7 +48,7 @@ func (c *cloudApi) CreateContainerHandler(ctx *gin.Context) {
|
|||
fmt.Println(c.service)
|
||||
createContainer, err := c.service.CreateContainer(ctx.Request.Context(), pfId, ¶m)
|
||||
if err != nil {
|
||||
model.Response(ctx, http.StatusInternalServerError, err, nil)
|
||||
model.Response(ctx, http.StatusInternalServerError, err.Error(), nil)
|
||||
return
|
||||
}
|
||||
model.Response(ctx, http.StatusOK, "success", createContainer)
|
||||
|
|
|
@ -101,3 +101,27 @@ type PageResult struct {
|
|||
PageNum int `json:"pageNum,omitempty"`
|
||||
PageSize int `json:"pageSize,omitempty"`
|
||||
}
|
||||
type TokenResp struct {
|
||||
Code int `json:"code"`
|
||||
Message string `json:"message"`
|
||||
Data struct {
|
||||
TokenHead string `json:"tokenHead"`
|
||||
ExpiresIn string `json:"expiresIn"`
|
||||
JsmUserInfo struct {
|
||||
Code string `json:"code"`
|
||||
Message string `json:"message"`
|
||||
Data struct {
|
||||
UserID int `json:"userID"`
|
||||
Buckets struct {
|
||||
HPCSlurm int `json:"HPCSlurm"`
|
||||
Code int `json:"code"`
|
||||
Dataset int `json:"dataset"`
|
||||
Image int `json:"image"`
|
||||
Model int `json:"model"`
|
||||
Result int `json:"result"`
|
||||
} `json:"buckets"`
|
||||
} `json:"data"`
|
||||
} `json:"jsmUserInfo"`
|
||||
Token string `json:"token"`
|
||||
} `json:"data"`
|
||||
}
|
||||
|
|
|
@ -1,12 +1,20 @@
|
|||
system:
|
||||
port: 8080
|
||||
port: 9599
|
||||
log-level: info
|
||||
log-file: pcm-participant.log
|
||||
log-console: true
|
||||
|
||||
pcm-core:
|
||||
coordinator-host: http://127.0.0.1:8999
|
||||
participant-host: http://localhost:8080
|
||||
coordinator-host: http://119.45.255.234:30180
|
||||
participant-host: http://119.45.100.73:18868/participant
|
||||
hpc-cluster-list: /pcm/v1/adapter/cluster/list?type=2&pageNum=1&pageSize=10&storageSchedule=1
|
||||
ai-cluster-list: /pcm/v1/adapter/cluster/list?adapterId=1777144940456666666&type=1&pageNum=1&pageSize=10&storageSchedule=1
|
||||
cloud-cluster-list: /pcm/v1/adapter/cluster/list?adapterId=1770658294298316800&type=0&pageNum=1&pageSize=10
|
||||
cloud-cluster-list: /pcm/v1/adapter/cluster/list?adapterId=1770658294298316800&type=0&pageNum=1&pageSize=10
|
||||
token: /jcc-admin/admin/login
|
||||
username: admin
|
||||
password: Nudt@123
|
||||
|
||||
jcs:
|
||||
name: JCS
|
||||
api_key:
|
||||
url: http://121.36.5.116:32010
|
|
@ -7,4 +7,6 @@ type PcmCore struct {
|
|||
AIClusterList string `mapstructure:"ai-cluster-list" json:"ai-cluster-list" yaml:"ai-cluster-list"` // 集群列表接口
|
||||
CloudClusterList string `mapstructure:"cloud-cluster-list" json:"cloud-cluster-list" yaml:"cloud-cluster-list"`
|
||||
Token string `mapstructure:"token" json:"token" yaml:"token"`
|
||||
Username string `mapstructure:"username" json:"username" yaml:"username"`
|
||||
Password string `mapstructure:"password" json:"password" yaml:"password"`
|
||||
}
|
||||
|
|
|
@ -28,22 +28,25 @@ func GetAllAIClusterInfos() map[string]types.ClusterInfo {
|
|||
|
||||
func InitAICluster(cfg *config.Server) (*service.Service, error) {
|
||||
client := utils.InitClient(cfg.PcmCore.CoordinatorHost, "")
|
||||
return initAISvcs(client, cfg.PcmCore, cfg.Jcs)
|
||||
token, err := PcmLoginToken(client, cfg.PcmCore)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return initAISvcs(client, cfg.PcmCore, cfg.Jcs, token)
|
||||
}
|
||||
|
||||
// 初始化智算集群连接池
|
||||
func initAISvcs(client *utils.RestyClient, core config.PcmCore, jcs config.Jcs) (*service.Service, error) {
|
||||
func initAISvcs(client *utils.RestyClient, core config.PcmCore, jcs config.Jcs, token string) (*service.Service, error) {
|
||||
resp := types.ResultResp{}
|
||||
token := "Bearer " + core.Token
|
||||
_, err := client.Request(core.CoordinatorHost+core.AIClusterList, "GET", func(req *resty.Request) {
|
||||
req.SetHeader("Authorization", token).SetResult(&resp)
|
||||
req.SetHeader("Authorization", "Bearer "+token).SetResult(&resp)
|
||||
})
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("获取集群列表失败: %w", err)
|
||||
return nil, fmt.Errorf("%s, 获取集群列表失败: %w", AI, err)
|
||||
}
|
||||
|
||||
if resp.Code != 200 {
|
||||
return nil, fmt.Errorf("API返回错误: %d, 消息: %s", resp.Code, resp.Msg)
|
||||
return nil, fmt.Errorf("%s, API返回错误: %d, 消息: %s", AI, resp.Code, resp.Msg)
|
||||
}
|
||||
|
||||
var platforms []platform.IPlatform
|
||||
|
@ -151,7 +154,7 @@ func initAISvcs(client *utils.RestyClient, core config.PcmCore, jcs config.Jcs)
|
|||
}
|
||||
}
|
||||
if len(platforms) == 0 {
|
||||
return nil, fmt.Errorf("注册集群列表为空")
|
||||
return nil, fmt.Errorf("%s, 注册集群列表为空", AI)
|
||||
}
|
||||
|
||||
for _, p := range platforms {
|
||||
|
|
|
@ -27,22 +27,25 @@ func GetAllCloudClusterInfos() map[string]types.ClusterInfo {
|
|||
|
||||
func InitCloudCluster(cfg *config.Server) (*service.Service, error) {
|
||||
client := utils.InitClient(cfg.PcmCore.CoordinatorHost, "")
|
||||
return initCloudSvc(client, cfg.PcmCore)
|
||||
token, err := PcmLoginToken(client, cfg.PcmCore)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return initCloudSvc(client, cfg.PcmCore, token)
|
||||
}
|
||||
|
||||
// 初始化智算集群连接池
|
||||
func initCloudSvc(client *utils.RestyClient, core config.PcmCore) (*service.Service, error) {
|
||||
func initCloudSvc(client *utils.RestyClient, core config.PcmCore, token string) (*service.Service, error) {
|
||||
resp := types.ResultResp{}
|
||||
token := "Bearer " + core.Token
|
||||
_, err := client.Request(core.CoordinatorHost+core.CloudClusterList, "GET", func(req *resty.Request) {
|
||||
req.SetHeader("Authorization", token).SetResult(&resp)
|
||||
req.SetHeader("Authorization", "Bearer "+token).SetResult(&resp)
|
||||
})
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("获取集群列表失败: %w", err)
|
||||
return nil, fmt.Errorf("%s, 获取集群列表失败: %w", CLOUD, err)
|
||||
}
|
||||
|
||||
if resp.Code != 200 {
|
||||
return nil, fmt.Errorf("API返回错误: %d, 消息: %s", resp.Code, resp.Msg)
|
||||
return nil, fmt.Errorf("%s, API返回错误: %d, 消息: %s", CLOUD, resp.Code, resp.Msg)
|
||||
}
|
||||
|
||||
var platforms []platform.IPlatform
|
||||
|
@ -138,7 +141,7 @@ func initCloudSvc(client *utils.RestyClient, core config.PcmCore) (*service.Serv
|
|||
}
|
||||
}
|
||||
if len(platforms) == 0 {
|
||||
return nil, fmt.Errorf("注册集群列表为空")
|
||||
return nil, fmt.Errorf("%s, 注册集群列表为空", CLOUD)
|
||||
}
|
||||
|
||||
for _, p := range platforms {
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
package initialize
|
||||
|
||||
const (
|
||||
CLOUD = "cloud"
|
||||
AI = "ai"
|
||||
)
|
|
@ -0,0 +1,33 @@
|
|||
package initialize
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/go-resty/resty/v2"
|
||||
"gitlink.org.cn/JointCloud/pcm-participant-client/common/types"
|
||||
"gitlink.org.cn/JointCloud/pcm-participant-client/common/utils"
|
||||
"gitlink.org.cn/JointCloud/pcm-participant-client/config"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
func PcmLoginToken(client *utils.RestyClient, core config.PcmCore) (string, error) {
|
||||
resp := types.TokenResp{}
|
||||
s := struct {
|
||||
Username string `json:"username"`
|
||||
Password string `json:"password"`
|
||||
}{
|
||||
Username: core.Username,
|
||||
Password: core.Password,
|
||||
}
|
||||
_, err := client.Request(core.CoordinatorHost+core.Token, http.MethodPost, func(req *resty.Request) {
|
||||
req.SetBody(&s).SetResult(&resp)
|
||||
})
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("获取token失败: %w", err)
|
||||
}
|
||||
|
||||
if resp.Code != 200 {
|
||||
return "", fmt.Errorf("获取token失败: %w", err)
|
||||
}
|
||||
|
||||
return resp.Data.Token, nil
|
||||
}
|
|
@ -41,12 +41,12 @@ func main() {
|
|||
// zap.L().Fatal("集群初始化失败", zap.Error(err))
|
||||
//}
|
||||
// 初始化智算集群连接
|
||||
aiSvc, err := initialize.InitAICluster(cfg)
|
||||
if err != nil {
|
||||
initialize.Panic("Server started failed: %s", err)
|
||||
return
|
||||
}
|
||||
api.AiApi.RegisterSvc(aiSvc)
|
||||
//aiSvc, err := initialize.InitAICluster(cfg)
|
||||
//if err != nil {
|
||||
// initialize.Panic("Server started failed: %s", err)
|
||||
// return
|
||||
//}
|
||||
//api.AiApi.RegisterSvc(aiSvc)
|
||||
// 初始化通算集群连接
|
||||
cloudSvc, err := initialize.InitCloudCluster(cfg)
|
||||
if err != nil {
|
||||
|
|
|
@ -2,6 +2,7 @@ package container
|
|||
|
||||
type CreateParam struct {
|
||||
ContainerGroupName string `json:"containerGroupName"`
|
||||
Description string `json:"description,omitempty"`
|
||||
Name string `json:"name"`
|
||||
Image string `json:"image"`
|
||||
Cpu string `json:"cpu,omitempty"`
|
||||
|
|
10
go.work
10
go.work
|
@ -1,6 +1,6 @@
|
|||
go 1.23.0
|
||||
go 1.24.0
|
||||
|
||||
toolchain go1.24.0
|
||||
toolchain go1.24.1
|
||||
|
||||
use (
|
||||
./ai
|
||||
|
@ -11,13 +11,13 @@ use (
|
|||
./participant
|
||||
./participant/eci
|
||||
./participant/k8s
|
||||
./participant/modelarts
|
||||
./participant/octopus
|
||||
./participant/openI
|
||||
./participant/serverless
|
||||
./platform
|
||||
hpc
|
||||
participant/octopus
|
||||
participant/modelarts
|
||||
|
||||
)
|
||||
|
||||
replace gitlink.org.cn/JointCloud/pcm-participant-common v0.0.0 => ./common
|
||||
|
@ -27,3 +27,5 @@ replace gitlink.org.cn/JointCloud/pcm-participant-ai v0.0.0 => ./ai
|
|||
replace gitlink.org.cn/JointCloud/pcm-participant-openi v0.0.0 => ./participant/openI
|
||||
|
||||
replace gitlink.org.cn/JointCloud/pcm-participant-octopus v0.0.0 => ./participant/octopus
|
||||
|
||||
replace gitlink.org.cn/JointCloud/pcm-participant-modelarts v0.0.0 => ./participant/modelarts
|
||||
|
|
189
go.work.sum
189
go.work.sum
|
@ -1,12 +1,26 @@
|
|||
cloud.google.com/go/compute/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc=
|
||||
cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k=
|
||||
dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk=
|
||||
dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
|
||||
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9 h1:VpgP7xuJadIUuKccphEpTJnWhS2jkQyMt6Y7pJCD7fY=
|
||||
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
||||
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802 h1:1BDTz0u9nC3//pOCMdNH+CiXJVYJh5UQNCOBG7jbELc=
|
||||
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
|
||||
github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM=
|
||||
github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo=
|
||||
github.com/JCCE-nudt/apigw-go-sdk v0.0.0-20230525025609-34159d6f2818 h1:QLulhUyxPDs9FFieVZwmKAnUBLeRDhsVNehotAAL/FE=
|
||||
github.com/JCCE-nudt/apigw-go-sdk v0.0.0-20230525025609-34159d6f2818/go.mod h1:j+am5/1URgsvyhOAyURFR9vH3malaW7Tq6d33OyPsnM=
|
||||
github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY=
|
||||
github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
|
||||
github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
|
||||
github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cqUQ3I=
|
||||
github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c=
|
||||
github.com/ProtonMail/go-crypto v1.1.5 h1:eoAQfK2dwL+tFSFpr7TbOaPNUbPiJj4fLYwwGE1FQO4=
|
||||
github.com/ProtonMail/go-crypto v1.1.5/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE=
|
||||
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af h1:wVe6/Ea46ZMeNkQjjBW6xcqyQA/j5e0D6GytH95g0gQ=
|
||||
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
|
||||
github.com/aliyun/alibaba-cloud-sdk-go v1.63.107 h1:qagvUyrgOnBIlVRQWOyCZGVKUIYbMBdGdJ104vBpRFU=
|
||||
github.com/aliyun/alibaba-cloud-sdk-go v1.63.107/go.mod h1:SOSDHfe1kX91v3W5QiBsWSLqeLxImobbMX1mxrFHsVQ=
|
||||
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8=
|
||||
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4=
|
||||
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
|
||||
|
@ -21,10 +35,16 @@ github.com/cyphar/filepath-securejoin v0.3.6 h1:4d9N5ykBnSp5Xn2JkhocYDkOpURL/18C
|
|||
github.com/cyphar/filepath-securejoin v0.3.6/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI=
|
||||
github.com/elazarl/goproxy v1.4.0 h1:4GyuSbFa+s26+3rmYNSuUVsx+HgPrV1bk1jXI0l9wjM=
|
||||
github.com/elazarl/goproxy v1.4.0/go.mod h1:X/5W/t+gzDyLfHW4DrMdpjqYjpXsURlBt9lpBDxZZZQ=
|
||||
github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g=
|
||||
github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
|
||||
github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
|
||||
github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
|
||||
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90 h1:WXb3TSNmHp2vHoCroCIB1foO/yQ36swABL8aOVeDpgg=
|
||||
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
|
||||
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
|
||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||
github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
|
||||
github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
|
||||
github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c=
|
||||
github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU=
|
||||
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
|
||||
|
@ -35,13 +55,47 @@ github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMj
|
|||
github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII=
|
||||
github.com/go-git/go-git/v5 v5.13.2 h1:7O7xvsK7K+rZPKW6AQR1YyNhfywkv7B8/FsP3ki6Zv0=
|
||||
github.com/go-git/go-git/v5 v5.13.2/go.mod h1:hWdW5P4YZRjmpGHwRH2v3zkWcNl6HeXaXQEMGb3NJ9A=
|
||||
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1 h1:QbL/5oDUmRBzO9/Z7Seo6zf912W/a6Sr4Eu0G/3Jho0=
|
||||
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
||||
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
|
||||
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
||||
github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
|
||||
github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
|
||||
github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
|
||||
github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE=
|
||||
github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
|
||||
github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
|
||||
github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
|
||||
github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
|
||||
github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
|
||||
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
|
||||
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
|
||||
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
|
||||
github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d h1:lBXNCxVENCipq4D1Is42JVOP4eQjlB8TQ6H69Yx5J9Q=
|
||||
github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d/go.mod h1:nnjvkQ9ptGaCkuDUx6wNykzzlUixGxvkme+H/lnzb+A=
|
||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF08vX0COfcOBJRhZ8lUbR+ZWIs0Y5g=
|
||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
|
||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
|
||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||
github.com/golang/protobuf v1.5.0 h1:LUVKkCeviFUMKqHa4tXIIij/lbhnMbP7Fn5wKdKkRh4=
|
||||
github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg=
|
||||
github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
|
||||
github.com/google/gnostic-models v0.6.9 h1:MU/8wDLif2qCXZmzncUQ/BOfxWfthHi63KqpoNbWqVw=
|
||||
github.com/google/gnostic-models v0.6.9/go.mod h1:CiWsm0s6BSQd1hRn8/QmxqB6BesYcbSZxsz9b0KuDBw=
|
||||
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
|
||||
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
|
||||
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
|
||||
github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw=
|
||||
github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db h1:097atOisP2aRj7vFgYQBbFN4U4JNXUNYpxael3UzMyo=
|
||||
github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
|
||||
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 h1:JeSE6pjso5THxAzdVpqr6/geYxZytqFMBCOtn/ujyeo=
|
||||
github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674/go.mod h1:r4w70xmWCQKmi1ONH4KIaBptdivuRPyosB9RmPlGEwA=
|
||||
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA=
|
||||
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
|
||||
github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
|
||||
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
|
||||
|
@ -50,22 +104,54 @@ github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NH
|
|||
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
||||
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A=
|
||||
github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo=
|
||||
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
|
||||
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
|
||||
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
|
||||
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
|
||||
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
|
||||
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
|
||||
github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5 h1:PJr+ZMXIecYc1Ey2zucXdR73SMBtgjPgwa31099IMv0=
|
||||
github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
|
||||
github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4=
|
||||
github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
|
||||
github.com/kisielk/errcheck v1.5.0 h1:e8esj/e4R+SAOwFwN+n3zr0nYeCyeweozKfO23MvHzY=
|
||||
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
|
||||
github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg=
|
||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||
github.com/knz/go-libedit v1.10.1 h1:0pHpWtx9vcvC0xGZqEQlQdfSQs7WRlAjuPvk3fOZDCo=
|
||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||
github.com/kr/pty v1.1.1 h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw=
|
||||
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
|
||||
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
|
||||
github.com/moby/spdystream v0.5.0 h1:7r0J1Si3QO/kjRitvSLVVFUjxMEb/YLj6S9FF62JBCU=
|
||||
github.com/moby/spdystream v0.5.0/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI=
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
||||
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus=
|
||||
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
|
||||
github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86 h1:D6paGObi5Wud7xg83MaEFyjxQB1W5bz5d0IFppr+ymk=
|
||||
github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo=
|
||||
github.com/neelance/sourcemap v0.0.0-20200213170602-2833bce08e4c h1:bY6ktFuJkt+ZXkX0RChQch2FtHpWQLVS8Qo1YasiIVk=
|
||||
github.com/neelance/sourcemap v0.0.0-20200213170602-2833bce08e4c/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM=
|
||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
|
||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
||||
github.com/onsi/ginkgo/v2 v2.21.0 h1:7rg/4f3rB88pb5obDgNZrNHrQ4e6WpjonchcpuBRnZM=
|
||||
github.com/onsi/ginkgo/v2 v2.21.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo=
|
||||
github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k=
|
||||
github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY=
|
||||
github.com/onsi/gomega v1.35.1 h1:Cwbd75ZBPxFSuZ6T+rN/WCb/gOc6YgFBXLlZLhC7Ds4=
|
||||
github.com/onsi/gomega v1.35.1/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog=
|
||||
github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b h1:FfH+VrHHk6Lxt9HdVS0PXzSXFyS2NbZKXv33FYPol0A=
|
||||
github.com/opentracing/opentracing-go v1.2.1-0.20220228012449-10b1cf09e00b/go.mod h1:AC62GU6hc0BrNm+9RK9VSiwa/EUe1bkIeFORAMcHvJU=
|
||||
github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
|
||||
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
|
||||
github.com/pjbgf/sha1cd v0.3.2 h1:a9wb0bp1oC2TGwStyn0Umc/IGKQnEgF0vVaZ8QF8eo4=
|
||||
github.com/pjbgf/sha1cd v0.3.2/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A=
|
||||
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A=
|
||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
|
||||
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
|
||||
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
|
||||
github.com/segmentio/fasthash v1.0.3 h1:EI9+KE1EwvMLBWwjpRDc+fEM+prwxDYbslddQGtrmhM=
|
||||
github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY=
|
||||
|
@ -88,44 +174,95 @@ github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4=
|
|||
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
|
||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||
github.com/tencentcloud/tencentcloud-sdk-go v3.0.233+incompatible h1:q+D/Y9jla3afgsIihtyhwyl0c2W+eRWNM9ohVwPiiPw=
|
||||
github.com/tencentcloud/tencentcloud-sdk-go v3.0.233+incompatible/go.mod h1:0PfYow01SHPMhKY31xa+EFz2RStxIqj6JFAJS+IkCi4=
|
||||
github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o=
|
||||
github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
|
||||
github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg=
|
||||
github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
|
||||
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
|
||||
github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
|
||||
github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM=
|
||||
github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw=
|
||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE=
|
||||
go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE=
|
||||
go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
||||
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 h1:/UOmuWzQfxxo9UtlXMwuQU8CMgg1eZXqTRwkSQJWKOI=
|
||||
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
|
||||
golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
|
||||
golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc=
|
||||
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
|
||||
golang.org/x/exp v0.0.0-20220218215828-6cf2b201936e h1:iWVPgObh6F4UDtjBLK51zsy5UHTPLQwCmsNjCsbKhQ0=
|
||||
golang.org/x/exp v0.0.0-20220218215828-6cf2b201936e/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE=
|
||||
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8=
|
||||
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY=
|
||||
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
|
||||
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
|
||||
golang.org/x/image v0.0.0-20190802002840-cff245a6509b h1:+qEpEAPhDZ1o0x3tHzZTQDArnOixOzGD9HUJfcg0mb4=
|
||||
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028 h1:4+4C/Iv2U4fMZBiMCc98MG1In4gJY5YRhtpDNeDeHWs=
|
||||
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
|
||||
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
|
||||
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs=
|
||||
golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||
golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
|
||||
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
||||
golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
||||
golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
||||
golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0=
|
||||
golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
|
||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
|
||||
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
|
||||
golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU=
|
||||
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
|
||||
golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k=
|
||||
golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
|
||||
golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
|
||||
golang.org/x/oauth2 v0.27.0 h1:da9Vo7/tDv5RH/7nZDz1eMGS/q1Vv1N/7FCrBhI9I3M=
|
||||
golang.org/x/oauth2 v0.27.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8=
|
||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
|
||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
|
||||
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||
golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
|
||||
golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||
golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
|
||||
golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
|
||||
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2 h1:IRJeR9r1pYWsHKTRe/IInb7lYvbBVIqOgsX/u0mbOWY=
|
||||
golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
|
||||
golang.org/x/telemetry v0.0.0-20240521205824-bda55230c457 h1:zf5N6UOrA487eEFacMePxjXAJctxKmyjKUsjA11Uzuk=
|
||||
golang.org/x/telemetry v0.0.0-20240521205824-bda55230c457/go.mod h1:pRgIJT+bRLFKnoM1ldnzKoxTIn14Yxz928LQRYYgIN0=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E=
|
||||
golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw=
|
||||
golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
|
||||
|
@ -133,17 +270,69 @@ golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
|
|||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
|
||||
golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
|
||||
golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
|
||||
golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4=
|
||||
golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s=
|
||||
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
|
||||
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg=
|
||||
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
|
||||
golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c=
|
||||
golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ=
|
||||
golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0=
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
|
||||
gonum.org/v1/gonum v0.8.2 h1:CCXrcPKiGGotvnN6jfUsKk4rRqm7q09/YbKb5xCEvtM=
|
||||
gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0=
|
||||
gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0 h1:OE9mWmgKkjJyEmDAAtGMPjXu+YNeGvK9VTSHY6+Qihc=
|
||||
gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
|
||||
gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b h1:Qh4dB5D/WpoUUp3lSod7qgoyEHbDGPUWjIbnqdqqe1k=
|
||||
gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc=
|
||||
google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
|
||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4=
|
||||
gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M=
|
||||
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
|
||||
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
|
||||
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
|
||||
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||
gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=
|
||||
gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
|
||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||
gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
k8s.io/api v0.33.2 h1:YgwIS5jKfA+BZg//OQhkJNIfie/kmRsO0BmNaVSimvY=
|
||||
k8s.io/api v0.33.2/go.mod h1:fhrbphQJSM2cXzCWgqU29xLDuks4mu7ti9vveEnpSXs=
|
||||
k8s.io/apimachinery v0.33.2 h1:IHFVhqg59mb8PJWTLi8m1mAoepkUNYmptHsV+Z1m5jY=
|
||||
k8s.io/apimachinery v0.33.2/go.mod h1:BHW0YOu7n22fFv/JkYOEfkUYNRN0fj0BlvMFWA7b+SM=
|
||||
k8s.io/client-go v0.33.2 h1:z8CIcc0P581x/J1ZYf4CNzRKxRvQAwoAolYPbtQes+E=
|
||||
k8s.io/client-go v0.33.2/go.mod h1:9mCgT4wROvL948w6f6ArJNb7yQd7QsvqavDeZHvNmHo=
|
||||
k8s.io/gengo/v2 v2.0.0-20240826214909-a7b603a56eb7 h1:cErOOTkQ3JW19o4lo91fFurouhP8NcoBvb7CkvhZZpk=
|
||||
k8s.io/gengo/v2 v2.0.0-20240826214909-a7b603a56eb7/go.mod h1:EJykeLsmFC60UQbYJezXkEsG2FLrt0GPNkU5iK5GWxU=
|
||||
k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
|
||||
k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
|
||||
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff h1:/usPimJzUKKu+m+TE36gUyGcf03XZEP0ZIKgKj35LS4=
|
||||
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff/go.mod h1:5jIi+8yX4RIb8wk3XwBo5Pq2ccx4FP10ohkbSKCZoK8=
|
||||
k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 h1:M3sRQVHv7vB20Xc2ybTt7ODCeFj6JSWYFzOFnYeS6Ro=
|
||||
k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
|
||||
nullprogram.com/x/optparse v1.0.0 h1:xGFgVi5ZaWOnYdac2foDT3vg0ZZC9ErXFV57mr4OHrI=
|
||||
rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4=
|
||||
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8=
|
||||
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo=
|
||||
sigs.k8s.io/randfill v0.0.0-20250304075658-069ef1bbf016/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=
|
||||
sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU=
|
||||
sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.6.0 h1:IUA9nvMmnKWcj5jl84xn+T5MnlZKThmUW1TdblaLVAc=
|
||||
sigs.k8s.io/structured-merge-diff/v4 v4.6.0/go.mod h1:dDy58f92j70zLsuZVuUX5Wp9vtxXpaZnkPGWeqDfCps=
|
||||
sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
|
||||
sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
|
||||
|
|
|
@ -6,6 +6,7 @@ import (
|
|||
)
|
||||
|
||||
type CreateContainerParam struct {
|
||||
Description string `json:"description,omitempty"`
|
||||
RegionId string `json:"regionId"`
|
||||
ContainerGroupName string `json:"containerGroupName"`
|
||||
Containers *[]eci.CreateContainerGroupContainer `json:"containers"`
|
||||
|
|
|
@ -17,7 +17,7 @@ func CreateContainer(ctx *gin.Context) {
|
|||
client := common.GetK8sClient()
|
||||
err := service.CreateContainer(client, ¶m)
|
||||
if err != nil {
|
||||
model.Response(ctx, 500, common.INVOKEERROR, err)
|
||||
model.Response(ctx, 500, common.INVOKEERROR, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -90,10 +90,12 @@ func (c *Container) Create(ctx context.Context, param *container.CreateParam) (i
|
|||
return nil, errors.New("ContainerGroupName is required")
|
||||
}
|
||||
cParam := model.CreateContainerParam{
|
||||
Description: param.Description,
|
||||
Container: model.Container{
|
||||
Name: param.Name,
|
||||
Image: param.Image,
|
||||
Args: param.Args,
|
||||
|
||||
Limits: struct {
|
||||
Cpu string `json:"cpu,omitempty"`
|
||||
Memory string `json:"memory,omitempty"`
|
||||
|
|
|
@ -4,6 +4,7 @@ type CreateContainerParam struct {
|
|||
ContainerGroupName string `json:"containerGroupName"`
|
||||
Container Container `json:"Container"`
|
||||
MountPath string `json:"mountPath,omitempty"`
|
||||
Description string `json:"description,omitempty"`
|
||||
}
|
||||
type Container struct {
|
||||
Name string `json:"name"`
|
||||
|
|
|
@ -2,10 +2,11 @@ package service
|
|||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"gitlink.org.cn/JointCloud/pcm-participant-k8s/model"
|
||||
v1 "k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/api/errors"
|
||||
k8sErr "k8s.io/apimachinery/pkg/api/errors"
|
||||
"k8s.io/apimachinery/pkg/api/resource"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/client-go/kubernetes"
|
||||
|
@ -13,12 +14,13 @@ import (
|
|||
|
||||
func CreateContainer(client *kubernetes.Clientset, param *model.CreateContainerParam) error {
|
||||
// 查询pod是否存在
|
||||
_, err := client.CoreV1().Pods("default").Get(context.TODO(), param.ContainerGroupName, metav1.GetOptions{})
|
||||
if err == nil {
|
||||
queryPod, err := client.CoreV1().Pods("default").Get(context.TODO(), param.ContainerGroupName, metav1.GetOptions{})
|
||||
if err != nil && !k8sErr.IsNotFound(err) {
|
||||
return err
|
||||
}
|
||||
if !errors.IsNotFound(err) {
|
||||
return err
|
||||
|
||||
if queryPod.Name != "" {
|
||||
return errors.New("pod already exists.")
|
||||
}
|
||||
// 创建svc
|
||||
if param.Container.ContainerPort.Port != 0 {
|
||||
|
@ -30,6 +32,7 @@ func CreateContainer(client *kubernetes.Clientset, param *model.CreateContainerP
|
|||
// 创建 Pod 对象
|
||||
pod := &v1.Pod{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
|
||||
Name: param.ContainerGroupName, // Pod 名称(必选)
|
||||
Labels: map[string]string{
|
||||
"app": param.ContainerGroupName,
|
||||
|
|
|
@ -2,9 +2,11 @@ package common
|
|||
|
||||
import "C"
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/tls"
|
||||
"fmt"
|
||||
"github.com/JCCE-nudt/apigw-go-sdk/core"
|
||||
json "github.com/json-iterator/go"
|
||||
"io"
|
||||
"net/http"
|
||||
)
|
||||
|
@ -70,3 +72,11 @@ func SendRequestHttp(method, url string, in io.Reader, Platform string) ([]byte,
|
|||
fmt.Println(string(body))
|
||||
return body, nil
|
||||
}
|
||||
|
||||
func ToIOReader(p interface{}) (io.Reader, error) {
|
||||
data, err := json.Marshal(p)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return bytes.NewReader(data), nil
|
||||
}
|
||||
|
|
|
@ -1,7 +1,11 @@
|
|||
package common
|
||||
|
||||
const (
|
||||
Forward_Slash = "/"
|
||||
// algorithm
|
||||
Algorithm = "/v2/{project_id}/algorithms"
|
||||
AlgorithmDetail = "/v2/{project_id}/algorithms/{algorithm_id}"
|
||||
Algorithm = "v2/{project_id}/algorithms"
|
||||
AlgorithmDetail = "v2/{project_id}/algorithms/{algorithm_id}"
|
||||
|
||||
// job
|
||||
TrainingJobList = "v2/{project_id}/training-job-searches"
|
||||
)
|
||||
|
|
|
@ -6,7 +6,7 @@ import (
|
|||
"testing"
|
||||
)
|
||||
|
||||
func Test123(t *testing.T) {
|
||||
func TestSign(t *testing.T) {
|
||||
a := "https://modelarts.cn-south-222.ai.pcl.cn/v2/d18190e28e3f45a281ef0b0696ec9d52/algorithms"
|
||||
body, err := SendRequestHttp(http.MethodGet, a, nil, "")
|
||||
if err != nil {
|
||||
|
|
|
@ -0,0 +1,169 @@
|
|||
package model
|
||||
|
||||
type AlgorithmListParam struct {
|
||||
Offset int `json:"offset,omitempty"`
|
||||
Limit int `json:"limit,omitempty"`
|
||||
SortBy string `json:"sort_by,omitempty"`
|
||||
Order string `json:"order,omitempty"`
|
||||
GroupBy string `json:"group_by,omitempty"`
|
||||
Searches string `json:"searches,omitempty"`
|
||||
WorkspaceId string `json:"workspace_id,omitempty"`
|
||||
}
|
||||
type AlgorithmList struct {
|
||||
Total int `json:"total"`
|
||||
Count int `json:"count"`
|
||||
Limit int `json:"limit"`
|
||||
Offset int `json:"offset"`
|
||||
SortBy string `json:"sort_by"`
|
||||
Order string `json:"order"`
|
||||
GroupBy string `json:"group_by"`
|
||||
Items []struct {
|
||||
Metadata struct {
|
||||
Id string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Description string `json:"description"`
|
||||
CreateTime int64 `json:"create_time"`
|
||||
WorkspaceId string `json:"workspace_id"`
|
||||
AiProject string `json:"ai_project"`
|
||||
UserName string `json:"user_name"`
|
||||
DomainId string `json:"domain_id"`
|
||||
Source string `json:"source"`
|
||||
ApiVersion string `json:"api_version"`
|
||||
IsValid bool `json:"is_valid"`
|
||||
State string `json:"state"`
|
||||
Size int `json:"size"`
|
||||
Tags interface{} `json:"tags"`
|
||||
AttrList interface{} `json:"attr_list"`
|
||||
VersionNum int `json:"version_num"`
|
||||
UpdateTime int `json:"update_time"`
|
||||
} `json:"metadata"`
|
||||
ShareInfo struct {
|
||||
} `json:"share_info"`
|
||||
JobConfig struct {
|
||||
CodeDir string `json:"code_dir"`
|
||||
BootFile string `json:"boot_file"`
|
||||
ParametersCustomization bool `json:"parameters_customization"`
|
||||
Engine struct {
|
||||
EngineId string `json:"engine_id"`
|
||||
EngineName string `json:"engine_name"`
|
||||
EngineVersion string `json:"engine_version"`
|
||||
V1Compatible bool `json:"v1_compatible"`
|
||||
ImageUrl string `json:"image_url"`
|
||||
NonSwrImage bool `json:"non_swr_image"`
|
||||
RunUser string `json:"run_user"`
|
||||
ImageSource bool `json:"image_source"`
|
||||
ImageRepoId string `json:"image_repo_id"`
|
||||
InstallSysPackages bool `json:"install_sys_packages,omitempty"`
|
||||
} `json:"engine"`
|
||||
} `json:"job_config"`
|
||||
ResourceRequirements []interface{} `json:"resource_requirements"`
|
||||
AdvancedConfig struct {
|
||||
} `json:"advanced_config"`
|
||||
} `json:"items"`
|
||||
}
|
||||
|
||||
type Algorithm struct {
|
||||
Metadata struct {
|
||||
Id string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Description string `json:"description"`
|
||||
CreateTime int64 `json:"create_time"`
|
||||
WorkspaceId string `json:"workspace_id"`
|
||||
AiProject string `json:"ai_project"`
|
||||
UserName string `json:"user_name"`
|
||||
DomainId string `json:"domain_id"`
|
||||
Source string `json:"source"`
|
||||
ApiVersion string `json:"api_version"`
|
||||
IsValid bool `json:"is_valid"`
|
||||
State string `json:"state"`
|
||||
Size int `json:"size"`
|
||||
Tags interface{} `json:"tags"`
|
||||
AttrList interface{} `json:"attr_list"`
|
||||
VersionNum int `json:"version_num"`
|
||||
UpdateTime int `json:"update_time"`
|
||||
} `json:"metadata"`
|
||||
ShareInfo struct {
|
||||
} `json:"share_info"`
|
||||
JobConfig struct {
|
||||
CodeDir string `json:"code_dir"`
|
||||
BootFile string `json:"boot_file"`
|
||||
ParametersCustomization bool `json:"parameters_customization"`
|
||||
Engine struct {
|
||||
EngineId string `json:"engine_id"`
|
||||
EngineName string `json:"engine_name"`
|
||||
EngineVersion string `json:"engine_version"`
|
||||
V1Compatible bool `json:"v1_compatible"`
|
||||
ImageUrl string `json:"image_url"`
|
||||
NonSwrImage bool `json:"non_swr_image"`
|
||||
RunUser string `json:"run_user"`
|
||||
ImageSource bool `json:"image_source"`
|
||||
ImageRepoId string `json:"image_repo_id"`
|
||||
} `json:"engine"`
|
||||
} `json:"job_config"`
|
||||
ResourceRequirements interface{} `json:"resource_requirements"`
|
||||
AdvancedConfig struct {
|
||||
} `json:"advanced_config"`
|
||||
}
|
||||
|
||||
type AlgorithmCreateParam struct {
|
||||
AdvancedConfig struct {
|
||||
} `json:"advanced_config,omitempty"`
|
||||
JobConfig struct {
|
||||
CodeDir string `json:"code_dir,omitempty"`
|
||||
BootFile string `json:"boot_file,omitempty"`
|
||||
Engine struct {
|
||||
EngineName string `json:"engine_name,omitempty"`
|
||||
EngineVersion string `json:"engine_version,omitempty"`
|
||||
ImageUrl string `json:"image_url,omitempty"`
|
||||
InstallSysPackages bool `json:"install_sys_packages,omitempty"`
|
||||
} `json:"engine"`
|
||||
Command string `json:"command,omitempty"`
|
||||
Inputs []struct {
|
||||
Name string `json:"name,omitempty"`
|
||||
Description string `json:"description,omitempty"`
|
||||
AccessMethod string `json:"access_method,omitempty"`
|
||||
I18NDescription []struct {
|
||||
} `json:"i18n_description,omitempty"`
|
||||
RemoteConstraints []struct {
|
||||
DataType string `json:"data_type,omitempty"`
|
||||
Attributes *struct {
|
||||
DataFormat []string `json:"data_format,omitempty"`
|
||||
DataSegmentation []string `json:"data_segmentation,omitempty"`
|
||||
DatasetType []string `json:"dataset_type,omitempty"`
|
||||
} `json:"attributes,omitempty"`
|
||||
} `json:"remote_constraints,omitempty"`
|
||||
} `json:"inputs,omitempty"`
|
||||
Outputs []struct {
|
||||
Name string `json:"name,omitempty"`
|
||||
Description string `json:"description,omitempty"`
|
||||
AccessMethod string `json:"access_method,omitempty"`
|
||||
I18NDescription []struct {
|
||||
} `json:"i18n_description,omitempty"`
|
||||
} `json:"outputs,omitempty"`
|
||||
Parameters []struct {
|
||||
Name string `json:"name,omitempty"`
|
||||
Description string `json:"description,omitempty"`
|
||||
Value string `json:"value,omitempty"`
|
||||
Constraint struct {
|
||||
Editable bool `json:"editable,omitempty"`
|
||||
Required bool `json:"required,omitempty"`
|
||||
Sensitive bool `json:"sensitive,omitempty"`
|
||||
Type string `json:"type,omitempty"`
|
||||
ValidRange []interface{} `json:"valid_range,omitempty"`
|
||||
ValidType string `json:"valid_type,omitempty"`
|
||||
} `json:"constraint,omitempty"`
|
||||
} `json:"parameters,omitempty"`
|
||||
ParametersCustomization bool `json:"parameters_customization,omitempty"`
|
||||
} `json:"job_config"`
|
||||
Metadata struct {
|
||||
Name string `json:"name"`
|
||||
Description string `json:"description,omitempty"`
|
||||
Tags interface{} `json:"tags,omitempty"`
|
||||
WorkspaceId string `json:"workspace_id,omitempty"`
|
||||
} `json:"metadata"`
|
||||
ResourceRequirements []struct {
|
||||
Key string `json:"key,omitempty"`
|
||||
Operator string `json:"operator,omitempty"`
|
||||
Values []string `json:"values,omitempty"`
|
||||
} `json:"resource_requirements,omitempty"`
|
||||
}
|
|
@ -0,0 +1,224 @@
|
|||
package model
|
||||
|
||||
type JobListSearchParam struct {
|
||||
Limit int `json:"limit,omitempty"`
|
||||
Offset int `json:"offset,omitempty"`
|
||||
SortBy string `json:"sort_by,omitempty"`
|
||||
Order string `json:"order,omitempty"`
|
||||
GroupBy string `json:"group_by,omitempty"`
|
||||
Filters []struct {
|
||||
Key string `json:"key,omitempty"`
|
||||
Operator string `json:"operator,omitempty"`
|
||||
Value []string `json:"value,omitempty"`
|
||||
} `json:"filters,omitempty"`
|
||||
}
|
||||
|
||||
type JobList struct {
|
||||
Total int `json:"total"`
|
||||
Count int `json:"count"`
|
||||
Limit int `json:"limit"`
|
||||
Offset int `json:"offset"`
|
||||
SortBy string `json:"sort_by"`
|
||||
Order string `json:"order"`
|
||||
GroupBy string `json:"group_by"`
|
||||
WorkspaceId string `json:"workspace_id"`
|
||||
AiProject string `json:"ai_project"`
|
||||
Items []struct {
|
||||
Kind string `json:"kind"`
|
||||
Metadata struct {
|
||||
Id string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Description string `json:"description"`
|
||||
CreateTime int64 `json:"create_time"`
|
||||
WorkspaceId string `json:"workspace_id"`
|
||||
AiProject string `json:"ai_project"`
|
||||
UserName string `json:"user_name"`
|
||||
Annotations struct {
|
||||
JobTemplate string `json:"job_template"`
|
||||
KeyTask string `json:"key_task"`
|
||||
} `json:"annotations"`
|
||||
TrainingExperimentReference struct {
|
||||
} `json:"training_experiment_reference"`
|
||||
Tags []interface{} `json:"tags"`
|
||||
Labels struct {
|
||||
TrainingJob string `json:"training-job"`
|
||||
} `json:"labels,omitempty"`
|
||||
} `json:"metadata"`
|
||||
Status struct {
|
||||
Phase string `json:"phase"`
|
||||
SecondaryPhase string `json:"secondary_phase"`
|
||||
PendingTime int `json:"pending_time"`
|
||||
Duration int `json:"duration"`
|
||||
IsHanged bool `json:"is_hanged"`
|
||||
RetryCount int `json:"retry_count"`
|
||||
StartTime int64 `json:"start_time"`
|
||||
NodeCountMetrics [][]int64 `json:"node_count_metrics"`
|
||||
Tasks []string `json:"tasks"`
|
||||
MetricsStatistics struct {
|
||||
CpuUsage struct {
|
||||
Average float64 `json:"average"`
|
||||
Max float64 `json:"max"`
|
||||
Min float64 `json:"min"`
|
||||
} `json:"cpu_usage"`
|
||||
MemUsage struct {
|
||||
Average float64 `json:"average"`
|
||||
Max float64 `json:"max"`
|
||||
Min float64 `json:"min"`
|
||||
} `json:"mem_usage"`
|
||||
Npu struct {
|
||||
MemUsage struct {
|
||||
Average float64 `json:"average"`
|
||||
Max float64 `json:"max"`
|
||||
Min float64 `json:"min"`
|
||||
} `json:"mem_usage"`
|
||||
Util struct {
|
||||
Average float64 `json:"average"`
|
||||
Max float64 `json:"max"`
|
||||
Min int `json:"min"`
|
||||
} `json:"util"`
|
||||
} `json:"npu"`
|
||||
} `json:"metrics_statistics"`
|
||||
RunningRecords []struct {
|
||||
StartAt int `json:"start_at"`
|
||||
EndAt int `json:"end_at"`
|
||||
StartType string `json:"start_type"`
|
||||
EndReason string `json:"end_reason"`
|
||||
} `json:"running_records"`
|
||||
} `json:"status"`
|
||||
Algorithm struct {
|
||||
Id string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
CodeDir string `json:"code_dir"`
|
||||
BootFile string `json:"boot_file"`
|
||||
ParametersCustomization bool `json:"parameters_customization"`
|
||||
Inputs []struct {
|
||||
Name string `json:"name"`
|
||||
LocalDir string `json:"local_dir"`
|
||||
AccessMethod string `json:"access_method"`
|
||||
Remote struct {
|
||||
Obs struct {
|
||||
ObsUrl string `json:"obs_url"`
|
||||
} `json:"obs"`
|
||||
} `json:"remote"`
|
||||
} `json:"inputs,omitempty"`
|
||||
Outputs []struct {
|
||||
Name string `json:"name"`
|
||||
LocalDir string `json:"local_dir"`
|
||||
AccessMethod string `json:"access_method"`
|
||||
Remote struct {
|
||||
Obs struct {
|
||||
ObsUrl string `json:"obs_url"`
|
||||
} `json:"obs"`
|
||||
} `json:"remote"`
|
||||
Mode string `json:"mode"`
|
||||
Period int `json:"period"`
|
||||
PrefetchToLocal bool `json:"prefetch_to_local"`
|
||||
} `json:"outputs,omitempty"`
|
||||
Engine struct {
|
||||
EngineId string `json:"engine_id"`
|
||||
EngineName string `json:"engine_name"`
|
||||
EngineVersion string `json:"engine_version"`
|
||||
V1Compatible bool `json:"v1_compatible"`
|
||||
ImageUrl string `json:"image_url"`
|
||||
NonSwrImage bool `json:"non_swr_image"`
|
||||
RunUser string `json:"run_user"`
|
||||
ImageSource bool `json:"image_source"`
|
||||
ImageRepoId string `json:"image_repo_id"`
|
||||
InstallSysPackages bool `json:"install_sys_packages,omitempty"`
|
||||
} `json:"engine"`
|
||||
Environments struct {
|
||||
PCMDATASET string `json:"PCM_DATASET"`
|
||||
Output string `json:"output,omitempty"`
|
||||
} `json:"environments,omitempty"`
|
||||
Policies struct {
|
||||
} `json:"policies,omitempty"`
|
||||
Parameters []struct {
|
||||
Name string `json:"name"`
|
||||
Description string `json:"description"`
|
||||
I18NDescription interface{} `json:"i18n_description"`
|
||||
Value string `json:"value"`
|
||||
Constraint struct {
|
||||
Type string `json:"type"`
|
||||
Editable bool `json:"editable"`
|
||||
Required bool `json:"required"`
|
||||
Sensitive bool `json:"sensitive"`
|
||||
ValidType string `json:"valid_type"`
|
||||
ValidRange interface{} `json:"valid_range"`
|
||||
} `json:"constraint"`
|
||||
} `json:"parameters,omitempty"`
|
||||
} `json:"algorithm"`
|
||||
Spec struct {
|
||||
Resource struct {
|
||||
Policy string `json:"policy,omitempty"`
|
||||
FlavorId string `json:"flavor_id"`
|
||||
FlavorName string `json:"flavor_name,omitempty"`
|
||||
PoolResourceFlavor string `json:"pool_resource_flavor"`
|
||||
NodeCount int `json:"node_count"`
|
||||
FlavorDetail struct {
|
||||
FlavorType string `json:"flavor_type"`
|
||||
Billing struct {
|
||||
Code string `json:"code"`
|
||||
UnitNum int `json:"unit_num"`
|
||||
} `json:"billing"`
|
||||
Attributes struct {
|
||||
IsMultiDevicesSupported string `json:"is_multi_devices_supported"`
|
||||
IsMultiNodesSupported string `json:"is_multi_nodes_supported"`
|
||||
} `json:"attributes"`
|
||||
FlavorInfo struct {
|
||||
Cpu struct {
|
||||
Arch string `json:"arch"`
|
||||
CoreNum int `json:"core_num"`
|
||||
} `json:"cpu"`
|
||||
Npu struct {
|
||||
UnitNum int `json:"unit_num"`
|
||||
ProductName string `json:"product_name"`
|
||||
Memory string `json:"memory"`
|
||||
} `json:"npu"`
|
||||
Memory struct {
|
||||
Size int `json:"size"`
|
||||
Unit string `json:"unit"`
|
||||
} `json:"memory"`
|
||||
Disk struct {
|
||||
Size int `json:"size"`
|
||||
Unit string `json:"unit"`
|
||||
} `json:"disk"`
|
||||
} `json:"flavor_info"`
|
||||
} `json:"flavor_detail,omitempty"`
|
||||
PoolId string `json:"pool_id,omitempty"`
|
||||
PoolInfo struct {
|
||||
CpuArch string `json:"cpu_arch"`
|
||||
CoreNum int `json:"core_num"`
|
||||
MemSize int `json:"mem_size"`
|
||||
CacheSize int `json:"cache_size"`
|
||||
Accelerator string `json:"accelerator"`
|
||||
AcceleratorNum int `json:"accelerator_num"`
|
||||
AcceleratorType string `json:"accelerator_type"`
|
||||
AcceleratorSize int `json:"accelerator_size"`
|
||||
UsePrivileged bool `json:"use_privileged"`
|
||||
UseHostNetwork bool `json:"use_host_network"`
|
||||
UseIbNetwork bool `json:"use_ib_network"`
|
||||
ProjectId string `json:"project_id"`
|
||||
PoolId string `json:"pool_id"`
|
||||
ClusterId string `json:"cluster_id"`
|
||||
MaosPool bool `json:"maos_pool"`
|
||||
QuotaId string `json:"quota_id"`
|
||||
MaosMigrated bool `json:"maos_migrated"`
|
||||
DetectAllInInt bool `json:"detect_all_in_int"`
|
||||
PoolType string `json:"pool_type"`
|
||||
EnableCabinet bool `json:"enable_cabinet"`
|
||||
EnableMemarts bool `json:"enable_memarts"`
|
||||
EnableEms bool `json:"enable_ems"`
|
||||
} `json:"pool_info,omitempty"`
|
||||
} `json:"resource"`
|
||||
LogExportPath struct {
|
||||
ObsUrl string `json:"obs_url"`
|
||||
} `json:"log_export_path"`
|
||||
IsHostedLog bool `json:"is_hosted_log"`
|
||||
SchedulePolicy struct {
|
||||
Priority int `json:"priority"`
|
||||
RequiredAffinity struct {
|
||||
} `json:"required_affinity"`
|
||||
} `json:"schedule_policy,omitempty"`
|
||||
} `json:"spec"`
|
||||
} `json:"items"`
|
||||
}
|
|
@ -0,0 +1,104 @@
|
|||
package service
|
||||
|
||||
import (
|
||||
json "github.com/json-iterator/go"
|
||||
"gitlink.org.cn/JointCloud/pcm-participant-modelarts/common"
|
||||
"gitlink.org.cn/JointCloud/pcm-participant-modelarts/model"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func AlgorithmList(ip, projectId string, param *model.AlgorithmListParam) (*model.AlgorithmList, error) {
|
||||
var reqUrl = ip + common.Forward_Slash + common.Algorithm
|
||||
|
||||
qs := url.Values{}
|
||||
|
||||
if param != nil {
|
||||
if param.Limit > 0 {
|
||||
qs.Add("limit", strconv.Itoa(param.Limit))
|
||||
}
|
||||
if param.Offset > 0 {
|
||||
qs.Add("offset", strconv.Itoa(param.Offset))
|
||||
}
|
||||
if param.SortBy != "" {
|
||||
qs.Add("sort_by", param.SortBy)
|
||||
}
|
||||
if param.Order != "" {
|
||||
qs.Add("order", param.Order)
|
||||
}
|
||||
if param.GroupBy != "" {
|
||||
qs.Add("group_by", param.GroupBy)
|
||||
}
|
||||
if param.Searches != "" {
|
||||
qs.Add("searches", param.Searches)
|
||||
}
|
||||
if param.WorkspaceId != "" {
|
||||
qs.Add("workspace_id", param.WorkspaceId)
|
||||
}
|
||||
}
|
||||
|
||||
reqUrl = strings.Replace(reqUrl, "{project_id}", projectId, -1)
|
||||
|
||||
if len(qs) > 0 {
|
||||
reqUrl += "?" + qs.Encode()
|
||||
}
|
||||
|
||||
body, err := common.SendRequestHttp(http.MethodGet, reqUrl, nil, "")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
resp := &model.AlgorithmList{}
|
||||
err = json.Unmarshal(body, resp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
func AlgorithmDetail(ip, projectId, algorithmId string) (*model.Algorithm, error) {
|
||||
var reqUrl = ip + common.Forward_Slash + common.AlgorithmDetail
|
||||
|
||||
reqUrl = strings.Replace(reqUrl, "{project_id}", projectId, -1)
|
||||
reqUrl = strings.Replace(reqUrl, "{algorithm_id}", algorithmId, -1)
|
||||
|
||||
body, err := common.SendRequestHttp(http.MethodGet, reqUrl, nil, "")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
resp := &model.Algorithm{}
|
||||
err = json.Unmarshal(body, resp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp, nil
|
||||
}
|
||||
|
||||
func AlgorithmCreate(ip, projectId string, param *model.AlgorithmCreateParam) (*model.Algorithm, error) {
|
||||
var reqUrl = ip + common.Forward_Slash + common.Algorithm
|
||||
|
||||
reqUrl = strings.Replace(reqUrl, "{project_id}", projectId, -1)
|
||||
|
||||
reader, err := common.ToIOReader(param)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
body, err := common.SendRequestHttp(http.MethodPost, reqUrl, reader, "")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
resp := &model.Algorithm{}
|
||||
err = json.Unmarshal(body, resp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp, nil
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
package service
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/smartystreets/goconvey/convey"
|
||||
"gitlink.org.cn/JointCloud/pcm-participant-modelarts/model"
|
||||
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestAlgorithm(t *testing.T) {
|
||||
url := "https://modelarts.cn-south-222.ai.pcl.cn"
|
||||
projectId := "d18190e28e3f45a281ef0b0696ec9d52"
|
||||
convey.Convey("AlgorithmList", t, func() {
|
||||
param := &model.AlgorithmListParam{
|
||||
Offset: 5,
|
||||
}
|
||||
list, err := AlgorithmList(url, projectId, param)
|
||||
if err != nil {
|
||||
fmt.Println(err.Error())
|
||||
}
|
||||
|
||||
convey.So(err, convey.ShouldBeNil)
|
||||
convey.So(list, convey.ShouldNotBeEmpty)
|
||||
|
||||
})
|
||||
|
||||
convey.Convey("AlgorithmDetail", t, func() {
|
||||
id := "d126a422-4ead-4c08-9ace-bad9451308c1"
|
||||
resp, err := AlgorithmDetail(url, projectId, id)
|
||||
if err != nil {
|
||||
fmt.Println(err.Error())
|
||||
}
|
||||
fmt.Println(resp)
|
||||
convey.So(err, convey.ShouldBeNil)
|
||||
})
|
||||
|
||||
convey.Convey("AlgorithmCreate", t, func() {
|
||||
|
||||
param := &model.AlgorithmCreateParam{}
|
||||
resp, err := AlgorithmCreate(url, projectId, param)
|
||||
if err != nil {
|
||||
fmt.Println(err.Error())
|
||||
}
|
||||
fmt.Println(resp)
|
||||
convey.So(err, convey.ShouldBeNil)
|
||||
})
|
||||
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
package service
|
||||
|
||||
import (
|
||||
json "github.com/json-iterator/go"
|
||||
"gitlink.org.cn/JointCloud/pcm-participant-modelarts/common"
|
||||
"gitlink.org.cn/JointCloud/pcm-participant-modelarts/model"
|
||||
"net/http"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func TrainingJobList(ip, projectId string, param *model.JobListSearchParam) (*model.JobList, error) {
|
||||
var reqUrl = ip + common.Forward_Slash + common.TrainingJobList
|
||||
|
||||
reqUrl = strings.Replace(reqUrl, "{project_id}", projectId, -1)
|
||||
|
||||
reader, err := common.ToIOReader(param)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
body, err := common.SendRequestHttp(http.MethodPost, reqUrl, reader, "")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
resp := &model.JobList{}
|
||||
err = json.Unmarshal(body, resp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return resp, nil
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
package service
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/smartystreets/goconvey/convey"
|
||||
"gitlink.org.cn/JointCloud/pcm-participant-modelarts/model"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestJob(t *testing.T) {
|
||||
url := "https://modelarts.cn-south-222.ai.pcl.cn"
|
||||
projectId := "d18190e28e3f45a281ef0b0696ec9d52"
|
||||
convey.Convey("AlgorithmList", t, func() {
|
||||
param := &model.JobListSearchParam{}
|
||||
list, err := TrainingJobList(url, projectId, param)
|
||||
if err != nil {
|
||||
fmt.Println(err.Error())
|
||||
}
|
||||
|
||||
convey.So(err, convey.ShouldBeNil)
|
||||
convey.So(list, convey.ShouldNotBeEmpty)
|
||||
|
||||
})
|
||||
|
||||
}
|
Loading…
Reference in New Issue