
ansible.builtin.reboot: redémarre proprement un managed node et attend qu’il soit de nouveau accessible avant de poursuivre le playbook. C’est le module à utiliser pour les upgrades kernel, les changements de config persistants (selinux disabled, fstab critique), ou les opérations de maintenance planifiée.
Le module gère trois choses automatiquement :
- Lancer le
shutdown -r(ou équivalent) sur la machine. - Attendre que la machine soit injoignable (le reboot a vraiment commencé).
- Tester la reconnexion avec une commande (
whoamipar défaut) jusqu’àreboot_timeout.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Redémarrer un managed node et attendre la reconnexion proprement.
- Personnaliser la commande de test (
test_command:). - Ajuster les délais pré/post-reboot (
pre_reboot_delay,post_reboot_delay). - Gérer un timeout long (kernel update, machine lente).
- Conditionner un reboot via
when:ou un handler.
Prérequis
Section intitulée « Prérequis »become: true(un user normal ne peut pas reboot).- Le module bloque le play jusqu’à reconnexion — prévoir une fenêtre de maintenance côté CI/CD.
Reboot simple avec attente
Section intitulée « Reboot simple avec attente »- name: Redemarrer le serveur et attendre la reconnexion ansible.builtin.reboot: reboot_timeout: 600 test_command: whoamiComportement :
- Ansible lance
shutdown -r now(selon la distrib). - Attend que la machine soit injoignable (= reboot lancé).
- Tente une reconnexion SSH jusqu’à
reboot_timeoutsecondes (600s = 10 min). - À chaque tentative, lance
test_command: whoamipour valider.
test_command: whoami est un défaut pertinent — il valide à la fois SSH et le filesystem /.
Délais pré/post-reboot
Section intitulée « Délais pré/post-reboot »- name: Reboot avec delais ansible.builtin.reboot: pre_reboot_delay: 5 # Attendre 5s avant le shutdown post_reboot_delay: 20 # Attendre 20s avant la 1re tentative SSH reboot_timeout: 300Cas d’usage :
pre_reboot_delay: laisser le temps aux logs de flusher, aux services de fermer proprement (typiquement 5-10s).post_reboot_delay: pour les VMs qui mettent du temps à initialiser le réseau (cloud, hyperviseurs lents). Évite les erreurs SSH prématurées au redémarrage.
Reboot conditionnel via handler
Section intitulée « Reboot conditionnel via handler »Pattern fréquent : reboot uniquement si un kernel a été mis à jour.
- name: Mise a jour kernel ansible.builtin.dnf: name: kernel state: latest notify: Reboot needed
handlers: - name: Reboot needed ansible.builtin.reboot: reboot_timeout: 900 msg: "Reboot après mise à jour kernel par Ansible"notify: déclenche le handler seulement si la tâche a changed. Pas de kernel update → pas de reboot. Idempotent.
msg: affiche un message aux utilisateurs connectés via wall avant le reboot.
Reboot sur condition explicite (when:)
Section intitulée « Reboot sur condition explicite (when:) »- name: Detecter si un reboot est necessaire ansible.builtin.command: needs-restarting -r register: needs_restart changed_when: false failed_when: false
- name: Reboot si needs-restarting le demande (rc=1) ansible.builtin.reboot: reboot_timeout: 600 when: needs_restart.rc == 1needs-restarting -r (paquet dnf-utils sur RHEL) retourne rc=1 si un reboot est requis, rc=0 sinon. Combinaison classique pour automatiser la détection.
Timeout long pour kernel update
Section intitulée « Timeout long pour kernel update »- name: Reboot apres upgrade complet ansible.builtin.reboot: reboot_timeout: 1800 # 30 minutes pre_reboot_delay: 30 # Laisser systemd faire son cleanup post_reboot_delay: 60 # VMs cloud parfois lentes test_command: "systemctl is-system-running"test_command: systemctl is-system-running est plus strict que whoami — il vérifie que systemd a fini son init (running ou degraded), pas seulement que SSH répond.
Quand utiliser un long timeout : kernel updates massifs, migration filesystem, fsck au boot, hyperviseurs cloud lents.
Reboot sur Windows
Section intitulée « Reboot sur Windows »- name: Reboot Windows ansible.builtin.reboot: reboot_timeout: 900 connect_timeout: 10Le module fonctionne aussi avec Windows via WinRM ou OpenSSH. Les délais doivent généralement être plus longs (Windows boot ~2-5 min vs Linux ~30s).
Pièges courants
Section intitulée « Pièges courants »| Symptôme | Cause | Fix |
|---|---|---|
reboot_timeout atteint avant reconnexion | VM lente à booter | Augmenter reboot_timeout, réduire connect_timeout |
| Erreurs SSH “Connection refused” pendant le reboot | Pas de post_reboot_delay | Ajouter 20-30s pour laisser le réseau remonter |
| Reboot lancé alors que pas nécessaire | reboot: direct au lieu de handler | Utiliser notify: + handler |
| Sur Windows, échec mystérieux | WinRM met du temps à redémarrer | connect_timeout: 30 minimum |
À retenir
Section intitulée « À retenir »reboot_timeout= durée max d’attente totale (défaut 600s).test_command= commande de validation après reconnexion (défautwhoami).pre_reboot_delay/post_reboot_delay= marges avant/après le reboot.- Pattern handler = reboot uniquement si nécessaire (
notify:+ handler). needs-restarting -r(dnf-utils) détecte si un reboot est requis sur RHEL.- Sur Windows, prévoir des délais plus longs (~3-5 min).