Puppet : Gestionnaire de configurations

Puppet est un gestionnaire de configurations des serveurs en centralisant les configurations des serveurs esclaves sur un serveur maître, il permet ainsi d'avoir un état de configuration identique sur tous les serveurs esclaves à partir du maître.

Puppet est simple d'utilisation, bien documenté et de nombreuses ressources existe sur le web.

La procédure suivante a été validé sur un ensemble Debian 8.5 64 bits et Puppet en version 3.7.2.

Avant tout, lancé un 'apt-get update' afin de récupérer les derniers paquets.

Les commandes sont à lancer en root ou précédées de 'sudo'.

=> Installation du serveur Puppet (master)

L'installation se fait via les dépôts officiels :

master$ apt-get install puppetmaster

Afin de vérifier que le service soit bien lancé :

master$ service puppetmaster status
master is running.

=> Installation d'un client Puppet (slave)

L'installation se fait via les dépôts officiels :

slave$ apt-get install puppet

Puppet communique sur le port TCP/8140 qui est le port par défaut.

Si vos serveurs sont protégés par iptables il faut alors ouvrir le port.

iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED --sport 8140 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED --dport 8140 -j ACCEPT

Ou alors, vous pouvez le faire encore plus finement en ajoutant les IP (Attention au nombre de serveurs).

iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED --sport 8140 -s ADRESSE_MASTER -d ADRESSE_SLAVE -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW,ESTABLISHED --dport 8140 -s ADRESSE_SLAVE -d ADRESSE_MASTER -j ACCEPT

Pour fonctionner le slave à besoin de connaître l'adresse du master. Sur le slave, utiliser votre éditeur favoris pour modifier le fichier /etc/puppet/puppet.conf et ajouter la ligne suivante dans le section [main].

server=ADRESSE_MASTER

Une fois effectué, il faut initialiser une seule fois la connexion sécurisé entre le slave et le master.

slave$ puppet agent -t -v -w 60
 
Info: Caching certificate for ca
Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml
Info: Creating a new SSL certificate request for puppet-srv1
Info: Certificate Request fingerprint (SHA256): EA:AB:A1:BF:C2:55:C8:FD:E2:69:10:7F:30:C6:07:7C:06:BD:A2:1F:B0:30:62:2D:C3:61:00:CD:F5:E4:B0:B3
Info: Caching certificate for ca

Ensuite, sur le master, on affiche la liste des certificats en attentes de validation.

master$ puppet cert --list
  "puppet-srv1" (SHA256) EA:AB:A1:BF:C2:55:C8:FD:E2:69:10:7F:30:C6:07:7C:06:BD:A2:1F:B0:30:62:2D:C3:61:00:CD:F5:E4:B0:B3

Un slave du nom de “puppet-srv1” est donc en attente de validation sur le master.

master$ puppet cert --sign puppet-srv1
 
notice: Signed certificate request for puppet-srv1
notice: Removing file Puppet::SSL::CertificateRequest puppet-srv1 at '/var/lib/puppet/ssl/ca/requests/puppet-srv1.pem'

La configuration de Puppet se fait dans /etc/puppet, c'est ici que vous allez définir votre site (réseau), vos nœuds (clients) et les modules (actions) à appliquer.

Puppet conseil de gérer ce répertoire avec un système de versionning (SVN, GIT, …).

Petit tour du propriétaire :

  • /etc/puppet/manifests/site.pp : Fichier référentiel de PuppetMaster. Il permet de définir son site (réseau), des variables globales et d'importer des modules (ensembles de classes) ainsi que des nœuds de votre réseau.
  • /etc/puppet/manifests/node.pp : Permet de définir les noeuds (clients) de votre réseau.
  • /etc/puppet/modules/<module>/ : Dossier contenant la définition du module (action). Le fichier /etc/puppet/modules/<module>/manifests/init.pp contient la définition du module (les instructions à donner) et le répertoire /etc/puppet/modules/<module>/files/ les fichiers nécessaires à l’exécution de ce module.

=> Définition de votre site (réseau) :

La convention veut que le fichier site.pp contienne que des lignes d'import et la définition des variables globales.

filebucket {
    'main':
# Le nom du serveur Puppet (les clients doivent résoudre le nom FQDN du serveur)
        server => 'puppet-master'
}
File {
    backup => 'main'
}
 
# Importation du fichier 'node.pp'
import "node"

=> Définition des nœuds (clients) :

Le fichier node.pp définit les configurations à appliquer sur les clients.

node 'puppet-srv1' {
# Importation du module 'common'
    include common
}

=> Définition des modules (actions) :

Chaque module dispose de son propre dossier /etc/puppet/modules/<module>/.

Il faut au préalable créer l'arborescence du module :

mkdir -p /etc/puppet/modules/common/files
mkdir -p /etc/puppet/modules/common/manifests

Le manifest de classe 'common' va contenir la définition des actions à effectuer.

class common {
    file {
        "/etc/motd":
            owner => root,
            group => root,
            mode => 644,
            source => "puppet:///modules/common/motd"
	}
}

Le module 'common' va donc vérifier:

  • L'existence sur les clients du fichier /etc/motd
  • Appartenance à l'utilisateur root
  • Appartenance au groupe root
  • Avec les droits 644
  • Dont le contenu est égal au fichier de référence placé dans /etc/puppet/modules/common/files/motd

=> Validation de la configuration

Pour que le master valide la nouvelle configuration il faut relancer le service :

master$ service puppetmaster restart

Pour forcer la mise à jour de la configuration sur vos clients :

client$ puppet agent -t -v
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for puppet-srv1
Info: Applying configuration version '1469706752'
...
Notice: Finished catalog run in 0.19 seconds

Si vous rencontrez un problème, vous pouvez lancer les commandes suivantes en fonction de votre position afin de comprendre d'où vient le problème.

client$ puppet agent -t -v -d
master$ tail -f /var/log/daemon.log

Vous voilà prêt à utiliser cet outil qui vous fera gagner du temps dans le temps.

Les explications et exemples de ce wiki sont assez sommaire, il est vraiment possible de faire beaucoup de chose intéressante tant au niveau configuration, mais également pour de la maintenance en lançant des commandes via le master. Vous trouverez plus d'infos sur la documentation du Puppet.

De nombreux modules existent déjà sur Puppet Forge, ce qui vous aidera à écrire votre module ou fera gagner du temps en trouvant votre bonheur.

Vous pourriez laisser un commentaire si vous étiez connecté.