web-dev-qa-db-fra.com

Vérifier si les tableaux sont définis et non vides dans ansible

J'ai le code suivant

- set_fact:
    MY_HOSTNAME: "SOME VALUE"
    MY_SERVER: "00.00.00.00"
- name: Get MY server
  set_fact:
    MY_SERVER: "{{ groups[MY_HOSTNAME][0] }}"
  when: groups[MY_HOSTNAME] is defined

Dans le code ci-dessus, groups[MY_HOSTNAME] est un tableau. Quel est le meilleur moyen de vérifier que groups[MY_HOSTNAME] est défini et également que c'est not empty Si c'est l'un ou l'autre, je veux la valeur 00.00.00.00 à attribuer à MY_SERVER

12
kosta

Je ne sais pas si c'est spécifique à la version, mais j'utilise actuellement ansible-2.3.2 sur RHEL6 et je devais mettre des guillemets autour du nom du groupe pour que cela fonctionne pour moi:

when: groups["GROUP_NAME"] is defined and (groups["GROUP_NAME"]|length>0)

Edit: Je ne pourrais pas ajouter ceci en tant que commentaire à la réponse de Techraf car je n’ai pas assez de réputation.

15
Phil M

list | length filtre renvoie le nombre d'éléments. Si c'est zéro, la liste est vide.

Pour une valeur conditionnelle, utilisez if ou ternary filter ( exemple dans cette réponse ).

Pour un composite conditionnel (groups[MY_HOSTNAME]| default([])) | length.

11
techraf