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 == truewhen: foo is defined(por ejemplo, esto no funciona:when: {{ foo }} is definedwhen: ({{ 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
undefinedpalabra 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
fooybaren el ejemplo siguiente. Ambos están definidos pero solofooestá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
xyzyxyz.msgen el siguiente ejemplo:fuente