From d61a8e079fd4635c1ebfee1a11274c956f5259cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AD=90=E9=BE=99?= Date: Thu, 6 Jul 2023 16:28:46 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=8C=96=E8=BF=90=E7=BB=B4?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=A3=80=E6=B5=8B=20fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bean/vo/response/host_manage.go | 2 +- src/common/conf/options.go | 3 + src/main.go | 32 +++++++++++ src/router/workorderrouter.go | 7 --- src/service/host_manage.go | 89 ++++++++++++++++++++++------- 5 files changed, 103 insertions(+), 30 deletions(-) diff --git a/src/bean/vo/response/host_manage.go b/src/bean/vo/response/host_manage.go index 909ed27..b16046c 100644 --- a/src/bean/vo/response/host_manage.go +++ b/src/bean/vo/response/host_manage.go @@ -62,7 +62,7 @@ type HostManageListRes struct { Id int `json:"id"` // id Ip string `json:"ip"` // ip Port string `json:"port"` // 端口 - VoucherType int `json:"voucher_type"` // 凭证类型(0密码验证 密钥验证) + VoucherType int `json:"voucher_type"` // 凭证类型(0密码验证 1密钥验证) UserName string `json:"user_name"` // 用户名 Password string `json:"password"` // 密码 } diff --git a/src/common/conf/options.go b/src/common/conf/options.go index 7e170c5..75fd0fe 100644 --- a/src/common/conf/options.go +++ b/src/common/conf/options.go @@ -35,6 +35,9 @@ type Config struct { AccessRuleModeKey string LocationUrl string LocationKey string + + PrivateKeySSH string + PublicKeySSH string } const ( diff --git a/src/main.go b/src/main.go index 164dbaa..951e8b9 100644 --- a/src/main.go +++ b/src/main.go @@ -32,6 +32,8 @@ func main() { initTempDirPrefix() pflag.Parse() // init start args initConfig() + + initAnsibleSSH() // init log config cfg := initLogConfig() conf.Logger = log.NewLogger(cfg, conf.LoggerLevel) @@ -75,6 +77,9 @@ func initConfig() { AccessRuleModeKey: "accessRuleMode", LocationUrl: util.SetEnvStr("LOCATION_URL", "https://apis.map.qq.com/ws/location/v1/ip"), LocationKey: util.SetEnvStr("LOCATION_KEY", "QKFBZ-PGGWJ-VZQFF-FHPA7-QWT5H-YHF4T"), + + PrivateKeySSH: util.SetEnvStr("PRIVATE_KEY_SSH", "-----BEGIN OPENSSH PRIVATE KEY-----\nb3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAlwAAAAdzc2gtcn\nNhAAAAAwEAAQAAAIEAsOFk9OUB8wg9fd+PDHyX8nEtTSPSZY+tjxq2da1Pf5FkIn+U1da6\nh2eqowF9lnyvlt7uEledTIWQZDGWToGYCZnRommSZEpo/vII+l1P28bJVHfgWFCqmxNfIB\nZFQ4KrOp9rXKidmrd8flhK/NTLJNqryrhhIiDs3CTyAliscIsAAAIQTuM2gU7jNoEAAAAH\nc3NoLXJzYQAAAIEAsOFk9OUB8wg9fd+PDHyX8nEtTSPSZY+tjxq2da1Pf5FkIn+U1da6h2\neqowF9lnyvlt7uEledTIWQZDGWToGYCZnRommSZEpo/vII+l1P28bJVHfgWFCqmxNfIBZF\nQ4KrOp9rXKidmrd8flhK/NTLJNqryrhhIiDs3CTyAliscIsAAAADAQABAAAAgDjcfGPtqq\n7CG2J3l7jf5MjfcTy3I0/a3GSApd82k7PivVoJwYLswJH+1XAJbqIN+zR4/fePitWqqjxL\nZJJgPstuXpBZuJDvGwMqfl7wHRL2Qx34sRG02hG5e3uIfMxe5lHcPba0qsVQt+vOhu9MUb\nsYF/mfuQJKt/Oi8nA1BbrBAAAAQFQPrap7AtYWEoCIY7gtpFMW51iDTAv5GN99DsKNuBby\nwQX2S0Wg/da75m/emJn/2IbmaKApvrx8LbenpyywfBkAAABBAN6xiYQ2j7eRjLV4h4Hbie\nVwlPYP4otKHdF5meObr+2ifYiMktdv/44V1XWKhgavjGFNWx2sHgj7byb51e/bi3MAAABB\nAMtVxa55G0wS9Yw1WK2F4JdYZ65ZAnUuo2rbA2dMDQxsOQxgel5Ox2XmC7e0GKrO9BJKPo\nR2fHEOdm9KOmoB8IkAAAAWY2hlbnppbG9uZ0BleGFtcGxlLmNvbQECAwQF\n-----END OPENSSH PRIVATE KEY-----"), + PublicKeySSH: util.SetEnvStr("PUBLIC_KEY_SSH", "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQCw4WT05QHzCD19348MfJfycS1NI9Jlj62PGrZ1rU9/kWQif5TV1rqHZ6qjAX2WfK+W3u4SV51MhZBkMZZOgZgJmdGiaZJkSmj+8gj6XU/bxslUd+BYUKqbE18gFkVDgqs6n2tcqJ2at3x+WEr81Msk2qvKuGEiIOzcJPICWKxwiw== chenzilong@example.com"), } } @@ -140,3 +145,30 @@ func initTempDirPrefix() { fmt.Println("创建目录失败!") } } + +func initAnsibleSSH() { + err := os.Mkdir("/root/.ssh", os.ModePerm) + if err != nil { + fmt.Println("创建目录失败!") + } + f, err := os.Create("/root/.ssh/chenzilong") + defer f.Close() + if err != nil { + fmt.Println(err.Error()) + } else { + _, err := f.Write([]byte(conf.Options.PrivateKeySSH)) + if err != nil { + fmt.Println(err.Error()) + } + } + f2, err := os.Create("/root/.ssh/chenzilong.pub") + defer f2.Close() + if err != nil { + fmt.Println(err.Error()) + } else { + _, err := f.Write([]byte(conf.Options.PublicKeySSH)) + if err != nil { + fmt.Println(err.Error()) + } + } +} diff --git a/src/router/workorderrouter.go b/src/router/workorderrouter.go index 8250d8d..876de20 100644 --- a/src/router/workorderrouter.go +++ b/src/router/workorderrouter.go @@ -36,11 +36,4 @@ func InitWorkOrderRouter(e *gin.Engine) { me.PUT("/feedback", controller.FeedbackWorkOrderMe) // 处置反馈 me.GET("/list", controller.ListWorkOrderMe) // 我的业务工单列表 } - - ////我的预警工单 - //me := so.Group("/work_order_me") - //{ - // me.PUT("/feedback", controller.FeedbackWorkOrderMe) // 处置反馈 - // me.GET("/list", controller.ListWorkOrderMe) // 我的业务工单列表 - //} } diff --git a/src/service/host_manage.go b/src/service/host_manage.go index 93a2806..789d170 100644 --- a/src/service/host_manage.go +++ b/src/service/host_manage.go @@ -117,8 +117,15 @@ func (h *HostManageSvc) AddHostManage(req request.AddHostManageReq) (err error) return } - hostsIp := fmt.Sprintf("%s ansible_ssh_host=%s ansible_ssh_port=%s ansible_ssh_user=\"%s\" ansible_ssh_pass=\"%s\"", - AnsibleIp+fmt.Sprintf("%d", hostManageList.Id), v.Ip, v.Port, v.UserName, v.Password) + hostsIp := "" + if v.VoucherType == 0 { + hostsIp = fmt.Sprintf("%s ansible_ssh_host=%s ansible_ssh_port=%s ansible_ssh_user=\"%s\" ansible_ssh_pass=\"%s\"", + AnsibleIp+fmt.Sprintf("%d", hostManageList.Id), v.Ip, v.Port, v.UserName, v.Password) + } else { + hostsIp = fmt.Sprintf("%s ansible_ssh_host=%s ansible_ssh_port=%s ansible_ssh_user=\"%s\"", + AnsibleIp+fmt.Sprintf("%d", hostManageList.Id), v.Ip, v.Port, v.UserName) + } + hosts["["+AnsibleGroup+fmt.Sprintf("%d", hostManage.Id)+"]"] = append(hosts["["+AnsibleGroup+fmt.Sprintf("%d", hostManage.Id)+"]"], hostsIp) } @@ -219,8 +226,15 @@ func (h *HostManageSvc) EditHostManage(req request.EditHostManageReq) (err error return } - hostsIp := fmt.Sprintf("%s ansible_ssh_host=%s ansible_ssh_port=%s ansible_ssh_user=\"%s\" ansible_ssh_pass=\"%s\"", - AnsibleIp+fmt.Sprintf("%d", hostManageList.Id), v.Ip, v.Port, v.UserName, v.Password) + hostsIp := "" + if v.VoucherType == 0 { + hostsIp = fmt.Sprintf("%s ansible_ssh_host=%s ansible_ssh_port=%s ansible_ssh_user=\"%s\" ansible_ssh_pass=\"%s\"", + AnsibleIp+fmt.Sprintf("%d", hostManageList.Id), v.Ip, v.Port, v.UserName, v.Password) + } else { + hostsIp = fmt.Sprintf("%s ansible_ssh_host=%s ansible_ssh_port=%s ansible_ssh_user=\"%s\"", + AnsibleIp+fmt.Sprintf("%d", hostManageList.Id), v.Ip, v.Port, v.UserName) + } + hosts["["+AnsibleGroup+fmt.Sprintf("%d", req.Id)+"]"] = append(hosts["["+AnsibleGroup+fmt.Sprintf("%d", req.Id)+"]"], hostsIp) } @@ -396,23 +410,47 @@ func (h *HostManageSvc) ListStateHostManage(req request.StateHostManageReq) (err return } - //往hosts文件中写入主机组ip - //f, err := os.OpenFile("/etc/ansible/hosts", os.O_APPEND|os.O_CREATE|os.O_RDWR, 0777) - //if err != nil { - // err = resp.FileExecError.WithError(err) - // return - //} - //defer f.Close() - //_, err = f.Write([]byte(fmt.Sprintf("%s%d\n", AnsibleGroup, req.Id))) - //if err != nil { - // return resp.FileExecError.WithError(err) - //} - //for _, v := range hostManageList { - // _, err = f.Write([]byte(fmt.Sprintf("%s ansible_ssh_host=%s ansible_ssh_port=%s ansible_ssh_user=\"%s\" ansible_ssh_pass=\"%s\"\n", v.Ip, v.Ip, v.Port, v.UserName, v.Password))) - // if err != nil { - // return resp.FileExecError.WithError(err) - // } - //} + //读取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 + } + //新增主机分组列表 + for _, v := range hostManageList { + hostsIp := "" + if v.VoucherType == 0 { + hostsIp = fmt.Sprintf("%s ansible_ssh_host=%s ansible_ssh_port=%s ansible_ssh_user=\"%s\" ansible_ssh_pass=\"%s\"", + AnsibleIp+fmt.Sprintf("%d", v.Id), v.Ip, v.Port, v.UserName, v.Password) + } else { + hostsIp = fmt.Sprintf("%s ansible_ssh_host=%s ansible_ssh_port=%s ansible_ssh_user=\"%s\"", + AnsibleIp+fmt.Sprintf("%d", v.Id), v.Ip, v.Port, v.UserName) + } + + flag := 0 + for _, v1 := range hosts["["+AnsibleGroup+fmt.Sprintf("%d", req.Id)+"]"] { + if v1 == hostsIp { + flag = 1 + } + } + if flag == 0 { + hosts["["+AnsibleGroup+fmt.Sprintf("%d", req.Id)+"]"] = append(hosts["["+AnsibleGroup+fmt.Sprintf("%d", req.Id)+"]"], hostsIp) + } + } + + //写入hosts + err = tools.MapToSaveHosts(hosts) + if err != nil { + err = resp.MarshalError.WithError(err) + session.Rollback() + return + } + for _, v := range hostManageList { //修改状态 _, err = session.Table("host_manage_list").Where("is_delete = 0 AND id = ?", v.Id). @@ -473,7 +511,14 @@ func (h *HostManageSvc) SaveStateHostManage(hostManageList []request.HostManageL for _, v := range hostManageListCaches { - hostsIp := fmt.Sprintf("%s ansible_ssh_host=%s ansible_ssh_port=%s ansible_ssh_user=\"%s\" ansible_ssh_pass=\"%s\"", AnsibleIp+v.Ip, v.Ip, v.Port, v.UserName, v.Password) + hostsIp := "" + if v.VoucherType == 0 { + hostsIp = fmt.Sprintf("%s ansible_ssh_host=%s ansible_ssh_port=%s ansible_ssh_user=\"%s\" ansible_ssh_pass=\"%s\"", + AnsibleIp+v.Ip, v.Ip, v.Port, v.UserName, v.Password) + } else { + hostsIp = fmt.Sprintf("%s ansible_ssh_host=%s ansible_ssh_port=%s ansible_ssh_user=\"%s\"", + AnsibleIp+v.Ip, v.Ip, v.Port, v.UserName) + } flag := 0 for _, v1 := range hosts["["+AnsibleGroup+"]"] { if v1 == hostsIp { -- 2.26.0