我如何一次在一台主机上运行ansible并在出现故障时中断


15

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

我还想在停止的同一台主机上重新启动剧本。当前使用Ansible v2.0,但如果仅在较新的版本中可用,则也可以切换到较新的版本。

Answers:


15

发生故障并且您正在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#start-at-task


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

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

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

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

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

2

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.