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: restarted

Explicación del Código

  1. Definición del Playbook:

    • name: Nombre descriptivo del playbook.
    • hosts: Define los hosts en los que se ejecutará el playbook (en este caso, localhost).
  2. 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 manejador Reiniciar servicio si la tarea cambia el estado del sistema (por ejemplo, si el archivo se copia correctamente).
  3. 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 (restarted en 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: restarted

Explicación del Código

  1. Definición del Playbook:

    • name: Nombre descriptivo del playbook.
    • hosts: Define los hosts en los que se ejecutará el playbook (webservers en este caso).
    • become: Escalado de privilegios para ejecutar tareas como superusuario.
  2. 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 manejador Reiniciar Nginx si la tarea cambia el estado del sistema (por ejemplo, si el archivo se copia correctamente).
  3. Manejadores:

    • name: Nombre del manejador.
    • service: Módulo de Ansible que gestiona servicios del sistema.
    • name: Nombre del servicio que se va a gestionar (nginx en este caso).
    • state: Estado deseado del servicio (restarted en este caso).

Ejercicio Práctico

Ejercicio

Crea un playbook que realice las siguientes acciones:

  1. Instale el paquete httpd (Apache) en un servidor.
  2. Copie un archivo de configuración personalizado para Apache.
  3. Reinicie el servicio httpd solo 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: restarted

Explicación del Código

  1. Instalar paquete httpd:

    • Utiliza el módulo yum para instalar el paquete httpd.
  2. Copiar archivo de configuración de Apache:

    • Utiliza el módulo copy para copiar el archivo de configuración desde una ubicación de origen a /etc/httpd/conf/httpd.conf.
    • Notifica al manejador Reiniciar Apache si la tarea cambia el estado del sistema.
  3. Reiniciar Apache:

    • Define un manejador que utiliza el módulo service para reiniciar el servicio httpd.

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.

© Copyright 2024. Todos los derechos reservados