diff --git a/configmanage/server/controller/configinstance.go b/configmanage/server/controller/configinstance.go index 7aee7e1a27ea58625da275d1d6c0f13f9df65562..a99f25db419dfa916ad0dde202d64999e826c208 100644 --- a/configmanage/server/controller/configinstance.go +++ b/configmanage/server/controller/configinstance.go @@ -37,8 +37,8 @@ func AddConfigHandler(c *gin.Context) { } err = ci.Add() if err != nil { - logger.Error(err.Error()) - response.Fail(c, "add configinfo fail:", err.Error()) + logger.Error("failed to add configinstance: %s", err.Error()) + response.Fail(c, "failed to add configinstance:", err.Error()) return } @@ -48,27 +48,27 @@ func AddConfigHandler(c *gin.Context) { //解析参数 repoconfig := &service.RepoConfig{} if err := json.Unmarshal(query.Data, repoconfig); err != nil { - logger.Error(err.Error()) - response.Fail(c, "repoconfig parameter error fail:", err.Error()) + logger.Error("failed to parse repoconfig parameter: %s", err.Error()) + response.Fail(c, "failed to parse repoconfig parameter:", err.Error()) return } repoconfig.UUID = uuid.New().String() repoconfig.ConfigInfoUUID = ci.UUID - repoconfig.IsIndex = false + repoconfig.IsActive = false //将参数添加到数据库 err = repoconfig.Record() if err != nil { - logger.Error(err.Error()) - response.Fail(c, "add repofile fail:", err.Error()) + logger.Error("failed to add repoconfig: %s", err.Error()) + response.Fail(c, "failed to add repoconfig:", err.Error()) return } //收集机器的配置信息 - err = repoconfig.Collection() + err = repoconfig.Collect() if err != nil { - logger.Error(err.Error()) - response.Fail(c, "collect repofile fail:", err.Error()) + logger.Error("failed to collect repofile: %s", err.Error()) + response.Fail(c, "failed to collect repofile:", err.Error()) return } logger.Debug("add repoconfig success") @@ -102,7 +102,7 @@ func LoadConfigHandler(c *gin.Context) { //获取ConfigInstance ci, err := service.GetConfigByUUID(query.UUID) if err != nil { - logger.Error(err.Error()) + logger.Error("failed to get configinfo file: %s", err.Error()) response.Fail(c, "get configinfo fail:", err.Error()) return } @@ -116,8 +116,8 @@ func LoadConfigHandler(c *gin.Context) { //加载配置 err = repoconfig.Load() if err != nil { - logger.Error(err.Error()) - response.Fail(c, "get repofile fail:", err.Error()) + logger.Error("failed to get repofile file: %s", err.Error()) + response.Fail(c, "failed to get repofile file:", err.Error()) return } ci.Config = repoconfig @@ -143,7 +143,7 @@ func ApplyConfigHandler(c *gin.Context) { ConfigInfoUUID string `json:"configinfouuid"` UUID string `json:"uuid"` }{} - err := c.ShouldBindJSON(query) + err := c.Bind(query) if err != nil { response.Fail(c, "parameter error", err.Error()) return @@ -153,8 +153,8 @@ func ApplyConfigHandler(c *gin.Context) { //获取ConfigInstance ci, err := service.GetInfoByUUID(query.ConfigInfoUUID) if err != nil { - logger.Error(err.Error()) - response.Fail(c, "get configinfo fail:", err.Error()) + logger.Error("failed to get configinfo file: %s", err.Error()) + response.Fail(c, "failed to get configinfo file:", err.Error()) return } @@ -165,10 +165,10 @@ func ApplyConfigHandler(c *gin.Context) { UUID: query.UUID, ConfigInfoUUID: ci.UUID, } - result, err := repoconfig.Apply() + _, err := repoconfig.Apply() if err != nil { - logger.Error(err.Error()) - response.Fail(c, result, err.Error()) + logger.Error("failed to apply repoconfig file: %s", err.Error()) + response.Fail(c, "failed to apply repofile:", err.Error()) return } response.Success(c, nil, "apply repo config success") diff --git a/configmanage/server/go.mod b/configmanage/server/go.mod index 982accf30de0b941a1d61b451809df2efcb48ff4..946b8b2b1d4c631e3c20ad2d51a821132a5e41b5 100644 --- a/configmanage/server/go.mod +++ b/configmanage/server/go.mod @@ -3,7 +3,7 @@ module openeuler.org/PilotGo/configmanage-plugin go 1.20 require ( - gitee.com/openeuler/PilotGo/sdk v0.0.0-20240126080808-49aa485217c0 + gitee.com/openeuler/PilotGo/sdk v0.0.0-20240129073732-887bc07ab69c github.com/gin-gonic/gin v1.9.1 github.com/google/uuid v1.2.0 gopkg.in/yaml.v2 v2.4.0 diff --git a/configmanage/server/go.sum b/configmanage/server/go.sum index 702991694caf07cbd795e8da807addefb9f4a9d0..0028e65d162ed00bb91bf247915789d352e2c20e 100644 --- a/configmanage/server/go.sum +++ b/configmanage/server/go.sum @@ -1,5 +1,5 @@ -gitee.com/openeuler/PilotGo/sdk v0.0.0-20240126080808-49aa485217c0 h1:xy13TBjEqgJqBKBLDqM0zB8pgbI+2vOZ3CDSNl1Oto4= -gitee.com/openeuler/PilotGo/sdk v0.0.0-20240126080808-49aa485217c0/go.mod h1:zEVmY3l48/CvR2kIM3DJpD/jWTG1qkOxRoHJii/D0us= +gitee.com/openeuler/PilotGo/sdk v0.0.0-20240129073732-887bc07ab69c h1:DEMEi1iXRVKqyfnK9SiVDS1pM/w3Uw1Emfizrv9eXIE= +gitee.com/openeuler/PilotGo/sdk v0.0.0-20240129073732-887bc07ab69c/go.mod h1:zEVmY3l48/CvR2kIM3DJpD/jWTG1qkOxRoHJii/D0us= github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s= github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= diff --git a/configmanage/server/internal/repofile.go b/configmanage/server/internal/repofile.go index 745fe413dd8e163ff4c0c0fe1a69cf1744cfd513..3a3c90a2742f18ad9f3e04f1573f199e536956e5 100644 --- a/configmanage/server/internal/repofile.go +++ b/configmanage/server/internal/repofile.go @@ -16,8 +16,8 @@ type RepoFile struct { Name string `json:"name"` Content json.RawMessage `gorm:"type:json" json:"content"` Version string `gorm:"type:varchar(50)" json:"version"` - IsIndex bool `json:"isindex"` - IsHost bool `gorm:"default:false" json:"ishost"` + IsActive bool `json:"isactive"` + IsFromHost bool `gorm:"default:false" json:"isfromhost"` Hostuuid string `gorm:"type:varchar(50)" json:"hostuuid"` CreatedAt time.Time } diff --git a/configmanage/server/service/configinstance.go b/configmanage/server/service/configinstance.go index 0c9cd7916f814b3dc46847ed3f00d3221bb4c48a..06621ed3a09995309433ca391240043bc84f83a1 100644 --- a/configmanage/server/service/configinstance.go +++ b/configmanage/server/service/configinstance.go @@ -3,6 +3,7 @@ package service import ( "encoding/json" + "gitee.com/openeuler/PilotGo/sdk/common" "openeuler.org/PilotGo/configmanage-plugin/internal" ) @@ -30,7 +31,7 @@ type Config interface { // 配置加载 Load() error // 单机采集数据 - Collection() error + Collect() error // 依据agent uuid进行配置下发 Apply() (json.RawMessage, error) } @@ -113,10 +114,8 @@ func GetConfigByUUID(configuuid string) (*ConfigInstance, error) { } type Deploy struct { - Deploy_BatchIds []int `json:"deploy_batches"` - Deploy_DepartIds []int `json:"deploy_departs"` - Deploy_NodeUUIds []string `json:"deploy_nodes"` - Deploy_Path string `json:"deploy_path"` - Deploy_FileName string `json:"deploy_name"` - Deploy_Text string `json:"deploy_file"` + DeployBatch common.Batch `json:"deploybatch"` + DeployPath string `json:"deploypath"` + DeployFileName string `json:"deployname"` + DeployText string `json:"deployfile"` } diff --git a/configmanage/server/service/repo.go b/configmanage/server/service/repo.go index 9317a4817626510a08183dc3b44bfce170d29aee..4592129c4faf8d4df80ba5ea5e1de52dc59cb1cb 100644 --- a/configmanage/server/service/repo.go +++ b/configmanage/server/service/repo.go @@ -26,7 +26,7 @@ type RepoConfig struct { Path string `json:"path"` Name string `json:"name"` //下发改变标志位 - IsIndex bool `json:"isindex"` + IsActive bool `json:"isactive"` } func (rc *RepoConfig) Record() error { @@ -43,7 +43,7 @@ func (rc *RepoConfig) Record() error { Name: rc.Name, Content: rc.Content, Version: fmt.Sprintf("v%s", time.Now().Format("2006-01-02-15-04-05")), - IsIndex: rc.IsIndex, + IsActive: rc.IsActive, } return rf.Add() } @@ -58,7 +58,7 @@ func (rc *RepoConfig) Load() error { rc.Name = rf.Name rc.Content = rf.Content rc.Version = rf.Version - rc.IsIndex = rf.IsIndex + rc.IsActive = rf.IsActive return nil } @@ -86,84 +86,81 @@ func (rc *RepoConfig) Apply() (json.RawMessage, error) { } //从rc中解析下发的文件内容,逐一进行下发 - Repofiles := common.File{} - err = json.Unmarshal(rf.Content, &Repofiles) + Repofiles := []common.File{} + err = json.Unmarshal([]byte(rf.Content), &Repofiles) if err != nil { return nil, err } - de := Deploy{ - Deploy_BatchIds: batchids, - Deploy_DepartIds: departids, - Deploy_NodeUUIds: nodes, - Deploy_Path: Repofiles.Path, - Deploy_FileName: Repofiles.Name, - Deploy_Text: Repofiles.Content, - } - url := "http://" + client.GetClient().Server() + "/api/v1/pluginapi/file_deploy" - r, err := httputils.Post(url, &httputils.Params{ - Body: de, - }) - if err != nil { - return nil, err - } - if r.StatusCode != http.StatusOK { - return nil, errors.New("server process error:" + strconv.Itoa(r.StatusCode)) - } - - resp := &common.CommonResult{} - if err := json.Unmarshal(r.Body, resp); err != nil { - return nil, err - } - if resp.Code != http.StatusOK { - return nil, errors.New(resp.Message) - } - - if string(resp.Data) != "null" { - return resp.Data, errors.New(resp.Message) - } - //下发成功修改数据库应用版本 - err = rf.UpdateByuuid() - return nil, err -} - -func (rc *RepoConfig) Collection() error { - ci, err := GetConfigByUUID(rc.ConfigInfoUUID) - if err != nil { - return err - } - //TODO:在nodes中添加批次和部门的机器uuid信息 - nodes := ci.Nodes - /*for _, v := range ci.BatchIds { - url := "http://" + client.GetClient().Server() + "/api/v1/pluginapi/batch_uuid?batchId=" + string(v) - r, err := httputils.Get(url, &httputils.Params{}) + result := "" + for _, v := range Repofiles { + de := Deploy{ + DeployBatch: common.Batch{ + BatchIds: batchids, + DepartmentIDs: departids, + MachineUUIDs: nodes, + }, + DeployPath: v.Path, + DeployFileName: v.Name, + DeployText: v.Content, + } + url := "http://" + client.GetClient().Server() + "/api/v1/pluginapi/file_deploy" + r, err := httputils.Post(url, &httputils.Params{ + Body: de, + }) if err != nil { - return err + return nil, err } if r.StatusCode != http.StatusOK { - return errors.New("server process error:" + strconv.Itoa(r.StatusCode)) + return nil, errors.New("server process error:" + strconv.Itoa(r.StatusCode)) } resp := &common.CommonResult{} if err := json.Unmarshal(r.Body, resp); err != nil { - return err + return nil, err } if resp.Code != http.StatusOK { - return errors.New(resp.Message) + return nil, errors.New(resp.Message) } - values := []string{} - }*/ + data := []common.NodeResult{} + if err := resp.ParseData(&data); err != nil { + return nil, err + } + for _, v := range data { + if v.Error != "" { + result = result + v.UUID + ":" + v.Error + "\n" + } + } + } + //TODO:部分成功如何修改数据库 + if result == "" { + //下发成功修改数据库应用版本 + err = rf.UpdateByuuid() + return nil, err + } + return nil, errors.New(result + "failed to apply repo config") +} + +func (rc *RepoConfig) Collect() error { + ci, err := GetConfigByUUID(rc.ConfigInfoUUID) + if err != nil { + return err + } //发请求获取配置详情 url := "http://" + client.GetClient().Server() + "/api/v1/pluginapi/getnodefiles" p := struct { - NodeUUIds []string `json:"nodes"` - Path string `json:"path"` - FileName string `json:"filename"` + DeployBatch common.Batch `json:"deploybatch"` + Path string `json:"path"` + FileName string `json:"filename"` }{ - NodeUUIds: nodes, - Path: rc.Path, - FileName: rc.Name, + DeployBatch: common.Batch{ + BatchIds: ci.BatchIds, + DepartmentIDs: ci.DepartIds, + MachineUUIDs: ci.Nodes, + }, + Path: rc.Path, + FileName: rc.Name, } r, err := httputils.Post(url, &httputils.Params{ Body: p, @@ -182,11 +179,8 @@ func (rc *RepoConfig) Collection() error { if resp.Code != http.StatusOK { return errors.New(resp.Message) } - data := []struct { - UUID string - Error string - Data interface{} - }{} + + data := []common.NodeResult{} if err := resp.ParseData(&data); err != nil { return err } @@ -199,19 +193,19 @@ func (rc *RepoConfig) Collection() error { ConfigInfoUUID: rc.ConfigInfoUUID, Content: file, Version: fmt.Sprintf("v%s", time.Now().Format("2006-01-02-15-04-05")), - IsHost: true, + IsFromHost: true, Hostuuid: v.UUID, } err = rf.Add() if err != nil { - logger.Error(err.Error()) + logger.Error("failed to add repoconfig: %s", err.Error()) } } else { result = result + v.UUID + ":" + v.Error + "\n" } } if result != "" { - return errors.New(result) + return errors.New(result + "failed to collect repo config") } return nil } diff --git a/configmanage/server/vendor/gitee.com/openeuler/PilotGo/sdk/common/machine.go b/configmanage/server/vendor/gitee.com/openeuler/PilotGo/sdk/common/machine.go index f7a536c6f62c463f1c7a45cc523c035039fdac0a..2a8f7d0a6e2b18f51882ccefaa6471530d2d406a 100644 --- a/configmanage/server/vendor/gitee.com/openeuler/PilotGo/sdk/common/machine.go +++ b/configmanage/server/vendor/gitee.com/openeuler/PilotGo/sdk/common/machine.go @@ -18,8 +18,8 @@ type BatchList struct { } type Batch struct { - BatchId int `json:"batch_id"` - DepartmentIDs []string `json:"department_ids"` + BatchIds []int `json:"batch_ids"` + DepartmentIDs []int `json:"department_ids"` MachineUUIDs []string `json:"machine_uuids"` } @@ -28,3 +28,9 @@ type File struct { Name string `json:"name"` Content string `json:"content"` } + +type NodeResult struct { + UUID string + Error string + Data interface{} +} diff --git a/configmanage/server/vendor/modules.txt b/configmanage/server/vendor/modules.txt index a9495009d2d6302237876d63b762ecdc31d5f865..c054134466991b3b3d156fd9aa30be9566763158 100644 --- a/configmanage/server/vendor/modules.txt +++ b/configmanage/server/vendor/modules.txt @@ -1,4 +1,4 @@ -# gitee.com/openeuler/PilotGo/sdk v0.0.0-20240126080808-49aa485217c0 +# gitee.com/openeuler/PilotGo/sdk v0.0.0-20240129073732-887bc07ab69c ## explicit; go 1.17 gitee.com/openeuler/PilotGo/sdk/common gitee.com/openeuler/PilotGo/sdk/logger