問題陳述:Ansible能做容錯SSH嗎?
我用Ansible產卵從實例,ssh方式連接到他們,做一些任務,並終止它們。
假設劇本產生3個實例。當SSH進入從機實例時,如果某個人的SSH失敗了,那麼Ansible會繼續執行那些成功的SSH,或者完成任務失敗?
如果沒有,那麼有什麼辦法可以做到嗎?
PS:我確實探索了ssh_connection
的retries
選項。但在這裏,通過failed SSH
,我的意思是暗示一個SSH重試後失敗。
問題陳述:Ansible能做容錯SSH嗎?
我用Ansible產卵從實例,ssh方式連接到他們,做一些任務,並終止它們。
假設劇本產生3個實例。當SSH進入從機實例時,如果某個人的SSH失敗了,那麼Ansible會繼續執行那些成功的SSH,或者完成任務失敗?
如果沒有,那麼有什麼辦法可以做到嗎?
PS:我確實探索了ssh_connection
的retries
選項。但在這裏,通過failed SSH
,我的意思是暗示一個SSH重試後失敗。
默認情況下,Ansible將針對所有指定的主機運行您的劇本。如果其中任何一個失敗,它仍然會繼續運行其他主機的劇本,最後會創建一個帶有失敗主機名稱的playbook.retry
文件,然後您可以使用它重新運行:
ansible-playbook playbook.yml --limit @playbook.retry
(假設您的劇本名稱爲playbook.yml
)請注意,即使您的某些任務已經成功,重新運行也會從頭開始重新運行整個劇本,因此您應該始終嘗試使劇本具有彈性-runs。還要注意的是,即使你的劇本中有多次播放,所有指的是同一主機,當主機第一次出現故障時,ansible都不會嘗試該主機進行後續播放。
有改變,不過默認行爲的一些方法:
any_errors_fatal: true
意味着失敗的一些任務也將意味着ansible將停止所有主機上執行(假設你正在使用默認情況下,linear strategy。使用free
策略意味着其他主機可能處於不同的階段,這意味着它們可能比您期望的更早/更晚)meta: clear_host_errors
添加到要重新嘗試所有以前無法訪問的主機的播放中。感謝您的詳細解答:) – Dawny33
「*如果沒有,那麼我有什麼辦法可以做到嗎?*」 - 做什麼?前面的問題是「A或B」。 – techraf
'it' ==「繼續使用成功的SSH實例,而不會失敗以下任務」:)。將正確更新qn – Dawny33
Ansible默認情況下就是這樣。暫時拔掉一臺服務器,或更改庫存文件中的IP以進行檢查。對我來說,這看起來不是一個很好的SO問題... – techraf