Ansible: interpolation de variable dans le nom de la tâche
Je ne peux pas obtenir cette apparemment simple exemple pour travailler dans Ansible 1.8.3. L'interpolation de variable n'est pas un coup de pied dans le nom de la tâche. Tous les exemples j'ai vu semblent suggérer cela devrait fonctionner. Étant donné que la variable est définie dans le vars l'article que j'attendais le nom de la tâche pour imprimer la valeur de la variable. Pourquoi ne pas ce travail?
Même l'exemple de l'Ansible la documentation semble ne pas imprimer la valeur de la variable.
---
- hosts: 127.0.0.1
gather_facts: no
vars:
vhost: "foo"
tasks:
- name: create a virtual host file for {{ vhost }}
debug: msg="{{ vhost }}"
Cette résultats dans la sortie suivante:
PLAY [127.0.0.1]
**************************************************************
TASK: [create a virtual host file for {{ vhost }}]
****************************
ok: [127.0.0.1] => {
"msg": "foo"
}
PLAY RECAP
********************************************************************
127.0.0.1 : ok=1 changed=0 unreachable=0 failed=0
Mise à jour
Cela fonctionne avec 1.7.2 mais ne fonctionne pas avec 1.8.3. Donc, soit c'est un bug ou une fonctionnalité.
- Ceci a été confirmé pour être un possible défaut de la github.com/ansible/ansible/issues/10347
Vous devez vous connecter pour publier un commentaire.
Variables ne sont pas résolues à l'intérieur de la
name
. Seulement à l'intérieur de l'effectif des tâches/conditions de etc. les espaces réservés seront résolus. Je suppose que c'est par la conception. Imaginez que vous avez unwith_items
boucle et utiliser le{{ item }}
dans lename
. Les tâchesname
ne sera imprimé une fois, mais la{{ item }}
allait changer à chaque itération.Je vois les exemples, l'un dans la doc vous lié à l'utilisation des variables dans le
name
. Mais cela ne veut pas dire que le résultat serait comme vous vous y attendiez. Les docs sont gérées par la communauté. Il peut être quelqu'un de juste mis en ligne w/o à le tester ou peut-être l'habitude de travailler comme ça dans une version précédente de Ansible et les docs n'ont pas été mis à jour alors. (Je suis seulement en utilisant Ansible depuis environ un an). Mais même si cela ne fonctionne pas comme nous le souhaitons, il serait, je suis toujours à l'aide de variables dans monname
's, juste pour indiquer que la tâche est basée sur les paramètres de la dynamique. Peut-être les exemples ont été écrits avec la même intention.Une observation intéressante j'ai récemment fait (Ansible 1.9.4) est, par défaut les valeurs sont écrites dans le nom de la tâche.
Lorsqu'il est exécuté, Ansible permettrait d'afficher le titre de la tâche que:
De cette façon, vous pouvez éviter laid noms de tâche dans la sortie.
Vous devez entourer la chaîne entre guillemets.
De ansible documentation:
Explication
Si la variable est interpolée à dépend de l'endroit où elle a été déclarée.
Imaginez que Vous avez deux hôtes:
A
etB
.foo
est seulement par l'hôte, si l'Ansible exécute le jeu, il ne peut pas décider de la valeur à utiliser.Source: https://github.com/ansible/ansible/issues/3103#issuecomment-18835432
Mains sur playbook
ansible_user
est un inventaire variablegreeting
est un invariant de la variable