Molécula - Testando Funções Ansíveis

Bom dia Ansible foi mencionado mais de uma vez em Habré, mas não encontrei artigos sobre o teste de seus papéis usando a molécula, no entanto, acho essa estrutura extremamente conveniente e gostaria de compartilhar isso com o público de Habr.
Mas primeiro, um pouco sobre o que eu usei antes.

Anteriormente, para testar os papéis ansíveis que crio, usei o vagrant, dirigindo diretamente:

$ vagrant init debian/jessie64 $ vagrant up 

Criando máquinas virtuais, depois das quais escrevi inventário e manual para iniciar o papel, até que um dia conheci a molécula.

O que a molécula pode oferecer?


  1. Inicialização inicial da função
  2. Motorista / provedor
  3. Testes de Idempotência
  4. Verificação

Inicialização inicial da função


Se uma nova função for especificada, cria uma estrutura de amostra para a função ansible

Motorista / provedor


A molécula nos permite usar um contêiner do Docker ou uma máquina virtual como cobaia usando o Vagrant. Isso é determinado pela indicação do driver durante a inicialização ou em molecule.yml. Porque Se eu tiver que testar as funções de orquestrar contêineres, o Vagrant continuará sendo o driver preferido para mim. Escolher o Vagrant como um driver também permite selecionar um provedor.

Estão disponíveis os seguintes:

  • Libvirt
  • Parallels
  • VirtualBox (padrão)
  • VMware Fusion

A seguir, consideraremos uma variante do Vagrant com o VirtualBox como provedor.

Testes de Idempotência


De acordo com o wiki:
A propriedade de um objeto ou operação ao aplicar a operação ao objeto novamente fornece o mesmo resultado de quando é único.

Em relação às funções ansíveis, quando a função é reiniciada, nenhuma alteração deve ser feita.

Verificação


Para garantir que a função funcione corretamente, não falhar em nenhuma das tarefas não é suficiente. Afinal, você precisa verificar se os serviços foram iniciados, as portas estão abertas etc.

As seguintes estruturas estão disponíveis para verificação:

  • Goss
  • Serverspec
  • Testinfra (padrão)

Eu fui testado por Goss e Testinfra. Para mim, eu escolhi o Testinfra.

Exemplo de uso:

 $ molecule init --role sample-role 

Após executar este comando, obtemos um diretório de função de amostra com uma estrutura de função ansible típica e os arquivos yaml necessários:

 defaults handlers meta molecule.yml // -  molecule playbook.yml //      README.md tasks tests //    vars 

Você pode iniciar sem especificar a opção --role; nesse caso, os arquivos molecule.yml e playbook.yml serão criados no diretório atual.

Acontece que você precisa garantir que a função funcione em várias distribuições nesse caso, em molecyle.yml, você deve especificar os nomes das caixas vagrantes (nas plataformas):

 vagrant: platforms: - name: jessie64 box: debian/jessie64 - name: centos7 box: centos/7 

Em seguida, adicione as ações / variáveis ​​necessárias, etc. para a função, após o qual testamos em todas as plataformas específicas:

 $ molecule test --platform all 

Após esta molécula:

  • se já houver máquinas virtuais criadas, ele será interrompido e excluído
  • aumentará as máquinas virtuais necessárias
  • testar nosso papel com ansible-lint
  • cumprir nosso papel em contêineres recém-criados
  • testará a idempotência
  • executar testes
  • excluirá máquinas virtuais criadas

Pode ser necessário alterar o comportamento da molécula ao executar o teste, por exemplo, não teste a idempotência; para isso, adicione o seguinte ao molecule.yml:

 molecule: test: sequence: - destroy - syntax - create - converge - verify - destroy 

Você também pode chamar cada uma das etapas correspondentes separadamente, usando o comando apropriado, por exemplo:

 $ molecule create --platform all $ molecule syntax $ molecule create $ molecule converge $ molecule verify 

Como uma opção, não exclua / crie uma nova máquina virtual antes de cada convergência.

Você pode especificar uma plataforma específica e testá-la separadamente:

 $ molecule create --platform jessie64 $ molecule syntax $ molecule create $ molecule converge $ molecule verify 

Obrigado pela atenção!

Source: https://habr.com/ru/post/pt437216/


All Articles