Ansible na prática #3 – condicionais na estrutura de um playbook

Provisionando um laboratório para estudar o Ansible e outras coisas

Por:  Adelmo da Silva – consultor de sistemas

Depois de adquirirmos conhecimento sobre algo, é natural que continuemos a evolução deste conhecimento. No último artigo, mostrei a estrutura e como funciona um Playbook. Já entendemos como é um Playbook e como executá-lo. Hoje, vamos dar mais um passo. Vamos realizar a instalação de dois pacotes no Linux, com a diferença de que teremos uma condição: Se for no Debian, será o apache2, se for no Oracle Linux, será o httpd. Com isso, podemos “programar” o Ansible para tomar decisões de acordo com o ambiente onde tal pacote será instalado. Com isso, damos ao Ansible o poder de decisão em tarefas para sistemas diferentes.

Vamos ensinar o Ansible a tomar decisões

Imagine uma situação onde é necessário instalar o serviço em um parque de 40 servidores, entre eles, Debian e Oracle Linux. Alguns pacotes de um mesmo serviço possuem nomes diferentes. Um exemplo clássico é o Apache. Nas distros da família Debian (Ubuntu, Linux Mint, PopOS!, etc…) utilizam o APT com o pacote APACHE2 para instalar o serviço Apache. Já nas famílias RedHat (CentOS, Oracle Linux, AlmaLinux, etc…) utilizam o YUM com o pacote HTTPD para instalação desse serviço.

new_cognito

Com o Ansible podemos fazer com que o Ansible tome uma decisão para instalar o Apache utilizando o pacote específico de cada família. Para isso, vamos dar uma olhada no playbooks abaixo:

– name: Instalar Apache em servidores Debian e RedHat

  hosts: webservers

new_cognito

  become: yes

  tasks:

  – name: Instalar Apache em Debian

    apt:

new_cognito

      name: apache2

      state: present

      update_cache: yes

    when: ansible_os_family == “Debian”

new_cognito

 

  – name: Instalar Apache em RedHat

    yum:

      name: httpd

new_cognito

      state: present

    when: ansible_os_family == “RedHat”

 

Repare que temos dois novos itens: o módulo WHEN e a variável ANSIBLE_OS_FAMILY.

new_cognito

O módulo WHEN tem a função de fazer uma verificação, baseado em uma condição. Se esta condição foi satisfeita, ele executa o comando da tarefa.

A variável ANSIBLE_OS_FAMILY identifica a qual família Linux o sistema operativo pertence. Essa variável torna-se, nesta tarefa, um auxiliar vital para que a condição do WHEN seja verificada.

Neste Playbook, temos duas condicionais when: ansible_os_family == “Debian” e “when: ansible_os_family == “RedHat”. Em ambas, a condição faz o seguinte:

Se a família do sistema operacional for igual a Debian, execute sudo apt install -y apache2.

new_cognito

Se a família do sistema operacional for igual a RedHat, execute sudo yum install -y httpd.

Com isso, a instalação ocorrerá de acordo com o sistema operativo. Podemos, também, adicionar condições para que cada serviço seja iniciado de acordo com seu sistema. Neste caso, adicionaremos estas duas tarefas para iniciar o Apache tanto no Debian, quanto no Oracle Linux:

– name: Habilitar e iniciar o serviço Apache em Debian

    systemd:

new_cognito

      name: apache2

      state: started

      enabled: yes

    when: ansible_os_family == “Debian”

new_cognito

 

– name: Habilitar e iniciar o serviço Apache em RedHat

    systemd:

      name: httpd

new_cognito

      state: started

      enabled: yes

    when: ansible_os_family == “RedHat”

Veja que o módulo SYSTEMD, que é módulo para gerenciar serviços no Linux, possui o nome do serviço de cada sistema operativo. A opção STATE indica que o serviço deve ser iniciado (STARTED). Por fim, a opção ENABLE, indica que os serviços devem ser habilitados para carregar depois do boot do sistema. O módulo WHEN é um módulo de decisão e que pode ser usado para qualquer outra aplicação que se precisa de condicional. Por exemplo, se a saída de uma tarefa for bem sucedida, a próxima poderá ser executada. Caso contrário, não seria executada. Caso queira se aprofundar mais, leia a documentação do Ansible sobre condicionais aqui: https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_conditionals.html

new_cognito

Pronto. Assim, fazemos com que o Ansible tome decisão de instalação do mesmo pacote em sistemas diferentes, nos dando tempo para um delicioso cafezinho.

 

Partilhar artigo:

Versao3 - Cópia

Somos um portal de notícias, voltado às tecnologias de informação e inovação tecnológica. Informamos com Rigor, Objectividade e Imparcialidade. Primamos pela qualidade, oferecendo aos nossos leitores, a inclusão tecnológica e a literacia digital

+(244) 930747817

info@pti.ao | redaccao@pti.ao

Mais Lidas

Últimos Artigos

Desenvolvido Por SP Media