From a91d9f4e90b8f3f07cb3ef40229741abd6ac76b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AD=90=E9=BE=99?= Date: Tue, 11 Jul 2023 10:22:01 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AB=8B=E5=8D=B3=E6=89=A7=E8=A1=8C=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E4=BC=98=E5=8C=96=20fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controller/task_manage.go | 39 +----------------- src/main.go | 11 ++--- src/service/host_manage.go | 5 ++- src/service/task_manage.go | 76 ++++++++++++++++++++++++----------- 4 files changed, 63 insertions(+), 68 deletions(-) diff --git a/src/controller/task_manage.go b/src/controller/task_manage.go index 01a4f99..a26eed5 100644 --- a/src/controller/task_manage.go +++ b/src/controller/task_manage.go @@ -143,7 +143,7 @@ func ExecScript(c *gin.Context) { } if taskManage.YamlDesc == "" { - //解析文件 + //解析minio文件 ymlUrl := strings.Split(taskManage.YamlUrl, "/") minioClient, err2 := client.GetMinioConnect() if err2 != nil { @@ -163,27 +163,7 @@ func ExecScript(c *gin.Context) { taskManage.YamlDesc = string(obj) } - //解析yml文件 - //if req.YmlFileName != "" && req.Value == "" { - // minioClient, err := client.GetMinioConnect() - // if err != nil { - // SendJsonResponse(c, resp.InvalidParam.WithError(errors.New("执行脚本为空")), nil) - // return - // } - // object, err := minioClient.GetObject(c, conf.Options.MinioBucket, req.YmlFileName, minio.GetObjectOptions{}) - // if err != nil { - // SendJsonResponse(c, resp.GetFileStreamError.WithError(err), nil) - // return - // } - // obj, err := io.ReadAll(object) - // if err != nil { - // SendJsonResponse(c, resp.ReadFileError.WithError(err), nil) - // return - // } - // req.Script = string(obj) - //} - - //写入额外yml参数 + //写入额外yml变量 if req.Type == 1 { var value map[string]interface{} j2, err3 := yaml.YAMLToJSON([]byte(req.Value)) @@ -196,7 +176,6 @@ func ExecScript(c *gin.Context) { err = resp.InvalidParam.WithError(errors.New("变量配置错误")) return } - value["hosts"] = fmt.Sprintf("%s%d", service.AnsibleGroup, taskManage.HostGroupId) j, err3 := json.Marshal(value) if err3 != nil { @@ -204,20 +183,6 @@ func ExecScript(c *gin.Context) { 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") } id, err := taskManageSvc.ExecScript(req, taskManage.YamlDesc) diff --git a/src/main.go b/src/main.go index 91b4705..0935885 100644 --- a/src/main.go +++ b/src/main.go @@ -130,12 +130,13 @@ func initAnsibleHosts() { defer f.Close() if err != nil { fmt.Println(err.Error()) - } else { - _, err := f.Write([]byte("[web]\n")) - if err != nil { - fmt.Println(err.Error()) - } } + //else { + // _, err := f.Write([]byte("[web]\n")) + // if err != nil { + // fmt.Println(err.Error()) + // } + //} } func initTempDirPrefix() { diff --git a/src/service/host_manage.go b/src/service/host_manage.go index 1f9cb9e..b64b69d 100644 --- a/src/service/host_manage.go +++ b/src/service/host_manage.go @@ -401,7 +401,7 @@ func (h *HostManageSvc) ListStateHostManage(req request.StateHostManageReq) (err defer session.Close() session.Begin() - //查询主机IP列表 + // 查询主机IP列表 hostManageList := make([]response.HostManageListRes, 0) finder := session.Table("host_manage_list").Where("is_delete = 0 AND host_group_id = ?", req.Id) err = finder.Find(&hostManageList) @@ -410,13 +410,14 @@ func (h *HostManageSvc) ListStateHostManage(req request.StateHostManageReq) (err return } - //读取hosts中的主机组 + // 读取hosts中的主机组 hosts, err := tools.HostsToJson() if err != nil { err = resp.MarshalError.WithError(err) session.Rollback() return } + if _, ok := hosts["["+AnsibleGroup+fmt.Sprintf("%d", req.Id)+"]"]; !ok { // 不存在 hosts["["+AnsibleGroup+fmt.Sprintf("%d", req.Id)+"]"] = nil diff --git a/src/service/task_manage.go b/src/service/task_manage.go index 83d4d6f..40c0e42 100644 --- a/src/service/task_manage.go +++ b/src/service/task_manage.go @@ -12,6 +12,7 @@ import ( "io" "os" "os/exec" + "strings" "time" ) @@ -202,29 +203,55 @@ func (t *TaskManageSvc) GetTaskManage(id int) (getTaskManage response.GetTaskMan } func (t *TaskManageSvc) ExecScript(req request.ExecScriptReq, script string) (id int, err error) { - //var scripts []map[string]interface{} - //var script map[string]interface{} - //j2, err := yaml.YAMLToJSON([]byte(req.Script)) - //if err != nil { - // return nil, resp.YamlAnalysisError.WithError(err) - //} - //err = json.Unmarshal(j2, &scripts) - //if err != nil { - // return nil, resp.MarshalError.WithError(errors.New("yaml格式错误")) - //} - //script = scripts[0] - //script["host"] = fmt.Sprintf("%s%d", AnsibleGroup, req.HostGroupId) - //j, err := json.Marshal(script) - //if err != nil { - // return nil, resp.MarshalError.WithError(err) - //} - //y, err := yaml.JSONToYAML(j) - //if err != nil { - // return nil, resp.YamlAnalysisError.WithError(err) - //} - //req.Script = string(y) + //查询主机信息 + db, err := client.GetDbClient() + if err != nil { + err = resp.DbConnectError.WithError(err) + return + } + + //查询任务详情 + hostManageList := make([]response.HostManageListRes, 0) + finder := db.Table("task_manage").Alias("tm"). + Join("INNER", "host_manage hm", "tm.host_group_id = hm.id"). + Join("INNER", "host_manage_list hml", "hm.id = hml.host_group_id"). + Where("tm.is_delete = 0 AND hm.is_delete = 0 AND hml.is_delete = 0 AND tm.id = ?", req.TaskId) + err = finder.Select("hml.ip,hml.ip,hml.port,hml.voucher_type,hml.user_name,hml.password").Find(&hostManageList) + if err != nil { + err = resp.DbSelectError.WithError(err) + return + } + + //新增主机分组列表 + var hosts []string + for _, v := range hostManageList { + hostsIp := "" + if v.VoucherType == 0 { + hostsIp = fmt.Sprintf("%s:%s ansible_ssh_user=\"%s\" ansible_ssh_pass=\"%s\" ansible_host_key_checking=false\n", + v.Ip, v.Port, v.UserName, v.Password) + } else { + hostsIp = fmt.Sprintf("%s:%s ansible_ssh_user=\"%s\" ansible_ssh_private_key_file=/root/.ssh/id_rsa ansible_host_key_checking=false\n", + v.Ip, v.Port, v.UserName) + } + hosts = append(hosts, hostsIp) + } + + //写入主机信息 + hostsIp := strings.Replace(strings.Trim(fmt.Sprint(hosts), "[]"), " ", "\n", -1) + hostsGroup, err := os.Create("/etc/ansible/hosts_" + fmt.Sprintf("%d", req.TaskId)) + if err != nil { + err = resp.FileExecError.WithError(err) + return + } + defer hostsGroup.Close() + _, err = hostsGroup.Write([]byte(hostsIp)) + if err != nil { + err = resp.FileExecError.WithError(err) + return + } + //写入执行脚本 - f2, err := os.Create("/etc/ansible/ansible.yml") + f2, err := os.Create("/etc/ansible/ansible_" + fmt.Sprintf("%d", req.TaskId) + ".yml") if err != nil { err = resp.FileExecError.WithError(err) return @@ -248,10 +275,11 @@ func (t *TaskManageSvc) ExecScript(req request.ExecScriptReq, script string) (id //执行ansible命令 var cmd *exec.Cmd if req.Value != "" { - cmd = exec.Command("ansible-playbook", "/etc/ansible/ansible.yml", "--extra-vars", req.Value) + cmd = exec.Command("ansible-playbook", "-i", "/etc/ansible/hosts_"+fmt.Sprintf("%d", req.TaskId), "/etc/ansible/ansible_"+fmt.Sprintf("%d", req.TaskId)+".yml", "--extra-vars", req.Value) } else { - cmd = exec.Command("ansible-playbook", "/etc/ansible/ansible.yml", "--extra-vars", "{\"hosts\":\""+"cc"+"\"}") + cmd = exec.Command("ansible-playbook", "-i", "/etc/ansible/hosts_"+fmt.Sprintf("%d", req.TaskId), "/etc/ansible/ansible_"+fmt.Sprintf("%d", req.TaskId)+".yml") } + //ansible-playbook -i /tmp/hosts --list-hosts debug.yml //捕获正常日志 stdout, err := cmd.StdoutPipe() if err != nil { -- 2.26.0