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: valor2Desglose 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: restartedExplicación del Ejemplo
- Play: El play se llama "Instalar y configurar Nginx" y se ejecuta en los hosts del grupo
webserverscon privilegios elevados. - Variables: Se define una variable
nginx_portcon el valor80. - Tareas:
- Instalar Nginx: Usa el módulo
aptpara instalar Nginx y notifica al handlerReiniciar Nginx. - Configurar Nginx: Usa el módulo
lineinfilepara 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 Nginxque usa el móduloservicepara 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: restartedRetroalimentació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
varso 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
