diff --git a/src/bean/vo/response/host_manage.go b/src/bean/vo/response/host_manage.go index 909ed279601fe8795d94fefb6d50049f1fbe9f55..b16046cacfc5075810732e19cc1a34c3039c1455 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 7e170c597c80e613ddcbddfcaa825f2d1ecd0ce8..75fd0fe9e353f8e021de1ef0b5664c5f5821e7fa 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 164dbaa314211809db3f2dd1e6e5982a8b7d7a68..951e8b97f79d6c9100a6421e9dc3c3b5ed36cfc6 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 8250d8db761eb6cfb1b49ba69ad1f582dac31966..876de208a02e88f2328e50307bbf8f16d0d03235 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 93a28060b1d513bcd6671fff129c696e4b5da320..789d1706c29f515a4f91fd6b103834b650dc106e 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 {