conditional is used to change a ansible play behavior based on there facts/variable. we can control which tasks/roles will be run or skipped on there targeted hosts/nodes with the help of when statement
ansible "when statement" example : we will create a condition.yml playbook
To Create yml playbook file, choose any name
cd /etc/ansiblevi condition.yml
---
- hosts: all
tasks:
- name: get uptime
command: uptime
when: ansible_facts['os_family'] == "Debian"
register: uptime
- debug: var=uptime.stdout
To run ansible playbook on hosts
ansible-playbook condition.yml
We can see that, localhost is CentOS 7 so task has been skipped and 192.168.3.104 is Debian so task executed.
Again we update condition in playbook, we add change !=
---
- hosts: all
tasks:
- name: get uptime
command: uptime
when: ansible_facts['os_family'] != "Debian"
register: uptime
- debug: var=uptime.stdout
Ansible Conditionals - When Statement |
Again we run playbook
ansible-playbook condition.yml
Now task has been executed on CentOS 7 and skipped on Debian.
Method 2:
Now we will use ansible facts as variable like ansible_distribution, following playbook
---
- hosts: all
tasks:
- name: echo distribution - CentOS
command: echo CentOS-PC
when: ansible_distribution == "CentOS"
register: centos
We can use AND condition with following examples
---
- hosts: all
tasks:
- name: echo distribution - CentOS
command: echo CentOS-PC
when: ansible_distribution == "CentOS" and ansible_architecture == "x86_64"
register: centos
- debug: var=uptime.stdout
ansible-playbook condition.yml
Now we will add more condition with and statement, and use loop to display all results. Our final playbook is :
---
- hosts: all
tasks:
- name: echo distribution - CentOS
command: echo CentOS-PC
when: ansible_distribution == "CentOS" and ansible_architecture == "x86_64"
register: centos
- name: echo distribution - Ubuntu
command: echo Ubuntu-PC
when: ansible_distribution == "Ubuntu" and ansible_architecture == "x86_64"
register: ubuntu
- debug: var={{ item }}
loop:
- centos.stdout
- ubuntu.stdout
Now we will execute ansible playbook
ansible-playbook condition.yml
Thanks
End of this ansible conditionals tutorial, we need your support so i request you to please comment if something missed by me, share and like this post.
www.linuxtopic.com