【问题标题】:ansible reboot 2.1.1.0 failsansible reboot 2.1.1.0 失败
【发布时间】:2017-01-03 14:06:45
【问题描述】:

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

我过去在 Ansible 1.9 上使用过一个,但我最近升级到 2.1.1.0,但它失败了。

我正在重启的主机名为 idm,IP 为 192.168.200.23。

playbook 正在使用命令从我的主机 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}

知道我在这里错过了什么吗?

谢谢!

【问题讨论】:

标签: linux ansible reboot


【解决方案1】:

我使用async 启动后忘记模式重新启动服务器:

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

【讨论】:

  • 谢谢,我现在就测试一下。我希望尝试保持控制。在这台服务器备份之前,我不想关闭另一台服务器。
  • @Jim 你仍然可以完全控制它。 async 是为了让 ansible 知道,你不关心那个确切的任务。但是您有下一个来确保服务器已启动。
【解决方案2】:

来自 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

【讨论】:

    【解决方案3】:

    更新@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
    

    埃里克

    【讨论】:

    • 最好使用ansible_host,因为库存名称可以是不可路由的别名。
    • ansible_host 将返回 localhost(因为 local_action)。 github.com/ansible/ansible/issues/16139
    • 好收获!需要添加辅助任务set_fact: wait_host="{{ ansible_host }}" 并使用{{ wait_host }}
    猜你喜欢
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 2017-09-29
    • 2016-01-23
    • 2015-07-21
    • 1970-01-01
    相关资源
    最近更新 更多