Como cobrem o Ansible com testes?
sobes.tech IA
Resposta da IA
Utilizo várias abordagens principais:
-
Verificação de sintaxe:
Verifica a correção da sintaxe dos playbooks e roles antes de serem executados.# Verificação de sintaxe do playbook ansible-playbook --syntax-check playbook.yml -
Idempotência:
Verifica se a execução repetida do playbook não altera o estado do sistema após a primeira execução bem-sucedida.# Executar o playbook ansible-playbook playbook.yml # Repetir execução com a flag --check para verificar alterações ansible-playbook playbook.yml --checkA saída deve mostrar
changed=0 run=true. -
Molecule:
Framework para testar roles do Ansible localmente ou remotamente. Permite executar vários cenários de teste (linting, idempotência, testes de funções).# Inicializar Molecule no diretório do role molecule init scenario -r default # Executar testes do Molecule molecule test -
Testes a nível de sistema (Functional Testing):
Verificam se o sistema após aplicar o Ansible está no estado esperado. Uso:- Testinfra: Verifica o estado de hosts e serviços após aplicar a configuração.
- InSpec: Framework Ruby para testar o estado do sistema usando DSL.
No Molecule, pode-se integrar Testinfra:
# seção platforms em molecule/default/molecule.yml platforms: - name: instance image: image_name # ... outras configurações de plataforma # seção verifier verifier: name: testinfra options: v: TrueExemplo de teste com Testinfra (
tests/test_default.py):# importar testinfra def test_nginx_instalado(host): # Verifica se o pacote nginx está instalado nginx = host.package("nginx") assert nginx.is_installed def test_nginx_em_execução(host): # Verifica se o serviço nginx está em execução nginx = host.service("nginx") assert nginx.is_running def test_nginx_escuta_na_porta_80(host): # Verifica se o nginx escuta na porta 80 assert host.socket("tcp://0.0.0.0:80").is_listening -
Integração CI/CD:
Automatizo a execução de testes na pipeline CI/CD após cada commit ou Pull Request. Por exemplo, usando Jenkins, GitLab CI, GitHub Actions.
A escolha de uma abordagem específica depende da complexidade do role/playbook e dos requisitos de cobertura de testes. Normalmente, uso uma combinação desses métodos.