2016-08-26 180 views
5

我一直在嘗試創建一個非常簡單的Ansible操作手冊,它將重新啓動服務器並等待它回來。重新啓動2.1.1.0失敗

我以前在Ansible 1.9上有一個工作,但我最近升級到2.1.1.0,它失敗了。

我重新啓動的主機名爲idm,IP地址爲192.168.200.23。

的劇本正在從我的主機192.168.200.1運行帶有命令

$ ansible-playbook reboot.yml -vvvv 

這是我使用

--- 
- hosts: idm 

    tasks: 
    - name: Restart server 
     become: yes 
     shell: sleep 2 && /sbin/shutdown -r now "Ansible system package upgraded" 


    - name: waiting 60 secs for server to come back 
     local_action: wait_for host=192.168.200.23 port=22 delay=60 connect_timeout=200 
     become: false 

可重啓機器精細的劇本,但幾乎立即失敗與

<192.168.200.23> ESTABLISH SSH CONNECTION FOR USER: root 
<192.168.200.23> SSH: EXEC ssh -C -vvv -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=root -o ConnectTimeout=10 -o ControlPath=/home/myork/.ansible/cp/ansible-ssh-%h-%p-%r -tt 192.168.200.23 '/bin/sh -c '"'"'LANG=en_GB.UTF-8 LC_ALL=en_GB.UTF-8 LC_MESSAGES=en_GB.UTF-8 /usr/bin/python /root/.ansible/tmp/ansible-tmp-1472242630.58-176546106960362/command; rm -rf "/root/.ansible/tmp/ansible-tmp-1472242630.58-176546106960362/" > /dev/null 2>&1 && sleep 0'"'"'' 
fatal: [idm]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh.", "unreachable": true} 

任何想法我在這裏錯過了嗎?

謝謝!

+0

的可能的複製[如何使用Ansible等待服務器重新啓動?(http://stackoverflow.com/questions/23877781/如何等待服務器重新啓動使用可能) –

回答

8

我重新啓動與async Fire服務器和忘記模式:

- name: Restart server 
    become: yes 
    shell: sleep 2 && /sbin/shutdown -r now "Ansible system package upgraded" 
    async: 1 
    poll: 0 
+0

謝謝,我現在會測試。 我希望能夠嘗試並保持控制。我不想讓另一臺服務器停機,直到這臺服務器恢復正常。 – Jim

+0

工作完美,感謝康斯坦丁 – Jim

+0

@Jim你仍然完全控制。 「異步」是可以知道的,你不關心這個確切的任務。但你有下一個確保服務器啓動。 –

3

從康斯坦丁下面的代碼工作完美。

- name: Restart server 
    become: yes 
    shell: sleep 2 && /sbin/shutdown -r now "Ansible system package upgraded" 
    async: 1 
    poll: 0 

- name: waiting 60 secs for server to come back 
    local_action: wait_for host=192.168.200.23 port=22 delay=20 connect_timeout=200 
    become: false 
    delegate_to: 127.0.0.1 
0

更新評論@Konstantin蘇沃洛夫。

這裏更好的解決方案,以避免硬IP

- name: Restart server 
    shell: /sbin/shutdown -r now "Ansible system package upgraded" 
    async: 1 
    poll: 0 
- set_fact: wait_host="{{ ansible_host }}" 
- name: Wait for server to come back 
    local_action: wait_for host={{wait_host}} delay=20 port=22 state=started 
    become: false 

埃裏克

+0

更好使用'ansible_host',因爲清單名稱可以是不可路由的別名。 –

+0

ansible_host將返回localhost(因爲local_action)。 https://github.com/ansible/ansible/issues/16139 – elhostis

+0

好趕上!需要預先配置助手任務'set_fact:wait_host =「{{ansible_host}}」'並使用'{{wait_host}}'。 –