Estoy buscando una forma de realizar una tarea cuando la variable ansible no está registrada / indefinida, por ejemplo
-- 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
fuente
fuente
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
(por ejemplo, esto no funciona:when: {{ foo }} is defined
when: ({{ foo }} in undefined)
{{ foo }}
). Esto no se debe a Ansible, pero Yaml lo interpretaría como un objeto. Si necesita comenzar con una expansión de variable, simplemente rodee todo con comillas dobles (como"{{ foo }}"
), para obligar a Yaml a verlo como una cadena y pasarlo como está a Ansible.Según la última versión 2.5 de Ansible, para verificar si una variable está definida y, dependiendo de esto, si desea ejecutar alguna tarea, use la
undefined
palabra clave.Documentación Ansible
fuente
Estrictamente establecido, debe marcar todo lo siguiente: definido, no vacío Y no Ninguno.
Para las variables "normales", hay una diferencia si se definen y configuran o no. Vea
foo
ybar
en el ejemplo siguiente. Ambos están definidos pero solofoo
están configurados.Por otro lado, las variables registradas se establecen en el resultado del comando en ejecución y varían de un módulo a otro. En su mayoría son estructuras json. Probablemente deba marcar el subelemento que le interesa. Consulte
xyz
yxyz.msg
en el siguiente ejemplo:fuente