Estou procurando uma maneira de realizar uma tarefa quando a variável ansible não é registradora / indefinida, por exemplo
-- 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
fonte
fonte
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 exemplo, isso não funciona:when: {{ foo }} is defined
when: ({{ foo }} in undefined)
{{ foo }}
). Isso não é por causa de Ansible, mas Yaml interpretaria isso como um objeto. Se você precisar começar com uma expansão de variável, simplesmente"{{ foo }}"
coloque tudo entre aspas (como ), para forçar o Yaml a vê-lo como uma string e passá-lo como está para Ansible.De acordo com a versão 2.5 do Ansible mais recente, para verificar se uma variável está definida e, dependendo disso, se você deseja executar qualquer tarefa, use a
undefined
palavra-chave.Documentação Ansible
fonte
De forma estrita, você deve verificar todos os itens a seguir: definido, não vazio E não nenhum.
Para variáveis "normais", faz diferença se definido e definido ou não definido. Veja
foo
ebar
no exemplo abaixo. Ambos são definidos, mas apenasfoo
está definido.Por outro lado, as variáveis registradas são definidas como o resultado do comando em execução e variam de módulo para módulo. Eles são principalmente estruturas json. Você provavelmente deve verificar o subelemento no qual está interessado. Veja
xyz
exyz.msg
no exemplo abaixo:fonte