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
Action | Commande |
---|---|
Forcer une exécution | puppet agent --test |
DĂ©sactiver lâagent temporairement | puppet agent --disable "Raison" |
RĂ©activer lâagent | puppet agent --enable |
Afficher le certname de la machine | puppet config print certname |
Voir la config actuelle | puppet config print --all |
Appliquer un manifest local | puppet 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 ?