问题陈述:
我使用Ansible来生成slave实例,并将它们连接到它们,执行一些任务并终止它们。
假设剧本正在产生3个实例。在SSH进入从属实例时,如果一个人的SSH出现故障,那么Ansible会继续使用成功的SSH,还是完全无法完成任务?
如果没有,那么我有什么方法可以做到吗?
PS:我确实探索了ssh_connection
的{{1}}选项。但是在这里,retries
,我的意思是暗示重试后失败的SSH。
答案 0 :(得分:4)
默认情况下,Ansible将为所有指定的主机运行您的playbook。如果其中任何一个失败,它仍然会继续为其余主机运行playbook,最后将创建一个playbook.retry
文件,其中包含失败主机的名称,然后您可以使用以下命令重新运行:
ansible-playbook playbook.yml --limit @playbook.retry
(假设您的剧本名称为playbook.yml
)请注意,重新运行将从头开始重新运行整个剧本,即使您的某些任务已成功完成,因此您应该总是试图让playbooks适应重新运行。另请注意,即使您的剧本中有多个剧本,都是指同一个主持人,但是当主持人第一次失败时,ansible将不再尝试该主持人进行后续播放。
但是有一些方法可以更改默认行为:
any_errors_fatal: true
的某些任务,您可以使用abort the play表示失败意味着ansible将停止在所有主机上执行(假设您使用的是默认值linear strategy。 free
策略意味着其他主机可能处于不同的阶段,这意味着它们可能会比您预期的更早/更晚中止)meta: clear_host_errors
添加到要重新尝试所有以前无法访问的主机的播放中。