Ansible: YAML inventory for staging / production hosts
I cant setup inventory which will be easy and useful in
yml` format for Ansible Playbook :(
For example:
all:
children:
db:
children:
production:
hosts:
1.1.1.1:
staging:
hosts:
11.11.11.11:
web:
children:
production:
hosts:
2.2.2.2:
staging:
hosts:
22.22.22.22:
So, I have two playbooks with:
playbook-db.yml
...
hosts:
- db
and playbook-web.yml
...
hosts:
- db
And I want to use this inventory like:
andible-playbook -D playbook-db.yml --limit=staging
I am expecting that my playbook will be used only db
and staging
hosts, but playbook is applying for all staging
hosts: 11.11.11.11
and 22.22.22.22
(but I am expecting 11.11.11.11 only) :(
How I can realize it correctly?
1 answer
-
answered 2020-11-24 19:23
mdaniel
It seems you have a misunderstanding about the inventory file, since ansible is doing as you described
ansible-inventory -i your-posted-file.yml --list
emits
{ ... "all": { "children": [ "db", "ungrouped", "web" ] }, "db": { "children": [ "production", "staging" ] }, "production": { "hosts": [ "1.1.1.1", "2.2.2.2" ] }, "staging": { "hosts": [ "11.11.11.11", "22.22.22.22" ] }
showing that the
db
group has all members ofproduction
andstaging
, butstaging
has hosts"11.11.11.11", "22.22.22.22"
just as you describedI think perhaps you were conflating the yaml indentation with membership, but that's not how ansible inventories work.
What is far more likely is that you'd want a
db-staging
anddb-production
group, for the case you described where you want onlydb
hosts that arestaging
, leaving thedb
group to mean everydb
member