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.changed3.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.ymlEjercicio 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 destroyConclusió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
