Sintaxis y estructura básica de un playbook
Los playbooks de Ansible son archivos escritos en formato YAML que permiten automatizar tareas complejas mediante una serie de instrucciones organizadas lógicamente. A diferencia del modo ad-hoc, que ejecuta comandos individuales, los playbooks permiten definir múltiples tareas secuenciales aplicables a uno o más hosts gestionados.
---
- name: Instalación y configuración del servidor web
hosts: webservers
tasks:
- name: Asegurar que Apache esté instalado
yum:
name: httpd
state: latest
- name: Asegurar que el servicio esté activo
service:
name: httpd
enabled: true
state: started
Ejecución de playbooks
Para ejecutar un playbook, se utiliza el comando ansible-playbook seguido del nombre del archivo:
ansible-playbook sitio.yml
La salida muestra cada tarea ejecutada, su estado y un resumen final por host. Es recomendable usar la opción -v (o -vvv) para obtener información detallada sobre la conexión y la ejecución de tareas.
Verificación de sintaxis y simulaciones
Antes de aplicar cambios reales, es posible verificar la sintaxis sin ejecutar el playbook:
ansible-playbook --syntax-check sitio.yml
Además, se puede realizar una ejecución simulada con la opción -C, que muestra qué cambios se realizarían sin aplicarlos realmente:
ansible-playbook -C sitio.yml
Elementos clave de un playbook
- hosts: Define los hosts o grupos sobre los cuales se aplicará el bloque de tareas.
- tasks: Lista ordenada de acciones a ejecutar en los hosts especificados.
- vars: Variables locales al playbook, útiles para personalizar comportamientos.
- handlers: Tareas especiales que solo se ejecutan cuando son notificadas por otras tareas.
- tags: Etiquetas que permiten ejecutar selectivamente partes del playbook.
Gestión de tareas y recolección de datos
Por defecto, Ansible recopila información del sistema remoto usando el módulo setup. Este proceso, conocido como fact gathering, puede desactivarse si no se requiere:
---
- hosts: all
gather_facts: false
tasks:
- name: Copiar archivo de configuración
copy:
src: /ruta/local/config.conf
dest: /etc/app/config.conf
Manejadores y notificaciones
Los manejadores permiten reaccionar a cambios realizados por tareas. Por ejemplo, reiniciar un servicio tras modificar su configuración:
---
- hosts: app-servers
tasks:
- name: Actualizar configuración de Nginx
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: Reiniciar Nginx
handlers:
- name: Reiniciar Nginx
service:
name: nginx
state: restarted
La notificación solo dispara el handler si la tarea anterior reporta un cambio (changed).
Uso de variables
Ansible soporta múltiples niveles de definición de variables. La prioridad sigue este orden (de menor a mayor):
- Variables del inventario (grupo o host)
- Variables definidas en el playbook
- Variables pasadas desde línea de comandos
Definición dentro del playbook:
---
- hosts: all
vars:
directorio_app: /opt/myapp
puerto_servicio: 8080
tasks:
- name: Crear directorio de aplicación
file:
path: "{{ directorio_app }}"
state: directory
Pasando variables desde consola:
ansible-playbook deploy.yml -e "directorio_app=/var/www/html"
También se pueden cargar variables desde archivos externos:
---
- hosts: all
vars_files:
- ./vars/config.yml
tasks:
- name: Mostrar puerto
debug:
msg: "Puerto configurado: {{ puerto_servicio }}"
Organización con múltiples plays
Un mismo archivo puede contener varios plays, cada uno dirigido a diferentes conjuntos de hosts:
---
- name: Configurar servidores web
hosts: webservers
tasks:
- name: Instalar Apache
yum:
name: httpd
state: present
- name: Configurar base de datos
hosts: dbservers
tasks:
- name: Instalar MariaDB
yum:
name: mariadb-server
state: present
Etiquetado de tareas
Las etiquetas permiten ejecutar subconjuntos específicos de tareas:
---
- hosts: all
tasks:
- name: Instalar paquetes básicos
yum:
name: vim
state: present
tags: utilidades
- name: Desplegar aplicación
copy:
src: app.jar
dest: /opt/app/
tags: deploy
Ejecutar solo tareas con cierta etiqueta:
ansible-playbook sitio.yml -t deploy
Omitir ceirtas etiquetas:
ansible-playbook sitio.yml --skip-tags utilidades
Estrategias de ejecución
El número de conexiones simultáneas se controla con la opción -f:
ansible-playbook sitio.yml -f 10
Este valor también puede configurarse en ansible.cfg. Ansible distribuye las tareas entre los hosts disponibles, manteniendo hasta f procesos trabajando en paralelo. Si un host falla, el playbook continúa con los demás, aunque ese host no avance en el play actual.
Convenciones recomendadas
- Usar siempre
nameen tareas y plays para claridad en la salida. - Evitar el uso innecesario de
gather_factssi no se utilizan variables del sistema. - Organizar variables complejas en archivos separados bajo
group_vars/ohost_vars/. - Utilizar plantillas (
template) para archivos de configuración dinámicos.