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
240b7c46
Commit
240b7c46
authored
Jul 10, 2023
by
陈子龙
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
自动化运维 立即执行 fix
parent
44444026
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
91 additions
and
47 deletions
+91
-47
src/bean/entity/task_manage.go
src/bean/entity/task_manage.go
+8
-8
src/bean/vo/request/task_manage.go
src/bean/vo/request/task_manage.go
+6
-6
src/controller/task_manage.go
src/controller/task_manage.go
+55
-30
src/service/task_manage.go
src/service/task_manage.go
+22
-3
No files found.
src/bean/entity/task_manage.go
View file @
240b7c46
...
@@ -8,9 +8,9 @@ type TaskManage struct {
...
@@ -8,9 +8,9 @@ type TaskManage struct {
TaskDesc
string
`json:"task_desc" xorm:"task_desc"`
// 任务描述
TaskDesc
string
`json:"task_desc" xorm:"task_desc"`
// 任务描述
YamlDesc
string
`json:"yaml_desc" xorm:"yaml_desc"`
// yaml文件
YamlDesc
string
`json:"yaml_desc" xorm:"yaml_desc"`
// yaml文件
YamlUrl
string
`json:"yaml_url" xorm:"yaml_url"`
// yaml文件地址
YamlUrl
string
`json:"yaml_url" xorm:"yaml_url"`
// yaml文件地址
ExecCnt
int
`json:"exec_cnt" xorm:"exec_cnt"`
// 执行次数
//
ExecCnt int `json:"exec_cnt" xorm:"exec_cnt"` // 执行次数
SuccessCnt
int
`json:"success_cnt" xorm:"success_cnt"`
// 执行成功次数
//
SuccessCnt int `json:"success_cnt" xorm:"success_cnt"` // 执行成功次数
FailCnt
int
`json:"fail_cnt" xorm:"fail_cnt"`
// 执行失败次数
//
FailCnt int `json:"fail_cnt" xorm:"fail_cnt"` // 执行失败次数
HostGroupId
int
`json:"host_group_id" xorm:"host_group_id"`
// 主机分组ID
HostGroupId
int
`json:"host_group_id" xorm:"host_group_id"`
// 主机分组ID
IsDelete
int
`json:"is_delete" xorm:"is_delete" `
// 是否删除(0 未删除 1已删除)
IsDelete
int
`json:"is_delete" xorm:"is_delete" `
// 是否删除(0 未删除 1已删除)
CreateUser
string
`json:"create_user" xorm:"create_user" `
// 创建人
CreateUser
string
`json:"create_user" xorm:"create_user" `
// 创建人
...
...
src/bean/vo/request/task_manage.go
View file @
240b7c46
...
@@ -34,9 +34,9 @@ type ListTaskManageReq struct {
...
@@ -34,9 +34,9 @@ type ListTaskManageReq struct {
type
ExecScriptReq
struct
{
type
ExecScriptReq
struct
{
TaskId
int
`form:"task_id" binding:"required"`
//任务id
TaskId
int
`form:"task_id" binding:"required"`
//任务id
HostGroupId
int
`form:"host_group_id" binding:"required"`
//主机分组id
//
HostGroupId int `form:"host_group_id" binding:"required"` //主机分组id
Type
int
`form:"type" binding:"oneof=1 2"`
//脚本额外变量类型1yaml 2json
Type
int
`form:"type"`
//脚本额外变量类型1yaml 2json
Value
string
`form:"value"`
//脚本额外变量值
Value
string
`form:"value"`
//脚本额外变量值
Script
string
`form:"script"`
//执行脚本
//
Script string `form:"script"` //执行脚本
YmlFileName
string
`form:"yml_file_name"`
//执行脚本url
//
YmlFileName string `form:"yml_file_name"` //执行脚本url
}
}
src/controller/task_manage.go
View file @
240b7c46
...
@@ -15,6 +15,7 @@ import (
...
@@ -15,6 +15,7 @@ import (
"gitlab.wodcloud.com/smart-operation/so-operation-api/src/service"
"gitlab.wodcloud.com/smart-operation/so-operation-api/src/service"
"gitlab.wodcloud.com/smart-operation/so-operation-api/src/util"
"gitlab.wodcloud.com/smart-operation/so-operation-api/src/util"
"io"
"io"
"strings"
)
)
// AddTaskManage 新增任务
// AddTaskManage 新增任务
...
@@ -125,57 +126,82 @@ func ListTaskManage(c *gin.Context) {
...
@@ -125,57 +126,82 @@ func ListTaskManage(c *gin.Context) {
}
}
func
ExecScript
(
c
*
gin
.
Context
)
{
func
ExecScript
(
c
*
gin
.
Context
)
{
var
req
request
.
ExecScriptReq
var
(
if
err
:=
c
.
ShouldBind
(
&
req
);
err
!=
nil
{
req
request
.
ExecScriptReq
err
error
script
string
)
if
err
=
c
.
ShouldBind
(
&
req
);
err
!=
nil
{
SendJsonResponse
(
c
,
resp
.
InvalidParam
.
WithError
(
err
),
nil
)
SendJsonResponse
(
c
,
resp
.
InvalidParam
.
WithError
(
err
),
nil
)
return
return
}
}
if
req
.
YmlFileName
==
""
&&
req
.
Script
==
""
{
taskManageSvc
:=
service
.
TaskManageSvc
{}
SendJsonResponse
(
c
,
resp
.
InvalidParam
.
WithError
(
errors
.
New
(
"执行脚本为空"
)),
nil
)
taskManage
,
err
:=
taskManageSvc
.
GetTaskManage
(
req
.
TaskId
)
if
err
!=
nil
{
SendJsonResponse
(
c
,
err
,
nil
)
return
return
}
}
//解析yml文件
if
taskManage
.
YamlDesc
==
""
{
if
req
.
YmlFileName
!=
""
&&
req
.
Value
==
""
{
//解析文件
minioClient
,
err
:=
client
.
GetMinioConnect
()
ymlUrl
:=
strings
.
Split
(
taskManage
.
YamlUrl
,
"/"
)
if
err
!=
nil
{
minioClient
,
err2
:=
client
.
GetMinioConnect
()
SendJsonResponse
(
c
,
resp
.
InvalidParam
.
WithError
(
errors
.
New
(
"执行脚本为空"
)),
nil
)
if
err2
!=
nil
{
SendJsonResponse
(
c
,
resp
.
InvalidParam
.
WithError
(
err2
),
nil
)
return
return
}
}
object
,
err
:=
minioClient
.
GetObject
(
c
,
conf
.
Options
.
MinioBucket
,
req
.
YmlFileName
,
minio
.
GetObjectOptions
{})
object
,
err
2
:=
minioClient
.
GetObject
(
c
,
conf
.
Options
.
MinioBucket
,
ymlUrl
[
len
(
ymlUrl
)
-
1
]
,
minio
.
GetObjectOptions
{})
if
err
!=
nil
{
if
err
2
!=
nil
{
SendJsonResponse
(
c
,
resp
.
GetFileStreamError
.
WithError
(
err
),
nil
)
SendJsonResponse
(
c
,
resp
.
GetFileStreamError
.
WithError
(
err
2
),
nil
)
return
return
}
}
obj
,
err
:=
io
.
ReadAll
(
object
)
obj
,
err
2
:=
io
.
ReadAll
(
object
)
if
err
!=
nil
{
if
err
2
!=
nil
{
SendJsonResponse
(
c
,
resp
.
ReadFileError
.
WithError
(
err
),
nil
)
SendJsonResponse
(
c
,
resp
.
ReadFileError
.
WithError
(
err
2
),
nil
)
return
return
}
}
req
.
Script
=
string
(
obj
)
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
{
if
req
.
Type
==
1
{
//var scripts []map[string]interface{}
var
value
map
[
string
]
interface
{}
var
value
map
[
string
]
interface
{}
j2
,
err
:=
yaml
.
YAMLToJSON
([]
byte
(
req
.
Script
))
j2
,
err
3
:=
yaml
.
YAMLToJSON
([]
byte
(
req
.
Value
))
if
err
!=
nil
{
if
err
3
!=
nil
{
err
=
resp
.
YamlAnalysisError
.
WithError
(
err
)
err
=
resp
.
YamlAnalysisError
.
WithError
(
err
3
)
return
return
}
}
err
=
json
.
Unmarshal
(
j2
,
&
value
)
err
3
=
json
.
Unmarshal
(
j2
,
&
value
)
if
err
!=
nil
{
if
err
3
!=
nil
{
err
=
resp
.
InvalidParam
.
WithError
(
errors
.
New
(
"
yaml格式
错误"
))
err
=
resp
.
InvalidParam
.
WithError
(
errors
.
New
(
"
变量配置
错误"
))
return
return
}
}
value
[
"hosts"
]
=
fmt
.
Sprintf
(
"%s%d"
,
service
.
AnsibleGroup
,
taskManage
.
HostGroupId
)
value
[
"hosts"
]
=
fmt
.
Sprintf
(
"%s%d"
,
service
.
AnsibleGroup
,
req
.
HostGroupId
)
j
,
err3
:=
json
.
Marshal
(
value
)
if
err3
!=
nil
{
j
,
err
:=
json
.
Marshal
(
value
)
err
=
resp
.
MarshalError
.
WithError
(
err3
)
if
err
!=
nil
{
err
=
resp
.
MarshalError
.
WithError
(
err
)
return
return
}
}
req
.
Value
=
fmt
.
Sprintf
(
"%s"
,
j
)
req
.
Value
=
fmt
.
Sprintf
(
"%s"
,
j
)
...
@@ -195,8 +221,7 @@ func ExecScript(c *gin.Context) {
...
@@ -195,8 +221,7 @@ func ExecScript(c *gin.Context) {
//req.Value = fmt.Sprintf("@/etc/ansible/ansible_extra.yml")
//req.Value = fmt.Sprintf("@/etc/ansible/ansible_extra.yml")
}
}
taskManageSvc
:=
service
.
TaskManageSvc
{}
id
,
err
:=
taskManageSvc
.
ExecScript
(
req
,
script
)
id
,
err
:=
taskManageSvc
.
ExecScript
(
req
)
if
err
!=
nil
{
if
err
!=
nil
{
SendJsonResponse
(
c
,
err
,
nil
)
SendJsonResponse
(
c
,
err
,
nil
)
return
return
...
...
src/service/task_manage.go
View file @
240b7c46
...
@@ -173,7 +173,7 @@ func (t *TaskManageSvc) ListTaskManage(req request.ListTaskManageReq) (total int
...
@@ -173,7 +173,7 @@ func (t *TaskManageSvc) ListTaskManage(req request.ListTaskManageReq) (total int
finder
.
OrderBy
(
"tm.id"
)
finder
.
OrderBy
(
"tm.id"
)
//查询任务
//查询任务
total
,
err
=
finder
.
Select
(
"tm.id,tm.task_name,tm.task_desc,(select count(*) from task_history th "
+
total
,
err
=
finder
.
Select
(
"tm.id,tm.task_name,tm.task_desc,(select count(*) from task_history th "
+
"where th.task_id = tm.id
group by th.task_id
) as exec_cnt,tm.create_user,tm.create_time"
)
.
"where th.task_id = tm.id) as exec_cnt,tm.create_user,tm.create_time"
)
.
Limit
(
req
.
PageSize
,
(
req
.
Page
-
1
)
*
req
.
PageSize
)
.
FindAndCount
(
&
taskManageListRes
)
Limit
(
req
.
PageSize
,
(
req
.
Page
-
1
)
*
req
.
PageSize
)
.
FindAndCount
(
&
taskManageListRes
)
if
err
!=
nil
{
if
err
!=
nil
{
err
=
resp
.
DbSelectError
.
WithError
(
err
)
err
=
resp
.
DbSelectError
.
WithError
(
err
)
...
@@ -182,7 +182,26 @@ func (t *TaskManageSvc) ListTaskManage(req request.ListTaskManageReq) (total int
...
@@ -182,7 +182,26 @@ func (t *TaskManageSvc) ListTaskManage(req request.ListTaskManageReq) (total int
return
return
}
}
func
(
t
*
TaskManageSvc
)
ExecScript
(
req
request
.
ExecScriptReq
)
(
id
int
,
err
error
)
{
// DetailsTaskManage 任务详情
func
(
t
*
TaskManageSvc
)
GetTaskManage
(
id
int
)
(
taskManageRes
response
.
TaskManageRes
,
err
error
)
{
db
,
err
:=
client
.
GetDbClient
()
if
err
!=
nil
{
err
=
resp
.
DbConnectError
.
WithError
(
err
)
return
}
//查询任务详情
finder
:=
db
.
Table
(
"task_manage"
)
.
Where
(
"is_delete = 0 AND id = ?"
,
id
)
_
,
err
=
finder
.
Get
(
&
taskManageRes
)
if
err
!=
nil
{
err
=
resp
.
DbSelectError
.
WithError
(
err
)
return
}
return
}
func
(
t
*
TaskManageSvc
)
ExecScript
(
req
request
.
ExecScriptReq
,
script
string
)
(
id
int
,
err
error
)
{
//var scripts []map[string]interface{}
//var scripts []map[string]interface{}
//var script map[string]interface{}
//var script map[string]interface{}
//j2, err := yaml.YAMLToJSON([]byte(req.Script))
//j2, err := yaml.YAMLToJSON([]byte(req.Script))
...
@@ -211,7 +230,7 @@ func (t *TaskManageSvc) ExecScript(req request.ExecScriptReq) (id int, err error
...
@@ -211,7 +230,7 @@ func (t *TaskManageSvc) ExecScript(req request.ExecScriptReq) (id int, err error
return
return
}
}
defer
f2
.
Close
()
defer
f2
.
Close
()
_
,
err
=
f2
.
Write
([]
byte
(
req
.
S
cript
))
_
,
err
=
f2
.
Write
([]
byte
(
s
cript
))
if
err
!=
nil
{
if
err
!=
nil
{
err
=
resp
.
FileExecError
.
WithError
(
err
)
err
=
resp
.
FileExecError
.
WithError
(
err
)
return
return
...
...
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