diff --git a/src/bean/vo/request/task_manage.go b/src/bean/vo/request/task_manage.go index 621d42223a700424939678b23f3597f17350d666..65b91ce076b8b9ce164d7aca64398bf240f89c4b 100644 --- a/src/bean/vo/request/task_manage.go +++ b/src/bean/vo/request/task_manage.go @@ -33,7 +33,7 @@ type ListTaskManageReq struct { } type ExecScriptReq struct { - TaskId int `form:"task_id" binding:"required"` //主机分组id + TaskId int `form:"task_id" binding:"required"` //任务id HostGroupId int `form:"host_group_id" binding:"required"` //主机分组id Type int `form:"type" binding:"oneof=1 2"` //脚本额外变量类型1yaml 2json Value string `form:"value"` //脚本额外变量值 diff --git a/src/controller/task_manage.go b/src/controller/task_manage.go index a508b32b27c12109d2b0799fffe81f22b1014bb5..a1d9433aa13174897d7d94602dd87f45811ff866 100644 --- a/src/controller/task_manage.go +++ b/src/controller/task_manage.go @@ -1,7 +1,10 @@ package controller import ( + "encoding/json" "errors" + "fmt" + "github.com/ghodss/yaml" "github.com/gin-gonic/gin" "github.com/minio/minio-go/v7" "github.com/spf13/cast" @@ -153,11 +156,50 @@ func ExecScript(c *gin.Context) { req.Script = string(obj) } + //写入额外yml参数 + if req.Type == 1 { + //var scripts []map[string]interface{} + var value map[string]interface{} + j2, err := yaml.YAMLToJSON([]byte(req.Script)) + if err != nil { + err = resp.YamlAnalysisError.WithError(err) + return + } + err = json.Unmarshal(j2, &value) + if err != nil { + err = resp.InvalidParam.WithError(errors.New("yaml格式错误")) + return + } + + value["hosts"] = fmt.Sprintf("%s%d", service.AnsibleGroup, req.HostGroupId) + + j, err := json.Marshal(value) + if err != nil { + err = resp.MarshalError.WithError(err) + return + } + req.Value = fmt.Sprintf("%s", j) + + //写入执行脚本 + //f3, err := os.Create("/etc/ansible/ansible_extra.yml") + //if err != nil { + // err = resp.FileExecError.WithError(err) + // return + //} + //defer f3.Close() + //_, err = f3.Write([]byte(req.Value)) + //if err != nil { + // err = resp.FileExecError.WithError(err) + // return + //} + //req.Value = fmt.Sprintf("@/etc/ansible/ansible_extra.yml") + } + taskManageSvc := service.TaskManageSvc{} - err := taskManageSvc.ExecScript(req) + id, err := taskManageSvc.ExecScript(req) if err != nil { SendJsonResponse(c, err, nil) return } - SendJsonResponse(c, nil, nil) + SendJsonResponse(c, nil, id) } diff --git a/src/service/task_manage.go b/src/service/task_manage.go index dc36a666fe91ed0c16e3e5d8313c772f3a8d0549..28e4dcb71c3653e70871e92a398a56d0172d7cf5 100644 --- a/src/service/task_manage.go +++ b/src/service/task_manage.go @@ -182,7 +182,7 @@ func (t *TaskManageSvc) ListTaskManage(req request.ListTaskManageReq) (total int return } -func (t *TaskManageSvc) ExecScript(req request.ExecScriptReq) (err error) { +func (t *TaskManageSvc) ExecScript(req request.ExecScriptReq) (id int, err error) { //var scripts []map[string]interface{} //var script map[string]interface{} //j2, err := yaml.YAMLToJSON([]byte(req.Script)) @@ -207,30 +207,18 @@ func (t *TaskManageSvc) ExecScript(req request.ExecScriptReq) (err error) { //写入执行脚本 f2, err := os.Create("/etc/ansible/ansible.yml") if err != nil { - return resp.FileExecError.WithError(err) + err = resp.FileExecError.WithError(err) + return } defer f2.Close() _, err = f2.Write([]byte(req.Script)) if err != nil { - return resp.FileExecError.WithError(err) - } - //写入额外yml参数 - if req.Type == 1 { - //写入执行脚本 - f3, err := os.Create("/etc/ansible/ansible_extra.yml") - if err != nil { - return resp.FileExecError.WithError(err) - } - defer f3.Close() - _, err = f3.Write([]byte(req.Value)) - if err != nil { - return resp.FileExecError.WithError(err) - } - req.Value = fmt.Sprintf("@/etc/ansible/ansible_extra.yml") + err = resp.FileExecError.WithError(err) + return } //新增任务历史 - id, err := AddExecHistory(request.AddExecHistory{ + id, err = AddExecHistory(request.AddExecHistory{ TaskId: req.TaskId, CreateUser: "", }) @@ -241,23 +229,26 @@ func (t *TaskManageSvc) ExecScript(req request.ExecScriptReq) (err error) { //执行ansible命令 var cmd *exec.Cmd if req.Value != "" { - cmd = exec.Command("ansible-playbook", "/etc/ansible/ansible.yml", "--extra-vars", req.Value) //2>/dev/null 忽略警告日志 + cmd = exec.Command("ansible-playbook", "/etc/ansible/ansible.yml", "--extra-vars", req.Value) } else { cmd = exec.Command("ansible-playbook", "/etc/ansible/ansible.yml") } //捕获正常日志 stdout, err := cmd.StdoutPipe() if err != nil { - return resp.CmdExecError.WithError(err) + err = resp.CmdExecError.WithError(err) + return } //捕获异常日志 stderr, err := cmd.StderrPipe() if err != nil { - return resp.CmdExecError.WithError(err) + err = resp.CmdExecError.WithError(err) + return } //执行cmd命令 if err = cmd.Start(); err != nil { - return resp.CmdExecError.WithError(err) + err = resp.CmdExecError.WithError(err) + return } //获取 正常/异常 输出流 outputBuf := bufio.NewReader(stdout)