Introduction
J’ai un parc de machines virtuelles qui sont pour la plupart sous Debian. Les taches de mises à jour peuvent se faire de différentes façons : manuellement (fastidieux), avec le ‘cron’ des machines… etc
Je vais vous présenter ici, une manière très simple de maintenir un parc informatique sous Debian avec ‘Ansible’ via SSH.
Pré-requi
Vos machines devront être accesibles en SSH depuis l’ordinateur ou Ansible est installé. Il vous faudra seulement un fichier ‘hosts’ configuré dans Ansible pour effectuer les mises à jour sur tous les hôtes. Ce fichier se trouve en général dans le répertoire /home/user/.ansible/hosts. La syntaxe est très simple ; vous regroupez des hôtes dans des groupes.
Par exemple, pour un parc Debian, nous allons créer un fichier ‘hosts’ minimal de ce type :
debian:
hosts:
machine1.domain.nd:
ip_machine2:
ip_machine3:
alias_ssh:
Les machines peuvent être : une adresse IP, un nom de domaine, un alias SSH…
Configuration du fichier Playbook
Le fichier Playbook ne contient qu’une seule section ’tasks’. On lui indique que le Playbook doit être exécuter sur toutes les machines faisant partie du groupe ‘debian’. Le mot de passe de l’utilisateur ayant les droits ‘sudo’ sera demandé au lancement du serveur.
J’ai nommé mon fichier ‘update_debian.yml’.
Remarque : J’ai sur tous mes serveurs le même utilisateur avec le même mot de passe et ayant les droits ‘sudo’.
Remarque : Un test est effectué en fin de fichier pour voir si la machine doit être relancée. Le message n’est qu’informatif, mais le serveur pourrait être aussi relancé automatiquement par Ansible (voir Option : Relance automatique des serveurs).
---
- name: Update Debian
hosts: debian
become: yes
become_method: sudo
tasks:
- name: Update package list
when: ansible_os_family == 'Debian'
apt: update_cache=yes force_apt_get=yes cache_valid_time=3600
- name: Upgrade packages
when: ansible_os_family == 'Debian'
apt: state=latest force_apt_get=yes
- name: Check if reboot is required
stat:
path: /var/run/reboot-required
register: reboot_required
- debug:
msg: "La machine doit etre relancee"
when: reboot_required.stat.exists
Option : Relance automatique des serveurs
Il est tout à fait possible aussi de dire à ansible de relancer les serveurs si cela s’avère nécessaire. Il faudra en conséquence, modifier la fin du Playbook comme ceci en remplaçant la section ‘debug’ par celle-ci :
- name: Reboot the Debian or Ubuntu server
reboot:
msg: "Ansible à relancer le serveur suite à une mise à jour du kernel"
connect_timeout: 5
reboot_timeout: 300
pre_reboot_delay: 0
post_reboot_delay: 30
test_command: uptime
when: reboot_required_file.stat.exists
Lancement du Playbook
La commande à exécuter pour lancer le play book est clle ci :
Vous devez indiquer le chemin où se trouve votre fichier ‘Playbook’ en remplacant ‘repertoire_playbook’. Ce fichier peut-être n’importe où, mais vous pouvez le mettre à la racine de votre dossier ‘.ansible’.
Si tout se passe bien, vous devriez avoir comme résultat :