Ceci est une ancienne révision du document !
Configurer les automatisations de Puppet
Création — Nicolas THOREZ 2022/11/20 17:37
Architecture et composants
L'ensemble des règles de Puppet est contenu dans le dossier /etc/puppetlabs/code/environments. A ce premier niveau on trouvera les différents environnements. production est créé par défaut mais il est possible d'en ajouter d'autres, preprod, test, etc…
Au sein des dossiers d'environnement, on trouvera notamment :
- le fichier
environment.conf: contient les paramétrages depuppetpour cet environnement. - le dossier
manifest: contient les règles d'automatisation a appliquer. - le dossier
modules: contient les modules disponibles pour cet environnement.
Lorsqu'un agent se connecte, le serveur puppet compile l'ensemble des fichiers *.pp de l'environnement sélectionné et informe l'agent des règles qui le concerne et par conséquent, des actions à réaliser. Parmis ces fichiers, le plus important est le fichier site.pp qui correspond au fichier général pour l'ensemble des clients.
Au niveau des composants, les fichiers *.pp contiendra :
- Des fonctions : peut être la création, modification, suppression d'un fichier, la gestion d'un service, l'installation, suppression d'un paquet, etc…
- Des classes : il s'agit d'un ensemble de fonctions.
- Des modules : il s'agit d'un ensemble de classes.
- Référence : Puppet
Les fonctions de bases
Gestion des fichiers
La gestion d'un fichier est introduit par les termes :
file: création, suppression ou modification de l'intégralité du contenu.file_line: création, suppression ou modification d'une ligne spécifique.
- Référence : Ressource Type: file
- Référence : Ressource Type: file_line
file { '/home/nekan/test.txt': # Chemin du fichier
content => template('file/test.txt'), # Emplacement de la source
ensure => 'present', # 'present' pour la création et 'absent' pour la suppression
mode => '0755', # Droits du fichier (chmod)
owner => 'nekan', # Propriétaire du fichier (chown)
group => 'adm', # Groupe du fichier (chgrp)
}
file_line { 'puppet_test': # Nom de la ligne (arbitraire)
line => 'ligne = ligne de test', # contenu de la ligne tel qu'elle doit être dans le fichier
match => '^ligne', # 'match' permet de vérifier la ligne à modifier par le biais d'une regex
after => '^# Logs', # recherche la ligne à modifier après une ligne spécifié par la regex
path => '/etc/nagios/nrpe.d/check_debian.cfg', # Chemin du fichier à modifier
notify => Service['nagios-nrpe-server'], # Service à notifier (redémarrer, recharger) après modification
}
Les classes
Les modules
Les nœuds
Les nœuds ne sont rien d'autres que les clients du serveur puppet. Ils sont définis par le mot-clé node, suivi du nom du client et de l'ensemble des modules et classes qui doivent s'appliquer à ce dernier. Exemple :
node 'test1' { include class1, class2, class3 }
node 'test2' {
include class1
include class4
include class5
}
Exemples
Gestion d'un utilisateur
class user_nekan{ # Nom de la classe
$user = 'nekan' # Nom de l'utilisateur variabilité afin de faciliter la duplication de la classe
user { $user: # Création de l'utilisateur
ensure => present, # present : création si absent | absent : suppression si présent
shell => "/bin/bash", # Le shell qu'utilisera l'utilisateur
password => '$6$/odkSIo4.[...]YW/lpsg1', # Le mot de passe de l'utilisateur en version sécurisée
groups => ['sudo'], # La lise de groupes que doit intégrer l'utilisateur
managehome => yes, # Création du dossier home
}
ssh_authorized_key { $user: # Gestion du fichier ~/.ssh/authorized_keys
ensure => present, # present : création si absent | absent : suppression si présent
user => $user, # Définition du l'utilisateur lié à la clé
type => 'ssh-rsa', # Type de la clé à ajouter
key => 'AAAAB3NzaC[...]Z6q17zF4sW1WvU=', # Clé à ajouter
}
file{"/home/$user": # Gestion du dossier home
mode => '0700', # Droits à appliquer sur le dossier
}
file {"/home/$user/.bashrc": # Gestion du fichier ~/.bashrc
ensure => present, # present : création si absent | absent : suppression si présent
owner => $user, # Définition du propriétaire du fichier (chown)
group => $user, # Définitions du groupe du fichier (chgrp)
content => file('file/root_bashrc'), # Source du fichier à copier sous la forme module/fichier. La racine est '/etc/puppetlabs/code/environments/<environnement>/modules/<module>/files/<fichier>'
}
}

Discussion