Ansible, o poliglota

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

Por: Adelmo da Silva – consultor de sistemas

É natural que em uma infra-estrutura existam dois ou mais Sistemas Operacionais compondo um projecto, ou a rede de uma empresa. E isso é comum. Depende das necessidades de cada empresa, ou sector desta empresa. Já vi clusters com 12 VMs (máquinas virtuais) composto por Oracle Linux e Ubuntu Server onde estava funcionando aplicações e serviços normalmente. Serviços como APACHE ou MYSQL, a funcionar em ambos servidores e com as mesmas configurações. E, sem mencionar que em projectos, no mínimo, existem três ambientes:Produção, Homologação e Dev. Ou seja, neste exemplo, serão 03 clusters, um para cada ambiente. Serão 36 VMs para que o produto/serviço seja o mesmo em todos os ambientes e tenha o mesmo desempenho.

Créditos: D.R

new_cognito

Agora, imagine uma situação onde o time de desenvolvimento solicita a actualização dos serviços Apache em todos os servidores de Homologação e Produção, pois estão com uma versão diferente do que está em Dev, que é a versão mais actual. Seriam 24 VMs para actualizar utilizando tanto o gestor de pacotes YUM (Oracle Linux) e APT (Ubuntu Server). A Instalação de pacote por pacote, considerando o login, o tempo de download e instalação por servidor, dura pelo menos uns 2 minutos sendo bem ágil, totalizando 48 minutos nos 24 servidores. Nesse tempo, o cafezinho já esfriou. 🙁

No Ubuntu, utilizamos o seguinte comando para actualizar o Apache:

sudo apt-get upgrade apache2

Já no Oracle Linux, o comando é:

new_cognito

sudo yum update httpd

O Apache, apesar de ser a mesma aplicação, possui nomes diferentes no Ubuntu Server (família Debian) e no Oracle Linux (família RedHat). No Ubuntu Server o pacote se chama APACHE2 e no Oracle Linux se chama HTTPD.

No Ansible, seria normal criarmos um playbook para cada sistema, por exemplo: install_apache_ubuntu.yaml e install_apache_oraclelinux.yaml. Mas, isso não seria efectivo, seria sim mais um trabalho. O Ansible é poliglota, consegue falar com, praticamente, qualquer sistema operacional. Ele possui um módulo chamado WHEN, que cria um loop de decisão baseado na família de distribuição. Caso seja da família RedHat, o Ansible executará a instalação usando o YUM e, consequentemente, o pacote HTTPD. Caso seja a família Debian, será executada a instalação usando o APT e, consequentemente, o pacote APACHE2. Observe este playbook:

new_cognito

name: Actualizando o Apache

  hosts: env-homolog, env-dev

  become: true

  tasks:

new_cognito

    – name: Actualizando o Apache no Oracle Linux

      when: ansible_os_family == ‘RedHat’

      yum:

        name: httpd

new_cognito

        state: latest

 

    – name: Actualizando o Apache no Ubuntu

      when: ansible_os_family == ‘Debian’

new_cognito

      apt:

        name: apache2

        state: latest

 

new_cognito

    – name: Reiniciando o Serviço Apache

      service:

        name: “{{ ‘httpd’ if ansible_os_family == ‘RedHat’ else ‘apache2’ }}”

        state: restarted

new_cognito

        enabled: true

Neste exemplo, o módulo WHEN utiliza a variável ANSIBLE_OS_FAMILY para identificar a qual família o sistema operacional pertence. Assim que for identificado, será executado o comando de actualização correspondente. A opção STATE solicita que seja aplicada a última versão do pacote (LATEST). E, de quebra, ainda faz um restart no serviço, de acordo com a família do sistema, para garantir que a actualização seja aplicada. A saída deste playbook será assim:

PLAY [Actualizando o Apache] **************************************************************************************

 

new_cognito

TASK [Gathering Facts] **********************************************************************************************

ok: [oracle_server01]

ok: [oracle_server02]

ok: [oracle_server03]

new_cognito

ok: [oracle_server04]

ok: [oracle_server05]

ok: [oracle_server06]

ok: [ubuntu_server01]

new_cognito

ok: [ubuntu_server02]

ok: [ubuntu_server03]

ok: [ubuntu_server04]

ok: [ubuntu_server05]

new_cognito

ok: [ubuntu_server06]

 

TASK [Actualizando o Apache no Oracle Linux] *******************************************************************

changed: [oracle_server01]

new_cognito

changed: [oracle_server02]

changed: [oracle_server03]

changed: [oracle_server04]

changed: [oracle_server05]

new_cognito

changed: [oracle_server06]

 

TASK [Actualizando o Apache no Ubuntu] *************************************************************************

changed: [ubuntu_server01]

new_cognito

changed: [ubuntu_server02]

changed: [ubuntu_server03]

changed: [ubuntu_server04]

changed: [ubuntu_server05]

new_cognito

changed: [ubuntu_server06]

 

TASK [Reiniciando o Serviço Apache] ***********************************************************************

changed: [oracle_server01]

new_cognito

changed: [oracle_server02]

changed: [oracle_server03]

changed: [oracle_server04]

changed: [oracle_server05]

new_cognito

changed: [oracle_server06]

changed: [ubuntu_server01]

changed: [ubuntu_server02]

changed: [ubuntu_server03]

new_cognito

changed: [ubuntu_server04]

changed: [ubuntu_server05]

changed: [ubuntu_server06]

 

new_cognito

PLAY RECAP *********************************************************************************************************

oracle_server01              : ok=4    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

oracle_server02              : ok=4    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

oracle_server03              : ok=4    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

new_cognito

oracle_server04              : ok=4    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

oracle_server05              : ok=4    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

oracle_server06              : ok=4    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

ubuntu_server01              : ok=4    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

new_cognito

ubuntu_server02              : ok=4    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

ubuntu_server03              : ok=4    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

ubuntu_server04              : ok=4    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

ubuntu_server05              : ok=4    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

new_cognito

ubuntu_server06              : ok=4    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Feito! Tudo pronto em menos de 2 minutos, uma vez que o pacote do Apache, em média, tem 231.5 kB de tamanho.

Lembrete: para que o Ansible faça a instalação do mesmo pacote em sistemas operacionais diferentes, basta saber qual é o nome do pacote em cada sistema.

Pronto! Mais uma demanda fechada rapidamente, de forma efectiva e com tempo para tomar um delicioso cafezinho. Ansible é demais!

new_cognito

 

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