Commit b88731d2 authored by 陈子龙's avatar 陈子龙

自动化运维 立即执行 fix

parent 56e8b07b
package service package service
import ( import (
"bufio"
"context" "context"
"errors" "errors"
"fmt" "fmt"
...@@ -249,16 +250,49 @@ func (t *TaskManageSvc) ExecScript(req request.ExecScriptReq) (data map[string]i ...@@ -249,16 +250,49 @@ func (t *TaskManageSvc) ExecScript(req request.ExecScriptReq) (data map[string]i
} }
var cmd *exec.Cmd var cmd *exec.Cmd
if req.Value != "" { if req.Value != "" {
cmd = exec.Command("ansible-playbook", "-i", "/etc/ansible/hosts", "/etc/ansible/ansible.yml", "--extra-vars", req.Value) cmd = exec.Command("ansible-playbook", "/etc/ansible/ansible.yml", "--extra-vars", req.Value)
} else { } else {
cmd = exec.Command("ansible-playbook", "-i", "/etc/ansible/hosts", "/etc/ansible/ansible.yml") cmd = exec.Command("ansible-playbook", "/etc/ansible/ansible.yml")
} }
//捕获标准输出
stdout, err := cmd.StdoutPipe() stdout, err := cmd.StdoutPipe()
if err != nil { if err != nil {
fmt.Println("执行出错:", err) fmt.Println("执行出错:", err)
fmt.Println("stdout:", stdout) fmt.Println("stdout:", stdout)
return nil, resp.CmdExecError.WithError(err) //return nil, resp.CmdExecError.WithError(err)
}
readout := bufio.NewReader(stdout)
go func() {
GetOutput(readout)
}()
//捕获标准错误
stderr, err := cmd.StderrPipe()
if err != nil {
fmt.Println("执行出错:", err)
fmt.Println("stdout:", stdout)
//return nil, resp.CmdExecError.WithError(err)
}
readerr := bufio.NewReader(stderr)
go func() {
GetOutput(readerr)
}()
//执行命令
err = cmd.Run()
if err != nil {
return
} }
//stdout, err := cmd.StdoutPipe()
//if err != nil {
// fmt.Println("执行出错:", err)
// fmt.Println("stdout:", stdout)
// return nil, resp.CmdExecError.WithError(err)
//}
//if err = cmd.Start(); err != nil { // 运行命令
// log.Fatal(err)
//}
fmt.Println("执行成功") fmt.Println("执行成功")
fmt.Println("stdout:", stdout) fmt.Println("stdout:", stdout)
//outputBuf := bufio.NewReader(stdout) //outputBuf := bufio.NewReader(stdout)
...@@ -274,3 +308,21 @@ func (t *TaskManageSvc) ExecScript(req request.ExecScriptReq) (data map[string]i ...@@ -274,3 +308,21 @@ func (t *TaskManageSvc) ExecScript(req request.ExecScriptReq) (data map[string]i
//data["output"] = string(output) //data["output"] = string(output)
return data, nil return data, nil
} }
func GetOutput(reader *bufio.Reader) {
var sumOutput string //统计屏幕的全部输出内容
outputBytes := make([]byte, 200)
for {
n, err := reader.Read(outputBytes) //获取屏幕的实时输出(并不是按照回车分割,所以要结合sumOutput)
if err != nil {
if err == io.EOF {
break
}
fmt.Println(err)
sumOutput += err.Error()
}
output := string(outputBytes[:n])
fmt.Println("输出屏幕内容:", output) //输出屏幕内容
sumOutput += output
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment