playbook examples ejemplos ansible ansible-playbook

examples - ¿Cómo ejecutar una tarea cuando la variable no está definida en ansible?



ejemplos de ansible (3)

De los documentos ansibles : si no se ha establecido una variable requerida, puede omitir o fallar usando la prueba definida de Jinja2. Por ejemplo:

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

Entonces, en su caso, when: deployed_revision is not defined debería funcionar

Estoy buscando una manera 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


Estrictamente indicado, debe verificar todo lo siguiente: definido, no vacío Y no Ninguno.

Para las variables "normales" hace una diferencia si se define y establece o no establece. Ver foo y bar en el ejemplo a continuación. Ambos están definidos pero solo se establece foo .

Por otro lado, las variables registradas se configuran según el resultado del comando en ejecución y varían de un módulo a otro. En su mayoría son estructuras json. Probablemente debe verificar el subelemento que le interesa. Consulte xyz y xyz.msg en el siguiente ejemplo:

cat > test.yml <<EOF - hosts: 127.0.0.1 vars: foo: "" # foo is defined and foo == '''' and foo != None bar: # bar is defined and bar != '''' and bar == None tasks: - debug: msg : "" register: xyz # xyz is defined and xyz != '''' and xyz != None # xyz.msg is defined and xyz.msg == '''' and xyz.msg != None - debug: msg: "foo is defined and foo == '''' and foo != None" when: foo is defined and foo == '''' and foo != None - debug: msg: "bar is defined and bar != '''' and bar == None" when: bar is defined and bar != '''' and bar == None - debug: msg: "xyz is defined and xyz != '''' and xyz != None" when: xyz is defined and xyz != '''' and xyz != None - debug: msg: "{{ xyz }}" - debug: msg: "xyz.msg is defined and xyz.msg == '''' and xyz.msg != None" when: xyz.msg is defined and xyz.msg == '''' and xyz.msg != None - debug: msg: "{{ xyz.msg }}" EOF ansible-playbook -v test.yml


Según la última versión 2.5 de Ansible, para verificar si una variable está definida y, dependiendo de esto, si desea ejecutar cualquier tarea, use una palabra clave 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

Documentación Ansible