diff --git a/configmanage/server/controller/configinstance.go b/configmanage/server/controller/configinstance.go index 7e9129d01c18a0f88964c174ad933e3c7d16b3ec..34b4954c58aa35cc18a41cd5ad3e1e4135d1629f 100644 --- a/configmanage/server/controller/configinstance.go +++ b/configmanage/server/controller/configinstance.go @@ -3,6 +3,7 @@ package controller import ( "encoding/json" + "gitee.com/openeuler/PilotGo/sdk/logger" "gitee.com/openeuler/PilotGo/sdk/response" "github.com/gin-gonic/gin" "github.com/google/uuid" @@ -24,7 +25,7 @@ func AddConfigHandler(c *gin.Context) { response.Fail(c, "parameter error", err.Error()) return } - + logger.Debug("add config") //存储配置管理类型 ci := service.ConfigInstance{ UUID: uuid.New().String(), @@ -36,6 +37,7 @@ func AddConfigHandler(c *gin.Context) { } err = ci.Add() if err != nil { + logger.Error(err.Error()) response.Fail(c, "add configinfo fail:", err.Error()) return } @@ -54,9 +56,11 @@ func AddConfigHandler(c *gin.Context) { //将参数添加到数据库 err = repoconfig.Record() if err != nil { + logger.Error(err.Error()) response.Fail(c, "add repofile fail:", err.Error()) return } + logger.Debug("add repoconfig success") response.Success(c, nil, "Add repo config success") case global.Host: @@ -82,10 +86,12 @@ func LoadConfigHandler(c *gin.Context) { response.Fail(c, "parameter error", err.Error()) return } + logger.Debug("load config") //获取configinfo ci, err := service.GetInfoByUUID(query.UUID) if err != nil { + logger.Error(err.Error()) response.Fail(c, "get configinfo fail:", err.Error()) return } @@ -99,9 +105,11 @@ func LoadConfigHandler(c *gin.Context) { //加载配置 err = repoconfig.Load() if err != nil { + logger.Error(err.Error()) response.Fail(c, "get repofile fail:", err.Error()) return } + logger.Debug("load repoconfig success") response.Success(c, repoconfig, "load repo config success") case global.Host: @@ -117,42 +125,35 @@ func LoadConfigHandler(c *gin.Context) { } } -/* func ApplyConfigHandler(c *gin.Context) { + //TODO:修改请求的参数 query := &struct { - Deploy_Type string `json:"deploy_type"` - Deploy_BatchIds []int `json:"deploy_batches"` - Deploy_DepartIds []int `json:"deploy_departs"` - Deploy_NodeUUIds []string `json:"deploy_nodes"` - Deploy_Data json.RawMessage `json:"deploy_data"` + UUID string `json:"uuid"` }{} err := c.ShouldBindJSON(query) if err != nil { - response.Fail(c, gin.H{"status": false}, err.Error()) + response.Fail(c, "parameter error", err.Error()) + return + } + + //获取configinfo + ci, err := service.GetInfoByUUID(query.UUID) + if err != nil { + logger.Error(err.Error()) + response.Fail(c, "get configinfo fail:", err.Error()) return } //解析对应配置管理的参数 - switch query.Deploy_Type { + switch ci.Type { case global.Repo: //TODO:解析参数,data可以传输文件uuid,其余信息从数据库查询 - var repoconfig service.RepoConfig - if err := json.Unmarshal(query.Deploy_Data, &repoconfig); err != nil { - response.Fail(c, gin.H{"status": false}, err.Error()) - return - } - - de := service.Deploy{ - Deploy_BatchIds: query.Deploy_BatchIds, - Deploy_DepartIds: query.Deploy_DepartIds, - Deploy_NodeUUIds: query.Deploy_NodeUUIds, - Deploy_Path: repoconfig.Path, - Deploy_FileName: repoconfig.Name, - Deploy_Text: repoconfig.File, + repoconfig := &service.RepoConfig{ + ConfigInfoUUID: ci.UUID, } - //将参数添加到数据库 - result, err := repoconfig.Apply(de) + result, err := repoconfig.Apply() if err != nil { + logger.Error(err.Error()) response.Fail(c, result, err.Error()) return } @@ -167,7 +168,6 @@ func ApplyConfigHandler(c *gin.Context) { case global.Sysctl: default: - fmt.Println("Unknown type:", query.Deploy_Type) + response.Fail(c, nil, "Unknown type of configinfo:"+query.UUID) } } -*/ diff --git a/configmanage/server/internal/confignode.go b/configmanage/server/internal/confignode.go index dc91b87cd1d900c2bc6d76d1a75ce5702a90a59e..c45607096c60d41155c51ff9c451fa79b332dad1 100644 --- a/configmanage/server/internal/confignode.go +++ b/configmanage/server/internal/confignode.go @@ -3,49 +3,52 @@ package internal import "openeuler.org/PilotGo/configmanage-plugin/db" type ConfigNode struct { - ID int `gorm:"primary_key;AUTO_INCREMENT"` - ConfigInfoUUID string `json:"config_info_uuid"` + ID int `gorm:"primary_key;AUTO_INCREMENT"` + ConfigInfo ConfigInfo `gorm:"Foreignkey:ConfigInfoUUID"` + ConfigInfoUUID string NodeId string `json:"node_id"` //机器uuid } -type ConfigBatch struct { - ID int `gorm:"primary_key;AUTO_INCREMENT"` - ConfigInfoUUID string `json:"config_info_uuid"` - BatchID int `json:"batch_id"` +func (cn *ConfigNode) Add() error { + return db.MySQL().Save(&cn).Error } -type ConfigDepart struct { - ID int `gorm:"primary_key;AUTO_INCREMENT"` - ConfigInfoUUID string `json:"config_info_uuid"` - DepartID int `json:"depart_id"` +func GetConfigNodesByUUID(uuid string) ([]string, error) { + var nodes []string + err := db.MySQL().Where("config_info_uuid=?", uuid).Select("node_id").Find(&nodes).Error + return nodes, err } -func (cn *ConfigNode) Add() error { - return db.MySQL().Save(&cn).Error +type ConfigBatch struct { + ID int `gorm:"primary_key;AUTO_INCREMENT"` + ConfigInfo ConfigInfo `gorm:"Foreignkey:ConfigInfoUUID"` + ConfigInfoUUID string + BatchID int `json:"batch_id"` } func (cb *ConfigBatch) Add() error { return db.MySQL().Save(&cb).Error } -func (cd *ConfigDepart) Add() error { - return db.MySQL().Save(&cd).Error +func GetConfigBatchByUUID(uuid string) ([]int, error) { + var nodes []int + err := db.MySQL().Where("config_info_uuid=?", uuid).Select("batch_id").Find(&nodes).Error + return nodes, err } -func GetConfigNodesByUUID(uuid string) (ConfigNode, error) { - var nodes ConfigNode - err := db.MySQL().Where("config_info_uuid=?", uuid).Find(&nodes).Error - return nodes, err +type ConfigDepart struct { + ID int `gorm:"primary_key;AUTO_INCREMENT"` + ConfigInfo ConfigInfo `gorm:"Foreignkey:ConfigInfoUUID"` + ConfigInfoUUID string + DepartID int `json:"depart_id"` } -func GetConfigBatchByUUID(uuid string) (ConfigBatch, error) { - var nodes ConfigBatch - err := db.MySQL().Where("config_info_uuid=?", uuid).Find(&nodes).Error - return nodes, err +func (cd *ConfigDepart) Add() error { + return db.MySQL().Save(&cd).Error } -func GetConfigDepartByUUID(uuid string) (ConfigDepart, error) { - var nodes ConfigDepart - err := db.MySQL().Where("config_info_uuid=?", uuid).Find(&nodes).Error +func GetConfigDepartByUUID(uuid string) ([]int, error) { + var nodes []int + err := db.MySQL().Where("config_info_uuid=?", uuid).Select("depart_id").Find(&nodes).Error return nodes, err } diff --git a/configmanage/server/internal/configfile.go b/configmanage/server/internal/repofile.go similarity index 100% rename from configmanage/server/internal/configfile.go rename to configmanage/server/internal/repofile.go diff --git a/configmanage/server/service/configinstance.go b/configmanage/server/service/configinstance.go index 4bdf63bc54b61ea76a9ba6c9119b3a5e61ff1f5b..cbc011ac4e36b57af2edea35cb119aae887d5d42 100644 --- a/configmanage/server/service/configinstance.go +++ b/configmanage/server/service/configinstance.go @@ -6,6 +6,11 @@ import ( "openeuler.org/PilotGo/configmanage-plugin/internal" ) +type ConfigInfo = internal.ConfigInfo +type ConfigNode = internal.ConfigNode +type ConfigBatch = internal.ConfigBatch +type ConfigDepart = internal.ConfigDepart + type ConfigInstance struct { UUID string `json:"uuid"` Type string `json:"type"` @@ -26,24 +31,9 @@ type Config interface { Load() error // 依据agent uuid进行配置下发 - Apply(Deploy) (json.RawMessage, error) + Apply() (json.RawMessage, 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"` -} - -type ConfigInfo = internal.ConfigInfo -type ConfigNode = internal.ConfigNode -type ConfigBatch = internal.ConfigBatch -type ConfigDepart = internal.ConfigDepart -type RepoFile = internal.RepoFile - func (ci *ConfigInstance) Add() error { cm := ConfigInfo{ UUID: ci.UUID, @@ -55,6 +45,17 @@ func (ci *ConfigInstance) Add() error { return err } + for _, v := range ci.Nodes { + cn := ConfigNode{ + ConfigInfoUUID: ci.UUID, + NodeId: v, + } + err = cn.Add() + if err != nil { + return err + } + } + for _, v := range ci.BatchIds { cb := ConfigBatch{ ConfigInfoUUID: ci.UUID, @@ -76,20 +77,18 @@ func (ci *ConfigInstance) Add() error { return err } } - - for _, v := range ci.Nodes { - cn := ConfigNode{ - ConfigInfoUUID: ci.UUID, - NodeId: v, - } - err = cn.Add() - if err != nil { - return err - } - } return nil } func GetInfoByUUID(configuuid string) (ConfigInfo, error) { return internal.GetInfoByUUID(configuuid) } + +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"` +} diff --git a/configmanage/server/service/repo.go b/configmanage/server/service/repo.go index 0158ca12cf73d92c7699993d132be42dc580e475..e6b5af22e64befc55c827f90a7d4b62eb25fc39d 100644 --- a/configmanage/server/service/repo.go +++ b/configmanage/server/service/repo.go @@ -1,22 +1,37 @@ package service import ( + "encoding/json" + "errors" "fmt" + "net/http" + "strconv" "time" + "gitee.com/openeuler/PilotGo/sdk/common" + "gitee.com/openeuler/PilotGo/sdk/plugin/client" + "gitee.com/openeuler/PilotGo/sdk/utils/httputils" "openeuler.org/PilotGo/configmanage-plugin/internal" ) +type RepoFile = internal.RepoFile + type RepoConfig struct { UUID string `json:"uuid"` - ConfigInfoUUID string `json:"configinfouuid"` //ConfigInstance的uuid + ConfigInfoUUID string `json:"configinfouuid"` Content interface{} `json:"content"` Version string `json:"version"` - IsIndex bool `json:"isindex"` + //下发改变标志位 + IsIndex bool `json:"isindex"` } func (rc *RepoConfig) Record() error { - //TODO:检查info的uuid是否存在 + //检查info的uuid是否存在 + ci, err := GetInfoByUUID(rc.ConfigInfoUUID) + if err != nil || ci.UUID == "" { + return errors.New("configinfo uuid not exist") + } + rf := RepoFile{ UUID: rc.UUID, ConfigInfoUUID: rc.ConfigInfoUUID, @@ -27,22 +42,43 @@ func (rc *RepoConfig) Record() error { return rf.Add() } -func (c *RepoConfig) Load() error { - rf, err := internal.GetRepoFileByInfoUUID(c.UUID) +func (rc *RepoConfig) Load() error { + rf, err := internal.GetRepoFileByInfoUUID(rc.ConfigInfoUUID) if err != nil { return err } - c.UUID = rf.UUID - c.Content = rf.Content - c.Version = rf.Version - c.IsIndex = rf.IsIndex + rc.UUID = rf.UUID + rc.Content = rf.Content + rc.Version = rf.Version + rc.IsIndex = rf.IsIndex return nil } -/* -func (c *RepoConfig) Apply(de Deploy) (json.RawMessage, error) { - //TODO:检查de里面的参数是否存在于数据库 +func (rc *RepoConfig) Apply() (json.RawMessage, error) { + //从数据库获取下发的信息 + err := rc.Load() + if err != nil { + return nil, err + } + batchids, err := internal.GetConfigBatchByUUID(rc.ConfigInfoUUID) + if err != nil { + return nil, err + } + departids, err := internal.GetConfigDepartByUUID(rc.ConfigInfoUUID) + if err != nil { + return nil, err + } + nodes, err := internal.GetConfigNodesByUUID(rc.ConfigInfoUUID) + if err != nil { + return nil, err + } + //TODO:从rc中解析下发的文件内容,逐一进行下发 + de := Deploy{ + Deploy_BatchIds: batchids, + Deploy_DepartIds: departids, + Deploy_NodeUUIds: nodes, + } url := "http://" + client.GetClient().Server() + "/api/v1/pluginapi/file_deploy" fmt.Println(url) r, err := httputils.Post(url, &httputils.Params{ @@ -67,4 +103,3 @@ func (c *RepoConfig) Apply(de Deploy) (json.RawMessage, error) { } return nil, nil } -*/