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
Le langage Puppet
- Référence : The Puppet language
Le langage utilisé par puppet permet de décrire l'état dans lequel au souhaite mettre le système. On parlera alors de :
catalogs: l'ensemble des données (ressources,classesetmanifests) disponibles pour un agent.ressources: l'état d'un élément du système. Il peut s'agir d'un paquet, un fichier, un service, accompagné pour chacun d'entre eux de l'état du-dit objet.===== Les fonctions de base ===== ==== 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>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 }</file> ===== Les classes ===== ===== Les modules ===== ===== Les nœuds ===== Les nœuds ne sont rien d'autres que les clients du serveurpuppet. 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