Un playbook de Ansible es un archivo que contiene una serie de tareas y configuraciones que Ansible debe ejecutar en los sistemas de destino. Estos archivos son escritos en formato YAML (YAML Ain’t Markup Language), que es un lenguaje legible por humanos, y describen las acciones que deben realizarse en los equipos administrados.
Estructura básica de un Playbook
Relacionado: IDOR. Ansible. Herramientas. Nginx. CENT.
Un playbook de Ansible tiene una estructura jerárquica definida que incluye los siguientes elementos clave:
-
Hosts: Define en qué grupos o máquinas se va a ejecutar el playbook. Los hosts son especificados en el archivo de inventario de Ansible (usualmente
/etc/ansible/hosts). -
Tareas (Tasks): Son las acciones que Ansible ejecutará. Cada tarea está asociada con un módulo que realiza una función específica, como copiar un archivo, instalar un paquete o ejecutar un comando.
-
Módulos: Son las herramientas que realiza Ansible para ejecutar tareas, como
apt,yum,copy,file,command, entre otros. -
Variables: Se utilizan para almacenar valores que se pueden reutilizar a lo largo del playbook, lo que permite hacer el playbook más dinámico.
-
Roles: Son una forma de organizar el código dentro de un playbook en unidades reutilizables. Los roles permiten que la configuración y las tareas relacionadas estén contenidas en una estructura de directorios.
-
Handlers: Son tareas especiales que se ejecutan solo si se detecta un cambio en alguna tarea anterior. Son útiles para reiniciar servicios después de aplicar configuraciones, por ejemplo.
Ejemplo de un Playbook Simple
Aquí te presento un ejemplo básico de un playbook en Ansible que instala y configura un servicio web (por ejemplo, nginx) en varias máquinas.
---
- name: Configurar servidor web Nginx
hosts: web_servers # Se ejecutará en el grupo "web_servers"
become: yes # Indica que se deben usar privilegios de superusuario
tasks:
- name: Instalar Nginx
apt:
name: nginx
state: present # Asegura que el paquete esté instalado
notify:
- Reiniciar Nginx # Llama al handler para reiniciar el servicio
- name: Copiar archivo de configuración
copy:
src: /local/path/to/nginx.conf
dest: /etc/nginx/nginx.conf
notify:
- Reiniciar Nginx # Llama al handler para reiniciar el servicio
handlers:
- name: Reiniciar Nginx
service:
name: nginx
state: restarted # Asegura que el servicio de Nginx se reinicieExplicación del Playbook
-
Hosts:
hosts: web_serversEsto significa que el playbook se ejecutará en todas las máquinas que estén definidas en el grupo
web_serversdentro del archivo de inventario de Ansible. -
Become:
become: yesEsto indica que las tareas deben ejecutarse con privilegios de superusuario (es decir, utilizando
sudo). -
Tareas:
-
Instalar Nginx: Usa el módulo
aptpara instalar el paquete nginx en las máquinas de destino. Se asegura de que el paquete esté presente (o lo instala si no lo está). -
Copiar archivo de configuración: Utiliza el módulo
copypara transferir un archivo de configuración desde el controlador (máquina que ejecuta Ansible) a las máquinas de destino.
-
-
Notificar Handlers:
La directivanotifyse utiliza para llamar a un handler después de que una tarea se ejecute. En este caso, después de instalar nginx o copiar el archivo de configuración, se notificará al handlerReiniciar Nginxpara que se reinicie el servicio de nginx si hay cambios. -
Handlers:
- Reiniciar Nginx: Este handler reinicia el servicio nginx si alguna de las tareas anteriores hizo un cambio (como instalar el paquete o modificar su archivo de configuración).
Beneficios de usar Playbooks
-
Automatización: Ansible permite automatizar tareas repetitivas de administración de sistemas de forma sencilla y eficiente, lo que ahorra tiempo y esfuerzo.
-
Escalabilidad: Puedes aplicar configuraciones a múltiples servidores a la vez, haciendo que la gestión de infraestructuras grandes sea mucho más fácil.
-
Idempotencia: Ansible asegura que los cambios se apliquen solo cuando sea necesario. Si un servidor ya está configurado correctamente, Ansible no realizará cambios innecesarios, lo que significa que puedes ejecutar el playbook repetidamente sin riesgo de causar inconsistencias.
-
Modularidad: Los playbooks son modulares y pueden ser reutilizados. Puedes escribir tareas de configuración generales en playbooks que luego puedes usar en diferentes entornos o máquinas.
-
Simplicidad: Ansible usa YAML, que es fácil de leer y escribir, lo que lo hace accesible incluso para personas sin experiencia previa en programación o automatización.
Ejemplo de Uso de Variables
Las variables en Ansible permiten que los playbooks sean más flexibles y reutilizables. Un ejemplo con variables podría ser:
---
- name: Instalar Nginx y configurar un sitio web
hosts: web_servers
become: yes
vars:
web_package: nginx
site_name: example.com
tasks:
- name: Instalar el servidor web
apt:
name: "{{ web_package }}"
state: present
- name: Copiar archivo de configuración para el sitio web
copy:
src: "/templates/{{ site_name }}.conf"
dest: "/etc/nginx/sites-available/{{ site_name }}.conf"En este caso, las variables web_package y site_name son definidas en el playbook y luego utilizadas en las tareas, lo que hace que sea más fácil cambiar la configuración sin tener que modificar cada tarea individualmente.
Conclusión
Los playbooks de Ansible son fundamentales para automatizar la configuración de sistemas de forma eficiente y consistente. A través de tareas definidas en YAML, los administradores pueden controlar la configuración de múltiples sistemas de manera centralizada y en paralelo, lo que facilita la gestión de infraestructuras grandes o dinámicas. Los playbooks son idempotentes, lo que asegura que las tareas se realicen solo cuando sea necesario, evitando configuraciones erróneas por ejecuciones repetidas.