What you'll learn
- How to reboot remote hosts with Ansible?
- Ansible reboot remote hosts
- Parameters
- Conclusion
- Basic Reboot
- Reboot with Custom Timeouts
- Conditional Reboot
- Reboot only if kernel was updated
- Reboot only if RHEL needs it
- Rolling Reboot (Zero Downtime)
How to reboot remote hosts with Ansible?
Ansible reboot remote hosts
Today we're talking about the Ansible module `reboot`.
The full name is `ansible.builtin.reboot` which means is part of the collection of modules "builtin" with ansible and shipped with `ansible-core`.
This module is pretty stable and out for years and supports a large variety of operating systems.
The purpose is to reboot a remote machine, wait for it to go down, come back up, and respond to commands.
For Windows targets, use the `ansible.windows.win_reboot` module instead.
Parameters
- reboot_timeout _integer_ - 600
- msg _string_ - "Reboot initiated by Ansible"
- reboot_command _string_ - "[OS specific]"
- pre_reboot_delay _integer_ - 0
- post_reboot_delay _integer_ - 0
- test_command string - "whoami"
- boot_time_command string - "cat /proc/sys/kernel/random/boot_id"
This module has not required parameters but some of them might are nice to know.
Let me summarize the most useful parameters.
The "reboot_timeout" defines how much time to expect before a machine returns up & running. The real timeout is double because of the process of reboot and test command success.
The first step in the reboot process is to print a message to all the logged users. You could keep the default "Reboot initiated by Ansible" or customize using the "msg" parameter.
Secondly is going to execute the reboot command, OS-specific. If you need a specific one, please customize the "reboot_command" parameter.
You could define also some extra delay time using the "pre_reboot_delay" or "post_reboot_delay" integer. Both default to zero.
Once rebooted the target host Ansible is going to verify the workstation fully working using a test command. The default is `whoami`, but you could customize using the "test_command" parameter.
This module could return also the amount of time indeed for bootstrap process reading throw kernel, specifically `/proc/sys/kernel/random/boot_id`.
## Playbook
Let's jump into a real-life playbook on how to reboot remote hosts with Ansible Playbook.
- reboot.yml
```yaml
---
- name: reboot module Playbook
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"
```
[code with ❤️ in GitHub](https://github.com/lucab85/ansible-pilot/tree/master/reboot%20remote%20hosts)
Conclusion
Now you know how to reboot remote Linux hosts with Ansible.
Basic Reboot
```yaml
- name: Reboot the server
ansible.builtin.reboot:
become: true
```
The module automatically waits for the host to come back online.
Reboot with Custom Timeouts
```yaml
- name: Reboot with extended timeout
ansible.builtin.reboot:
reboot_timeout: 600 # Wait up to 10 min for reboot
connect_timeout: 30 # SSH connection timeout
pre_reboot_delay: 10 # Wait 10s before rebooting
post_reboot_delay: 30 # Wait 30s after reboot before