Salut tout le monde !
Ca fait maintenant quelques années que j’utilise Ansible en production pour exécuter l’ensemble des tâches planifiées sur les différents serveurs Windows.
Une des actions courante à mettre en est le redémarrage des serveurs.
Dans mon cas, j’ai 3 situations :
- Redémarrer le serveur sans condition
- Redémarrer si celui-ci doit être redémarrer pour appliquer des mises à jour par exempl
- Forcer le redémarrage si le uptime est supérieure à plus de X jours
Dans cette articles je vais partagé ces 3 playbooks.
Playbook 1 : redémarrer Windows
On va commencer par le playbook le plus « simple » qui est de redémarrer Windows, ce playbook s’appuie sur win_reboot
.
Lors du redémarrage, on indique un message qui sera disponible dans l’observateur d’évènement. La tâche reste n attente pendant 600 sec (10 minutes) pour attendre que le serveur soit de nouveau en ligne, ce qui permet d’acquitter le bon déroulement du playbook.
L’application de certaine mises à jour peuvent prendre plus de 10 minutes, dans ce cas l’exécution du playbook sera en erreur.
Playbook 2 : redémarrer Windows si cela est nécessaire
Le second playbook va redémarrer Windows seulement si nécessaire, pour faire cette vérification, on regarde si un clé existe dans le registre Windows.
Si cette clé existe, on redémarre le serveur.
Playbook 3 : redémarrer Windows si le uptime est supérieure à X jours
Le dernier playbook m’a donné un plus de fil à retorde, car il n’existe de pas de solution directe avec Ansible pour retourner l’uptime du serveur.
Voici le playbook, je vous explique ensuite :
Le plus « dur » a été de récupéré l’uptime du serveur Windows, pour cela j’ai utilisé PowerShell et je l’ai exécuté avec win_shell.
Pour récupérer l’uptime, je récupère la sortie la sortie console, afin de pouvoir exploiter le résultat avec Ansible, la variable qui contient l’uptime est transformer au format JSON.
Ensuite dans Ansible je traite la sortie au format JSON pour la mettre dans une variable que je peux utiliser dans le Playbook.
A partir de la, je peux exploiter l’uptime du serveur Windows pour le redémarrer ou non.
Vous trouverez tous mes playbooks Anisble ici : Files · main · Ansible / Playbook Windows