0

我打算使用 AWX api 在 AWX 上启动 ansible 作业,并从 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 的新手,我正在与我认为相对简单的观点作斗争......所以欢迎任何提示或想法。

事先谢谢。

4

2 回答 2

0

如果它对某人有帮助,我实际上确认ARA做了我在上面寻找的事情,即如果使用其 Web 客户端(或通过 API 提供),则在您运行的每个剧本中准确显示哪个任务失败。

于 2020-01-14T05:35:02.640 回答
0

ARA 在分析 awx 运行方面做得很好,但如果我理解正确的话,它必须在 AWX 服务器(运行 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"'

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

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- 我认为它们是不同的)

于 2021-03-24T07:28:26.120 回答