Ansible Software Patching for Beginners

Ansible is a powerful open-source automation platform designed to help administrators manage and automate various tasks across their infrastructure. Open-source technologies like Ansible are awesome for automation! Ansible helps simplify the deployment, configuration, and patch management processes, making it an ideal tool for managing Linux servers, Windows, and other systems in production or in your home lab.

Understanding Configuration Management and Patch Management

Configuration management involves maintaining the consistency and integrity of a system’s components, while patch management focuses on updating and applying security patches to these components. Both processes are essential for maintaining a secure and stable environment.

Getting Started with Ansible Software Patching

Ansible software patching is a process that leverages the capabilities of the Ansible automation platform for managing and applying patches to systems. In this blog post, we’ll explore how to use Ansible for patching systems and keeping them up-to-date with the latest security fixes.

Preparing Your Environment for Ansible Patching

Before diving into Ansible software patching, setting up your environment is important. You’ll need to have Ansible installed, along with access to your Linux servers and the necessary packages.

Installing Ansible on Ubuntu

Before you can use Ansible for patching, you’ll need to install it on your system. If you’re using Ubuntu, follow these steps to install Ansible:

  1. Update the package list and install required dependencies:

sudo apt-get update sudo apt-get install software-properties-common
  1. Add the Ansible repository to your system:

sudo apt-add-repository --yes --update ppa:ansible/ansible
  1. Install Ansible:

sudo apt-get install ansible

Now that Ansible is installed on your Ubuntu system, you can create playbooks for patching.

Using the Yum Module for Patching Linux Servers

The Yum module is an Ansible module that simplifies the management of packages on Linux servers. It’s an essential tool for patching systems, as it automates the installation of security patches and other enhancements.

Creating Ansible Playbooks for Patch Management

Ansible playbooks are YAML files that describe a set of tasks to be executed on specified hosts. To create a playbook for patch management, you’ll need to define the necessary tasks, such as updating packages and rebooting servers.

Implementing Security Fixes and Vulnerability Management

Incorporating security fixes and vulnerability management into your patching process is crucial for maintaining a secure environment. Using Ansible, you can automate the deployment of security patches and address vulnerabilities more efficiently.

Reducing Human Error and Achieving Cost Savings

One of the key benefits of using Ansible for patching systems is reducing human error. By automating the patch management process, you can minimize the risk of mistakes and achieve cost savings in the long run.

Integrating with Red Hat Subscription and Satellite GUI

Ansible can be easily integrated with Red Hat Subscription and Satellite GUI, providing additional benefits such as centralized management, better visibility, and easier inventory management.

Basic Ansible Software Patching Code for Linux and Windows

To demonstrate basic Ansible software patching, we’ll create two simple playbooks: one for Linux and one for Windows. These can be executed as shell scripts using Ansible open-source tool.

For Linux (using the apt module):

- name: Update Linux packages using apt
  hosts: debian_servers
  become: yes
    - name: Update package cache
        update_cache: yes
        cache_valid_time: 3600

    - name: Upgrade all packages to their latest version
        name: '*'
        state: latest
        force_apt_get: yes

    - name: Reboot the server if necessary
        test_command: uptime
        reboot_timeout: 300

For Linux (using the Yum module):

- name: Update Linux packages
  hosts: linux_servers
  become: yes
    - name: Update all packages
        name: '*'
        state: latest

    - name: Reboot the server if necessary
        test_command: uptime
        reboot_timeout: 300

For Windows (using the Win_updates module):

- name: Update Windows packages
  hosts: windows_servers
    - name: Install all updates
        category_names: ['CriticalUpdates', 'SecurityUpdates', 'UpdateRollups']
        state: installed

    - name: Reboot the server if necessary
        reboot_timeout: 300

These playbooks will update packages on your Linux and Windows systems, and reboot the servers if required. To run the playbooks, save them as separate files (e.g., patch_linux.yml and patch_windows.yml) and execute the following commands:

ansible-playbook -i inventory.ini patch_linux.yml ansible-playbook -i inventory.ini patch_windows.yml

Make sure to replace inventory.ini with your inventory file that lists your Linux and Windows servers.

Ansible Software Patching FAQs

  1. How can I ensure that my systems are only updated during specific maintenance windows?

To update your systems during specific maintenance windows, you can schedule your Ansible playbooks to run at predetermined times using a tool like cron for Linux or Task Scheduler for Windows. This way, you can minimize disruption to your users and services. Here’s an example of a cron entry that runs a playbook at 2 AM every Sunday:

0 2  0 /usr/bin/ansible-playbook -i /path/to/inventory.ini /path/to/patch_playbook.yml

Remember to replace the paths with the actual locations of your inventory file and patch playbook.

  1. How can I verify that my systems are up-to-date after running an Ansible software patching playbook?

You can use an additional task in your playbook to gather information about installed packages and their versions, which can help you verify that your systems are up-to-date. For example, on a Linux system using the apt module, you could use the following task:

- name: Get the list of installed packages and their versions
    list: installed
  register: apt_packages

Then, you can use the debug module to display the list of installed packages and their versions:

- name: Display installed packages and their versions
    var: apt_packages.stdout_lines
  1. Can I use Ansible to apply patches only to specific systems or packages?

Yes, you can use Ansible to patch specific systems or packages selectively. To target specific systems, you can define groups in your inventory file and then specify the group name in the hosts field of your playbook. For example:


In your playbook, use hosts: web_servers to apply the patch only to the systems in the web_servers group.

To apply patches only to specific packages, you can modify the name parameter in the appropriate Ansible module (e.g., yum, apt, or win_updates). For instance, using the apt module, you could update only the ‘nginx’ package by setting name: nginx:

- name: Update the nginx package
    name: nginx
    state: latest
    force_apt_get: yes

Final Notes

Ansible software patching is a great way to keep your critical systems or home lab servers up-to-date. It helps to streamline the process, prevent human error, and introduce consistency in the update workflow, so you can always have the latest updates and security fixes. Remember to experiment with different Ansible modules, playbooks, and configurations to find the best approach for your environment or home lab.

Subscribe to VirtualizationHowto via Email 🔔

Enter your email address to subscribe to this blog and receive notifications of new posts by email.

Brandon Lee

Brandon Lee is the Senior Writer, Engineer and owner at and has over two decades of experience in Information Technology. Having worked for numerous Fortune 500 companies as well as in various industries, Brandon has extensive experience in various IT segments and is a strong advocate for open source technologies. Brandon holds many industry certifications, loves the outdoors and spending time with family.

Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.