2016-08-26 135 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}}'。 –