Ansible是否进行容错SSH连接?

时间:2017-02-14 08:55:17

标签: ssh amazon-ec2 ansible

问题陈述:

我使用Ansible来生成slave实例,并将它们连接到它们,执行一些任务并终止它们。

假设剧本正在产生3个实例。在SSH进入从属实例时,如果一个人的SSH出现故障,那么Ansible会继续使用成功的SSH,还是完全无法完成任务?

如果没有,那么我有什么方法可以做到吗?

PS:我确实探索了ssh_connection的{​​{1}}选项。但是在这里,retries,我的意思是暗示重试后失败的SSH。

1 个答案:

答案 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 strategyfree策略意味着其他主机可能处于不同的阶段,这意味着它们可能会比您预期的更早/更晚中止)
  • 此外,由于ansible 2.2你可以在游戏之间re-set unreachable hosts,这意味着即使你的主机在其中一个游戏中失败,在后续版本中,ansible仍会重新尝试在其上运行新游戏(之前)播放仍将被标记为失败)。您必须将meta: clear_host_errors添加到要重新尝试所有以前无法访问的主机的播放中。