2017-02-14 30 views
2

问题陈述:Ansible能做容错SSH吗?

我用Ansible产卵从实例,ssh方式连接到他们,做一些任务,并终止它们。

假设剧本产生3个实例。当SSH进入从机实例时,如果某个人的SSH失败了,那么Ansible会继续执行那些成功的SSH,或者完成任务失败?

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

PS:我确实探索了ssh_connectionretries选项。但在这里,通过failed SSH,我的意思是暗示一个SSH重试后失败。

+0

“*如果没有,那么我有什么办法可以做到吗?*” - 做什么?前面的问题是“A或B”。 – techraf

+0

'it' ==“继续使用成功的SSH实例,而不会失败以下任务”:)。将正确更新qn – Dawny33

+0

Ansible默认情况下就是这样。暂时拔掉一台服务器,或更改库存文件中的IP以进行检查。对我来说,这看起来不是一个很好的SO问题... – techraf

回答

4

默认情况下,Ansible将针对所有指定的主机运行您的剧本。如果其中任何一个失败,它仍然会继续运行其他主机的剧本,最后会创建一个带有失败主机名称的playbook.retry文件,然后您可以使用它重新运行:

ansible-playbook playbook.yml --limit @playbook.retry 

(假设您的剧本名称为playbook.yml)请注意,即使您的某些任务已经成功,重新运行也会从头开始重新运行整个剧本,因此您应该始终尝试使剧本具有弹性-runs。还要注意的是,即使你的剧本中有多次播放,所有指的是同一主机,当主机第一次出现故障时,ansible都不会尝试该主机进行后续播放。

有改变,不过默认行为的一些方法:

  • 例如,您可以abort the play使用any_errors_fatal: true意味着失败的一些任务也将意味着ansible将停止所有主机上执行(假设你正在使用默认情况下,linear strategy。使用free策略意味着其他主机可能处于不同的阶段,这意味着它们可能比您期望的更早/更晚)
  • 此外,因为在剧本之间可以插入re-set unreachable hosts,如果你的主机在其中一个失败ays,在接下来的情况下,仍然会重新尝试运行新的游戏(以前的游戏仍然会被标记为失败)。您必须将meta: clear_host_errors添加到要重新尝试所有以前无法访问的主机的播放中。
+0

感谢您的详细解答:) – Dawny33