Testando e validando suas Roles do Ansible com o Molecule

Testando e validando suas Roles do Ansible com o Molecule

Hoje, no blog da 4Linux, vamos falar sobre como podemos testar as nossas Roles antes de serem aplicadas no ambiente de produção.

O Molecule é um projeto que permite que você teste sua Role e playbooks em várias possibilidades de cenários, garantindo que funcionem corretamente em diferentes combinações de sistemas operacionais e ambientes de virtualização. Sem ele, você teria que provisionar e manter um ambiente de teste separadamente, além configurar a conectividade para essas instâncias e garantir que estejam limpas e prontas antes de cada teste. O Molecule gerencia esses aspectos para você de maneira automatizada.

Neste post, vamos usar o Molecule para desenvolver e testar a configuração simples de um site com o Apache2 e testar se a página está online. O Molecule vai provisionar o ambiente através do Vagrant, onde ele criará uma VM com o Ubuntu e onde vamos executar nossa playbook.

Para facilitar, o código desse ambiente está versionado no GitHub: https://github.com/silvemerson/blog4linux-ansibile-molecule

Vamos lá!!!

INICIALIZANDO AMBIENTE

Pré-requisitos:

Python 2.7 ou superior

Ansible 2.9 ou superior

Molecule 3.5.2

A instalação do Molecule é fácil, basta executar o comando abaixo:

$ pip3 install molecule && pip install python-vagrant

Agora vamos criar a nossa primeira role.

$ molecule init role molecule-4linux

Dentro da role, o Molecule cria um diretório com a seguinte estrutura:

O que cada file faz:

INSTALL: instrução de instalação.

molecule.yml: arquivo de configuração do ambiente de teste.

converge.yml: arquivo onde é apontada qual playbook será executada.

verify.yml: ele é executado depois do converge.yml e valida as configurações provisionadas do ambiente de teste.

create.yml: arquivo de criação de ambiente no cenário default.

destroy.yml: arquivo que destrói o ambiente no cenário default.

 

Ele vai criar um cenário chamado default. O Molecule permite que sejam criados múltiplos cenários, possibilitando assim uma organização com os tipos de ambientes em que será executado o teste. Pode ser que você tenha um ambiente na GCP, AWS ou em VMWare.

Para o nosso laboratório, vamos inicializar um cenário com o Vagrant:

$ molecule init scenario 4linux –driver-name vagrant

Onde criamos um cenário chamado 4Linux e que o nosso provider será o Vagrant.

Então, assim ficará a árvore de diretórios do Molecule:

CONFIGURAÇÃO

Como mencionado anteriormente, vamos utilizar o Vagrant para provisionar uma máquina com o VirtualBox. O arquivo que vai ser configurado para esse provisionamento é o molecule.yml dentro do cenário 4Linux.

dependency:

name: galaxy

driver:

name: vagrant

platforms:

– name: 4linux

hostname: 4linux-molecule

box: bento/ubuntu-20.04

memory: 1024

cpus: 1

name: nome do nosso ambiente

hostname: nome da VM

box: a imagem do Ubuntu Focal

memory: definimos 1GB para essa máquina

cpu: quantidade de núcleos para esse ambiente

Arquivo pode ser personalizado para outras distribuições de SO, quantidade de CPU e memória.

 

Testando Playbook

O Molecule possui alguns comandos para melhor gerenciarmos e validar cada etapa dos testes. Para o post não ficar muito extenso, vamos focar no test, converge e destroy.

O primeiro comando que vamos testar é o test. Ele vai criar a nossa infraestrutura, testar a playbook e depois destruir o nosso ambiente de forma automatizada. Se ele identificar qualquer problema nas nossas tasks, será exibido no terminal um output com o erro identificado.

$ molecule test –scenario-name 4linux

Outro comando é o converge:

$ molecule converge –scenario-name 4linux

Esse possibilita que nosso ambiente de teste seja criado e possamos acessá-lo. Ele cria, por padrão, no diretório “.cache/molecule/“, mas, para facilitar, podemos utilizar o Vagrant para localizar
a nossa máquina:

$ vagrant global-status

 

id       name            provider    state   directory

——————————————————————————————————————————-

9c9a2f0 4linux-molecule virtualbox running /home/emerson/.cache/molecule/molecule-4linux/4linux

 

Então, basta acessá-la:

$ vagrant ssh 9c9a2f0

Pronto, veja que o site foi configurado corretamente no servidor após a validação com o curl.

Bom, agora que vamos para nosso último comando, que é o destroy. Este é bem sugestivo, vai destruir a nossa infraestrutura de teste.

$ molecule destroy –scenario-name 4linux

Por hoje é só, pessoal. Esse é o módulo do Ansible chamado Molecule, com ele podemos fazer uma infinidade de testes, implementar em um stage de teste de uma pipeline de infraestrutura e muito mais. Testem e explorem esse ótimo projeto.

Não se esqueçam de compartilhar em suas redes sociais.

Referências:

Geerling, Jeff. Ansible for DevOps: Server and configuration management for humans. Edição 2º. 2015.
https://github.com/ansible-community/molecule-vagrant

 

Líder em Treinamento e serviços de Consultoria, Suporte e Implantação para o mundo open source. Conheça nossas soluções:

CURSOSCONSULTORIA

Anterior Curso de Rancher da 4Linux: Atualizado e Ampliado para 40 horas de aula
Próxima Curso de Segurança para Kubernetes: Amplie seus conhecimentos com a 4Linux

About author

Emerson Silva
Emerson Silva 10 posts

Desenvolvedor de Infraestrutura e Monitoramento, atua como Analista de Infraestrutura na 4Linux, entusiasta DevOps e apaixonado por software livre

View all posts by this author →

Você pode gostar também

Infraestrutura TI

Domine o Vim: o editor de texto essencial para Sysadmins Linux

Para um Sysadmin Linux, possuir domínio de editores de texto via linha de comando é imprescindível. Constantemente temos a necessidade de alterar arquivos, visualizar  o contéudo, abrir mais de um

Infraestrutura TI

Previsão de problemas e tendências com Zabbix 3.0: Guia prático

A partir da versão 3.0 do Zabbix dois novos recursos, o forecast e timeleft, permitem fazer previsões sobre análise de dados coletados e criar alertas que antecipem problemas em potenciais.

DevOps

Desvendando o DevOps: Entenda a Integração, Entrega e Implantação Contínua

Continuous Integration (Integração Continua), Continuous Delivery (Entrega Continua) e Continuous Deployment (Implantação Continua) são práticas DevOps muito populares nos últimos anos, mas o que são e as diferenças entre elas