我有一本Ansible剧本,我想按顺序更新许多片状设备。我可以使用serial:1,但是如果出现故障,我想完全停止该剧本,以便在继续操作之前进行修复,而不是积累错误。

我也想同时重新启动该剧本主机我停了下来。当前使用Ansible v2.0,但如果仅在较新的版本中可用,则也可以切换到较新的版本。

#1 楼

当发生故障并且根据文档使用serial: 1时,您的剧本将停止。


默认情况下,只要组中的主机具有以下条件,Ansible将继续执行操作尚未失败。


这表明社区似乎对默认行为有些困惑,并且似乎已经在1.8和2.1之间的某个位置发生了更改-或存在错误。 >
因此,如果serial: 1不够用,请使用以下附加设置:

max_failure_percentage: 0


在某些情况下,例如滚动更新如上所述,当已经达到故障的某个阈值时,可能希望中止播放。为此,从1.3版本开始,您可以设置最大失败百分比...


== << />
关于重试剧本,您应该看到像这样的失败消息:

to retry, use: --limit @/home/user/site.retry

在下次执行--limit时使用该ansible-playbook标志,它将从失败的地方继续。

除非在配置中设置了retry_files_enabled = False,否则将创建重试文件。

或者,--start-at-task也可以使用。

来源:

https ://github.com/ansible/ansible/issues/1663

https://github.com/ansible/ansible/issues/16241

http:// docs .ansible.com / ansible / playbooks_delegation.html#rolling-update-batch-size

http://docs.ansible.com/ansible/playbooks_delegation.html#maximum-failure-percentage

http://docs.ansible.com/ansible/intro_configuration.html#retry-files-enabled

http://docs.ansible.com/ansible/playbooks_startnstep.html#任务开始

评论


如果有人对1.9和2.0中的更改/错误有更好的了解,请告诉我,我将更新此答案。

–林地猎人
17 Mar 2 '17 at 21:04

是的,我知道如果ansible 2.0在'em'之一上失败,它将继续在其他主机上运行。我猜我认为如果我运行serial:1不会有不同的行为。那是你的意思吗

– Peter Turner
17 Mar 2 '17 at 21:16

没错,是连续的:1应该有这种行为,如果没有(因为??),则还要加上max_failure_percentage:0。我还建议将Ansible升级为2.0版存在很多错误。

–林地猎人
17 Mar 2 '17 at 21:20

实际上,有如此多的错误,导致您缺少2.0中的.retry文件! github.com/ansible/ansible/issues/13944

–林地猎人
17 Mar 2 '17 at 21:21

嘿,所以我不是唯一一个不断修补源代码的人。很高兴知道。

– Peter Turner
17 Mar 2 '17 at 21:41

#2 楼

在2.5+版本中(问题紧随其后),有一个调试器涵盖了大部分内容:
https://docs.ansible.com/ansible/latest/user_guide/playbooks_debugger.html

对于一次一次,使用“ --forks 1”仅一次一次性连接到一个系统,而不是每次都连接。