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#任务开始
#2 楼
在2.5+版本中(问题紧随其后),有一个调试器涵盖了大部分内容:https://docs.ansible.com/ansible/latest/user_guide/playbooks_debugger.html
对于一次一次,使用“ --forks 1”仅一次一次性连接到一个系统,而不是每次都连接。
评论
如果有人对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