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

时间:2017-08-31 14:13:16

标签: ansible ansible-role

我有一套看起来像

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

目前的问题是我们拥有ignore_errors: true的前4个角色,这不是一个好习惯,因为它很难读取输出和调试。

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

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

请注意我们有很多调用collect_logs角色的剧本,因此“在剧本中移动代码”并不是真正重用它的方法。

2 个答案:

答案 0 :(得分:0)

我相信处理程序和通知可以帮助您实现您想要的。 你不需要改变你的角色行为(尽管这可能是一个好主意)。

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

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

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

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

答案 1 :(得分:0)

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