Hello,
Tu mets du code (petit certes, mais du code) dans des champs qui ne contiennent que des variables.... moi j'éviterais, je ne le fais qu'uniquement lorsque je veux positionner deux variables avec la même valeur avec une sorte de variable bidon technique.
Pour moi tu présuppose que ta variable ansible_all_ipv4_addresses contient au moins une ip publique et du coup prendre la première même s'il n'y en a pas
J'essayerais avec le module set_fact
Avec qq du genre , pas testé hein:
- name: set ipv4 public address variable if at least one set_fact: ipv4_public: ansible_all_ipv4_addresses | ipaddr('public') | first when: ansible_all_iansible_all_ipv4_addresses | ipaddr('public') | length > 0
- name: show ipv4 public adress debug: msg: "On a trouvé l'ip publique {{ ipv4_public }}" when: ipv4_public is defined
Cordialement,
JYL
Le 26/11/2020 à 18:54, Daniel Caillibaud a écrit :
Bonjour,
Après avoir hésité pendant des années, je me penche sur ansible (j'ai ~50 conteneurs lxc sur 4 hosts, tout en debian, ça bouge très peu et je gérais ça à la main avec des scripts chargés d'harmoniser).
J'y vais doucement car j'ai de l'existant hétérogène et il s'agirait pas qu'une nouvelle task ansible vienne casser un truc qui marche.
J'y vais donc progressivement, à partir d'une organisation basée sur les roles, j'ajoute des tasks, je les teste avec du --check puis sans, d'abord sur peu de vm.
Si y'a une stratégie meilleure qu'une autre je suis preneur de tout conseil.
Concernant les variables j'ai lu pas mal de doc dont https://docs.ansible.com/ansible/2.9/user_guide/playbooks_variables.html https://docs.ansible.com/ansible/2.9/user_guide/playbooks_vars_facts.html https://docs.ansible.com/ansible/2.9/user_guide/playbooks_advanced_syntax.ht... https://docs.ansible.com/ansible/2.9/user_guide/complex_data_manipulation.ht... avec des filtres tout prêts pour gérer des ips https://docs.ansible.com/ansible/2.9/user_guide/playbooks_filters_ipaddr.htm...
puis les conditions https://docs.ansible.com/ansible/latest/user_guide/playbooks_conditionals.ht...
mais je patauge encore pas mal, par ex avec
group_vars/all.yml : ipv4_private: "{{ ansible_all_ipv4_addresses | ipaddr('private') | first | mandatory }}" # attention, celle-là peut être undefined ipv4_public: "{{ ansible_all_ipv4_addresses | ipaddr('public') | first}}"
test.yml
name: essais de création de vars dynamiques hosts: mulet tasks:
name: show ipv4 private adress debug: msg: "On a trouvé l'ip privée {{ ipv4_private }}" when: ipv4_private is defined
name: show ipv4 public adress debug: msg: "On a trouvé l'ip publique {{ ipv4_public }}" when: ipv4_public is defined
=> sur ce host qui n'a qu'une ip privée (et c'est normal), ça me l'affiche bien sur la 1re tâche mais ensuite ça plante avec
"msg": "The conditional check 'ipv4_public is defined' failed. The error was: error while evaluating conditional (ipv4_public is defined): No first item, sequence was empty.
Et là je vois pas pourquoi :-/
Une idée ?