En este tema, aprenderemos sobre la estructura de un playbook en Ansible. Un playbook es un archivo YAML que define una serie de tareas que Ansible debe ejecutar en los hosts especificados. La correcta estructuración de un playbook es crucial para su legibilidad y mantenimiento.
Conceptos Clave
- YAML (YAML Ain't Markup Language): Es el formato en el que se escriben los playbooks. Es un formato de serialización de datos legible para humanos.
- Play: Un play es una lista de tareas que se ejecutan en un grupo de hosts.
- Task: Una tarea es una acción que Ansible ejecuta en los hosts.
- Module: Un módulo es una unidad de trabajo en Ansible, como instalar un paquete o copiar un archivo.
- Handlers: Son tareas que se ejecutan cuando son notificadas por otras tareas.
- Variables: Permiten almacenar valores que pueden ser reutilizados en el playbook.
Estructura Básica de un Playbook
Un playbook típico de Ansible tiene la siguiente estructura:
--- - name: Nombre del Play hosts: nombre_del_grupo_de_hosts become: yes/no vars: variable1: valor1 variable2: valor2 tasks: - name: Nombre de la Tarea 1 module_name: parametro1: valor1 parametro2: valor2 - name: Nombre de la Tarea 2 module_name: parametro1: valor1 parametro2: valor2 handlers: - name: Nombre del Handler module_name: parametro1: valor1 parametro2: valor2
Desglose de la Estructura
- Encabezado (
---
): Indica el inicio de un documento YAML. - Play: Cada play comienza con un guion (
-
) y contiene:name
: Un nombre descriptivo para el play.hosts
: El grupo de hosts en los que se ejecutarán las tareas.become
: Indica si se debe usar privilegios elevados (sudo).vars
: Variables definidas para el play.tasks
: Una lista de tareas a ejecutar.handlers
: Una lista de handlers que pueden ser notificados por las tareas.
Ejemplo Práctico
Vamos a crear un playbook simple que instala Nginx en un grupo de hosts llamado webservers
.
--- - name: Instalar y configurar Nginx hosts: webservers become: yes vars: nginx_port: 80 tasks: - name: Instalar Nginx apt: name: nginx state: present notify: - Reiniciar Nginx - name: Configurar Nginx para escuchar en el puerto {{ nginx_port }} lineinfile: path: /etc/nginx/sites-available/default regexp: 'listen\s+80;' line: 'listen {{ nginx_port }};' notify: - Reiniciar Nginx handlers: - name: Reiniciar Nginx service: name: nginx state: restarted
Explicación del Ejemplo
- Play: El play se llama "Instalar y configurar Nginx" y se ejecuta en los hosts del grupo
webservers
con privilegios elevados. - Variables: Se define una variable
nginx_port
con el valor80
. - Tareas:
- Instalar Nginx: Usa el módulo
apt
para instalar Nginx y notifica al handlerReiniciar Nginx
. - Configurar Nginx: Usa el módulo
lineinfile
para modificar el archivo de configuración de Nginx y notifica al handlerReiniciar Nginx
.
- Instalar Nginx: Usa el módulo
- Handlers: Define un handler llamado
Reiniciar Nginx
que usa el móduloservice
para reiniciar el servicio de Nginx.
Ejercicio Práctico
Ejercicio
Crea un playbook que haga lo siguiente:
- Instale Apache en un grupo de hosts llamado
webservers
. - Configure Apache para que escuche en el puerto
8080
. - Reinicie Apache si se realiza algún cambio en la configuración.
Solución
--- - name: Instalar y configurar Apache hosts: webservers become: yes vars: apache_port: 8080 tasks: - name: Instalar Apache apt: name: apache2 state: present notify: - Reiniciar Apache - name: Configurar Apache para escuchar en el puerto {{ apache_port }} lineinfile: path: /etc/apache2/ports.conf regexp: 'Listen 80' line: 'Listen {{ apache_port }}' notify: - Reiniciar Apache handlers: - name: Reiniciar Apache service: name: apache2 state: restarted
Retroalimentación y Consejos
-
Errores Comunes:
- Indentación Incorrecta: YAML es muy sensible a la indentación. Asegúrate de que todas las líneas estén correctamente indentadas.
- Variables No Definidas: Si usas una variable en tu playbook, asegúrate de definirla en la sección
vars
o en un archivo de variables. - Módulos Incorrectos: Asegúrate de usar el módulo correcto para la tarea que deseas realizar.
-
Consejos Adicionales:
- Comentarios: Usa comentarios (
#
) para explicar partes complejas de tu playbook. - Reutilización de Código: Usa roles y plantillas para reutilizar código y mantener tus playbooks organizados.
- Comentarios: Usa comentarios (
Conclusión
En esta sección, hemos aprendido sobre la estructura básica de un playbook en Ansible, incluyendo cómo definir plays, tareas, variables y handlers. También hemos visto un ejemplo práctico y realizado un ejercicio para reforzar los conceptos. Con esta base, estarás preparado para escribir playbooks más complejos y eficientes en los siguientes módulos.
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