Le 26/11/20 à 21h17, Rémi CAZENAVE - Le Filament remi@le-filament.com a écrit :
Bonsoir,
C'est parce qu'il essaie de résoudre la variable dans la condition, et que le first ne fonctionne pas sur une liste vide.
En fait je m'attendais à ce que ce first sur une liste vide rende la variable undefined.
Si je teste avec debug: msg: "Type du []|first : {{ ansible_all_ipv4_addresses | ipaddr('public') | first | type_debug }} "
ça affiche AnsibleUndefined
mais l'affecter à une variable et tester ensuite avec "is defined" marche pas, je sais pas trop pourquoi… (et pas vu comment tester le type).
Essaie d'ajouter | default([""]) avant le first variable, s'il n'y a pas d'adresse IP publique il devrait prendre cette valeur par défaut et t'afficher un string vide. Il faudrait que tu modifies aussi ta condition pour être si différent de "" du coup ou de longueur > 1
Oui, c'est la solution de contournement (ou comme le précise Faustin mettre ça dans un defaults/main.yml)
=> toutes les variables sont toujours définies mais parfois vides, et on teste juste si c'est truthy avec du
when: foo|bool