我目前正在编写一个遵循这种通用格式的Ansible游戏,并通过cron作业运行:
pre_tasks:
-Configuration / package installation
tasks:
-Work with installed packages
post_tasks:
-Cleanup / uninstall packages
上述问题是,有时tasks
部分中的命令失败,而post_tasks
部分失败时,系统处于凌乱状态。即使发生或致命错误失败,是否可以强制post_tasks
中的命令运行?
我目前的做法是将ignore_errors: yes
应用于tasks
部分下的所有内容,然后对每个任务应用when:
条件,以单独检查先前命令是否成功。
这个解决方案看起来像是一个黑客,但它变得更糟,因为即使设置ignore_errors: yes
,如果任务遇到致命错误,整个游戏仍然会立即失败,所以我还必须运行一个cron' d bash脚本在达到播放执行后手动检查事物。
我想要的是保证即使tasks
失败,post_tasks
仍会运行。我确信有一种方法可以在不使用bash脚本包装器的情况下执行此操作。
答案 0 :(得分:29)
此功能在Ansible 2.0中可用:
This is the documentation用于新节标记block
,rescue
和always
。
答案 1 :(得分:1)
您应该使用处理程序(http://docs.ansible.com/ansible/playbooks_intro.html)并设置:
force_handlers:true
请查看KubeNow的集成测试(https://github.com/kubenow/KubeNow/blob/master/test/integration-test.yml)。
答案 2 :(得分:-8)
请勿使用post_tasks
阻止,而应将清理过程作为常规tasks
的一部分。