ansible 重启 2.1.1.0 失败

ansible reboot 2.1.1.0 fails

我一直在尝试创建一个非常简单的 Ansible 剧本,它将重启服务器并等待它恢复。

我过去在 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}

知道我错过了什么吗?

谢谢!

我用async即发即忘模式重启服务器:

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

Konstantin 的以下代码运行完美。

- 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

更新@Konstantin Suvorov 的评论。

这是避免硬 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

埃里克