作业
启动表单、跟踪作业、中止、重新运行或批准作业
作业是表单的一次运行。用表单的名称和值启动它,然后通过其 ID 跟踪它。
启动表单
把表单名称及其值发送到 POST /api/v2/job:
curl -X POST https://af.example.com/api/v2/job \
-H "Authorization: Bearer <token>" -H "Content-Type: application/json" \
-d '{
"formName": "Create Virtual Machine",
"extravars": { "vm_name": "test-vm", "datacenter": "dc1" },
"rawFormData": { "vm_name": "test-vm", "datacenter": "dc1" }
}'
请求接受以下属性:
| 属性 | 含义 |
|---|---|
formName | 要启动的表单名称。必填。 |
extravars | 作业的额外变量。也接受 payload 作为它的别名。 |
rawFormData | 表单字段的值,与浏览器中保存的一致。运行验证 会检查这些值,并据此构建 extravars。 |
credentials | 按名称传给作业的凭据。 |
files | 表单文件字段的上传内容(参见 文件上传)。 |
响应包含新作业的 ID:
{ "id": 42 }
要以详细模式运行作业,请在 extravars 中添加 "__verbose__": true。这需要 allowVerboseMode 角色选项, 否则启动会返回 403。
上传文件
带有文件字段的表单需要先上传文件。将文件作为 multipart 部分 file 发送到 POST /api/v2/job/upload:
curl -X POST https://af.example.com/api/v2/job/upload \
-H "Authorization: Bearer <token>" -F "file=@firmware.bin"
响应描述了已存储的上传内容:
{ "fieldname": "file", "originalname": "firmware.bin", "encoding": "7bit", "mimetype": "application/octet-stream",
"destination": "<UPLOAD_PATH>", "filename": "3f9c...", "path": "<UPLOAD_PATH>/3f9c...", "size": 1048576 }
在启动的 files 中,以文件字段的名称原样传入它:"files": { "firmware": { ... } }。服务器 会对照自己磁盘上的文件进行检查(参见 文件上传)。
跟踪作业
通过 ID 读取作业:
curl https://af.example.com/api/v2/job/42 -H "Authorization: Bearer <token>"
作业包含其 status、extravars(也以 payload 提供,是同一个对象)、subjobs 和 output。 输出是带有作业页面颜色的 HTML;添加 ?text=true 可获得纯文本,适合脚本或日志:
curl "https://af.example.com/api/v2/job/42?text=true" -H "Authorization: Bearer <token>"
作业运行时其 status 为 running,等待批准时为 approve。作业以下列状态之一结束:
| 状态 | 含义 |
|---|---|
success | 作业已完成,没有错误 |
failed | 作业失败 |
warning | 多步骤作业已完成,但途中某个设置了 continue 的步骤失败 |
aborted | 作业已被中止 |
rejected | 批准被拒绝,因此等待批准的内容没有运行 |
abandoned | 跟踪该作业的进程停止了(重启、容器被替换),作业被放弃 |
被放弃时正在运行器上运行的作业,如果该运行器最终完成了它,仍可能以其实际结果结束。
查找作业
GET /api/v2/job 列出作业,最新的在前,格式为 { "count": ..., "records": [ ... ] }。以下查询参数可以缩小范围:
| 参数 | 含义 |
|---|---|
records | 最多返回多少个作业。默认为 JOBS_LIST_SIZE(1000),最多为 5000,除非 JOBS_LIST_SIZE 更高。 |
user, user_type | 只返回该用户的作业。省略 user_type 时为 local(其他类型为 ldap、azuread、oidc)。 |
runner | 只返回在该运行器上运行的作业 |
curl "https://af.example.com/api/v2/job?records=20&user=automation" -H "Authorization: Bearer <token>"
用户可以看到自己的作业,以及等待其某个角色可给予的批准的作业。管理员,或带有 showAllJobLogs 或 manageAllJobs 选项的角色,可以看到所有作业。每条记录包含作业的摘要(id、form、status、start、end、user、runner 等); 要获取 extravars 和输出,请读取作业本身。
GET /api/v2/job/approvals 返回一个数字:有多少个作业在等待该用户可给予的批准。
关于作业的更多信息
以下端点读取某个作业的更多内容:
| 调用 | 返回内容 |
|---|---|
GET /api/v2/job/{id}/rawformdata | 启动作业时的字段值,与表单中保存的一致。适用与重新运行相同的权限:您自己的作业(管理员或带有 manageAllJobs 的角色则为所有作业)、允许重新运行的表单,以及 allowJobRelaunch 角色选项。 |
GET /api/v2/job/{id}/events | playbook 作业的结构化事件(从 7.3.0 起,适用于在 7.3.0 或更高版本 RTE 上运行的 playbook):每个 play、任务、主机结果和汇总,带有其 order、type、play、task、host、duration 和 time |
GET /api/v2/job/{id}/events/{order} | 其中一个事件及其完整的 result,与 任务结果 对话框中显示的一致;order 不是整数时返回 400,作业没有该事件时返回 404 |
GET /api/v2/job/{id}/node/{nodeId} | 工作流作业的一个节点:{ "node", "job", "extravars", "artifacts" },其中 job 是该节点自身作业的 ID,节点未运行时为 null。 |
其他操作
以下端点对已有的作业执行操作:
| 调用 | 操作 |
|---|---|
POST /api/v2/job/{id}/abort | 中止正在运行的作业 |
POST /api/v2/job/{id}/relaunch | 重新运行作业,按原样或带修改(参见 重新运行) |
POST /api/v2/job/{id}/approve | 批准等待批准的作业;您自己的作业会返回 403,除非其批准设置了 allowSelf: true 或您是管理员 |
POST /api/v2/job/{id}/reject | 拒绝等待批准的作业 |
GET /api/v2/job/{id}/download | 下载作业的输出 |
DELETE /api/v2/job/{id} | 删除作业 |
中止、批准、拒绝和删除会返回一条消息,重新运行还会返回新作业的 ID:
{ "message": "Job has been relaunched with job id 43", "id": 43 }
在重新运行时添加 ?verbose=true 可让新作业以详细模式运行,这需要 allowVerboseMode 角色选项。如果作业 处于不适合该操作的状态,例如中止一个已经结束的作业,会返回 409。