Ansible:对任务失败执行清理

时间:2014-05-26 17:47:22

标签: ansible ansible-playbook

我目前正在编写一个遵循这种通用格式的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脚本包装器的情况下执行此操作。

3 个答案:

答案 0 :(得分:29)

此功能在Ansible 2.0中可用:

This is the documentation用于新节标记blockrescuealways

答案 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的一部分。