Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
puppet [Le 10/11/2011, 12:31]
herrleiche [Systèmes supportés]
puppet [Le 13/11/2023, 01:40] (Version actuelle)
Benjamin Loison [Puppet] Mise en majuscule d'un caractère le nécessitant
Ligne 1: Ligne 1:
-{{tag>​entreprise serveur ​Hardy Maverick}}+{{tag>Xenial ​entreprise serveur}}
 ---- ----
 ====== Puppet ====== ====== Puppet ======
  
-===== Présentation ===== +Puppet est un outil de gestion de la configuration de serveurs, il permet le télédéploiement de configuration sur un ensemble de serveurs en quelques minutes. L'​intérêt de cette solution open source réside dans son support multi-plateformes (basé sur Ruby), sa sécurité (TLS), son développement actif et sa relative simplicité à mettre en œuvre.
-Puppet est un outils ​de gestion de la configuration de serveurs, il permet le télédéploiement de configuration sur un ensemble de serveurs en quelques minutes. L'​intérêt de cette solution open source réside dans son support multi-plateformes (basé sur ruby), sa sécurité (ssl), son développement actif et sa relative simplicité à mettre en oeuvre.+
 \\ \\
 {{:​administration:​puppet.png|}} {{:​administration:​puppet.png|}}
  
-<note tip>Il existe une version Legacy (0.25.x) qui comporte de nombreux bugs et manque de fonctionnalités l'​article ci dessous ne traite que de la version stable 2.6.x</note>+Systèmes supportés :​ 
 +Puppet fonctionne sur la plupart des systèmes Unix et sur WindowsVoir [[http://​www.puppetlabs.com/puppet/​requirements/​|ici]] pour plus de détails.
  
-===== Prérequis ​=====+ 
 +===== Pré-requis ​===== 
 +  * Disposer des [[:​sudo|droits d'​administration]]. 
 +  * Disposer d'une connexion à Internet configurée et activée.
   * Disposez de plusieurs serveurs à administrer sans quoi le gain de temps et d'​énergie ne sera pas effectif.   * Disposez de plusieurs serveurs à administrer sans quoi le gain de temps et d'​énergie ne sera pas effectif.
   * Notions en administration système.   * Notions en administration système.
  
-===== Systèmes supportés ===== 
-Puppet fonctionne sur la plupart des système Uni* et dans une moindre mesure Windows. voir [[http://​www.puppetlabs.com/​puppet/​requirements/​|ici]] pour plus de détails. 
  
-<note tip>​Windows est officiellement supporté depuis la version 2.7.x</​note>​ 
  
 ===== Installation ===== ===== Installation =====
-Puppet est présent dans les dépôts, installez les paquets puppet, facter et puppetmaster (pour le serveur maître) : +Puppet est présent dans les [[:dépôts]], installez les paquets puppet, facter et puppetmaster (pour le serveur maître) :​ 
-  * Sur le client +  * Sur le client <​code>​apt-get install puppet</​code>​ 
-<​code>​apt-get install puppet</​code>​ +  * Sur le master <​code>​apt-get install puppetmaster</​code>​ 
-  * Sur le master +Cependant si vous souhaitez une version différente rendez-vous sur la page de téléchargement [[http://​www.puppetlabs.com/​misc/​download-options/​|officielle]] pour obtenir un package .tar.gz. Autre solution installer puppet sous forme de [[http://​puppetlabs.com/​downloads/​gems/​|gem]] (le système de paquet ruby). Dans ce cas l'​installation est tout aussi simple : 
-<​code>​apt-get install puppetmaster</​code>​ +<​code>​ 
-Cependant si vous souhaitez une version différente rendez vous sur la page de téléchargement [[http://​www.puppetlabs.com/​misc/​download-options/​|officielle]] pour obtenir un package .tar.gz. Autre solution installer puppet sous forme de [[http://​puppetlabs.com/​downloads/​gems/​|gem]] (le système de paquet ruby). Dans ce cas l'​installation est tout aussi simple : +apt-get install rubygems 
-<​code>​gem install facter +gem install facter 
-gem install puppet</​code>​+gem install puppet 
 +</​code>​
  
 ===== Configuration ===== ===== Configuration =====
Ligne 33: Ligne 34:
 ==== Maître ==== ==== Maître ====
 === Fichiers de configuration === === Fichiers de configuration ===
-<note tip>Les fichiers de configuration sont donnés à titre d'​exemple ​vous êtes libre d'​indiquer d'​autres paramètres.</​note>​+<note tip>Les fichiers de configuration sont donnés à titre d'​exemple. Vous êtes libre d'​indiquer d'​autres paramètres.</​note>​
  
-On modifie le fichier /​etc/​puppet/​puppet.conf+On [[:​tutoriel:​comment_modifier_un_fichier|modifie le fichier]] **/​etc/​puppet/​puppet.conf** :
 <​file>​ <​file>​
 [main] [main]
Ligne 56: Ligne 57:
 </​file>​ </​file>​
  
-=== Parefeu ​=== +=== Pare-feu ​=== 
-On modifie également notre firewall ​afin de laissez ​passer les flux :+On modifie également notre pare-feu ​afin de laisser ​passer les flux :
 <​code>​ <​code>​
 iptables -A OUTPUT -p tcp -m state --state NEW,​ESTABLISHED -s ipdumaster --sport 8140 -d ipduclient -j ACCEPT iptables -A OUTPUT -p tcp -m state --state NEW,​ESTABLISHED -s ipdumaster --sport 8140 -d ipduclient -j ACCEPT
Ligne 66: Ligne 67:
  
 === Configuration de l'​agent Puppet === === Configuration de l'​agent Puppet ===
-/​etc/​puppet/​puppet.conf+On [[:​tutoriel:​comment_modifier_un_fichier|modifie le fichier]] **/​etc/​puppet/​puppet.conf** :
 <​file>​ <​file>​
 [main] [main]
Ligne 77: Ligne 78:
 listen=true listen=true
 </​file>​ </​file>​
 +
 +Le **runinterval** permet de spécifier, en secondes, l'​intervalle entre deux connexions que fera le client, vers le serveur. Pour qu'​elles soient vraiment lancées régulièrement,​ il faut que le daemon puppet soit lancé (/​etc/​init.d/​puppet start).
  
 Le paramètre **listen** et les fichiers auth.conf et namespaceauth.conf sont nécessaires pour activer le déploiement à partir du master (**puppet kick** ou **puppetrun**) si vous ne souhaitez pas utiliser ces commandes, ces fichiers sont inutiles. Le paramètre **listen** et les fichiers auth.conf et namespaceauth.conf sont nécessaires pour activer le déploiement à partir du master (**puppet kick** ou **puppetrun**) si vous ne souhaitez pas utiliser ces commandes, ces fichiers sont inutiles.
Ligne 86: Ligne 89:
 allow * allow *
 </​file>​ </​file>​
 +
 +<note warning>​Attention le fichier auth.conf donné en exemple est dédié à des phases de tests, il autorise par défaut toutes les connexions sur l'​ensemble des éléments</​note>​
  
 /​etc/​puppet/​namespaceauth.conf /​etc/​puppet/​namespaceauth.conf
Ligne 100: Ligne 105:
 </​file>​ </​file>​
  
-=== Parefeu ​=== +=== Pare-feu ​=== 
-Si vous disposez d'​un ​parefeu ​actif il faut songer à ouvrir le port 8139 :+Si vous disposez d'​un ​pare-feu ​actif il faut songer à ouvrir le port 8139 :
 <​code>​ <​code>​
 iptables -A OUTPUT -p tcp -m state --state NEW,​ESTABLISHED -s ipduclient --sport 8139 -d ipdumaster -j ACCEPT iptables -A OUTPUT -p tcp -m state --state NEW,​ESTABLISHED -s ipduclient --sport 8139 -d ipdumaster -j ACCEPT
Ligne 107: Ligne 112:
 </​code>​ </​code>​
  
-===== Validation =====+===== Validation ​d'un client ​=====
 Avant de pouvoir utiliser un client il faut préalablement le valider auprès du master. Pour cela sur le client lancer la commande : Avant de pouvoir utiliser un client il faut préalablement le valider auprès du master. Pour cela sur le client lancer la commande :
 <​code>​puppetd --test</​code>​ <​code>​puppetd --test</​code>​
-Cela va générer un certificat que l'on nous demandera de valider, pour cela sur le serveur :+Cela va générer un certificat que l'on nous demandera de valider. Pour cela sur le serveur :
 <​code>​puppetca --list <​code>​puppetca --list
 nomduclient nomduclient
Ligne 118: Ligne 123:
  
 ===== Déploiement à partir du master ===== ===== Déploiement à partir du master =====
 +
 +==== Via la commande Puppetrun ====
 Pour lancer le **puppetd --test** sans devoir être connecté à chaque client on lance Pour lancer le **puppetd --test** sans devoir être connecté à chaque client on lance
 <​code>​puppet kick nomduclient</​code>​ <​code>​puppet kick nomduclient</​code>​
Ligne 124: Ligne 131:
 <note tip>Si cela ne fonctionne pas vérifiez bien qu'un déploiement sur le client est fonctionnel ainsi que l'​ouverture des ports du parefeu.</​note>​ <note tip>Si cela ne fonctionne pas vérifiez bien qu'un déploiement sur le client est fonctionnel ainsi que l'​ouverture des ports du parefeu.</​note>​
  
 +==== Via l'API REST (conseillé) ====
 +L'API REST permet à une requête HTTP d'​envoyer un équivalent du **puppetrun** mais permet en plus le passage d'​arguments tel que l'​environnement.
 +Il suffira ainsi de passer la commande suivante via **CURL** pour lancer un puppetrun sur l'​environnement de production. Cette dernière renverra alors le retour du déploiement au format **Yaml**
 +<​code>​curl -k -X PUT -H "​Content-Type:​ text/​pson"​ -d "​{}"​ https://​puppetclient:​8139/​production/​run/​no_key</​code>​
 +
 +L'​utilisation de l'API est explicitée [[http://​docs.puppetlabs.com/​guides/​rest_api.html|[en] ici]]
 ===== Problèmes ===== ===== Problèmes =====
 ==== Désactivez le déploiement automatique d'un client ==== ==== Désactivez le déploiement automatique d'un client ====
-Un client **puppetd** qui tourne en daemon à la fâcheuse tendance d'​être configuré pour exécuter un //**puppetd --test**// à intervalle régulier. Pour solutionner ce problème tout en gardant un démon ​à l'​écoute du **puppetrun** du master il faut lancer le process **puppetd** avec l'​option **--no-client** soit :+Un client **puppetd** qui tourne en daemon à la fâcheuse tendance d'​être configuré pour exécuter un //**puppetd --test**// à intervalles réguliers. Pour solutionner ce problème tout en gardant un daemon ​à l'​écoute du **puppetrun** du master il faut lancer le process **puppetd** avec l'​option **%%--%%no-client** soit :
 <​code>​puppetd --no-client</​code>​ pour automatiser l'​ensemble on pourra le rajouter dans le fichier /​etc/​init.d/​puppet <​code>​puppetd --no-client</​code>​ pour automatiser l'​ensemble on pourra le rajouter dans le fichier /​etc/​init.d/​puppet
  
 ==== err: Could not retrieve catalog: Could not parse for environment development:​ Could not match ''​ ==== ==== err: Could not retrieve catalog: Could not parse for environment development:​ Could not match ''​ ====
-Ce problème peut survenir au cours d'un déploiement,​ il s'agit d'un mauvais encodage du/des fichier(s) de scripts puppet ​lorsque il ont été créé ​à partir d'un poste sous Windows, pour résoudre ce soucis ​un petit coup de dos2unix fera l'​affaire =) :+Ce problème peut survenir au cours d'un déploiement,​ il s'agit d'un mauvais encodage du/des fichier(s) de scripts puppet ​lorsqu'​ils ​ont été créés ​à partir d'un poste sous Windows, pour résoudre ce souci un petit coup de dos2unix fera l'​affaire =) :
 <​code>​dos2unix le/​fichier/​de/​script</​code>​ <​code>​dos2unix le/​fichier/​de/​script</​code>​
  
Ligne 144: Ligne 157:
 ==== certificate verify failed ==== ==== certificate verify failed ====
 <​code>​err:​ Could not retrieve catalog from remote server: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed</​code>​ <​code>​err:​ Could not retrieve catalog from remote server: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed</​code>​
-indique que le certificat que possède le client diffère de celui du master, aussi la solution la plus simple est de régénérer un certificat sur le client puis de le signer sur le master. ​pour ce faire on supprime le certificat précédent.+indique que le certificat que possède le client diffère de celui du master, aussi la solution la plus simple est de régénérer un certificat sur le client puis de le signer sur le master. ​Pour ce faire on supprime le certificat précédent.
 <​code>​rm -rf /​etc/​puppet/​ssl</​code>​ <​code>​rm -rf /​etc/​puppet/​ssl</​code>​
 <note important>​Le répertoire peut différer en fonction de votre configuration,​ il s'agit de la valeur de la variable **ssldir** dans le fichier **///​etc/​puppet/​puppet.conf//​**</​note>​ <note important>​Le répertoire peut différer en fonction de votre configuration,​ il s'agit de la valeur de la variable **ssldir** dans le fichier **///​etc/​puppet/​puppet.conf//​**</​note>​
-On effectue une nouvelle tentative de déploiement qui vas générer un nouveau certificat+On effectue une nouvelle tentative de déploiement qui va générer un nouveau certificat
 <​code>​puppetd --test <​code>​puppetd --test
 info: Creating a new SSL key for votreserveur.fr info: Creating a new SSL key for votreserveur.fr
Ligne 162: Ligne 175:
  
 ==== err: Could not request certificate:​ Neither PUB key nor PRIV key:: header too long ==== ==== err: Could not request certificate:​ Neither PUB key nor PRIV key:: header too long ====
-Si lors du lancement de la commande puppetd --test vous obtenez cette erreur+Si lors du lancement de la commande puppetd --test vous obtenez cette erreur ​:
 <​code>​ <​code>​
 puppetd --test puppetd --test
Ligne 186: Ligne 199:
 Ce problème survient lorsque le système de fichier sur lequel Puppet essaye de créer le certificat est plein. Ce problème survient lorsque le système de fichier sur lequel Puppet essaye de créer le certificat est plein.
  
 +==== Processus fantôme ====
 +Si le déploiement renvoie une erreur de ce type :
 +<​code>​puppetd --test
 +notice: Run of Puppet configuration client already in progress; skipping
 +</​code>​
 +mais qu'il n'​existe aucun processus ou fichier .pid sous **/​var/​run/​puppet**,​ c'est qu'il existe probablement un fichier verrou qui n'a pas été correctement supprimé. Pour ce faire passer la commande suivante :
 +<​code>​rm /​var/​lib/​puppet/​state/​puppetdlock</​code>​
 ===== Désinstallation ===== ===== Désinstallation =====
 Pour supprimer cette application,​ il suffit de [[:​tutoriel:​comment_supprimer_un_paquet|supprimer son paquet]]. Si vous avez choisi l'​option des gems il vous suffira de faire : Pour supprimer cette application,​ il suffit de [[:​tutoriel:​comment_supprimer_un_paquet|supprimer son paquet]]. Si vous avez choisi l'​option des gems il vous suffira de faire :
 <​code>​gem uninstall puppet <​code>​gem uninstall puppet
-gem uninstall facter</​code>​+gem uninstall facter</​code>​
 ===== Liens ===== ===== Liens =====
   * **en** [[http://​www.puppetlabs.com/​|Site officiel]]   * **en** [[http://​www.puppetlabs.com/​|Site officiel]]
   * **en** [[http://​docs.puppetlabs.com/​|Documentation officielle]]   * **en** [[http://​docs.puppetlabs.com/​|Documentation officielle]]
   * [[http://​puppetlabs.com/​downloads/​gems/​|Dépôt de gems]]   * [[http://​puppetlabs.com/​downloads/​gems/​|Dépôt de gems]]
-  * **fr** [[http://​fr.wikipedia.org/​wiki/​Puppet_%28outil%29|Fiche sur Wikipédia]]+  * **fr** [[wpfr>​Puppet|Fiche sur Wikipédia]]
  
 ---- ----
 //​Contributeurs principaux : [[:​utilisateurs:​Herrleiche]].//​ //​Contributeurs principaux : [[:​utilisateurs:​Herrleiche]].//​
  • puppet.1320924705.txt.gz
  • Dernière modification: Le 15/12/2011, 15:20
  • (modification externe)