Aujourd'hui, on parle de Puppet. Pas le muppet. Pas la marionnette. Le vrai. Le gestionnaire de configuration. Celui qui te permet de ne plus jamais oublier un package ou une ligne de fstab.

Et comme toujours sur Stranix.net : on l’installe, on le teste, on le dĂ©monte si besoin.


🧰 Objectif : gĂ©rer un montage NFS avec Puppet

J’ai un serveur principal debian-prod-001.home.stranix.net et un client rasp001.home.stranix.net. Je veux que ces deux machines montent automatiquement un partage NFS dĂ©fini comme suit :

truenas-prod-001:/mnt/data1-raid5/videos /mnt/data1-raid5/videos nfs defaults 0 0

đŸ—ïž Étape 1 : Installation de Puppet

Sur le serveur Puppet (debian-prod-001)

apt update && apt install puppetserver -y

⚙ On adapte les ressources pour le JVM si besoin dans /etc/default/puppetserver :

JAVA_ARGS="-Xms512m -Xmx512m"

Puis on démarre le serveur :

systemctl enable puppetserver --now

Sur les clients (rasp001 ici)

apt update && apt install puppet-agent -y

Ensuite, assure-toi que /etc/hosts ou ton DNS interne permet de rĂ©soudre debian-prod-001.home.stranix.net. C’est capital pour la suite.

Puis démarre le service Puppet Agent :

systemctl enable puppet --now

🔐 Étape 2 : Gestion des certificats

Quand tu lances l’agent pour la premiùre fois :

puppet agent --test

Il va crĂ©er une requĂȘte de certificat. Sur le serveur Puppet :

puppetserver ca list --all

Tu verras un fingerprint. Pour signer :

puppetserver ca sign --certname rasp001.home.stranix.net

Ensuite, relance l’agent :

puppet agent --test

Tu devrais voir les plugins se synchroniser 🎉


📁 Étape 3 : Structure de fichiers et modules

Le site.pp (manifest principal)

📄 Fichier : /etc/puppetlabs/code/environments/production/manifests/site.pp

node 'debian-prod-001.home.stranix.net' {
  notify { '✅ Node debian-prod-001 OK': }
  include nfs_mount
}

node 'rasp001.home.stranix.net' {
  notify { '✅ Node rasp001 OK': }
  include nfs_mount
}

node default {
  notify { "⚠ Aucun bloc node spĂ©cifique n’a matchĂ©. Certname: ${trusted['certname']}" : }
}

Le module nfs_mount

Dossier : /etc/puppetlabs/code/environments/production/modules/nfs_mount/

📁 manifests/init.pp

class nfs_mount {
  package { 'nfs-common':
    ensure => installed,
  }

  file { '/mnt/data1-raid5/videos':
    ensure => directory,
    owner  => 'root',
    group  => 'root',
    mode   => '0755',
  }

  file_line { 'fstab-nfs-videos':
    path  => '/etc/fstab',
    line  => 'truenas-prod-001:/mnt/data1-raid5/videos /mnt/data1-raid5/videos nfs defaults 0 0',
    match => '^truenas-prod-001:/mnt/data1-raid5/videos',
    require => Package['nfs-common'],
  }

  mount { '/mnt/data1-raid5/videos':
    ensure  => mounted,
    device  => 'truenas-prod-001:/mnt/data1-raid5/videos',
    fstype  => 'nfs',
    options => 'defaults',
    atboot  => true,
    require => [File_line['fstab-nfs-videos'], File['/mnt/data1-raid5/videos']],
  }
}

đŸ§Ș Test en live

puppet agent --test

Résultat attendu :

  • CrĂ©ation de /mnt/data1-raid5/videos
  • Ajout dans /etc/fstab
  • Montage NFS immĂ©diat

Tu peux confirmer :

df -h | grep videos
cat /etc/fstab | grep videos

✅ Et voilĂ  ! Ton point de montage est gĂ©rĂ© automatiquement, proprement, et versionnĂ© via Git si tu veux aller plus loin.


🔄 Puppet : push ou pull ? Et Ă  quelle frĂ©quence ?

đŸ§Č Puppet fonctionne en mode pull :

  • C’est le client Puppet Agent qui contacte pĂ©riodiquement le serveur
  • Il rĂ©cupĂšre un catalogue de configuration
  • Il applique localement ce que le serveur lui a dĂ©fini

Il n'y a pas de push du serveur vers les clients.

⏱ FrĂ©quence d’exĂ©cution

Par dĂ©faut : toutes les 30 minutes.

puppet config print runinterval

Changer l’intervalle (en secondes) dans /etc/puppet/puppet.conf :

[agent]
runinterval = 600   # toutes les 10 minutes

Relancer ensuite Puppet :

systemctl restart puppet

🧠 Ce que ça m’a appris

  • Puppet, c’est propre, modulaire, versionnable
  • Le client initie le contact, pas le serveur
  • Tu peux forcer un run, dĂ©sactiver l’agent, voir le statut SSL, etc.

🧰 Bonnes pratiques et commandes utiles

ActionCommande
Forcer une exécutionpuppet agent --test
DĂ©sactiver l’agent temporairementpuppet agent --disable "Raison"
RĂ©activer l’agentpuppet agent --enable
Afficher le certname de la machinepuppet config print certname
Voir la config actuellepuppet config print --all
Appliquer un manifest localpuppet apply /chemin/to/mon.pp

💬 Et maintenant ?

Tu peux commenter ou me rejoindre sur LinkedIn - Stranix.net , X/Twitter pour Ă©changer autour de Puppet, DevOps, open source et autres joyeusetĂ©s.

Tu veux que je te partage le module complet dans un dépÎt Git ? Dis-moi.


🔁 À demain pour un nouveau logiciel libre ?