Dans cet article, j'explique comment utiliser Ansible pour redémarrer efficacement une machine Linux ou Windows. Ansible reboot
module a été introduit dans Ansible 2.7 (2018), et maintenant ce module fait partie de ansible-base
et inclus dans toutes les installations Ansible. Veuillez noter que le reboot
Le module doit être exécuté à partir du nœud du contrôleur Ansible et ne fonctionnera pas avec des nœuds tels que localhost.
Pourquoi devez-vous redémarrer un nœud géré ?
Le redémarrage d'un système d'exploitation Linux est très rare. La plupart du temps, nous pouvons obtenir le résultat souhaité en redémarrant ou en rechargeant des services individuels après des modifications de configuration ou des mises à jour de packages. Mais dans certains cas, comme un correctif ou une mise à niveau du système, une opération de redémarrage est nécessaire pour terminer le flux de travail complet et l'effet. Si vous utilisez Ansible pour la gestion, vous devez inclure cette tâche de redémarrage pour réaliser une automatisation complète.
Les redémarrages automatisés sont très simples dans Ansible car vous disposez de plusieurs méthodes pour réaliser une tâche de redémarrage du système.
Pré-requis
Assurez-vous que le utilisateur_distant— que vous utilisez pour qu'Ansible se connecte au nœud géré - a sudo
accès et l'autorisation de redémarrer le nœud.
La bonne vieille méthode - Redémarrez la commande et attendez
Dans le passé, nous avions l'habitude de redémarrer un nœud géré à l'aide d'Ansible par une méthode en deux étapes. (Il existe plusieurs façons, mais cette méthode est une pratique courante) :
- Nous déclencherons une commande de redémarrage à l'aide du
shell
module. - Nous utiliserons un
wait_for_connection
module pour vérifier que le nœud revient en ligne après un redémarrage.
Laissez-moi vous montrer un exemple.
La première tâche est un simple shell
module pour redémarrer la machine, et Ansible se déconnectera du nœud. Dans la tâche suivante, Ansible attendra que le nœud revienne en ligne, mais avec un délai d'attente de 300 secondes ou cinq minutes.
- name: Reboot the machine
shell: "sleep 5 && reboot"
async: 1
poll: 0
- name: Wait for the machine to come back online
wait_for_connection:
connect_timeout: 60
sleep: 5
delay: 5
timeout: 300
Assez simple non? Attendez, il existe une méthode meilleure et plus efficace avec le reboot
Ansible module, et vous pouvez atteindre l'objectif avec une seule tâche.
[ Vous aimerez peut-être également lire : Présentation du nouveau hub d'automatisation Ansible ]
La nouvelle méthode efficace - redémarrer à l'aide du module de redémarrage Ansible
Ansible reboot
module a été introduit dans Ansible 2.7 (en 2018), et maintenant ce module fait partie de ansible-base
et inclus dans toutes les installations Ansible. Les pré-requis sont les mêmes, mais vous avez juste besoin d'une tâche simple avec un reboot
module. Ansible reboot
se chargera de redémarrer les systèmes ou le nœud géré, d'attendre que le système s'arrête, de revenir en ligne et de répondre aux commandes.
Vous pouvez simplement redémarrer la machine sans aucune option supplémentaire.
- name: Reboot the machine with all defaults options
reboot:
Il existe des options comme reboot_timeout pour attendre un délai d'attente ou pre_reboot_delay , qui attendra le nombre de secondes spécifié avant de redémarrer. Reportez-vous à la documentation du module Ansible Reboot pour plus de détails.
Voici donc notre playbook avec une tâche de redémarrage. Vous pouvez voir que c'est très simple et facile à gérer.
---
- name: Linux Reboot Demo
hosts: rhel7-base
gather_facts: no
remote_user: devops
become: true
tasks:
- name: Reboot the machine (Wait for 5 min)
reboot:
reboot_timeout: 300
Remarques importantes
Si votre utilisateur_distant est configuré avec un sudo
mot de passe, assurez-vous d'ajouter -K
argument et entrez le sudo
le mot de passe. Voici un exemple :
$ ansible-playbook ansible-os-utils/linux-reboot.yaml -K
Si vous utilisez Ansible Tower, ajoutez le sudo
mot de passe dans l'interface des informations d'identification, comme indiqué ici :
Testons le playbook.
$ ansible-playbook ansible-os-utils/linux-reboot.yaml -K
BECOME password:
PLAY [Linux Reboot Demo] ************************************************************************************
TASK [Reboot the machine (Wait for 5 min)] ******************************************************************
changed: [rhel7-base.lab.local]
PLAY RECAP **************************************************************************************************
rhel7-base.lab.local : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Redémarrer une machine Windows
Qu'en est-il du redémarrage des machines Windows ? Comme vous le savez, vous pouvez gérer des machines Windows à l'aide d'Ansible, et cette tâche de redémarrage sera nécessaire dans le cadre de votre workflow d'automatisation.
La bonne nouvelle est que, comme toutes les autres alternatives Windows, il existe un ansible dédié win_reboot
module pour gérer cette tâche. Voici à quoi ressemble le paramètre :
- name: Reboot a Windows Machine
ansible.windows.win_reboot:
reboot_timeout: 360
Reportez-vous à la documentation du module Ansible win_reboot pour plus de détails.
[ Un guide gratuit de Red Hat :5 étapes pour automatiser votre entreprise. ]
Récapitulez
Utiliser reboot
ou win_reboot
module dans Ansible est assez simple, et vous l'avez déjà appris. Assurez-vous que vous disposez des tâches de pré-redémarrage (redémarrage uniquement si nécessaire) et de post-redémarrage (pour vérifier le service ou la configuration après le redémarrage) appropriées dans votre playbook Ansible, le cas échéant.
Références :
- Redémarrage Ansible
- Ansible win_reboot