Cuando automatizamos tareas con Ansible, a menudo necesitamos ejecutar acciones solo cuando ocurre un cambio en la configuración. Para esto, Ansible nos proporciona los Handlers, que son tareas especiales que se ejecutan solo cuando un cambio lo requiere.
En este artículo, exploraremos qué son los Handlers, cómo definirlos y cuándo usarlos en nuestros playbooks.

1. ¿Qué son los Handlers en Ansible?
Los Handlers son similares a las tareas normales, pero solo se ejecutan si han sido notificados por otra tarea que haya realizado un cambio.
Ejemplo de un Handler
- name: Instalar y configurar Apache
hosts: nodos_web
become: yes
tasks:
- name: Instalar Apache
apt:
name: apache2
state: present
notify: Reiniciar Apache
handlers:
- name: Reiniciar Apache
service:
name: apache2
state: restarted
Aquí, el Handler Reiniciar Apache
solo se ejecutará si la tarea de instalación de Apache ha realizado un cambio, como instalar el paquete por primera vez.
2. Cómo funcionan los Handlers en Ansible
Notificaciones
Para que un Handler se ejecute, una tarea debe notificarlo usando notify
. Si varias tareas notifican al mismo Handler, se ejecutará solo una vez al final del playbook, evitando reinicios innecesarios.
Ejemplo con múltiples tareas notificando al mismo Handler:
- name: Configurar Apache y su puerto
hosts: nodos_web
become: yes
tasks:
- name: Instalar Apache
apt:
name: apache2
state: present
notify: Reiniciar Apache
- name: Modificar el puerto de Apache
lineinfile:
path: /etc/apache2/ports.conf
regexp: '^Listen '
line: 'Listen 8080'
notify: Reiniciar Apache
handlers:
- name: Reiniciar Apache
service:
name: apache2
state: restarted
En este caso, si se instalan Apache y se modifica su puerto, el Handler solo reiniciará Apache una vez al final.
3. Handlers en Roles de Ansible
Si usamos roles, podemos definir los Handlers en roles/mi_rol/handlers/main.yml
para una mejor organización.
# roles/apache/handlers/main.yml
- name: Reiniciar Apache
service:
name: apache2
state: restarted
Y en las tareas del rol (roles/apache/tasks/main.yml
):
- name: Instalar Apache
apt:
name: apache2
state: present
notify: Reiniciar Apache
De esta manera, podemos reutilizar Handlers en múltiples playbooks.
Los Handlers en Ansible son una herramienta poderosa para evitar acciones innecesarias y optimizar la automatización. Gracias a ellos, podemos asegurarnos de que los cambios importantes se apliquen de manera eficiente y ordenada.
En el próximo post, hablaremos sobre Templates y Jinja2 en Ansible y cómo generar archivos de configuración dinámicos. 🚀