---
- hosts: servidores_web
handlers:
- name: reiniciar nginx
service: name=nginx state=restarted
tasks:
- name: Actualizar caché de paquetes
apt: update_cache=yes cache_valid_time=3600
- name: Instalar servidor web nginx
apt: name=nginx state=present
- name: Activar servicio nginx al inicio
service: name=nginx enabled=yes
- name: Configurar módulo SSL
lineinfile:
path: /etc/nginx/nginx.conf
regexp: '^# ssl'
line: 'ssl on'
notify: reiniciar nginx
Handlers Encadenados
---
- hosts: servidores_web
handlers:
- name: reiniciar nginx
service: name=nginx state=restarted
notify: reiniciar redis
- name: reiniciar redis
service: name=redis-server state=restarted
tasks:
- name: Actualizar caché de paquetes
apt: update_cache=yes
- name: Instalar nginx
apt: name=nginx state=present
- name: Habilitar nginx
service: name=nginx enabled=yes
- name: Configurar virtual host
template:
src: plantillas/default.j2
dest: /etc/nginx/sites-available/default
notify: reiniciar nginx
- name: Instalar redis
apt: name=redis-server state=present
- name: Iniciar redis
service: name=redis-server enabled=yes state=started
- name: Crear directorio de configuración
file:
path: /etc/redis/
state: directory
mode: '0750'
- name: Desplegar configuración redis
template:
src: plantillas/redis.conf.j2
dest: /etc/redis/redis.conf
mode: '0640'
changed_when: true
notify:
- reiniciar nginx
- name: Instalar herramientas
apt:
name:
- curl
- wget
state: present
Flush Handlers
---
- hosts: servidores_web
handlers:
- name: recargar nginx
service: name=nginx state=reloaded
- name: reiniciar redis
service: name=redis-server state=restarted
tasks:
- name: Instalar nginx
apt: name=nginx state=present
- name: Actualizar configuración principal
copy:
src: archivos/nginx.conf
dest: /etc/nginx/nginx.conf
notify: recargar nginx
- name: Ejecutar handlers inmediatamente
meta: flush_handlers
- name: Instalar aplicación
apt: name=htop state=present
Handlers con Bloques de Manejo de Errores
---
- hosts: servidores_web
handlers:
- name: reiniciar servicio web
service: name=nginx state=restarted
tasks:
- block:
- name: Tarea potencialmente fallida
command: /usr/bin/false
notify: reiniciar servicio web
rescue:
- name: Recuperar del fallo
command: /usr/bin/true
notify: reiniciar servicio web
always:
- meta: flush_handlers
- name: Instalar utilidades adicionales
apt:
name: tree
state: present
Conceptos Clave de los Handlers:
Los handlers en Ansible son tareas especiales que solo se ejecutan cuando son notificados por otra tarea. Se ejecutan al final de todos los playbooks, a manos que se utilice meta: flush_handlers.
Características principales:
- Un handler se ejecuta solo si la tarea que lo notifica cambia el estado
- Los handlers se ejecutan una sola vez por playbook, incluso si son notificados múltiples veces
- Se pueden encadenar handlers notificando desde un handler a otro
- Usar
meta: flush_handlersfuerza la ejecución inmediata de los handlers pendientes - Los handlers no se ejecutan si la tarea que los notifica es omitida por condiciones
Estas características hacen que los handlers sean ideales para reiniciar servicios cuando cambian archivos de configuración, evitar reinicios innecesarios y mantener el orden de ejecución en despliegues complejos.