Ansible uses a combination of a hosts file and a group_vars directory to pull variables per host group and run Ansible plays/tasks against hosts.
group_vars/all is used to set variables that will be used for every host that Ansible is ran against.
More information can be found here: http://docs.ansible.com/ansible/intro_inventory.html
Hosts file
A hosts file consists of host groups and hosts within those groups. A super-set of hosts can be built from other host groups using the :children operator.
Below is an example of a very basic Ansible hosts file. Be aware that there are major differences between Ansible 2.0 and versions below it.
These files can be found within a Ansible repository or in /etc/ansible/hosts
Ansible 1.9 and lower
---
[back-end-and-infra:children]
back-end-servers
infrastructure
[back-end-servers]
database ansible_ssh_host=10.0.0.1 ansible_ssh_port=22 ansible_ssh_user=postgres
webserver ansible_ssh_host=10.0.0.2 ansible_ssh_port=22 ansible_ssh_user=root
[infrastructure]
ldap ansible_ssh_host=10.0.0.100 ansible_ssh_port=22 ansible_ssh_user=root
Ansible 2.0
The main difference is the removal of the _ssh_ middle section of the host entry.
---
[back-end-and-infra:children]
back-end-servers
infrastructure
[back-end-servers]
database ansible_host=10.0.0.1 ansible_port=22 ansible_user=postgres
webserver ansible_host=10.0.0.2 ansible_port=22 ansible_user=root
[infrastructure]
ldap ansible_host=10.0.0.100 ansible_port=22 ansible_user=root
Group_vars
As mentioned above, all applies to any machine Ansible is ran against. If your deployment requires specific variables in addition to the already defined vars, one can specify others based on host groups.
All
---
# <ansible_base_dir>/group_vars/all
SSH_PORT: 22
ADMIN_USER: adminz_rule
Group Specific Variables
---
# <ansible_base_dir>/group_vars/back-end-servers
WEBSERVER:
PORT: 8080
WEBROOT: /var/www
DATABASE:
USER: admin
PORT: 3306
PATH_ENV: /opt/dev
---
# <ansible_base_dir>/group_vars/infrastructure
ADMIN_LDAP_GROUP: admin
SERVER: ldap.domain.com