Real World Example - nsg/ansible-inventory GitHub Wiki
This is a simplified small piece of a real inventory used in production, I have changed the names to keep things a little anonymous.
$ tree
.
├── hosts
│ ├── group_vars
│ │ ├── db.yml
│ │ └── stage.yml
│ ├── hosts_vars
│ │ └── stoprod-db01.yml
│ ├── inventory
│ │ ├── db.yml
│ │ └── www.yml
│ ├── inventory.yml
│ └── inventory.py
└── site.yml
inventory.yml
---
matcher:
- regexp: "(sto|lon)(stage|prod|support)-.*"
capture: True
company:
vars:
graphite_hostname: 10.24.90.1
include:
- inventory/db.yml
- inventory/www.yml
We have plenty of hosts named in the pattern [site][env]-function01 and so on, the inventory.py will already split and make tag-groups for siteenv and function. siteenv is a useless name so I told the system to split it up under matcher. A host named stoprod-db01 will be split up to the tag-groups sto, prod, stoprod and db.
We then create a group var under the group company called graphite_hostname and assign it a value.
Two files, db.yml and www.yml are included under the group company.
inventory/db.yml
---
galera:
stage:
vars:
galera_cluster_name: "galera-stage"
hosts:
- stostage-db01
- stostage-db02
- lonstage-db01
prod:
vars:
galera_cluster_name: "galera-prod"
hosts:
- stoprod-db01
- stoprod-db02
- stoprod-db03
- lonprod-db01
- lonprod-db02
In theory I could define the variables under group_vars/stage.yml (and prod) and get rid of both vars and the redundant groups stage and prod and just turn everything to a simple list. We choose to keep it like this to make it more clear.
group_vars/db.yml
---
innodb_buffer_pool_size: 4096M
query_cache_size: 32M
These variables will be assigned to all hosts tagged with db.
site.yml
- hosts: db
roles:
- galera
- hosts: stage:&db
tasks:
- debug: msg="Stage stuff"
I like to use unions like stage:&db. An alternative way to refer to the stage galera machines would be with the group company-galera-stage, or stage:&company-galera.