Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
so-operation-api
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
smart-operation
so-operation-api
Commits
d61a8e07
Commit
d61a8e07
authored
Jul 06, 2023
by
陈子龙
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
自动化运维状态检测 fix
parent
03b40f51
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
103 additions
and
30 deletions
+103
-30
src/bean/vo/response/host_manage.go
src/bean/vo/response/host_manage.go
+1
-1
src/common/conf/options.go
src/common/conf/options.go
+3
-0
src/main.go
src/main.go
+32
-0
src/router/workorderrouter.go
src/router/workorderrouter.go
+0
-7
src/service/host_manage.go
src/service/host_manage.go
+67
-22
No files found.
src/bean/vo/response/host_manage.go
View file @
d61a8e07
...
...
@@ -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"`
// 密码
}
...
...
src/common/conf/options.go
View file @
d61a8e07
...
...
@@ -35,6 +35,9 @@ type Config struct {
AccessRuleModeKey
string
LocationUrl
string
LocationKey
string
PrivateKeySSH
string
PublicKeySSH
string
}
const
(
...
...
src/main.go
View file @
d61a8e07
...
...
@@ -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-----
\n
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAlwAAAAdzc2gtcn
\n
NhAAAAAwEAAQAAAIEAsOFk9OUB8wg9fd+PDHyX8nEtTSPSZY+tjxq2da1Pf5FkIn+U1da6
\n
h2eqowF9lnyvlt7uEledTIWQZDGWToGYCZnRommSZEpo/vII+l1P28bJVHfgWFCqmxNfIB
\n
ZFQ4KrOp9rXKidmrd8flhK/NTLJNqryrhhIiDs3CTyAliscIsAAAIQTuM2gU7jNoEAAAAH
\n
c3NoLXJzYQAAAIEAsOFk9OUB8wg9fd+PDHyX8nEtTSPSZY+tjxq2da1Pf5FkIn+U1da6h2
\n
eqowF9lnyvlt7uEledTIWQZDGWToGYCZnRommSZEpo/vII+l1P28bJVHfgWFCqmxNfIBZF
\n
Q4KrOp9rXKidmrd8flhK/NTLJNqryrhhIiDs3CTyAliscIsAAAADAQABAAAAgDjcfGPtqq
\n
7CG2J3l7jf5MjfcTy3I0/a3GSApd82k7PivVoJwYLswJH+1XAJbqIN+zR4/fePitWqqjxL
\n
ZJJgPstuXpBZuJDvGwMqfl7wHRL2Qx34sRG02hG5e3uIfMxe5lHcPba0qsVQt+vOhu9MUb
\n
sYF/mfuQJKt/Oi8nA1BbrBAAAAQFQPrap7AtYWEoCIY7gtpFMW51iDTAv5GN99DsKNuBby
\n
wQX2S0Wg/da75m/emJn/2IbmaKApvrx8LbenpyywfBkAAABBAN6xiYQ2j7eRjLV4h4Hbie
\n
VwlPYP4otKHdF5meObr+2ifYiMktdv/44V1XWKhgavjGFNWx2sHgj7byb51e/bi3MAAABB
\n
AMtVxa55G0wS9Yw1WK2F4JdYZ65ZAnUuo2rbA2dMDQxsOQxgel5Ox2XmC7e0GKrO9BJKPo
\n
R2fHEOdm9KOmoB8IkAAAAWY2hlbnppbG9uZ0BleGFtcGxlLmNvbQECAwQF
\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
())
}
}
}
src/router/workorderrouter.go
View file @
d61a8e07
...
...
@@ -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) // 我的业务工单列表
//}
}
src/service/host_manage.go
View file @
d61a8e07
...
...
@@ -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
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment