[FRsAG] Pb de vars ansible

Daniel Caillibaud ml at lairdutemps.org
Jeu 26 Nov 18:54:08 CET 2020


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.html
https://docs.ansible.com/ansible/2.9/user_guide/complex_data_manipulation.html
avec des filtres tout prêts pour gérer des ips
https://docs.ansible.com/ansible/2.9/user_guide/playbooks_filters_ipaddr.html

puis les conditions
https://docs.ansible.com/ansible/latest/user_guide/playbooks_conditionals.html

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 ?

-- 
Daniel

C'est en voulant gagner du temps qu'on le perd.
John Steinbeck


Plus d'informations sur la liste de diffusion FRsAG