Ansible:有条件地中断重试循环
考虑执行一个ansible任务,该任务检查具有三种可能性的流程的返回值:Ansible:有条件地中断重试循环,ansible,Ansible,考虑执行一个ansible任务,该任务检查具有三种可能性的流程的返回值: 没有开始 成功 失败 ansible应该 通过任务显然是“成功” 任务失败,然后重试“未启动”(由重试:xx,延迟:xx部分处理) 任务失败,无需再次重试*关于“失败” 所以,问题基本上是我是否能区分“失败并重试”和“失败且不重试”两种情况(failed\u,当稍微短一点时)。或者,换言之,我如何有条件地中断重试 谢谢,直到是中断重试的条件。它不携带任何关于任务失败与否的信息。在您的特定情况下,当您的任务报告“通过”或
- 通过任务显然是“成功”
- 任务失败,然后重试“未启动”(由重试:xx,延迟:xx部分处理)
- 任务失败,无需再次重试*关于“失败”
failed\u,当
稍微短一点时)。或者,换言之,我如何有条件地中断重试
谢谢
,直到
是中断重试的条件。它不携带任何关于任务失败与否的信息。在您的特定情况下,当您的任务报告“通过”或“失败”时,您希望停止重试,并在报告“未启动”时继续重试(或根据您的情况,可能是其他任何情况,请参见下文)
failed\u when
是表示任务是否失败的条件,将在重试循环按条件中断或达到最大重试次数后进行评估。在这种最新情况下,“未启动”被视为失败消息
基本上(使用伪代码)
-name:我的重试任务直到通过或结束
一些可解析模块:
arg1:value1
注册:通过或死亡
重试次数:10次
延误:10
直到:在['pass'、'failure']中通过
#具有负值列表的其他选项
#直到:pass_或_die.resultvar不在['not start']
失败时:在['failure'、'not'u started']中通过\u或\u die.resultvar
#再一次选择负面列表
#当:通过或死亡时失败。结果不在['pass']
下面是我如何测试它以确保它按预期工作的
---
-姓名:通过或死亡
主机:本地主机
收集事实:错误
任务:
-名称:重试,直到通过或死亡
啜食:
路径:/tmp/slurp.txt
寄存器:slurped
重试次数:1000次
延误:10
直到:slurped.content | b64解码不在['not start']
当:slurped.content | B64解码不在['pass'中时失败
在发布剧本之前,发布
echo -n "not started" > /tmp/slurp.txt
然后启动剧本,并在单独的终端发行
# To fail the task
echo -n "failure" > /tmp/slurp.txt
# To pass the task
echo -n "pass" > /tmp/slurp.txt
下次重试时,您将在playbook执行中看到结果
您也可以不处理该文件,等待它在最后一次重试时失败(报告“未启动”,这是一种失败条件)