<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></head>Bonsoir,<br><br>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.<br><br>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.<br>Rémi CAZENAVE - SCOP Le Filament<br>06.87.23.26.04<br><br><div style='font-size:10.0pt;font-family:"Tahoma","sans-serif";padding:3.0pt 0in 0in 0in'>
<hr style='border:none;border-top:solid #E1E1E1 1.0pt'>
<b>De :</b> Daniel Caillibaud <ml@lairdutemps.org><br>
<b>Envoyé :</b> 26 novembre 2020 18:54:08 GMT+01:00<br>
<b>À :</b> "'frsag@frsag.org'" <frsag@frsag.org><br>
<b>Objet :</b> [FRsAG] Pb de vars ansible<br>
</div>
<br>
<pre class="k9mail">Bonjour,<br><br>Après avoir hésité pendant des années, je me penche sur ansible (j'ai ~50<br>conteneurs lxc sur 4 hosts, tout en debian, ça bouge très peu et je gérais<br>ça à la main avec des scripts chargés d'harmoniser).<br><br>J'y vais doucement car j'ai de l'existant hétérogène et il s'agirait pas<br>qu'une nouvelle task ansible vienne casser un truc qui marche.<br><br>J'y vais donc progressivement, à partir d'une organisation basée sur les<br>roles, j'ajoute des tasks, je les teste avec du --check puis sans, d'abord<br>sur peu de vm. <br><br>Si y'a une stratégie meilleure qu'une autre je suis preneur de tout conseil.<br><br>Concernant les variables j'ai lu pas mal de doc dont<br><a href="https://docs.ansible.com/ansible/2.9/user_guide/playbooks_variables.html">https://docs.ansible.com/ansible/2.9/user_guide/playbooks_variables.html</a><br><a href="https://docs.ansible.com/ansible/2.9/user_guide/playbooks_vars_facts.html">https://docs.ansible.com/ansible/2.9/user_guide/playbooks_vars_facts.html</a><br><a href="https://docs.ansible.com/ansible/2.9/user_guide/playbooks_advanced_syntax.html">https://docs.ansible.com/ansible/2.9/user_guide/playbooks_advanced_syntax.html</a><br><a href="https://docs.ansible.com/ansible/2.9/user_guide/complex_data_manipulation.html">https://docs.ansible.com/ansible/2.9/user_guide/complex_data_manipulation.html</a><br>avec des filtres tout prêts pour gérer des ips<br><a href="https://docs.ansible.com/ansible/2.9/user_guide/playbooks_filters_ipaddr.html">https://docs.ansible.com/ansible/2.9/user_guide/playbooks_filters_ipaddr.html</a><br><br>puis les conditions<br><a href="https://docs.ansible.com/ansible/latest/user_guide/playbooks_conditionals.html">https://docs.ansible.com/ansible/latest/user_guide/playbooks_conditionals.html</a><br><br>mais je patauge encore pas mal, par ex avec<br><br>group_vars/all.yml :<br>ipv4_private: "{{ ansible_all_ipv4_addresses | ipaddr('private') | first | mandatory }}"<br># attention, celle-là peut être undefined<br>ipv4_public: "{{ ansible_all_ipv4_addresses | ipaddr('public') | first}}"<br><br>test.yml<br>- name: essais de création de vars dynamiques<br>  hosts: mulet<br>  tasks:<br>    - name: show ipv4 private adress<br>      debug:<br>        msg: "On a trouvé l'ip privée {{ ipv4_private }}"<br>      when: ipv4_private is defined<br><br>    - name: show ipv4 public adress<br>      debug:<br>        msg: "On a trouvé l'ip publique {{ ipv4_public }}"<br>      when: ipv4_public is defined<br><br>=> sur ce host qui n'a qu'une ip privée (et c'est normal), ça me l'affiche bien <br>sur la 1re tâche mais ensuite ça plante avec<br><br>"msg": "The conditional check 'ipv4_public is defined' failed. The error<br>was: error while evaluating conditional (ipv4_public is defined): No first<br>item, sequence was empty.<br><br>Et là je vois pas pourquoi :-/<br><br>Une idée ?<br><br>-- <br>Daniel<br><br>C'est en voulant gagner du temps qu'on le perd.<br>John Steinbeck<hr>Liste de diffusion du FRsAG<br><a href="http://www.frsag.org/">http://www.frsag.org/</a><br></pre></html>