diff --git a/src/common/conf/options.go b/src/common/conf/options.go index 2488879834170f4b2550557607a371d996349b8b..7891ae49590cbfd9376e4b14a0546e7b167febe2 100644 --- a/src/common/conf/options.go +++ b/src/common/conf/options.go @@ -31,12 +31,12 @@ type Config struct { MinioSecretKey string MinioBucket string //TempDirPrefix string - PrometheusHost string - AccessRuleModeKey string - LocationUrl string - LocationKey string - PrivateKeySSH string - PublicKeySSH string + PrometheusHost string + AccessRuleModeKey string + LocationUrl string + LocationKey string + PrivateKeySSH string + //PublicKeySSH string OrderDingTalkAccessToken string OrderDingTalkSecret string SmsAccessKeyId string diff --git a/src/main.go b/src/main.go index 0afec76ff8a338eb7a4df95dbc28a1952f81b6aa..089bb80e04e34c291bf0f4f555cbbba2a6f26dc6 100644 --- a/src/main.go +++ b/src/main.go @@ -56,28 +56,28 @@ func initConfig() { conf.LoggerLevel = util.SetEnvStr("LOG_LEVEL", "info") conf.RunMode = util.SetEnvStr("GIN_MODE", "debug") // project run mode, available parameters: debug、release conf.Options = &conf.Config{ - Prefix: *prefix, - DbURL: util.SetEnvStr("DB_URL", "host=localhost port=9010 user=postgres password=passwd123 dbname=postgres sslmode=disable"), - DbDriver: util.SetEnvStr("DB_DRIVER", "postgres"), - RedisURL: util.SetEnvStr("REDIS_URL", "localhost:7001"), - RedisDB: 0, - RedisTag: "bg", - LogDirPrefix: util.SetEnvStr("LOG_DIR_PREFIX", "/app/log"), // 日志目录 - LogDirName: util.SetEnvStr("LOG_NAME", "syslog"), // 日志名称 - LogSaveDays: util.SetEnvInt("LOG_SAVE_DAYS", 7), // 日志最大存储天数 - LogMode: util.SetEnvInt("LOG_MODE", 1), // 1.标准打印 2.输出文件 - ArgBool: util.SetEnvBool("ARG_BOOL", false), // 示例参数 - ArgInt: util.SetEnvInt("ARG_INT", 10), // 示例参数 - MinioServer: util.SetEnvStr("MINIO_SERVER", "https://cache.wodcloud.com"), // Minio 服务地址 - MinioAccessKey: util.SetEnvStr("MINIO_ACCESS_KEY", "beagleadmin"), // Minio Access Key - MinioSecretKey: util.SetEnvStr("MINIO_SECRET_KEY", "H76cPmwvH7vJ"), // Minio Secret - MinioBucket: util.SetEnvStr("MINIO_BUCKET", "so-operation"), // Minio Bucket - PrometheusHost: util.SetEnvStr("PROMETHEUS_HOST", "https://prometheus.wodcloud.com"), // Prometheus Host - 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-----\n"), - PublicKeySSH: util.SetEnvStr("PUBLIC_KEY_SSH", "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQCw4WT05QHzCD19348MfJfycS1NI9Jlj62PGrZ1rU9/kWQif5TV1rqHZ6qjAX2WfK+W3u4SV51MhZBkMZZOgZgJmdGiaZJkSmj+8gj6XU/bxslUd+BYUKqbE18gFkVDgqs6n2tcqJ2at3x+WEr81Msk2qvKuGEiIOzcJPICWKxwiw== chenzilong@example.com\n"), + Prefix: *prefix, + DbURL: util.SetEnvStr("DB_URL", "host=localhost port=9010 user=postgres password=passwd123 dbname=postgres sslmode=disable"), + DbDriver: util.SetEnvStr("DB_DRIVER", "postgres"), + RedisURL: util.SetEnvStr("REDIS_URL", "localhost:7001"), + RedisDB: 0, + RedisTag: "bg", + LogDirPrefix: util.SetEnvStr("LOG_DIR_PREFIX", "/app/log"), // 日志目录 + LogDirName: util.SetEnvStr("LOG_NAME", "syslog"), // 日志名称 + LogSaveDays: util.SetEnvInt("LOG_SAVE_DAYS", 7), // 日志最大存储天数 + LogMode: util.SetEnvInt("LOG_MODE", 1), // 1.标准打印 2.输出文件 + ArgBool: util.SetEnvBool("ARG_BOOL", false), // 示例参数 + ArgInt: util.SetEnvInt("ARG_INT", 10), // 示例参数 + MinioServer: util.SetEnvStr("MINIO_SERVER", "https://cache.wodcloud.com"), // Minio 服务地址 + MinioAccessKey: util.SetEnvStr("MINIO_ACCESS_KEY", "beagleadmin"), // Minio Access Key + MinioSecretKey: util.SetEnvStr("MINIO_SECRET_KEY", "H76cPmwvH7vJ"), // Minio Secret + MinioBucket: util.SetEnvStr("MINIO_BUCKET", "so-operation"), // Minio Bucket + PrometheusHost: util.SetEnvStr("PROMETHEUS_HOST", "https://prometheus.wodcloud.com"), // Prometheus Host + 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", ""), + //PublicKeySSH: util.SetEnvStr("PUBLIC_KEY_SSH", "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQCw4WT05QHzCD19348MfJfycS1NI9Jlj62PGrZ1rU9/kWQif5TV1rqHZ6qjAX2WfK+W3u4SV51MhZBkMZZOgZgJmdGiaZJkSmj+8gj6XU/bxslUd+BYUKqbE18gFkVDgqs6n2tcqJ2at3x+WEr81Msk2qvKuGEiIOzcJPICWKxwiw== chenzilong@example.com\n"), OrderDingTalkAccessToken: util.SetEnvStr("ORDER_DING_TALK_ACCESS_TOKEN", "203fe1644b446bba0a34e6e622c523d39ee9916fdad94b9c64224449f659e20b"), OrderDingTalkSecret: util.SetEnvStr("ORDER_DING_TALK_SECRET", "SECa73d8372e336451c9daf29a99f750ee1bdd170c1dab910eab9cd06d729a831b7"), SmsAccessKeyId: util.SetEnvStr("SMS_ACCESS_KEY", "LTAI4GBcVubRjzX7ABPcHnhB"), // 短信key @@ -161,19 +161,19 @@ func initAnsibleSSH() { 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/id_rsa.pub") - defer f2.Close() - if err != nil { - fmt.Println(err.Error()) - } else { - _, err := f.Write([]byte(conf.Options.PublicKeySSH)) + _, err = f.Write([]byte(conf.Options.PrivateKeySSH)) if err != nil { fmt.Println(err.Error()) } } + //f2, err := os.Create("/root/.ssh/id_rsa.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/service/host_manage.go b/src/service/host_manage.go index 7414e913513ca7da357534a6681c517df9ec5c73..f8fe818555e6c05c4b51f75ee5d008502c73b825 100644 --- a/src/service/host_manage.go +++ b/src/service/host_manage.go @@ -455,7 +455,11 @@ func (h *HostManageSvc) ListStateHostManage(req request.StateHostManageReq) (err for _, v := range hostManageList { //修改状态 - connStatus := StatusDetection(v.Ip) + connStatus, err1 := StatusDetection(v.Ip) + if err1 != nil { + session.Rollback() + return err1 + } hostManageListConn := entity.HostManageList{ ConnStatus: connStatus, } @@ -545,7 +549,10 @@ func (h *HostManageSvc) SaveStateHostManage(hostManageList []request.HostManageL id = uuid.New().String() for k, v := range hostManageListCaches { //调用状态检测函数 - hostManageListCaches[k].ConnStatus = StatusDetection(v.Ip) + hostManageListCaches[k].ConnStatus, err = StatusDetection(v.Ip) + if err != nil { + return + } hostManageListCaches[k].Id = id } @@ -614,16 +621,25 @@ func (h *HostManageSvc) SaveIpExceptionList(req request.HostIpExceptionListReq) } // StatusDetection 状态检测 -func StatusDetection(ip string) (ipConn int) { +func StatusDetection(ip string) (ipConn int, err error) { var cmd *exec.Cmd cmd = exec.Command("ansible", fmt.Sprintf("%s", AnsibleIp+ip), "-m", "ping") - output, err := cmd.Output() - if err != nil { - fmt.Println("ping:", string(output)) - return 1 + //执行cmd命令 + if err = cmd.Start(); err != nil { + err = resp.CmdExecError.WithError(err) + return + } + if cmd.ProcessState.Success() { + return 0, nil } - fmt.Println("ping:", string(output)) - return 0 + return 1, nil + //output, err := cmd.Output() + //if err != nil { + // fmt.Println("ping:", string(output)) + // return 1 + //} + //fmt.Println("ping:", string(output)) + //return 0 } // ExportIpStr 结果导出 @@ -780,7 +796,10 @@ func CronStatusDetection() { // } //} for _, v := range hostManageList { - connStatus := StatusDetection(v.Ip) + connStatus, err1 := StatusDetection(v.Ip) + if err1 != nil { + fmt.Println("CronStatusDetection err:", err1.Error()) + } //修改状态 _, err = db.Table("host_manage_list").Where("is_delete = 0 AND id = ?", v.Id). Cols("conn_status").Update(&entity.HostManageList{ @@ -788,7 +807,6 @@ func CronStatusDetection() { }) if err != nil { fmt.Println("CronStatusDetection err:", err.Error()) - return } } fmt.Println("CronPersonalCardDate success!") diff --git a/src/service/task_manage.go b/src/service/task_manage.go index 2621a6456410f5f130d24c1854867a253aa6ed52..95dc98716fff6ac3d83133928f9b3bac6bd0f243 100644 --- a/src/service/task_manage.go +++ b/src/service/task_manage.go @@ -237,7 +237,6 @@ func (t *TaskManageSvc) ExecScript(req request.ExecScriptReq, script string) (id } //写入主机信息 - //hostsIp := strings.Replace(strings.Trim(fmt.Sprint(hosts), "[]"), " ", " ", -1) hostsGroup, err := os.Create("/etc/ansible/hosts_" + fmt.Sprintf("%d", req.TaskId)) if err != nil {