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é.
---
- 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: reloadedRegrouper 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.
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 NginxLe 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.
Erreur fréquente : notifier depuis une tâche toujours changed
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’outilMini quiz
Trois questions pour vérifier les notions essentielles de la leçon.