Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DiDi
nightingale
提交
e63e741a
N
nightingale
项目概览
DiDi
/
nightingale
12 个月 前同步成功
通知
46
Star
7053
Fork
1161
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
N
nightingale
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e63e741a
编写于
10月 27, 2020
作者:
U
UlricQin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
job api for tt
上级
282aede6
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
71 addition
and
5 deletion
+71
-5
src/modules/job/http/router.go
src/modules/job/http/router.go
+3
-0
src/modules/job/http/router_funcs.go
src/modules/job/http/router_funcs.go
+0
-5
src/modules/job/http/router_task.go
src/modules/job/http/router_task.go
+65
-0
src/modules/job/http/router_task_tpl.go
src/modules/job/http/router_task_tpl.go
+3
-0
未找到文件。
src/modules/job/http/router.go
浏览文件 @
e63e741a
...
...
@@ -36,5 +36,8 @@ func Config(r *gin.Engine) {
userLogin
.
GET
(
"/task/:id"
,
taskView
)
userLogin
.
PUT
(
"/task/:id/action"
,
taskActionPut
)
userLogin
.
PUT
(
"/task/:id/host"
,
taskHostPut
)
// 专门针对工单系统开发的接口
userLogin
.
POST
(
"/run/:id"
,
taskRunForTT
)
}
}
src/modules/job/http/router_funcs.go
浏览文件 @
e63e741a
...
...
@@ -256,10 +256,5 @@ func cleanHosts(formHosts []string) []string {
arr
=
append
(
arr
,
item
)
}
cnt
=
len
(
arr
)
if
cnt
==
0
{
bomb
(
"arg[hosts] empty"
)
}
return
arr
}
src/modules/job/http/router_task.go
浏览文件 @
e63e741a
...
...
@@ -34,6 +34,9 @@ func taskPost(c *gin.Context) {
var
f
taskForm
bind
(
c
,
&
f
)
hosts
:=
cleanHosts
(
f
.
Hosts
)
if
len
(
hosts
)
==
0
{
bomb
(
"arg[hosts] empty"
)
}
checkTaskPerm
(
hosts
,
user
,
f
.
Account
)
...
...
@@ -557,3 +560,65 @@ func taskCallback(c *gin.Context) {
renderMessage
(
c
,
nil
)
}
// 这个数据结构是tt回调的时候使用的通用数据结构,里边既有工单基本信息,也有结构化数据,job这里只需要从中解析出结构化数据
type
ttForm
struct
{
}
// /api/job-ce/run/:id?hosts=10.3.4.5,10.4.5.6
func
taskRunForTT
(
c
*
gin
.
Context
)
{
var
f
ttForm
bind
(
c
,
&
f
)
tpl
:=
TaskTpl
(
urlParamInt64
(
c
,
"id"
))
arr
,
err
:=
tpl
.
Hosts
()
dangerous
(
err
)
// 如果QueryString里带有hosts参数,就用QueryString里的机器列表
// 否则就从结构化数据中解析hosts
// 如果结构化数据中也没有,那只能有模板里的,模板里也没有就报错
hosts
:=
queryStr
(
c
,
"hosts"
,
""
)
if
hosts
!=
""
{
// 使用QueryString传过来的hosts
tmp
:=
cleanHosts
(
strings
.
Split
(
hosts
,
","
))
if
len
(
tmp
)
>
0
{
arr
=
tmp
}
}
else
{
// TODO 从结构化数据中取hosts
hosts
=
"xyz"
hosts
=
strings
.
ReplaceAll
(
hosts
,
"
\r
"
,
","
)
hosts
=
strings
.
ReplaceAll
(
hosts
,
"
\n
"
,
","
)
tmp
:=
cleanHosts
(
strings
.
Split
(
hosts
,
","
))
if
len
(
tmp
)
>
0
{
arr
=
tmp
}
}
if
len
(
arr
)
==
0
{
bomb
(
"hosts empty"
)
}
// 校验权限
user
:=
loginUser
(
c
)
checkTaskPerm
(
arr
,
user
,
tpl
.
Account
)
task
:=
&
models
.
TaskMeta
{
Title
:
tpl
.
Title
,
Account
:
tpl
.
Account
,
Batch
:
tpl
.
Batch
,
Tolerance
:
tpl
.
Tolerance
,
Timeout
:
tpl
.
Timeout
,
Pause
:
tpl
.
Pause
,
Script
:
tpl
.
Script
,
Creator
:
user
.
Username
,
}
// TODO 把结构化数据转换为脚本命令行参数
task
.
Args
=
""
dangerous
(
task
.
Save
(
arr
,
"start"
))
renderData
(
c
,
task
.
Id
,
nil
)
}
src/modules/job/http/router_task_tpl.go
浏览文件 @
e63e741a
...
...
@@ -293,6 +293,9 @@ func taskTplRun(c *gin.Context) {
f
.
Overwrite
(
tpl
)
hosts
:=
cleanHosts
(
f
.
Hosts
)
if
len
(
hosts
)
==
0
{
bomb
(
"arg[hosts] empty"
)
}
checkTaskPerm
(
hosts
,
user
,
f
.
Account
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录