'ansible inventory variable precedence and levels

FL - Florida, CA - California, US - United States

hosts.ini:

############
### CORE ###
############

[SERVERS_FL_0102]
server01-FL
server02-FL

[SERVERS_FL_0304]
server03-FL
server04-FL

[SERVERS_CA_0102]
server01-CA
server02-CA

[SERVERS_CA_0304]
server03-CA
server04-CA


############
## GROUPS ##
############

[SERVERS_FL:children]
SERVERS_FL_0102
SERVERS_FL_0304

[SERVERS_CA:children]
SERVERS_CA_0102
SERVERS_CA_0304

[SERVERS_US_0102:children]
SERVERS_FL_0102
SERVERS_CA_0102

[SERVERS_US_0304:children]
SERVERS_FL_0304
SERVERS_CA_0304



[SERVERS_US:children]
SERVERS_FL
SERVERS_CA

My question to you is: does SERVERS_US_0304 group vars file have greater precedence than SERVERS_US group vars file? For me it is difficult to say, as SERVERS_US_0304 is not inside SERVERS_US. My guess is that SERVERS_US_0304 does have greater precedence than SERVERS_US as it contains fewer groups, so it is smaller. I don't know for sure.



Solution 1:[1]

My question to you is: does SERVERS_US_0304 group vars file have greater precedence than SERVERS_US group vars file?

You may have a look into Understanding variable precedence and the output of

ansible-inventory -i inventory.ini --graph
@all:
  |--@SERVERS_US:
  |  |--@SERVERS_CA:
  |  |  |--@SERVERS_CA_0102:
  |  |  |  |--server01-CA
  |  |  |  |--server02-CA
  |  |  |--@SERVERS_CA_0304:
  |  |  |  |--server03-CA
  |  |  |  |--server04-CA
  |  |--@SERVERS_FL:
  |  |  |--@SERVERS_FL_0102:
  |  |  |  |--server01-FL
  |  |  |  |--server02-FL
  |  |  |--@SERVERS_FL_0304:
  |  |  |  |--server03-FL
  |  |  |  |--server04-FL
  |--@SERVERS_US_0102:
  |  |--@SERVERS_CA_0102:
  |  |  |--server01-CA
  |  |  |--server02-CA
  |  |--@SERVERS_FL_0102:
  |  |  |--server01-FL
  |  |  |--server02-FL
  |--@SERVERS_US_0304:
  |  |--@SERVERS_CA_0304:
  |  |  |--server03-CA
  |  |  |--server04-CA
  |  |--@SERVERS_FL_0304:
  |  |  |--server03-FL
  |  |  |--server04-FL
  |--@ungrouped:

... the last listed variables override all other variables ... ... Ansible gives precedence to variables that were defined more recently, more actively, and with more explicit scope. ...

If you apply tasks on the group SERVERS_US, the group var file of SERVERS_US_0304 will not be read since it is not part of the (sub)tree.

ansible-inventory -i inventory.ini SERVERS_US --graph
@SERVERS_US:
  |--@SERVERS_CA:
  |  |--@SERVERS_CA_0102:
  |  |  |--server01-CA
  |  |  |--server02-CA
  |  |--@SERVERS_CA_0304:
  |  |  |--server03-CA
  |  |  |--server04-CA
  |--@SERVERS_FL:
  |  |--@SERVERS_FL_0102:
  |  |  |--server01-FL
  |  |  |--server02-FL
  |  |--@SERVERS_FL_0304:
  |  |  |--server03-FL
  |  |  |--server04-FL

And so vice versa.

ansible-inventory -i inventory.ini SERVERS_US_0304 --graph
@SERVERS_US_0304:
  |--@SERVERS_CA_0304:
  |  |--server03-CA
  |  |--server04-CA
  |--@SERVERS_FL_0304:
  |  |--server03-FL
  |  |--server04-FL

Therefore it will somehow depend on what you try to achieve. How to build your inventory gives some examples for organizing and grouping, as well the answer about ansible_group_priority.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1