162 lines
3.6 KiB
Markdown
162 lines
3.6 KiB
Markdown
|
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
|
|||
|
|
|||
|
# Howto Puppet
|
|||
|
|
|||
|
## Mise en place de l'infra
|
|||
|
|
|||
|
Puppet fonctionne avec un _puppetmaster_, qui centralise la configuration à déployer sur les différents nœuds, sur lesquels tournent des agents Puppet.
|
|||
|
|
|||
|
[[Image(puppet_simple.png, 33%)]]
|
|||
|
|
|||
|
### Puppet master
|
|||
|
|
|||
|
#### Installation
|
|||
|
|
|||
|
~~~
|
|||
|
# aptitude install puppetmaster
|
|||
|
~~~
|
|||
|
|
|||
|
On peut d'ores-et-déjà lancer le démon :
|
|||
|
~~~
|
|||
|
# /etc/init.d/puppetmaster start
|
|||
|
~~~
|
|||
|
|
|||
|
### Agents Puppet
|
|||
|
|
|||
|
#### Installation
|
|||
|
|
|||
|
~~~
|
|||
|
# aptitude install puppet
|
|||
|
~~~
|
|||
|
|
|||
|
#### Configuration
|
|||
|
|
|||
|
Activer l'agent Puppet dans _/etc/default/puppet.conf_ :
|
|||
|
~~~
|
|||
|
START=yes
|
|||
|
~~~
|
|||
|
|
|||
|
Ajouter l'adresse du puppetmaster dans _/etc/puppet/puppet.conf_ :
|
|||
|
~~~
|
|||
|
[agent]
|
|||
|
server=puppetmaster.example.net
|
|||
|
~~~
|
|||
|
|
|||
|
Puis :
|
|||
|
~~~
|
|||
|
/etc/init.d/puppet start
|
|||
|
~~~
|
|||
|
|
|||
|
La communication entre l'agent et le maître Puppet se fait en SSL. Lors du premier lancement, l'agent Puppet va alors envoyer automatiquement une demande de certificat (CSR) au maître.
|
|||
|
|
|||
|
On peut s'assurer de la bonne connexion entre l'agent et le maître :
|
|||
|
~~~
|
|||
|
# puppet agent --test
|
|||
|
~~~
|
|||
|
À ce stade, la commande doit retourner une erreur SSL disant que le certificat ne peut être vérifié.
|
|||
|
|
|||
|
Sur le maître, on peut lister les certificats ainsi :
|
|||
|
~~~
|
|||
|
# puppet cert --list
|
|||
|
~~~
|
|||
|
|
|||
|
Et signer le bon certificat :
|
|||
|
~~~
|
|||
|
# puppet cert --sign client.example.net
|
|||
|
~~~
|
|||
|
|
|||
|
## Utilisation de Puppet
|
|||
|
|
|||
|
### Les Manifests
|
|||
|
|
|||
|
Les fichiers Manifests (extension _.pp_) sont les « programmes » Puppet. Ils permettent de déclarer des ressources.
|
|||
|
|
|||
|
Le fichier de base est _/etc/puppet/manifests/site.pp_. Générallement, il est bon d'éclater les diverses déclarations dans d'autres fichiers/répertoires, et de ne faire que des inclusion dans ce fichier.
|
|||
|
|
|||
|
Exemple de fichier ''site.pp' :
|
|||
|
~~~
|
|||
|
import "nodes"
|
|||
|
~~~
|
|||
|
Ici, on indique d'inclure le fichier _/etc/puppet/manifest/nodes.pp_, qui contiendra la déclaration des différents nœuds recevant leur configuration.
|
|||
|
|
|||
|
Exemple de fichier _nodes.pp_ :
|
|||
|
~~~
|
|||
|
node myhost.example.net {
|
|||
|
# déclaration spécifique à ce nœud
|
|||
|
}
|
|||
|
|
|||
|
node myhost2.example.net {
|
|||
|
# déclaration spécifique à ce nœud
|
|||
|
}
|
|||
|
~~~
|
|||
|
À noter qu'il est important que le fqdn du nœud qui se connecte au master corresponde à _myhost.example.net_ (dans l'exemple) (cela peut néanmoins se configurer).
|
|||
|
|
|||
|
## Exemple
|
|||
|
|
|||
|
### Tester un manifest
|
|||
|
|
|||
|
Créer le manifest suivant, test.pp
|
|||
|
|
|||
|
~~~
|
|||
|
file {'testfile':
|
|||
|
path => '/tmp/testfile',
|
|||
|
ensure => present,
|
|||
|
mode => 0640,
|
|||
|
content => "I'm a test file.",
|
|||
|
}
|
|||
|
~~~
|
|||
|
|
|||
|
Pour vérifier, on peut l'appliquer directement sur le serveur par exemple, avec la commande suivante :
|
|||
|
|
|||
|
~~~
|
|||
|
puppet apply test.pp
|
|||
|
notice: /Stage[main]//File[testfile]/ensure: created
|
|||
|
~~~
|
|||
|
|
|||
|
Modifier les droits du fichiers, puis re-faites un _apply_ :
|
|||
|
|
|||
|
~~~
|
|||
|
chmod 777 /tmp/testfile
|
|||
|
puppet apply test.pp
|
|||
|
notice: /Stage[main]//File[testfile]/mode: mode changed '777' to '640'
|
|||
|
~~~
|
|||
|
|
|||
|
### Manifests en Master/Agent (Serveur/Client)
|
|||
|
|
|||
|
Sur le serveur il faut faire une liste des nœuds (clients) et quels manifests leur affecter.
|
|||
|
|
|||
|
/etc/puppet/manifests/site.pp
|
|||
|
~~~
|
|||
|
class test{
|
|||
|
file {'testfile':
|
|||
|
path => '/tmp/testfile',
|
|||
|
ensure => present,
|
|||
|
mode => 0640,
|
|||
|
content => "I'm a test file.",
|
|||
|
}
|
|||
|
}
|
|||
|
node client {
|
|||
|
include test
|
|||
|
}
|
|||
|
~~~
|
|||
|
|
|||
|
|
|||
|
### Distribution des fichiers via puppet
|
|||
|
|
|||
|
~~~
|
|||
|
#/etc/puppet/fileserver.conf
|
|||
|
[files]
|
|||
|
path /etc/puppet/files
|
|||
|
allow 192.168.0.0/16
|
|||
|
~~~
|
|||
|
|
|||
|
~~~
|
|||
|
class test{
|
|||
|
file {'testfile':
|
|||
|
path => '/tmp/testfile',
|
|||
|
ensure => present,
|
|||
|
mode => 0640,
|
|||
|
source => "puppet://master.mondomaine.com/files/apps/sudo/sudoers"
|
|||
|
}
|
|||
|
}
|
|||
|
~~~
|