使用 AWX API 启动时,如何知道 ansible play 在哪个任务中失败?

How to know in which task an ansible play failed when launched using AWX API?

我打算使用 AWX 在 AWX 上启动 ansible 作业 api 并从 ansible playbook 得到一个回电,以了解该操作的结果。

为此,我在正文中使用 /api/v2/job_templates/<job-template-id>/launch/ 和一些 extra_vars 将参数传递给我的游戏。

{
    "extra_vars": {
        "target": "w.x.y.z",  (put here a real IP)
        "directory_name_1": "dir1",
        "directory_name_2": "dir2",
        "file_name": "file1"  (or "subdir/file1" to make it fails)
    }
}

我还在作业模板中配置了默认自定义的 webhook 通知:{{ job_metadata }}

我在这里放了我正在使用的剧本,它非常简单,它在第一个目录中创建了 2 个目录和一个文件。

- hosts: "{{ target }}"
  name: fbplay
  tasks:
    - name: Create dummy directory 1
      file:
        path: "{{directory_name_1}}"
        state: directory
    - name: Create dummy directory 2
      file:
        path: "{{directory_name_2}}"
        state: directory
    - name: Create dummy file in directory
      file:
        path: "{{directory_name_1}}/{{file_name}}"
        state: touch
        mode: u=rw,g=r,o=r

所有这些工作都很好,如果出现错误,将在目标机器上执行 4 个任务:

TASK [Gathering Facts] *********************************************************
TASK [Create dummy directory 1] ************************************************
TASK [Create dummy directory 2] ************************************************
TASK [Create dummy file in directory] ******************************************

...但这是我关于错误处理的问题:如果出现错误,我如何在回调中指示哪个任务失败?

实际上我可以知道播放失败或没有播放,如果成功:

  "hosts": {
    "w.x.y.z": {
      "failed": false,
      "changed": 1,
      "dark": 0,
      "failures": 0,
      "ok": 4,
      "processed": 1,
      "skipped": 0,
      "rescued": 0,
      "ignored": 0
    }
  }

如果失败:

  "hosts": {
    "w.x.y.z": {
      "failed": true,
      "changed": 0,
      "dark": 0,
      "failures": 1,
      "ok": 3,
      "processed": 1,
      "skipped": 0,
      "rescued": 0,
      "ignored": 0
    }
  }

但我无法获得失败的确切任务(例如,在本例中,最后一个任务通过传递包含不存在的子目录的文件名)。

我是 AWX 和 ansible 的新手,我正在与我认为相对简单的观点作斗争......所以欢迎任何提示或想法。

提前致谢。

如果它对某人有帮助,我实际上确认 ARA 执行我在上面寻找的内容,即如果使用其网络客户端(或通过 API 提供)则显示具体的任务你 运行.

每本剧本都失败了

ARA 在分析 awx-runs 方面做得非常出色,但如果我理解正确的话,它必须在 AWX-server(主机 运行 AWX 实例)上设置。

一种解决方法是使用 awx 命令行界面(参见 https://docs.ansible.com/ansible-tower/latest/html/towercli/index.html 和 * ):

watch --color 'awx --conf.host https://awx.site --conf.username my.user --conf.password "my_super_secret" -k -f human job_events list --job 3232445 --event "runner_on_failed" --filter "stdout"'

也可以 滚动 API 以获得不同的“?event=runner_on_failed”,例如:

https://your.awx.site/api/v2/jobs/3232445/job_events/?event=runner_on_failed

或其他“过滤器”,例如:

awx --conf.host https://awx.site --conf.username my.user --conf.password "my_supersecret" -k -f human job_events list --job 3232445 --event "runner_on_unreachable" --filter "*" >/tmp/tmp

https://docs.ansible.com/ansible-tower/latest/html/towercli/output.html#human-readable-tabular-formatting https://docs.ansible.com/ansible-tower/latest/html/towercli/reference.html#awx-job-events-list

*(不要与 awx-cli/tower-cli 混淆 - 我认为它们是不同的)