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"
执行步骤
-
准备主机清单文件 确保你的
inventory文件中包含了目标主机的列表。例如:ini [targets] demo.example.com -
运行 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
注意事项
- 权限问题:重启主机通常需要管理员权限,因此需要使用
become: true。 - 测试命令:默认的测试命令是
whoami,但你可以根据需要自定义。 - 延迟时间:
pre_reboot_delay和post_reboot_delay参数允许你在重启前后设置延迟时间,以避免重启过快导致的问题。 - 超时时间:
reboot_timeout参数定义了主机重启并恢复运行的预期时间。如果主机启动时间较长,需要适当增加该值。 - Windows 系统:对于 Windows 系统,需要使用
ansible.windows.win_reboot模块。
总结
reboot 模块是一个非常实用的工具,用于在 Ansible Playbook 中重启远程主机并等待其恢复运行。通过灵活使用各种参数,你可以轻松地管理重启过程并确保主机正常启动。