我有一套看起来像
的剧本- 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角色的剧本,因此“在剧本中移动代码”并不是真正重用它的方法。
答案 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等。