Je recherche un moyen d'effectuer une tâche lorsque la variable ansible n'est pas des registres / non dé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
ansible
ansible-playbook
sakhunzai
la source
la source
when: deployed_revision is not defined or deployed_revision.stdout is not defined or deployed_revision.stdout == ''
when: item.sudo is defined and item.sudo == true
when: foo is defined
(par exemple, cela ne fonctionne pas:when: {{ foo }} is defined
when: ({{ foo }} in undefined)
{{ foo }}
). Ce n'est pas à cause d'Ansible, mais Yaml interpréterait cela comme un objet. Si vous avez besoin de commencer par une expansion variable, entourez simplement le tout avec des guillemets doubles (comme"{{ foo }}"
), pour forcer Yaml à le voir comme une chaîne et à le passer tel quel à Ansible.Selon la dernière version d'Ansible 2.5, pour vérifier si une variable est définie et en fonction de cela si vous souhaitez exécuter une tâche, utilisez le
undefined
mot clé.Documentation Ansible
la source
Strictement indiqué, vous devez vérifier tous les éléments suivants: défini, non vide ET non Aucun.
Pour les variables «normales», cela fait une différence si elles sont définies et définies ou non. Voir
foo
etbar
dans l'exemple ci-dessous. Les deux sont définis mais seulsfoo
sont définis.De l'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 pour la plupart des structures json. Vous devez probablement vérifier le sous-élément qui vous intéresse. Voir
xyz
etxyz.msg
dans l'exemple ci-dessous:la source