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