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.
- 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 :
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.classes: un ensemble de ressources regroupées au sein d'un même objet afin de pouvoir être géré en une seule fois.manifest: un fichier avec l'extensionppcontenant des déclarations de ressources et/ou de classes.catalogs: l'ensemble des données (ressources,classesetmanifests) disponibles pour un agent.
Type de ressources les plus fréquents
exec
Permet l'exécution d'une commande spécifique.
- Référence : Resource Type: exec
exec { 'HelloWorld': # Nom de la ressource
command => 'echo "Hello World!"', # Commande à exécuter
cwd => '/tmp', # Dossier à partir duquel exécuter la commande
path => ['/bin/', '/usr/bin', '/usr/sbin',], # Dossiers dans lesquels chercher la commande à exécuter
}
file
Pour la création, modification suppression d'un fichier.
- Référence : Ressource Type: 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
Pour l'ajout, la modification ou la suppression d'une ligne dans un fichier.
- Référence : Ressource Type: file_line
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
}
package
Pour gérer les paquets (installation, suppression, …)
- Référence : Resource Type: package
package { 'openssl': # Paquet à gérer
ensure => 'present', # A installer si absent
mark => 'hold', # Verrouiller la version (empêche les mises à jour)
}
service
Permet de gérer un service (démarrage, arrêt, redémarrage, rechargement, etc.)
- Référence : Resource Type: service
service { 'apache2': # Service à gérer
ensure => 'running', # Le service doit être en cours d'exécution
enable => 'true', # Le service doit être en démarrage automatique
}
ssh_authorized_key
Permet de gérer les fichiers authorized_keys (contenant les clés SSH publiques ainsi que leurs options)
- Référence : Resource Type: ssh_authorized_key
ssh_authorized_key { '/home/nekan/.ssh/authorized_keys': # Gestion du fichier ~/.ssh/authorized_keys
ensure => 'present', # present : création si absent | absent : suppression si présent
user => 'nekan', # Définition du l'utilisateur lié à la clé
type => 'ssh-rsa', # Type de la clé à ajouter
key => 'AAAAB3NzaC[...]Z6q17zF4sW1WvU=', # Clé à ajouter
}
user
Permet de gérer les utilisateurs (création, suppression, etc)
- Référence : Resource Type: user
user { 'nekan': # 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
}
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