Ansible · Handlers

Handlers

Déclenchez les redémarrages et rechargements seulement lorsqu’une tâche signale un changement réel.

Leçon disponible
20 min

Objectifs

  • Comprendre notify et handlers.
  • Déclencher un handler uniquement après un changement.
  • Regrouper plusieurs notifications vers la même action.
  • Préserver l’idempotence d’une configuration de service.

Handlers et notifications

Un handler est une tâche nommée déclenchée par notify. Il est normalement exécuté à la fin de la section de tâches concernée seulement si une tâche notificatrice a retourné changed.

Ce mécanisme évite de redémarrer un service à chaque exécution. Plusieurs tâches peuvent notifier le même handler ; Ansible regroupe l’action pour ne l’exécuter qu’une fois au moment prévu.

Déployer une configuration et recharger Nginx

La tâche copy notifie le handler uniquement si le fichier de destination change. Le module service garantit ensuite que Nginx reste démarré et activé.

nginx-handler.yml
---
- name: Configurer Nginx
  hosts: web
  become: true
  tasks:
    - name: Copier la configuration Nginx
      ansible.builtin.copy:
        src: files/nginx.conf
        dest: /etc/nginx/nginx.conf
        owner: root
        group: root
        mode: "0644"
      notify: Recharger Nginx

    - name: Démarrer et activer Nginx
      ansible.builtin.service:
        name: nginx
        state: started
        enabled: true

  handlers:
    - name: Recharger Nginx
      ansible.builtin.service:
        name: nginx
        state: reloaded

Regrouper les notifications

Deux changements de configuration peuvent notifier le même nom. Le handler est alors mis en attente une seule fois, ce qui évite des rechargements successifs inutiles.

Deux tâches, une notification commune
tasks:
  - name: Copier la configuration principale
    ansible.builtin.copy:
      src: files/nginx.conf
      dest: /etc/nginx/nginx.conf
    notify: Recharger Nginx

  - name: Copier la configuration du site
    ansible.builtin.copy:
      src: files/toolbox.conf
      dest: /etc/nginx/conf.d/toolbox.conf
    notify: Recharger Nginx

Le texte de notify doit correspondre au nom ou au listen attendu par le handler.

Contrôler le changed

Un handler ne peut être fiable que si la tâche notificatrice signale correctement les changements. Les modules déclaratifs comme template ou copy comparent l’état ; un shell qui retourne changed à chaque fois provoquerait des rechargements inutiles.

  • Choisissez des modules idempotents pour les tâches notificatrices.
  • Validez la configuration avant un reload lorsque le service le permet.
  • Nommez les handlers selon leur action réelle : recharger, redémarrer ou relancer.
  • Une exécution sans modification ne devrait pas relancer le handler.

Mini résumé

  • notify place un handler en attente après un changement.
  • Un handler évite les redémarrages ou rechargements systématiques.
  • Plusieurs notifications identiques sont regroupées.
  • La qualité du changed de la tâche conditionne l’idempotence du handler.

Outils associés

Générer un playbook Ansible

Utilisez Ansible Playbook Generator pour préparer une base YAML locale, puis relisez et adaptez chaque tâche avant utilisation.

Ouvrir l’outil

Mini quiz

Trois questions pour vérifier les notions essentielles de la leçon.

1. Quand un handler notifié est-il normalement planifié ?
2. Que se passe-t-il si plusieurs tâches notifient le même handler ?
3. Pourquoi une tâche shell toujours changed est-elle problématique avant notify ?