Ansible:对任务失败执行清理

Mar*_*ark 22 ansible ansible-playbook

我目前正在编写一个遵循这种通用格式的Ansible游戏,并通过cron作业运行:

pre_tasks:
  -Configuration / package installation

tasks:
  -Work with installed packages

post_tasks:
  -Cleanup / uninstall packages
Run Code Online (Sandbox Code Playgroud)

上面的问题是,有时部分中的命令tasks失败,并且当它执行时该post_tasks部分不运行,使系统处于凌乱状态.post_tasks即使发生故障或致命错误,是否可以强制命令运行?

我当前的方法是应用于ignore_errors: yestasks部分下的所有内容,然后when:对每个任务应用条件,以单独检查先前命令是否成功.

这个解决方案看起来像是一个黑客,但它变得更糟,因为即使使用ignore_errors: yesset,如果遇到任务的致命错误,整个游戏仍会立即失败,所以我还必须运行cron'd bash脚本来手动检查事物达到播放执行后.

我想要的只是保证,即使tasks失败,post_tasks仍然会运行.我确信有一种方法可以在不使用bash脚本包装器的情况下执行此操作.

Mar*_*sky 35

此功能在Ansible 2.0中可用:

这是文档的新节标志block,rescuealways.

  • 我建议将其更改为已接受的答案,因为当前接受的答案是错误的,@Mark (2认同)

Mxx*_*Mxx -14

不要使用post_tasksblock,而是将清理过程作为常规tasks.

  • 这如何回答这个问题?如果出现问题,您是说剧本中的每个任务都需要“ignore_errors: yes”,因为 Ansible 没有可识别的方法来执行任何类型的 post_cleanup?难道剧本自己承认,不会在第一个错误时停止吗?清理任务将如何运行? (10认同)
  • 保证执行剧本末尾的任务。有点像 try-catch 块末尾的finally。在剧本执行结束时,我将我的 Ansible 日志移动到另一个位置。即使剧本失败,我也需要发生这种情况。 (6认同)
  • 有什么解决办法吗? (2认同)