How to set an Ansible variable for all plays/hosts?

https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#fact-caching

As shown elsewhere in the docs, it is possible for one server to reference variables about another, like so: {{ hostvars['asdf.example.com']['ansible_os_family'] }}

This even applies to variables set dynamically in playbooks.


No sure what you actually want, but you can set a fact for every host in a play with a single looped task (some simulation of global variable):

playbook.yml

---
- hosts: mytest
  gather_facts: no
  vars:
  tasks:
    # Set myvar fact for every host in a play
    - set_fact:
        myvar: "{{ inventory_hostname }}"
      delegate_to: "{{ item }}"
      with_items: "{{ play_hosts }}"
      run_once: yes
    # Ensure that myvar is a name of the first host
    - debug:
        msg: "{{ myvar }}"

hosts

[mytest]
aaa ansible_connection=local
bbb ansible_connection=local
ccc ansible_connection=local

result

PLAY [mytest] ******************
META: ran handlers

TASK [set_fact] ******************
ok: [aaa -> aaa] => (item=aaa) => {"ansible_facts": {"myvar": "aaa"}, "ansible_facts_cacheable": false, "changed": false, "failed": false, "item": "aaa"}
ok: [aaa -> bbb] => (item=bbb) => {"ansible_facts": {"myvar": "aaa"}, "ansible_facts_cacheable": false, "changed": false, "failed": false, "item": "bbb"}
ok: [aaa -> ccc] => (item=ccc) => {"ansible_facts": {"myvar": "aaa"}, "ansible_facts_cacheable": false, "changed": false, "failed": false, "item": "ccc"}

TASK [debug] ******************
ok: [aaa] => {
    "msg": "aaa"
}
ok: [bbb] => {
    "msg": "aaa"
}
ok: [ccc] => {
    "msg": "aaa"
}

Tags:

Ansible