Se você precisa executar tarefas do Ansible com base em condições diferentes, está prestes a ter uma ótima experiência. O Ansible when
e outras condicionais permitem avaliar condições, como com base no sistema operacional, ou se uma tarefa depende da tarefa anterior.
Neste tutorial, você aprenderá como trabalhar com o Ansible when
e outras condicionais para executar tarefas sem complicar as coisas.
Vamos lá!
Pré-requisitos
Este tutorial inclui exemplos práticos. Se você quiser acompanhar, certifique-se de ter o seguinte em funcionamento:
- Um host controlador Ansible – Este tutorial usa o Ansible v2.9.24 hospedado em uma máquina Ubuntu 18.04.5 LTS.
- A remote computer to run commands.
- Você precisará de um arquivo de inventário configurado e um ou mais hosts já configurados para executar comandos e playbooks do Ansible. O tutorial usará um grupo de inventário chamado web.
Trabalhando com o when
do Ansible com Múltiplas Tarefas no Playbook
Ter várias tarefas em um playbook pode ser cansativo se todas forem executadas sem condições específicas. Vamos começar este tutorial definindo as condições do Ansible when
no playbook do Ansible com múltiplas tarefas.
1. Abra um terminal no host do controlador do Ansible.
2. Execute os comandos abaixo para criar um diretório e dar-lhe o nome que preferir em seu diretório pessoal, e navegue até esse diretório.
Para este exemplo, o diretório é chamado de ansible_when_condition_demo
. Este diretório conterá o playbook que você usará para invocar a condição when
dentro da tarefa do Ansible.
3. No seu editor de código preferido, crie um arquivo YAML no diretório ~/ansible_when_condition_demo. Neste exemplo, o arquivo é chamado my_playbook.yml. Copie e cole o conteúdo do playbook YAML abaixo para o arquivo my_playbook.yml.
Em ambas as tarefas abaixo (Tarefa-1
e Tarefa-2
), as condições when
verificam em qual sistema operacional cada host remoto está. O resultado é então passado para a variável de espaço reservado ansible_os_family
em cada tarefa.
Se o valor dos marcadores de posição ansible_os_family
for igual a RedHat
ou Debian
, então o Ansible executa uma das tarefas para instalar o Apache.
4. Agora execute o comando ansible-playbook
abaixo para executar as tarefas definidas no playbook (my_playbook.yml) no host remoto, definido em seu arquivo de inventário existente.
Na captura de tela abaixo, você pode ver que:
- A primeira TAREFA retornou um status OK, o que mostra que a tarefa não requer nenhuma alteração.
- A segunda TAREFA retornou o status de pular. Quando a condição não é atendida, a tarefa será ignorada.
- A terceira TAREFA retornou um status de alterado, indicando que o host remoto não estava no estado adequado (ou seja, o Apache não está presente) e foi modificado para instalar o Apache.

5. Abra uma sessão SSH no host remoto, que foi o alvo do playbook do Ansible, usando seu cliente SSH favorito para verificar se o Apache está instalado e em execução.
6. Por fim, execute o comando service
abaixo para verificar se o Apache está instalado (status apache2
) no host remoto.
Como você pode ver abaixo, você instalou o serviço Apache na máquina remota.

Trabalhando com when
e loops do Ansible
Anteriormente, você executou tarefas do Ansible de acordo com um when
do Ansible para um parâmetro específico, como ansible_os_family
. Mas talvez você precise verificar uma condição com vários parâmetros definidos em uma lista. Se for o caso, tente adicionar um loop
em uma tarefa.
Abra o arquivo my_playbook.yml que você criou anteriormente (passo três em “Trabalhando com Ansible when
com Múltiplas Tarefas no Playbook”). Substitua o conteúdo do arquivo my_playbook.yml pelo código abaixo.
A tarefa no código abaixo (Tarefa-1
) executa um loop
onde a condição do when
verifica se o valor do item é maior que cinco e retorna o resultado.
Agora execute o comando abaixo para executar o playbook, assim como fez anteriormente.
Abaixo, você pode ver a tarefa retornando o status pular quando a condição é falsa e o status alterado quando a condição é verdadeira.

when
condition for multiple parameters Trabalhando com o Ansible when
e os facts
do Ansible
Talvez você queira adicionar várias condições para executar uma tarefa. Se for o caso, aprenda como utilizar os facts do Ansible dentro da condição when
. Os facts do Ansible permitem adicionar uma declaração condicional para executar tarefas com base em fatos coletados, como seu sistema operacional, endereços IP, sistemas de arquivos conectados e muito mais.
Substitua o conteúdo do arquivo my_playbook.yml pelo código abaixo.
No código abaixo, ambas as tarefas (Task-1
e Task-2
) só são executadas (desligamento do sistema) quando uma das condições abaixo é verdadeira:
- Ambos os valores
distribution
edistribution_major_version
retornaram um valor verdadeiro. - O valor de
os_family
é igual aCentOS
.
Execute o playbook como fez anteriormente com o comando abaixo.
Observe abaixo que ambas as tarefas mostram o status pular, pois você está no Ubuntu. A tarefa só é executada se estiver no CentOS.

Trabalhando com Ansible when
Baseado em Valores Registrados
Às vezes você deseja executar ou pular uma tarefa com base no resultado de uma tarefa anterior em um playbook. Por exemplo, você pode querer configurar um serviço após uma atualização de tarefa anterior. Nesse caso, use uma variável registrada. Uma variável registrada permite que você registre o resultado da tarefa anterior como uma variável e a use para a próxima tarefa como entrada.
1. Crie um diretório vazio chamado /home/ubuntu/hello.
2. Substitua o conteúdo do arquivo my_playbook.yml com o código abaixo, que realiza o seguinte:
A primeira tarefa (Tarefa-1
) lista o conteúdo (arquivos e subdiretórios) do diretório /etc/hosts
na memória e salva esse resultado na variável contents1
via o comando register
.
A segunda tarefa (Tarefa-2
) lista o conteúdo (atualmente vazio) do diretório /home/ubuntu/hello na memória e salva essa lista na variável contents2
.
A terceira tarefa (Tarefa-3
) verifica e imprime uma mensagem “O diretório está vazio” se o resultado registrado para a variável contents1
ou contents2
estiver vazio.
A propriedade
stdout
da variávelcontents1
econtents2
é a saída do shell salva a partir do resultado da execução dos comandos da tarefa.
3. Por fim, execute o playbook com o comando ansible-playbook
abaixo.
Como mostrado abaixo, como o resultado registrado para a variável contents2
está vazio, a terceira tarefa retorna a mensagem O diretório está vazio.

Ansible when
based on registered values Trabalhando com o when
do Ansible em Funções do Ansible
Neste exemplo final, você aprenderá como o when
do Ansible funciona dentro de Funções do Ansible roles
. As roles
do Ansible permitem que você reutilize configurações padrão e faça implantações mais rápidas. Continue lendo para aprender como uma tarefa invoca roles
do Ansible apenas se a condição do when
do Ansible for verdadeira.
1. Execute os comandos abaixo para criar um diretório chamado ~/ansible_role_when_demo em seu diretório pessoal e mude para esse diretório como o diretório de trabalho. O diretório ~/ansible_role_when_demo conterá os arquivos de demonstração deste exemplo.
2. Em seguida, execute os comandos abaixo para criar um diretório ~/ansible_role_when_demo/roles e ~/ansible_role_when_demo/roles/java/tasks.
Abaixo está o que cada diretório conterá:
- O diretório ~/ansible_role_when_demo/roles conterá a função que você precisa implantar.
Por padrão, o Ansible procura funções em dois locais: em um diretório chamado roles/ dentro do diretório onde o playbook reside ou em /etc/ansible/roles. Se você deseja armazenar funções em caminhos diferentes, declare os caminhos usando o parâmetro
- role:
no playbook.
- O diretório ~/ansible_role_when_demo/roles/java/tasks conterá um arquivo main.yml que você precisará implantar uma função.
Agora, crie um arquivo chamado main.yml no diretório ~/ansible_role_when_demo/roles/java/tasks, depois copie e cole o código do playbook abaixo para o arquivo main.yml.
O playbook abaixo instala o Java no nó remoto onde é executado com o módulo apt.
4. Crie outro arquivo YAML com um nome de sua preferência e copie/cole o código abaixo. Para este exemplo, o arquivo é nomeado ~/ansible_role_when_demo/java-setup.yml.
O código abaixo implementa a role
do Ansible (java
) para o usuário remoto (ubuntu
) que possui acesso administrativo apenas quando o usuário remoto estiver no sistema operacional Debian.
5. Execute o comando tree
para verificar se todas as pastas e arquivos necessários existem no diretório ~/ansible_role_when_demo.

6. Por fim, execute o playbook com o comando ansible-playbook
abaixo. ansible-playbook java-setup.yml
Abaixo, a tarefa retornou um status changed, indicando que o Java foi instalado com sucesso, pois o nó remoto está em um sistema operacional Debian. Executando o playbook do Ansible usando
Ansible when
com funções do Ansible

Ansible when
with Ansible roles Conclusão
Neste tutorial, você aprendeu diferentes maneiras de usar o Ansible when
e outras condicionais. Você também aprendeu como aplicar condições do Ansible when
, desde tarefas básicas utilizando facts
do Ansible até a implantação de roles
do Ansible.
Agora, como você ampliaria esse conhecimento recém-adquirido? Talvez economizando tempo configurando vários servidores com modelos do Ansible enquanto aplica condições do Ansible when
?