2017-02-14 58 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