Version Ansible: 2.0.0.2Ansible Variable précédence Hashes
J'ai besoin de remplacer les variables par défaut de rôle par les variables d'accueil de l'inventaire. Pour autant que je comprenne lire Variable Precedence: Where Should I Put A Variable? dans Ansible Docs, c'est possible mais peut-être que cela ne pourrait pas être une bonne pratique, mais malheureusement il est nécessaire que certains hôtes modifient certains paramètres de configuration par défaut.
Je vais reproduire le cas réel, donc nous allons examiner la hiérarchie de répertoire suivant:
├── debug.yml
├── host_vars
│ └── test.localdomain
├── inventory
│ └── debug
└── roles
└── debug
├── tasks
│ └── main.yml
└── vars
└── main.yml
debug.yml est notre fichier PlayBook.
---
- name: debug
hosts: debug
roles:
- debug
host_vars/test.localdomain contient les variables que je veux avoir la priorité sur les valeurs par défaut.
---
foo:
bar:
- hey
inventaire/debug est le fichier d'inventaire que nous allons utiliser.
[debug]
test.localdomain
rôles/debug/tâches/main.yml imprime foo.bar variables.
---
- debug: msg="{{foo.bar}}"
rôles/debug/vars/main.yml contient des variables de rôle par défaut.
---
foo:
bar:
- hello
- world
À ce stade, je pense que pendant le débogage d'exécution PlayBook, la valeur de foo.bar est [ "hey" ]
, mais évidemment je me trompe:
> ansible-playbook debug.yml -i inventory/debug
PLAY [debug] **********************************
TASK [setup] **********************************
ok: [test.localdomain]
TASK [debug : debug] **************************
ok: [test.localdomain] => {
"msg": [
"hello",
"world"
]
}
PLAY RECAP *************************************
test.localdomain : ok=2 changed=0 unreachable=0 failed=0
Exécution module de débogage de cli ansible me donne le résultat attendu, donc je suis tout à fait sûr que les variables hôte sont évaluées correctement, mais peut-être pour une raison quelconque, elles ne prennent pas le pas sur les variables de rôle par défaut.
> ansible test.localdomain -i inventory/debug -m debug -a 'msg="{{foo.bar}}"'
test.localdomain | SUCCESS => {
"msg": [
"hey"
]
}
Où est mon erreur?