2017-02-27 45 views
0

這是問題的聲明:從Ansible配置的Ansible任務可以在沒有SSH的遠程主機上運行?

假設我是一個EC2實例A和運行Ansible腳本執行以下任務:

1. Create an EC2 instance B 
2. SSH into it 
3. Trigger an Ansible script which is on B, with the simple `ansible-playbook <pb_on_B>.yml` [B is being provisioned from an AMI] 

所以,會如果實例A收到發生什麼任務3開始後終止?

在B中觸發的Ansible腳本是否會完成?

+0

你爲什麼不測試它? – Malkocoglu

回答

3

[W]如果實例任務3被啓動後會被終止會發生的帽子?

在B中觸發的Ansible腳本是否會完成?

  • 你不能告訴會用100%的把握髮生什麼。

    這取決於殼配置(例如TMOUT在bash),SSH守護程序配置(TCPKeepAliveClientAliveInterval參數),定時,網絡條件和A是否將關閉與會話(FIN)或降而不通知A.

  • 最有可能的劇本執行會被打斷。

    如果B上的SSH守護程序無法聯繫A上的SSH客戶端(例如打印出Ansible執行日誌),並且它獲取了TCP RST數據包,它將丟棄會話以終止SSH會話的子進程,包括shell和ansible-playbook。但是,會話可能會一直保持活動狀態,直到超時並且劇本可能會在發生之前完成。

  • 如果ansible-playbook可執行文件是通過nohup command(或在screentmux會話)被調用,它不會在SSH會話切斷(和shell會話關閉)中斷。

    注意:當您使用nohup時,標準輸出將被重定向到文件nohup.out。請參閱this question下的答案以瞭解選項。

    還在Unix.SE上檢查this answer,其中描述了該命令的技術背景。

+0

謝謝你techraf。總是有幫助:)。但是,當我執行命令:「nohup ansible-playbook -vvv /home/ec2-user/demo_provision.yml」時,我得到了'未能運行命令'ansible-playbook':沒有這樣的文件或目錄「,所以,有沒有辦法用'nohup'來運行一個可靠的操作手冊?或者我使用'command'模塊錯誤? – Dawny33

+0

'那麼ansible-playbook'然後嘗試完整路徑。 – techraf

+0

工作。謝謝:) – Dawny33

1

如果這個想法是保存在實例b SSH會話,而不必擔心實例的生命/死亡,你可以嘗試和TMUX在實例B.運行ansible戲劇您的工作流程將進行修改,這樣

  1. 創建EC2實例b
  2. SSH進去
  3. INSTAL TMUX - apt-get install tmux
  4. 啓動TMUX會議tmux new -s ansible
  5. 觸發Ansible腳本,在B ,用簡單ansible-playbook <pb_on_B>.yml
2

Ansible配置的Ansible任務是否在沒有SSH的遠程主機上運行?

是的,ansible-pull

你應該要反轉Ansible的架構,使節點檢查到中央位置,而不是推送構造出來給他們,你可以。

ansible-pull是一個小腳本,它將從git檢出配置指令的回購,然後針對該內容運行安全操作手冊。

相關問題