A cláusula when não pode avaliar a presença de tags. Como solução alternativa, uso variáveis e tags juntas para executar tarefas específicas a essa tag / variável.
Ex: imagine um manual e um inventário
# inventário
[dev]
192.168.1.1
# site.yml
- hosts: dev
funções:
- {role: common}
e em comum / tasks / main.yml
# papéis / comum / tarefas / main.yaml
- nome: instalar links
apt: nome = estado dos links = presente
- inclua: uninstall.yml
quando: uninstall_links estiver definido
Tag:
- Desinstalar
# role / common / tasks / uninstall.yml
- nome: Desinstalar links
apt: nome = estado dos links = ausente
Com essa abordagem, você usa a tag para selecionar apenas as tarefas em uninstall.yml, mas também precisa definir a variável 'uninstall_links' para algo que a habilite. Portanto, se você executar o manual sem nenhum parâmetro, ele executará, por padrão, a tarefa de instalação. Para desinstalar, você pode definir a tag 'uninstall' como seu playbook (ou cmdline) e DEVE definir a variável. Se você não definir a tag, ela executará tudo (instalar e desinstalar) nessa ordem, o que é bom para testar todo o processo.
Como executar tudo (ele será instalado e desinstalado):
$ ansible-playbook -i inventory site.yml -l dev -s -k -e "uninstall_links=true"
Como executar apenas a tag 'uninstall' no grupo dev
$ ansible-playbook -i inventory site.yml -l dev -s -k -e "uninstall_links=true" -t uninstall
Portanto, variáveis e tags também podem estar nos arquivos site.yml / inventário, permitindo que você se comprometa com seu SCM e registre sua intenção.