我正在通過Terraform供應新服務器,並將Ansible作爲本地系統上的供應商。Ansible wait_for似乎不起作用
Terraform爲EC2提供了一個系統,然後運行Ansible playbook,提供新建系統的IP作爲庫存。
我想使用Ansible等待系統完成引導,並阻止嘗試進一步的任務直到建立連接。直到這一點,我一直在使用不方便和不精確的手動暫停。
Ansible似乎沒有做文件說明它會(除非我錯了,一個非常可能的場景)。這裏是我的代碼:
- name: waiting for server to be alive
wait_for:
state: started
port: 22
host: "{{ ansible_ssh_host | default(inventory_hostname) }}"
delay: 10
timeout: 300
connect_timeout: 300
search_regex: OpenSSH
delegate_to: localhost
在此步驟中會發生什麼事是連接不等待任何超過10秒進行連接,它失敗。如果服務器已啓動,並且我再次嘗試操作手冊,它可以正常工作並按預期執行。
我也試過do_until
風格循環似乎從來沒有工作。文檔中給出的所有示例都使用shell輸出,我不認爲它可以用於非shell模塊。
我也似乎無法得到任何調試信息,如果我嘗試註冊一個結果並使用調試模塊打印出來。
任何人有什麼建議,我做錯了什麼?
對不起,我回滾到原來的版本。當然,我建議的作品,我之前測試過,並且在您的評論後感到困惑,因爲我重新運行了「gather_facts」功能,並且它甚至沒有關閉主機。 (同時請清理你的意見) – techraf
'set_fact'然後在本地機器上運行嗎? – smiller171
運行我附帶的劇本並親自體驗。爲什麼Ansible會在遠程機器上調用Python來爲變量設置一個值? – techraf