如何在以前的失败之后总是 运行 一些 ansible 角色?

How to always run some ansible roles after previous failures?

我有一套看起来像

的剧本
- name: Run test
  hosts: tester
  roles:
    - { role: setup_repos }
    - { role: setup_environment }
    - { role: install_packages }
    - { role: run_tests }
    - { role: collect_logs }

当前的问题是我们在前 4 个角色中都有 ignore_errors: true 这不是一个好的做法,因为它很难读取输出和调试。

ignore_errors 被滥用的唯一原因是因为我们希望能够在最后执行 collect_logs,无论结果如何。

我们如何重构它以删除 ignore_errors 并拥有更多的快速失败策略。

请注意,我们有很多剧本调用 collect_logs 角色,因此 "moving code inside playbook" 并不是真正重用它的方法。

我相信 handlers 和 notify 会帮助你实现你想要的。 您不需要更改您的角色行为(尽管这可能是个好主意)。

您应该在每个角色结束时通知,处理程序只会 运行 一次。

http://docs.ansible.com/ansible/latest/playbooks_intro.html#handlers-running-operations-on-change

此外,如果您选择开始处理错误,您可以使用 --force-handlers 强制执行处理程序,即使 playbook 失败也是如此。

http://docs.ansible.com/ansible/latest/playbooks_error_handling.html#handlers-and-failure

在 ansible 2.4 或更新版本上,应该用 role_includerole_import 等任务替换 role: 块,这使您能够使用任务使用的正常逻辑。您可以使用处理程序,ignore_errors,等等。