4

我有一套看起来像的剧本

- 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 角色的剧本,因此“在剧本中移动代码”并不是真正重用它的方法。

4

2 回答 2

1

在 ansible 2.4 或更新版本上,应该将role:block替换为role_includeor之类的任务role_import,这使您能够使用任务使用的正常逻辑。您可以使用处理程序、ignore_errors 等。

于 2017-12-07T16:36:17.053 回答
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

于 2017-12-06T19:48:42.153 回答