Resolver agora ou durante a execução
Imports e includes permitem reutilizar tarefas, mas a fase de resolução muda o desenho. Import_tasks é estático: o ficheiro é processado antes da execução, e os valores necessários para identificar esse ficheiro devem estar disponíveis nessa fase. Include_tasks é dinâmico e pode usar valores obtidos durante o play. Isso não dispensa validação: se uma resposta externa escolhe um ficheiro, restringe a escolha ao conjunto autorizado. Um loop pode percorrer um include dinâmico; não transfiras simplesmente esse loop para um import estático. Escolhe o mecanismo pela necessidade de execução e pela possibilidade de rever o âmbito efetivo.
Condições herdadas podem mudar a meio
Uma condição colocada num import estático é aplicada a cada tarefa importada. Se a primeira tarefa alterar o valor utilizado pela condição, a segunda pode ser ignorada. No exemplo release_id is not defined, definir release_id na primeira tarefa torna a condição falsa nas seguintes. Um include dinâmico condicionado avalia a condição no include; uma vez incluído o ficheiro, os filhos não recebem automaticamente essa mesma condição. Antes de substituir um mecanismo pelo outro, explica o comportamento pretendido. A diferença pode afetar uma preparação de diretório, uma escolha de versão ou uma validação que o operador esperava executar em conjunto.
Tags no include e tags nas tarefas
Uma tag aplicada a um include_tasks dinâmico seleciona o include, sem ser herdada automaticamente por todos os filhos. Sob --tags release, podes ver o include e não executar as tarefas internas sem tags correspondentes. Apply.tags permite aplicar tags aos filhos, mas o próprio include também precisa de ser selecionado. Num import estático, a herança de tags segue outra regra e propaga-se às tarefas importadas. Não escolhas a forma estática apenas para esconder um problema de seleção. Documenta a matriz de modos suportados, os passos esperados em cada modo e a observação que confirma que a seleção foi a pretendida.
Listagem e retoma têm limites
List-tasks e list-tags não mostram todo o conteúdo interior dos includes dinâmicos como mostram tarefas estáticas. Uma listagem curta não demonstra um ficheiro vazio ou uma execução sem efeitos. Inspeciona o conteúdo e os valores que escolhem o caminho. Start-at-task também não permite começar numa tarefa interior de um include dinâmico. Para retomar após falha parcial, define pontos de entrada suportados, pré-condições e reconciliação do estado. Isso pode exigir um modo explícito de recuperação. O nome amigável de uma tarefa não substitui a verificação de que diretórios, versão, permissões e dados correspondem ao estado de onde a retoma parte.
Oficina: provar dois caminhos de seleção
O laboratório executa um play em localhost com --tags release. O primeiro include tem apenas a tag no include e aponta para uma tarefa sem tags que criaria um marcador. O segundo tem a tag no include e apply.tags para o filho, que cria outro marcador. O runner verifica que o primeiro ficheiro não existe e o segundo existe. Todos os ficheiros são temporários. Esta experiência confirma a diferença de seleção em ansible-core 2.21.4, sem demonstrar a segurança de qualquer pipeline real. Como exercício, desenha um terceiro caminho que incluiria validação de prontidão e explica a evidência necessária antes de aceitar a release.
Resumo: seleção não implementa dependências
Tags são filtros de execução, não um modelo automático de dependências ou autorização. Always pode ser explicitamente ignorada e never pode executar quando uma tag correspondente é pedida; nenhuma é uma barreira de segurança por si só. Se uma pipeline permite deploy sem readiness, a aceitação fica por demonstrar, mesmo que todos os passos selecionados terminem sem erro. Define os modos autorizados e valida as suas pré-condições, observações e decisões. Na passagem para operação, regista o comando e a seleção efetiva. Liga esta aula às tarefas assíncronas e aos resultados por item: uma conclusão global só é útil quando o âmbito e os critérios são conhecidos.
# Both levels need selection under --tags release.
- name: Release steps
ansible.builtin.include_tasks:
file: release.yml
apply:
tags: release
tags: release
# Validate the selected path and its acceptance checks separately.Uma tag no include dinâmico pode selecionar apenas o include. apply.tags e a seleção do próprio include cobrem níveis diferentes.
Armadilhas comuns
Assumir herança automática em includes; escolher ficheiros estáticos com valores ainda indisponíveis; confiar só em list-tasks; tratar always como autorização.
Tópicos relacionados: Inventário e contexto de execução · Orquestração por lotes · Falhas e recuperação
Selecionar uma tarefa não prova que as dependências e validações também executaram. Explicita o caminho, os limites e as condições de retoma.
Referência: Tags · Ansible community 14 / ansible-core 2.21 documentation consulted 2026-09-30; executor, collection and plugin compatibility requires confirmation