ansible.builtin.reboot 模块是 Ansible 的内置模块,用于重启远程主机并等待其重新启动并响应命令。它适用于多种操作系统,但在 Windows 系统上需要使用 ansible.windows.win_reboot 模块。

主要参数

  • reboot_timeout:整数,默认值为 600 秒。定义主机重启并恢复运行的预期时间。实际超时时间是这个值的两倍,因为重启过程包括重启和测试命令成功。
  • msg:字符串,默认值为 "Reboot initiated by Ansible"。重启时发送给所有登录用户的提示消息。
  • reboot_command:字符串,默认为系统特定的重启命令。如果需要自定义重启命令,可以设置此参数。
  • pre_reboot_delay:整数,默认值为 0 秒。重启前的延迟时间。
  • post_reboot_delay:整数,默认值为 0 秒。重启后的延迟时间。
  • test_command:字符串,默认值为 "whoami"。用于验证主机重启后是否完全恢复运行的测试命令。
  • boot_time_command:字符串,默认值为 "cat /proc/sys/kernel/random/boot_id"。用于获取系统启动时间的命令,仅限 Linux 系统。

示例:使用 Ansible Playbook 重启远程主机

以下是一个示例 Playbook,展示如何使用 reboot 模块重启远程主机。

---
- name: reboot module demo
  hosts: all
  become: true
  tasks:
    - name: reboot host(s)
      ansible.builtin.reboot:
        msg: "reboot by Ansible"
        pre_reboot_delay: 5
        post_reboot_delay: 10
        test_command: "whoami"

执行步骤

  1. 准备主机清单文件 确保你的 inventory 文件中包含了目标主机的列表。例如:

    ini [targets] demo.example.com

  2. 运行 Playbook 使用以下命令运行 Playbook:

    bash ansible-playbook -i inventory reboot.yml

执行结果

如果任务成功执行,输出将类似于以下内容:

PLAY [reboot module demo] ***************************************************

TASK [Gathering Facts] ******************************************************
ok: [demo.example.com]

TASK [reboot host(s)] *******************************************************
changed: [demo.example.com]

PLAY RECAP ******************************************************************
demo.example.com           : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

注意事项

  1. 权限问题:重启主机通常需要管理员权限,因此需要使用 become: true。
  2. 测试命令:默认的测试命令是 whoami,但你可以根据需要自定义。
  3. 延迟时间:pre_reboot_delay 和 post_reboot_delay 参数允许你在重启前后设置延迟时间,以避免重启过快导致的问题。
  4. 超时时间:reboot_timeout 参数定义了主机重启并恢复运行的预期时间。如果主机启动时间较长,需要适当增加该值。
  5. Windows 系统:对于 Windows 系统,需要使用 ansible.windows.win_reboot 模块。

总结

reboot 模块是一个非常实用的工具,用于在 Ansible Playbook 中重启远程主机并等待其恢复运行。通过灵活使用各种参数,你可以轻松地管理重启过程并确保主机正常启动。