Define variables for all hosts in Ansible dynamic inventory
Is it possible to define host variables for all hosts using a dynamic inventory?
Currently I can produce an inventory which allows me to assign variables to specific hosts, but what I want to achieve is something like this:
{
"_meta": {
"hostvars": {
"all": {
"my_global_random_variable": "global_random_value"
}
}
},
"web_servers": {
"children": [],
"hosts": [
"web_server1",
"web_server2"
],
"vars": {}
},
"database_servers": {
"children": [],
"hosts": [
"database_server1"
],
"vars": {}
}
}
Which should allow me to access the "my_global_random_variable" from any context as if I would have defined that variable in a vars file.
Variables set by dynamic inventory
are inventory variables
. When a variable is set in multiple places Ansible set the value following variable precedence:
role defaults [1] inventory vars [2] inventory group_vars inventory host_vars playbook group_vars playbook host_vars host facts play vars play vars_prompt play vars_files registered vars set_facts role and include vars block vars (only for tasks in block) task vars (only for the task) extra vars (always win precedence)
Variables set in inventory have a relativ low precendence. So there is no need to use dynamic inventory
to achive this. Just set the variable for example on role level.
I ended up using a lookup plugin instead of the inventory to retrieve my variables.
More information on lookups: https://docs.ansible.com/ansible/playbooks_lookups.html