Comment exécuter une tâche lorsque la variable est indéfinie dans ansible?

Je cherche un moyen d’exécuter une tâche lorsque la variable ansible n’est pas un registre / indéfini, par exemple

-- name: some task command: sed -n '5p' "{{app.dirs.includes}}/BUILD.info" | awk '{print $2}' when: (! deployed_revision) AND ( !deployed_revision.stdout ) register: deployed_revision 

A partir des documents d’ansible : Si aucune variable requirejse n’a été définie, vous pouvez ignorer ou échouer en utilisant le test défini par Jinja2. Par exemple:

 tasks: - shell: echo "I've got '{{ foo }}' and am not afraid to use it!" when: foo is defined - fail: msg="Bailing out. this play requires 'bar'" when: bar is not defined 

Donc, dans votre cas, when: deployed_revision is not defined devrait fonctionner

Selon la dernière version 2.5 d’Ansible, pour vérifier si une variable est définie et si vous souhaitez exécuter une tâche, utilisez undefined mot-clé undefined .

 tasks: - shell: echo "I've got '{{ foo }}' and am not afraid to use it!" when: foo is defined - fail: msg="Bailing out. this play requires 'bar'" when: bar is undefined 

Ansible Documentation

Ssortingctement déclaré, vous devez cocher toutes les cases suivantes: défini, pas vide ET pas aucun.

Pour les variables “normales”, cela fait une différence si elle est définie et définie ou non. Voir foo et bar dans l’exemple ci-dessous. Les deux sont définis mais seul foo est défini.

D’un autre côté, les variables enregistrées sont définies sur le résultat de la commande en cours d’exécution et varient d’un module à l’autre. Ce sont surtout des structures json. Vous devez probablement vérifier le sous-élément qui vous intéresse. Voir xyz et xyz.msg dans l’exemple ci-dessous:

 cat > test.yml <