Sometimes you might want to execute a certain Ansible Playbook only on servers with a specific OS. Since Ansible collects the OS in the gathering facts
stage, you can easily do this in a when
condition.
Read Information from Gathering Facts
gathering facts
collects a lot of information about the target-host. You can display them like this.
ansible -m setup <servername>
These information are stored in variables and can be used like every other variable in your Ansible-Code.
Check for specific Distribution
name: Check for specific Distribution
ansible.builtin.foo:
...
when: ansible_distribution == "Debian" or ansible_distribution == "Ubuntu"
Check for Major Version
name: Check for Major Version
ansible.builtin.foo:
...
when: anible_distribution_major_version == 12
Example: Package Update
A prime example of OS specific tasks is to update packages. In this Example we want to update Dabian via apt
and CentOS and RedHat via yum
.
The Playbook for this could look like this.
host: localhost
gather_facts: true
tasks:
- name: run apt
ansible.builtin.apt:
name: '*'
state: latest
when: ansible_distribution == "Debian"
- name: run yum
ansible.builtin.yum:
name: '*'
state: latest
when: ansible_distribution == "CentOS" or ansible_distribution == "RedHat"