En este módulo, aprenderemos sobre la importancia de las pruebas en el desarrollo de código Ansible y cómo implementarlas de manera efectiva. Las pruebas aseguran que nuestros playbooks, roles y módulos funcionen como se espera y que cualquier cambio no introduzca errores inesperados.
Objetivos de Aprendizaje
- Comprender la importancia de las pruebas en Ansible.
- Conocer las herramientas y técnicas para probar código Ansible.
- Implementar pruebas unitarias y de integración para playbooks y roles.
- Automatizar las pruebas de Ansible.
- Importancia de las Pruebas en Ansible
Las pruebas son esenciales para:
- Garantizar la calidad: Aseguran que el código funcione como se espera.
- Prevenir regresiones: Detectan errores introducidos por cambios recientes.
- Facilitar el mantenimiento: Hacen que el código sea más fácil de mantener y actualizar.
- Mejorar la confianza: Proporcionan confianza en que el código es robusto y fiable.
- Herramientas para Probar Código Ansible
2.1 Ansible Lint
Ansible Lint es una herramienta que analiza playbooks y roles para detectar errores comunes y malas prácticas.
Instalación:
Uso básico:
2.2 Molecule
Molecule es una herramienta para probar roles de Ansible. Permite realizar pruebas unitarias y de integración en diferentes entornos.
Instalación:
Creación de un escenario de prueba:
molecule init role my_role cd my_role molecule create molecule converge molecule verify molecule destroy
2.3 Testinfra
Testinfra es una herramienta para escribir pruebas de infraestructura como código. Se integra bien con Molecule.
Instalación:
Ejemplo de prueba con Testinfra:
- Implementación de Pruebas
3.1 Pruebas Unitarias
Las pruebas unitarias se centran en probar componentes individuales, como tareas o módulos específicos.
Ejemplo de prueba unitaria:
- name: Ensure nginx is installed apt: name: nginx state: present register: result - name: Check if nginx was installed assert: that: - result.changed
3.2 Pruebas de Integración
Las pruebas de integración verifican que diferentes componentes funcionen juntos como se espera.
Ejemplo de prueba de integración con Molecule:
# molecule/default/molecule.yml --- dependency: name: galaxy driver: name: docker platforms: - name: instance image: "geerlingguy/docker-ubuntu1804-ansible:latest" pre_build_image: true provisioner: name: ansible lint: | set -e ansible-lint verifier: name: testinfra lint: | set -e flake8
- Automatización de Pruebas
4.1 Integración Continua (CI)
Integrar las pruebas en un pipeline de CI/CD asegura que se ejecuten automáticamente con cada cambio en el código.
Ejemplo de configuración de CI con GitHub Actions:
# .github/workflows/ci.yml name: CI on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v2 with: python-version: '3.8' - name: Install dependencies run: | python -m pip install --upgrade pip pip install ansible-lint molecule[docker] testinfra - name: Run Molecule tests run: | cd my_role molecule test
- Ejercicios Prácticos
Ejercicio 1: Usar Ansible Lint
- Instala Ansible Lint.
- Crea un playbook con errores comunes.
- Ejecuta Ansible Lint y corrige los errores detectados.
Solución:
pip install ansible-lint # playbook.yml --- - name: Example playbook hosts: localhost tasks: - name: Install nginx apt: name: nginx state: present ansible-lint playbook.yml
Ejercicio 2: Crear y Probar un Rol con Molecule
- Instala Molecule.
- Crea un nuevo rol con Molecule.
- Escribe pruebas para el rol usando Testinfra.
- Ejecuta las pruebas con Molecule.
Solución:
pip install molecule[docker] molecule init role my_role cd my_role # molecule/default/tests/test_default.py def test_nginx_installed(host): nginx = host.package("nginx") assert nginx.is_installed molecule create molecule converge molecule verify molecule destroy
Conclusión
En esta sección, hemos aprendido sobre la importancia de las pruebas en Ansible y cómo implementarlas utilizando herramientas como Ansible Lint, Molecule y Testinfra. Las pruebas aseguran que nuestro código sea robusto, fiable y fácil de mantener. Además, hemos visto cómo automatizar las pruebas utilizando pipelines de CI/CD, lo que nos permite detectar errores de manera temprana y mantener la calidad del código a lo largo del tiempo.
En el siguiente módulo, exploraremos temas avanzados de Ansible, incluyendo la creación de módulos personalizados y el uso de inventarios dinámicos.
Ansible: De Principiante a Avanzado
Módulo 1: Introducción a Ansible
Módulo 2: Conceptos Básicos de Ansible
Módulo 3: Playbooks
- Introducción a los Playbooks
- Escribiendo tu Primer Playbook
- Estructura del Playbook
- Variables y Hechos
- Condicionales y Bucles
Módulo 4: Roles
Módulo 5: Técnicas Avanzadas de Playbook
Módulo 6: Ansible Galaxy
Módulo 7: Ansible Tower
- Introducción a Ansible Tower
- Instalando Ansible Tower
- Usando Ansible Tower
- Gestionando Proyectos e Inventarios
Módulo 8: Ansible para DevOps
Módulo 9: Mejores Prácticas de Ansible
- Organización del Código
- Mejores Prácticas de Seguridad
- Ajuste de Rendimiento
- Pruebas de Código Ansible