Inventory
- Ansible allows groups in inventory.
- Inventory is list of hosts where the playbook has to be executed.
- Inventory can be written in two formats
- ini file
- yaml
Ansible inventory ini file format
- ini file is a text file
- The inventory can be written as follows
- all entries directly
172.31.24.180
172.31.24.181
dev.internal.qt.com
- This falls under category all
- We can add specific groups
172.31.24.180
localhost
[ubuntu]
172.31.24.180
localhost
[centos]
20.121.55.193
- In the above file we have two named groups ubuntu and centos and one group all
- If we have sequence of entries we can mention them in inventory
172.31.24.180
localhost
[ubuntu]
172.31.24.180
localhost
[centos]
20.121.55.193
[webservers]
web[01:10].qt.com
- Adding variables to hosts in inventory
172.31.24.180
localhost
[ubuntu]
172.31.24.180 name=node1
localhost name=acn
[centos]
20.121.55.193 name=node2
[webservers]
web[01:10].qt.com
- let print the variable values using playbook
---
- name: test inventory
hosts: ubuntu
tasks:
- name: print my variable
ansible.builtin.debug:
var: name
- Refer Here for the changes and see below for execution report
* Refer Here for the changes done to accomadate the group variable
Lets try to make this playbook work with centos 7
- Lets solve the different values for ubuntu and centos machines
- Refer Here for the changes done to install java on centos and ubuntu
- Refer Here for the fix to solve variable name collision
- Refer Here for the changes to add next few steps
- Refer Here for the changes done to copy the service file according to distribution using conditionals and execute playbook
- Refer Here for the changes done to reload the tomcat service
- When we re-execute ansible playbook some modules are executing un-necessarily lets stop that from happening
- Refer Here for usage of stats and skipping un-necessary extraction of tomcat
- As we need to change permission of shell files only when tomcat is extracted, using the same condition Refer Here for the changeset
ansible facts
- ansible can collect information about the node where the playbook is under execution using facts.
- To collect facts ansible uses setup module Refer Here
- Lets use adhoc command to filter facts
ansible -i hosts -m setup -a "filter=*distribution*" all
172.31.24.180 | SUCCESS => {
"ansible_facts": {
"ansible_distribution": "Ubuntu",
"ansible_distribution_file_parsed": true,
"ansible_distribution_file_path": "/etc/os-release",
"ansible_distribution_file_variety": "Debian",
"ansible_distribution_major_version": "22",
"ansible_distribution_release": "jammy",
"ansible_distribution_version": "22.04",
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false
}
20.121.55.193 | SUCCESS => {
"ansible_facts": {
"ansible_distribution": "CentOS",
"ansible_distribution_file_parsed": true,
"ansible_distribution_file_path": "/etc/redhat-release",
"ansible_distribution_file_variety": "RedHat",
"ansible_distribution_major_version": "8",
"ansible_distribution_release": "NA",
"ansible_distribution_version": "8.5",
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false
}
Adhoc command
- Adhoc command is a way of running ansible module by constructing command line
- We use adhoc commands for activities which donot require automation.
Conditionals in Ansible
- Refer Here for the official ansible docs on conditionals