在Ansible中使用`start-at-task`时,是否可以强制执行先前的任务?

时间:2017-03-01 03:23:43

标签: ansible

我有一个大型复杂的Ansible配置设置,> 100个角色,> 30个库存组等...这是按照推荐的方式组织的:顶级剧本,/roles文件夹,/group_vars文件夹等......

有时这会在中途失败,我想使用--start-at-task命令行开关从失败的地方重新启动它。

但是,我有几个始终需要运行的任务。这些动态地将主机添加到库存中,设置稍后需要的变量等等......

有没有办法强制执行任务始终运行 - 或者始终的角色应用,即使使用--start-at-task

我知道always代码,但我认为这只会在使用--tag过滤任务时运行,而不是--start-at-task - 除非有人知道不同?

或者,是否有其他方法来构建可以避免--start-at-task的问题的事情?

2 个答案:

答案 0 :(得分:3)

不幸的是,这是不可能的。

目前你要么必须使用标签,要么咬住子弹,依靠幂等性,让所有任务重新运行。

PRsdiscussions添加了这样的功能,但它们从未进入正式的Ansible版本。

还有一个open issue要求此功能,并提出一个建议,always_run应该在与--start-at-task一起使用时启用运行任务,但讨论也消失了更多比一年前。

答案 1 :(得分:1)

techraf 提到的问题的结论是,最好的方法是实施自定义策略:https://github.com/ansible/ansible/issues/12565#issuecomment-834517997

一个已经实现了 there(但我还没有让它与 ansible-test 一起工作)

无论如何,这是实施可行解决方案的良好开端,也是唯一可行的方法,因为 Ansible 开发人员不会修补 --start-at-task