Skip to content

Variable Precedence Cheat Sheet

flowchart TD
    A["1. Extra vars -e — always wins"] --> B["2. Task vars"]
    B --> C["3. Block vars"]
    C --> D["4. Role and include vars (vars:)"]
    D --> E["5. set_fact / registered vars"]
    E --> F["6. Play vars_files"]
    F --> G["7. Play vars"]
    G --> H["8. host_vars"]
    H --> I["9. group_vars"]
    I --> J["10. Inventory vars"]
    J --> K["11. Facts"]
    K --> L["12. Role defaults — lowest"]
Rank Source File / Location
1 (highest) Extra vars -e on the command line
2 Task vars vars: on a task
3 Block vars vars: on a block
4 Role/include vars roles/<role>/vars/main.yml
5 set_fact / registered Set at runtime
6 Play vars_files Referenced file
7 Play vars vars: on a play
8 host_vars host_vars/<host>.yml
9 group_vars group_vars/<group>.yml
10 Inventory vars Set inline in the inventory file
11 Facts Gathered from the host
12 (lowest) Role defaults roles/<role>/defaults/main.yml

Verify, don't guess: ansible-inventory --host <name> or ansible-playbook ... -vvv.

Full explanation: Variable Precedence