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