5

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.

3 Answers 3

1

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.

2
  • This wouldn't have helped me because I had a dynamic inventory which retrieved data from LDAP. Commented Oct 20, 2016 at 9:30
  • I ended up using a lookup plugin which seems to be the right way. Thanks though! Commented Oct 20, 2016 at 9:31
1

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

0

I wanted to do this and seems to work with the following (adapted for your example):

{ "all": { "vars": { "my_global_random_variable": "global_random_value" } }, "web_servers": { "children": [], "hosts": [ "web_server1", "web_server2" ], "vars": {} }, "database_servers": { "children": [], "hosts": [ "database_server1" ], "vars": {} } } 

Possibly not best practice but keeps things simple.

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.