Ansible:在任务失败时执行清理

Ansible:在任务失败时执行清理,ansible,ansible-playbook,Ansible,Ansible Playbook,我目前正在编写一个Ansible剧本,它遵循这种通用格式,并通过cron作业运行: pre_tasks: -Configuration / package installation tasks: -Work with installed packages post_tasks: -Cleanup / uninstall packages 上面的问题是,tasks部分中的命令有时会失败,执行时,post\u tasks部分不会运行,使系统处于混乱状态。即使出现故障或致命错误,是否

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

pre_tasks:
  -Configuration / package installation

tasks:
  -Work with installed packages

post_tasks:
  -Cleanup / uninstall packages
上面的问题是,
tasks
部分中的命令有时会失败,执行时,
post\u tasks
部分不会运行,使系统处于混乱状态。即使出现故障或致命错误,是否可以强制运行
post_tasks
中的命令

我目前的方法是将
ignore\u errors:yes
应用于
tasks
部分下的所有内容,然后对每个任务应用
when:
条件,以单独检查之前的命令是否成功

这个解决方案看起来像一个黑客,但它变得更糟,因为即使设置了
ignore\u errors:yes
set,如果任务遇到致命错误,整个游戏仍然会立即失败,因此我还必须运行cron'd bash脚本,在到达游戏执行后手动检查事情


我想要的只是保证即使
任务
失败,
post_任务
仍将运行。我相信有一种方法可以做到这一点,而不必求助于bash脚本包装器。

不要使用
后期任务
块,而是将清理过程作为常规
任务的一部分

此功能在Ansible 2.0中提供:

对于新的节标记
救援
,以及
始终
,应使用处理程序()并设置:

force_处理器:正确


请看一下KubeNow的集成测试()。

不幸的是(对于您的用例)
post\u任务
并不是用来清理的。引用ansible lead的话:“前任务和后任务主要是为使用负载平衡器而设计的。”()这是如何回答这个问题的?如果某件事失败了,你是说你剧本中的每一项任务都需要
忽略错误:是的
,因为Ansible没有可识别的方法来做任何形式的事后清理?难道一本剧本不应该在第一次出错时就停止吗?清理任务将如何运行?有什么解决方案吗?@Zasz solution to what?保证在剧本末尾执行任务。有点像是最后一次尝试接球。在playbook执行结束时,我将ansible日志移动到另一个位置。即使playbook失败,我也需要这样做。@Zasz我正在寻找解决同一问题的方法,目前我找到的所有解决方法都非常粗糙。我建议将其改为公认的答案,因为目前公认的答案是错误的,@Mark