Introducción
En Ansible, los manejadores (handlers) son una característica poderosa que permite ejecutar tareas específicas en respuesta a cambios en el estado del sistema. Los manejadores se utilizan comúnmente para reiniciar servicios, recargar configuraciones o realizar cualquier acción que deba ejecutarse solo cuando se detecta un cambio.
Conceptos Clave
- Manejador (Handler): Una tarea especial que se ejecuta solo cuando es notificada por otra tarea.
- Notificación (Notify): Una instrucción en una tarea que indica que un manejador debe ejecutarse si la tarea cambia el estado del sistema.
Estructura de un Manejador
Un manejador se define de manera similar a una tarea regular en un playbook, pero se coloca bajo la sección handlers. Aquí hay un ejemplo básico:
---
- name: Ejemplo de Playbook con Manejadores
hosts: localhost
tasks:
- name: Crear un archivo de configuración
copy:
src: /path/to/source/file
dest: /path/to/destination/file
notify: Reiniciar servicio
handlers:
- name: Reiniciar servicio
service:
name: my_service
state: restartedExplicación del Código
-
Definición del Playbook:
name: Nombre descriptivo del playbook.hosts: Define los hosts en los que se ejecutará el playbook (en este caso,localhost).
-
Tareas:
name: Nombre descriptivo de la tarea.copy: Módulo de Ansible que copia un archivo desde una ubicación de origen a una ubicación de destino.notify: Instrucción que notifica al manejadorReiniciar serviciosi la tarea cambia el estado del sistema (por ejemplo, si el archivo se copia correctamente).
-
Manejadores:
name: Nombre del manejador.service: Módulo de Ansible que gestiona servicios del sistema.name: Nombre del servicio que se va a gestionar.state: Estado deseado del servicio (restarteden este caso).
Ejemplo Práctico
Vamos a crear un playbook más completo que incluye un manejador para reiniciar un servicio web cuando se actualiza su archivo de configuración.
---
- name: Configurar y Reiniciar Servicio Web
hosts: webservers
become: yes
tasks:
- name: Copiar archivo de configuración de Nginx
copy:
src: /path/to/nginx.conf
dest: /etc/nginx/nginx.conf
notify: Reiniciar Nginx
handlers:
- name: Reiniciar Nginx
service:
name: nginx
state: restartedExplicación del Código
-
Definición del Playbook:
name: Nombre descriptivo del playbook.hosts: Define los hosts en los que se ejecutará el playbook (webserversen este caso).become: Escalado de privilegios para ejecutar tareas como superusuario.
-
Tareas:
name: Nombre descriptivo de la tarea.copy: Módulo de Ansible que copia un archivo desde una ubicación de origen a una ubicación de destino.notify: Instrucción que notifica al manejadorReiniciar Nginxsi la tarea cambia el estado del sistema (por ejemplo, si el archivo se copia correctamente).
-
Manejadores:
name: Nombre del manejador.service: Módulo de Ansible que gestiona servicios del sistema.name: Nombre del servicio que se va a gestionar (nginxen este caso).state: Estado deseado del servicio (restarteden este caso).
Ejercicio Práctico
Ejercicio
Crea un playbook que realice las siguientes acciones:
- Instale el paquete
httpd(Apache) en un servidor. - Copie un archivo de configuración personalizado para Apache.
- Reinicie el servicio
httpdsolo si el archivo de configuración se ha copiado correctamente.
Solución
---
- name: Instalar y Configurar Apache
hosts: webservers
become: yes
tasks:
- name: Instalar paquete httpd
yum:
name: httpd
state: present
- name: Copiar archivo de configuración de Apache
copy:
src: /path/to/httpd.conf
dest: /etc/httpd/conf/httpd.conf
notify: Reiniciar Apache
handlers:
- name: Reiniciar Apache
service:
name: httpd
state: restartedExplicación del Código
-
Instalar paquete httpd:
- Utiliza el módulo
yumpara instalar el paquetehttpd.
- Utiliza el módulo
-
Copiar archivo de configuración de Apache:
- Utiliza el módulo
copypara copiar el archivo de configuración desde una ubicación de origen a/etc/httpd/conf/httpd.conf. - Notifica al manejador
Reiniciar Apachesi la tarea cambia el estado del sistema.
- Utiliza el módulo
-
Reiniciar Apache:
- Define un manejador que utiliza el módulo
servicepara reiniciar el serviciohttpd.
- Define un manejador que utiliza el módulo
Conclusión
Los manejadores en Ansible son una herramienta esencial para ejecutar tareas condicionales basadas en cambios en el estado del sistema. Al utilizar manejadores, puedes asegurarte de que ciertas acciones, como reiniciar servicios, solo se ejecuten cuando sea necesario, mejorando así la eficiencia y la fiabilidad de tus playbooks.
En el siguiente tema, exploraremos las plantillas en Ansible, que te permitirán generar archivos de configuración dinámicos y personalizados.
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
