Puppet : Déploiement et gestion automatisé de configuration système et réseaux

Fiche PLUME
  • Création ou MAJ importante : 05/05/2012
  • Correction mineure : 06/06/2014
  • Auteur : Richard Randriatoamanana - IRCCyN Nantes (CNRS, Ecole centrale Nantes)
  • Responsable thématique : Maurice Libes (OSU Institut Pytheas - UMS 3470 CNRS)
  • Relecteur 1 : Jérôme Pansanel
  • Relecteur 2 : Yannick Perret
Mots clés
Description
Fonctionnalités générales

Puppet Open Source est un outil de déploiement et de gestion automatisés de configuration système et réseaux de manière centralisée.

Écrit en Ruby, il repose sur un modèle client-serveur : un serveur central sert de dépôt de configuration, les systèmes clients (nœuds) se mettant à jour de manière manuelle ou automatique.

Avec Puppet, l'administrateur n'écrit pas un ensemble d'opérations à exécuter sur les différents nœuds sous la forme d'un script. Puppet se caractérise par le concept d'idempotence dans le déploiement des tâches d'administration et de configuration : l'administrateur décrit l'état final de la machine dans un Manifest, le client Puppet peut être exécuté plusieurs fois, les changements seront opérés seulement si l'état de la machine ne correspond pas à celui désiré.

La puissance de Puppet est de permettre à l'administrateur de se concentrer sur l'écriture de l'état de configuration à atteindre, et l'affranchit de la connaissance des commandes propres à chaque système d'exploitation pour arriver à cet état. Cette couche d'abstraction est possible grâce aux Providers : lorsque des instructions sont à effectuer sur un nœud, le client Puppet détecte la plateforme du système et le Provider lui fournit les commandes, locales aux systèmes, pour les exécuter (adduser, yum, …).

L'entité de base pour définir la configuration d'un nœud dans un Manifest est appelée "ressource". De nombreux types de ressources par défaut sont disponibles pour décrire les aspects courants d'un système : utilisateur, paquetage, service…
Des ressources similaires peuvent être regroupées dans deux types de collections :

  • des classes, qui supportent l'héritage, et qui sont des singletons pour modéliser un nœud (une classe qui installe et configure Apache par exemple),
  • des "Defined Resources Types", des types de ressources définies par l'administrateur, qui peuvent être évaluées plusieurs fois par nœuds, avec des paramètres différents (la création d'un hôte virtuel Apache par exemple). 

Ressources et collections peuvent également être regroupées dans un module. Un module va ainsi permettre de regrouper toutes les ressources pour configurer, par exemple un serveur web.

Autres fonctionnalités
  • Un outil Puppet écrit en Ruby, Facter, permet d'interroger et récupérer les informations d'une machine cliente. Celles-ci peuvent être utilisées comme variables dans la définition des nœuds. Ceci permet d'écrire des configurations génériques à l'aide de conditions, sous la forme de templates. Ces templates respectent la syntaxe ERB de Ruby.
  • La configuration des nœuds peut être externalisée ("external node") dans un SGBD, un LDAP, ou encore un programme externe…
  • Un shell, Ralsh, permet d'exécuter des commandes Puppet et de configurer les ressources d'un système local. Depuis la version 3.x, ce shell est remplacé par la commande "puppet resource"
  • Une forge de modules avec la commande "puppet module", est disponible pour chercher, installer et créer des modules sur la forge.
  • Une interface web de rapports écrit en Ruby on Rails, Puppet dashboard, permet de suivre l'exécution des agents.
  • La possibilité d'étendre Puppet en écrivant ses propres Types, Facts, Providers et fonctions.
  • MCollective, système similaire à Func, Fabric ou Capistrano, qui permet d'exécuter des commandes en parallèle sur plusieurs machines, mais en se servant de la configuration des nœuds définie sous Puppet.

Les nouveautés de la version 3.x :

  • Un changement de licence vers la Apache 2.0.
  • Améliorations du Puppet Module Tool.
  • Meilleur support des clients Windows.
  • Support Ruby >= 1.9.
  • Support de la gestion de la configuration des équipements Cisco (Vlan, Interface).
  • Une meilleure API REST pour les communications clients.
  • Une nouvelle API (Faces) pour le développement d'extensions.
  • Toute l'historique des releases est décrite ici.
Interopérabilité
  • Multi-plateformes
  • Écrit en ruby, les templates respectent la syntaxe ERB, une librairie de Ruby.
  • Les échanges se font en XML-RPC et REST API (XML-RPC devrait disparaître totalement dans les prochaines versions).
Contexte d'utilisation dans mon laboratoire/service

Puppet est utilisé pour gérer tous nos serveurs physiques essentiellement sous Debian, et les serveurs virtuels sous Debian également.

Avec PXE, l'installation, la configuration et l'administration sont facilitées et accélérées considérablement : une fois que la configuration d'une machine modèle est validée, elle est simplement et rapidement déployée sur l'ensemble du réseau.
Cette homogénéité de la configuration diminue les problèmes et raccourcit le temps de réponse en cas de panne.

L'outil Foreman, issu d'un projet externe, sert d'interface de visualisation de rapports, d'external nodes et permet de déployer ou réinstaller les systèmes en partant de zéro.

MCollective
est utilisé en complément pour effectuer des tâches ponctuelles d'administration sur la totalité ou une partie des systèmes (exécution du client en manuel, de commandes, redémarrage de services…).

Limitations, difficultés, fonctionnalités importantes non couvertes

La mise en place de l'architecture au début du projet a été fastidieuse mais très fructueuse par la suite. La documentation n'était pas complète sur internet mais heureusement qu'il y a de bons livres.

Des paquetages à jour n'étaient pas disponibles sur toutes les plate-formes. Il manquait un système de reporting. L'intégration avec les outils d'installation de système et d'exécution de commandes n'existait pas.

La situation s'est grandement améliorée, et même s'il faut un peu de temps pour mettre en place les différentes briques logicielles, aucune difficulté majeure n'est à déplorer.
Les lacunes initiales du projet ont été comblées par de nouveaux projets internes et externes (Puppet Dashboard, MCollective, Facter, Foreman, RunDeck) et par une meilleure intégration avec l'existant (FAI, Cobbler).

Même si les Manifests sont écrits en Ruby, la courbe d'apprentissage est faible, car ce n'est pas de la programmation pure. Le seul système des templates et de passage des variables nécessite un petit temps d'adaptation.

Si dès le début vous ne vous fixez pas à une convention d'écriture et d'organisation de vos classes, modules et manifestes, vous allez vous trouver très vite un environnement chaotique en terme de lisibilité du code. Donc appliquez les fondamentales dans la manière de coder vos modules et vos classes.

Environnement du logiciel
Distributions dans lesquelles ce logiciel est intégré
  • Le logiciel est disponible dans les dépôts standards de la plupart des distributions Linux, UNIX/BSD et Mac/OS.

  • Il est disponible pour Windows sur la page de téléchargements du site officiel, sur lequel télécharger des paquetages pour de nombreuses distributions.

  • Tous ces paquetages sont disponibles dans des dépôts que le projet met à disposition.

  • Il peut être installé via RubyGems sur une distribution pour laquelle il n'a pas été packagé.

Plates-formes

Multi-plateformes.

Logiciels connexes
Autres logiciels aux fonctionnalités équivalentes
Environnement de développement
Type de structure associée au développement

Le projet a été initié par Luke Kanies en 2003. L'éditeur Professionnel Puppet Labs en assure maintenant le développement. Cet éditeur fournit également une version commerciale Puppet Enterprise.

Eléments de pérennité
Références d'utilisateurs institutionnels
  • IRCCyN, CNRS, labo de robotique à Nantes.
  • le réseau mathrice
  • Subatech, CNRS, labo IN2P3 à Nantes
  • IEUM, Brest
Environnement utilisateur
Liste de diffusion ou de discussion, support et forums

Liste de toutes les sources d'informations sur le site du projet.
Régulièrement, le blog annonce les sorties des nouvelles versions, contient des tutoriels sur des modules intéressants.

Une liste de diffusion et de discussion nationale [configsys] a été créée récemment autour de la thématique "configuration système". Elle est en français.

Documentation utilisateur

Documentation officielle de Puppet et logiciels connexes développés par Puppet Labs.
Vous trouverez sur le site une machine virtuelle prête à l'emploi et un tutoriel d'introduction. À noter qu'un envrionnement multi-VMs sous VritualBox avec Vagrant est disponible, environnement beaucoup plus flexible pour vos tests.

Divers (astuces, actualités, sécurité)
  • inspirez vous des best-practices
  • travaillez souvent en mode "--noop" et dans des environnements avec une gestion de versioning (comme git) pour éviter de polluer les versions de production.
Contributions

Se référer à la page explicative sur le site Web du projet.