Speaking of configuration management, Ansible is the most popular open-source automation tool out there. It’s mostly used for automating day to day operation activities, from installing security patches to deploying applications. In today’s blog post we are going to learn how can we reboot a bunch of Linux and Windows VMs (nodes).
Prerequisites
- Ansible
 
Linux VMs
The bare minimum example we are going to get from the reboot module is the following:
- name: Reboot the machine with all defaults
  reboot:
Step 1. Let’s write a simple playbook named reboot.yml, that will upgrade all packages and reboot the machines.
---
- hosts: all
  become: yes
  tasks:
  - name: Upgrade packages
    yum:
      name: "*"
      state: latest
    register: upgrade_packages
  - name: Reboot machines
    reboot:
      reboot_timeout: 3600
      test_command: uptime
    when: upgrade_packages is changed
Note(s): test_command parameter will execute a command on the rebooted machine in order to check if the node state is up and running, so it could continue with the remaining tasks, if any.
Step 2. Test the playbook by running the following command:
ansible-playbook -i inventory reboot.yml
If you experience any errors, let me know in the comments below.
Windows VMs
To be honest, Windows nodes are rare to find these days as part of an Ansible inventory. I guess Microsoft got a better alternative solution with the PowerShell Desired State Configuration (DSC).
Step 1. Anyway, the Ansible module is called win_reboot, so create a reboot.yml playbook.
---
- hosts: all
  become: yes
  tasks:
  - name: Install security updates only
    win_updates:
      category_name:
      - SecurityUpdates
    register: install_upgrades
  - name: Reboot machines
    win_reboot:
      reboot_timeout: 3600
      test_command: Get-Uptime -Since
    when: install_upgrades is changed
Step 1 (Alternative). win_updates module supports reboot, so you can do the same without the win_reboot task.
---
- hosts: all
  become: yes
  tasks:
  - name: Install security updates only
    win_updates:
      category_name:
      - SecurityUpdates
      reboot: yes
      reboot_timeout: 3600
Step 2. Save and run the playbook.
ansible-playbook -i inventory reboot.yml
Conclusion
Implementing a pre-reboot and post-reboot verification tasks are important as well, especially if you don’t want to get calls from the boss on Friday evening, or Sunday morning. Feel free to leave a comment below and if you find this tutorial useful, follow our official channel on Telegram.