• Faire les mises à jour sur un serveur Debian : aptitude update && aptitude safe-upgrade.
  • Faire les mises à jour sur 10 serveurs Debian : cssh sysnove-servers puis aptitude update && aptitude safe-upgrade.
  • Faire les mises à jour sur 100 serveurs Debian : euh… cssh aussi ?

Non, pas cssh, parce que vous allez arriver au moment où il n'y aura plus assez de place sur l'écran pour afficher toutes les sessions, et vous ne verrez même plus ce que vous faites. Mais alors comment paralléliser tout en gardant un regard sur ce que l'on fait ? Chez Sysnove, nous utilisons Ansible, voici comment.

Il est important de noter que, dans cet article, on parle de parallélisation et pas d'automatisation. Selon nous, les mises à jour système ne doivent pas être automatisées et doivent toujours être réalisés manuellement sous le contrôle d'un administrateur système, ne serait-ce que pour savoir ce qui est mis à jour. Par contre, rien n'empêche de les paralléliser, c'est à dire les réaliser sur plusieurs serveurs simultanément.

Playbook Debian updates

Le playbook est relativement court, mais on y trouve des choses intéressantes :

  • Mettre à jour la liste des paquets ;
  • Afficher la liste des paquets à mettre à jour ;
  • Faire la mise à jour ;
  • Afficher un message si la version de Debian a changé en comparant la valeur de lsb_release -r avant et après la mise à jour ;
  • Afficher un message s'il y a des services à redémarrer grâce à checkrestart (qui doit être installé via le paquet debianutils).

Exemples d'utilisation

L'avantage d'utiliser Ansible, c'est que vous allez pouvoir combiner ça à un inventaire déjà existant (si vous utilisez déjà Ansible pour déployer votre infra, évidemment). Vous allez donc pouvoir exécuter le playbook sur tous vos serveurs en parallèles, ou choisir de faire des rolling updates. Vous allez pouvoir filtrer de toutes les façons permises par Ansible et votre inventaire. Exemples :

Tous les serveurs de l'inventaire « prod » :

ansible-playbook -i inventories/prod playbooks/upgrade.yml

Seulement les serveurs dont le nom commence par « sysnove » :

ansible-playbook -i inventories/prod playbooks/upgrade.yml --limit=sysnove*

Seulement les serveurs web :

ansible-playbook -i inventories/prod playbooks/upgrade.yml --limit=web-servers

Tous les serveurs, mais seulement 10 à la fois (tous les serveurs devront terminer une tâche avant de passer à la suivante, mais chaque tâche ne sera exécutée que sur 10 hôtes à la fois, et comme la mise à jour ne s'effectue qu'en une seule tâche…) :

ansible-playbook -i inventories/prod playbooks/upgrade.yml --forks=10

À propos de l'auteur



Guillaume est l'un des deux fondateurs et cogérants de Sysnove. Développeur Python et administrateur système passionné de logiciel libre et des technologies liées à Internet, il participe à divers projets, notamment le fournisseur d'accès Internet Aquilenet ainsi que la Fédération FDN.

Chez Sysnove, son rôle consiste à mettre en place et administrer les infrastructures nécessaires à l'hébergement des services fournis aux clients. En tant que directeur général, il gère aussi les aspects administratifs de l'entreprise.