Ansible playbook 正在重启服务器,等待重启完成

Ansible playbook 正在重启服务器,等待重启完成

我在使用 ansible playbook 执行 shell 脚本时遇到一个问题。
问题:由于 shell 脚本正在重新启动服务器,我失去了与远程服务器的连接。

我的 Ansible 剧本

- name: Handle reboot
  hosts: all
  become: yes
  
  tasks:
    - name: Execute the script 
      shell: bash testscript.sh
      args:
        chdir: /home/ubuntu
      notify:
        - Wait for server to restart
        
  handlers:
    - name: Wait for server to restart
      local_action:
        module: wait_for
          host={{ inventory_hostname }}
          port=22
          delay=10
        become: false

我的shell脚本:

#!/bin/bash
echo "Performing some tasks"
echo "rebooting now"
reboot
echo "reboot completed"
echo "Performing some more tasks"

远程服务器重启时出现的错误

fatal: [my-ip-address]: UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: Shared connection to <my-ip-address> closed.",
    "unreachable": true
}

是否可以处理由 shell 脚本完成的重启并等待连接直到远程服务器再次启动?

谢谢。

答案1

你应该使用wait_for_connection反而。

tasks:
  - name: Execute the script 
    shell: bash testscript.sh
    args:
      chdir: /home/ubuntu
  - name: wait
    wait_for_connection:
      delay: 10

我建议在任务中执行此操作,而不是在处理程序中。处理程序仅在以下情况下执行:全部任务已经完成,因此如果您在执行重启的任务之后还有任务,那么这些任务将在剧本开始等待之前被尝试。

或者,使用重启模块,它会自动执行此操作。

相关内容