PUPPET » Historique » Version 64
Version 22 (Laurent GUERBY, 22/10/2013 11:16) → Version 64/69 (Mehdi Abaakouk, 04/05/2014 17:26)
h1. Master of Puppet
h2. Misc links
* http://ldn-fai.net/introduction-puppet/
* http://blog.octo.com/passer-du-shell-a-puppet/
* http://devopsanywhere.blogspot.fr/2011/10/puppet-vs-chef-fight.html
* http://blog.loof.fr/2011/10/puppet-vs-chef-fight.html
* http://finninday.net/wiki/index.php/Zero_to_puppet_in_one_day
* http://blog.wikimedia.org/2011/09/19/ever-wondered-how-the-wikimedia-servers-are-configured/
* https://gerrit.wikimedia.org/r/gitweb?p=operations/puppet.git;a=tree
* http://blog.wikimedia.org/2012/04/16/introduction-to-wikimedia-labs/
* http://docs.puppetlabs.com/references/stable/
* http://madeinsyria.fr/2011/06/howto-puppet-administration-et-industrialisation-de-masse/
* http://puppetconf.com/blog/watch-and-learn-puppetconf-2012-videos/
** Keynote: CERN - Accelerating Science with Puppet - Tim Bell http://www.youtube.com/watch?v=-Ykb2j2ojYU
** Configuration Management @CERN - Ben Jones http://www.youtube.com/watch?v=ehVMxbJdld8
** The Setup: Managing an Army of Developer Laptops with Puppet - Will Farrington of GitHub http://www.youtube.com/watch?v=YlKXRdSAZhY
h2. Organisation manifest/modules tetaneutral.net
h2. Installation d'un server de mail (roundcube+dovecot+spamassasin+spf+postgrey+postfix en virtual domain) comme celui de ttnn avec puppet
Sur votre puppet-master (qui peux être être votre machine ou le server lui-meme)
<pre>
apt-get install puppet puppetmaster
cd /etc/puppet/modules/
git clone http://git.tetaneutral.net/puppet-mailserver.git mailserver
mkdir /etc/puppet/{templates,ssl}
touch /etc/puppet/templates/<hostname>-{mail,aliases,sender_access,recipient_access}
</pre>
Créé Créé le fichier /etc/puppet/manifest/site.pp
<pre>
node "<HOSTNAME>" {
class {'ttnn_mail_master': domains => [ "mydomain.tld", "myotherdomains.tld" ], }
}
node "<HOSTNAME_RELAY>" {
class {'ttnn_mail_relay': domains => [ "mydomain.tld", "myotherdomains.tld" ], }
}
class ttnn_mail_master ($domains = []) {
class { 'mysql::server':
config_hash => {
root_password => "dummy_password"],
},
}
class { 'apache':}
class { 'mailserver::params':
domains => $domains,
passwd_content => template("$fqdn-mail"),
aliases_content => template("$fqdn-aliases"),
sender_access_content => template("$fqdn-sender_access"),
recipient_access_content => template("$fqdn-recipient_access"),
ssl_cert_source => "puppet:///ssl/$fqdn.pem",
ssl_key_source => "puppet:///ssl/$fqdn.key",
}
class { 'mailserver::spamassassin': }
class { 'mailserver::rbl': }
class { 'mailserver::greylisting': }
class { 'mailserver::dovecot':}
# class { 'mailserver::spf': }
class { 'mailserver::roundcube': session_key => '<A_RANDOM_STRING>' }
class { 'mailserver::postfix': }
}
class ttnn_mail_relay(
$domains = [],
){
class { 'mailserver::params':
domains => $domains,
}
class { 'mailserver::spamassassin': }
class { 'mailserver::rbl': }
class { 'mailserver::greylisting': }
#class { 'mailserver::spf': }
class { 'mailserver::relay': }
class { 'mailserver::postfix': }
}
</pre>
Editer le fichier /etc/puppet/templates/<HOSTNAME>-mail et ajouter des comptes mails:
<pre>
toto@mydomain.tld:{PLAIN}clear_password
toto@myotherdomain.tld:{SHA1}crypted_password
</pre>
Ajouter les certificats et clé clé ssl (TODO: expliquer comment faire ces fichiers):
<pre>
cp mon_certificat.pem(ou.crt) /etc/puppet/ssl/<HOSTNAME>.pem
cp mon_certificat.key /etc/puppet/ssl/<HOSTNAME>.key
</pre>
Ensuite sur le server de mail (<HOSTNAME>):
taper:
<pre>
# puppet agent-vt
...
</pre>
note: si il y a des erreurs, relancer une fois avec de chercher le problème. problème.
Idem sur le relay
Vos serveurs de mail sont prêt prêt
Pour ajouter un alias a /etc/aliases-dovecot il faut editer /etc/puppet/templates/mx1.tetaneutral.net/aliases sur puppet.ttnn
h2. Exemple duplication www avec puppet et les backups:
Installation d'une vm (ici: puppet-tester) avec ganeti:
sur h1:
<pre>
./gnt-addvm puppet-tester
</pre>
Sur puppet-tester, restauration du dernier backup de /var/www de www.tetaneutral.net qui se trouve sur h2 (Je passe l'installation de clé clé pgp):
<pre>
cat www.tetaneutral.net-var-www.20120102.master.tar.gz | gpg -d | tar -xzf - -C /
cat www.tetaneutral.net-var-www.20120103.tar.gz | gpg -d | tar -xzf - -C /
cat www.tetaneutral.net-var-www.20120104.tar.gz | gpg -d | tar -xzf - -C /
</pre>
Puis installation de puppet:
<pre>
$ apt-get install puppet
$ cat /etc/puppet/puppet.conf ajouter:
[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
templatedir=$confdir/templates
pluginsync = true
[agent]
server=puppet.tetaneutral.net
$ puppet agent --test
</pre>
Sur puppet.teteneutral.net, dans le fichier nodes.pp copie du bloc de la machine www en puppet-tester
puis on sign la cle de puppet-tester
<pre>
puppetca --sign puppet-tester.tetaneutral.net
</pre>
sur puppet-tester, on descend la configuration via puppet:
<pre>puppet agent --test</pre>
et pour finir on restaure le backup mysql:
<pre>
mysql -u root < www.tetaneutral.net-all-mysql-databases.20120103.sql
</pre>
Et c'est fini !
h2. Ajout d'une machine (obsolete):
Sur le client:
<pre>
$ apt-get install puppet
</pre>
dans /etc/default/puppet mettre:
<pre>
START=yes
</pre>
et dans /etc/puppet/puppet.conf ajouter:
<pre>
pluginsync=true
[agent]
server=puppet.tetaneutral.net
</pre>
Ensuite ajouter la machine dans le puppet master, MOUAHAHA:
Sur le client:
<pre>
$ puppet agent --test
warning: peer certificate won't be verified in this SSL session
warning: peer certificate won't be verified in this SSL session
warning: peer certificate won't be verified in this SSL session
Exiting; no certificate found and waitforcert is disabled
</pre>
Sur le serveur:
<pre>
$ puppetca --list
www.tetaneutral.net
$ puppetca --sign --all
notice: Signed certificate request for www.tetaneutral.net
notice: Removing file Puppet::SSL::CertificateRequest www.tetaneutral.net at '/var/lib/puppet/ssl/ca/requests/www.tetaneutral.net.pem'
</pre>
Sur le client:
<pre>
$ puppet agent --test
warning: peer certificate won't be verified in this SSL session
info: Caching certificate for www.tetaneutral.net
info: Caching certificate_revocation_list for ca
info: Caching catalog for www.tetaneutral.net
info: Applying configuration version '1325516709'
info: Creating state file /var/lib/puppet/state/state.yaml
notice: Finished catalog run in 0.01 seconds
</pre>
Sur le serveur, on associe les modules au client:
<pre>
$ cat manifests/nodes.pp
node basenode {
include backup
include motd
}
node 'www.tetaneutral.net' inherits basenode {
}
</pre>
h2. Récupération Récupération de fichier écrasé écrasé par puppet:
Voir la liste des fichiers backupés: backupés:
<pre>
find /var/*/puppet/clientbucket -name paths | while read path ; do echo $(cat $path): $(basename $(dirname $path)) $(stat -c %y $path) ; done
</pre>
Ensuite pour voir le fichier:
<pre>
A venir ... (un truc avec puppet filebucket ...)
</pre>
h2. Ajout d'un module (ie: un truc/service/user a configurer), ici module motdpour l'exemple :
h3. Création Création du module
<pre>
cd /etc/puppet/modules
mkdir -p motd/{files,lib,manifests,templates,tests}
$ cat motd/manifests/init.pp
class motd {
file {'motd':
ensure => file,
path => '/etc/motd.tail',
mode => 0644,
content => "Bienvenue sur ${::hostname}, machine de l'infrastructure ${::domain}\n\nCette machine est geree par puppet toutes modifications effectuee est suceptible d'etre perdu."
}
}
</pre>
h3. Ajout du module à Ã la liste des modules disponibles
<pre>
$ cat manifests/modules.pp
import "motd"
</pre>
h3. Utilisation du module pour une node
<pre>
$ cat manifests/nodes.pp
node 'www.tetaneutral.net' {
include motd
}
</pre>
h2. Installation du serveur PuppetMaster (obsolete TODO sileht: réécrire) réécrire)
Installation du paquet:
<pre>
$ apt-get install puppetmaster
</pre>
Voici le fichier de configuration /etc/puppet/puppet.conf qui permet de maintenir une conf de dev et de prod:
<pre>
[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
templatedir=$confdir/templates
pluginsync = true
[master]
certname=puppet.tetaneutral.net
manifest = $confdir/manifests/site_$environment.pp
</pre>
Exemple du fichier site_dev.php
<pre>
cat /etc/puppet/manifests/site_dev.pp
import "classes/*.pp"
import "keys.pp"
import "modules.pp"
import "nodes_dev.pp"
</pre>
Le fichier keys.pp contient les cle ssh des membres, le répertoire répertoire classes les fonctions créé créé pour ttnn (en autres les clés clés ssh)
Le fichier modules.pp, la liste des modules à chargé. à chargé.
Et enfin nodes_dev.pp la liste des machines puppetisées puppetisées avec leur configuration.
Dans /etc/puppet/fileserver.conf configurer les autorisations:
<pre>
[files]
path /etc/puppet/files
allow 91.224.149.0/24
allow 91.224.148.0/24
</pre>
h2. Misc links
* http://ldn-fai.net/introduction-puppet/
* http://blog.octo.com/passer-du-shell-a-puppet/
* http://devopsanywhere.blogspot.fr/2011/10/puppet-vs-chef-fight.html
* http://blog.loof.fr/2011/10/puppet-vs-chef-fight.html
* http://finninday.net/wiki/index.php/Zero_to_puppet_in_one_day
* http://blog.wikimedia.org/2011/09/19/ever-wondered-how-the-wikimedia-servers-are-configured/
* https://gerrit.wikimedia.org/r/gitweb?p=operations/puppet.git;a=tree
* http://blog.wikimedia.org/2012/04/16/introduction-to-wikimedia-labs/
* http://docs.puppetlabs.com/references/stable/
* http://madeinsyria.fr/2011/06/howto-puppet-administration-et-industrialisation-de-masse/
* http://puppetconf.com/blog/watch-and-learn-puppetconf-2012-videos/
** Keynote: CERN - Accelerating Science with Puppet - Tim Bell http://www.youtube.com/watch?v=-Ykb2j2ojYU
** Configuration Management @CERN - Ben Jones http://www.youtube.com/watch?v=ehVMxbJdld8
** The Setup: Managing an Army of Developer Laptops with Puppet - Will Farrington of GitHub http://www.youtube.com/watch?v=YlKXRdSAZhY
h2. Organisation manifest/modules tetaneutral.net
h2. Installation d'un server de mail (roundcube+dovecot+spamassasin+spf+postgrey+postfix en virtual domain) comme celui de ttnn avec puppet
Sur votre puppet-master (qui peux être être votre machine ou le server lui-meme)
<pre>
apt-get install puppet puppetmaster
cd /etc/puppet/modules/
git clone http://git.tetaneutral.net/puppet-mailserver.git mailserver
mkdir /etc/puppet/{templates,ssl}
touch /etc/puppet/templates/<hostname>-{mail,aliases,sender_access,recipient_access}
</pre>
Créé Créé le fichier /etc/puppet/manifest/site.pp
<pre>
node "<HOSTNAME>" {
class {'ttnn_mail_master': domains => [ "mydomain.tld", "myotherdomains.tld" ], }
}
node "<HOSTNAME_RELAY>" {
class {'ttnn_mail_relay': domains => [ "mydomain.tld", "myotherdomains.tld" ], }
}
class ttnn_mail_master ($domains = []) {
class { 'mysql::server':
config_hash => {
root_password => "dummy_password"],
},
}
class { 'apache':}
class { 'mailserver::params':
domains => $domains,
passwd_content => template("$fqdn-mail"),
aliases_content => template("$fqdn-aliases"),
sender_access_content => template("$fqdn-sender_access"),
recipient_access_content => template("$fqdn-recipient_access"),
ssl_cert_source => "puppet:///ssl/$fqdn.pem",
ssl_key_source => "puppet:///ssl/$fqdn.key",
}
class { 'mailserver::spamassassin': }
class { 'mailserver::rbl': }
class { 'mailserver::greylisting': }
class { 'mailserver::dovecot':}
# class { 'mailserver::spf': }
class { 'mailserver::roundcube': session_key => '<A_RANDOM_STRING>' }
class { 'mailserver::postfix': }
}
class ttnn_mail_relay(
$domains = [],
){
class { 'mailserver::params':
domains => $domains,
}
class { 'mailserver::spamassassin': }
class { 'mailserver::rbl': }
class { 'mailserver::greylisting': }
#class { 'mailserver::spf': }
class { 'mailserver::relay': }
class { 'mailserver::postfix': }
}
</pre>
Editer le fichier /etc/puppet/templates/<HOSTNAME>-mail et ajouter des comptes mails:
<pre>
toto@mydomain.tld:{PLAIN}clear_password
toto@myotherdomain.tld:{SHA1}crypted_password
</pre>
Ajouter les certificats et clé clé ssl (TODO: expliquer comment faire ces fichiers):
<pre>
cp mon_certificat.pem(ou.crt) /etc/puppet/ssl/<HOSTNAME>.pem
cp mon_certificat.key /etc/puppet/ssl/<HOSTNAME>.key
</pre>
Ensuite sur le server de mail (<HOSTNAME>):
taper:
<pre>
# puppet agent-vt
...
</pre>
note: si il y a des erreurs, relancer une fois avec de chercher le problème. problème.
Idem sur le relay
Vos serveurs de mail sont prêt prêt
Pour ajouter un alias a /etc/aliases-dovecot il faut editer /etc/puppet/templates/mx1.tetaneutral.net/aliases sur puppet.ttnn
h2. Exemple duplication www avec puppet et les backups:
Installation d'une vm (ici: puppet-tester) avec ganeti:
sur h1:
<pre>
./gnt-addvm puppet-tester
</pre>
Sur puppet-tester, restauration du dernier backup de /var/www de www.tetaneutral.net qui se trouve sur h2 (Je passe l'installation de clé clé pgp):
<pre>
cat www.tetaneutral.net-var-www.20120102.master.tar.gz | gpg -d | tar -xzf - -C /
cat www.tetaneutral.net-var-www.20120103.tar.gz | gpg -d | tar -xzf - -C /
cat www.tetaneutral.net-var-www.20120104.tar.gz | gpg -d | tar -xzf - -C /
</pre>
Puis installation de puppet:
<pre>
$ apt-get install puppet
$ cat /etc/puppet/puppet.conf ajouter:
[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
templatedir=$confdir/templates
pluginsync = true
[agent]
server=puppet.tetaneutral.net
$ puppet agent --test
</pre>
Sur puppet.teteneutral.net, dans le fichier nodes.pp copie du bloc de la machine www en puppet-tester
puis on sign la cle de puppet-tester
<pre>
puppetca --sign puppet-tester.tetaneutral.net
</pre>
sur puppet-tester, on descend la configuration via puppet:
<pre>puppet agent --test</pre>
et pour finir on restaure le backup mysql:
<pre>
mysql -u root < www.tetaneutral.net-all-mysql-databases.20120103.sql
</pre>
Et c'est fini !
h2. Ajout d'une machine (obsolete):
Sur le client:
<pre>
$ apt-get install puppet
</pre>
dans /etc/default/puppet mettre:
<pre>
START=yes
</pre>
et dans /etc/puppet/puppet.conf ajouter:
<pre>
pluginsync=true
[agent]
server=puppet.tetaneutral.net
</pre>
Ensuite ajouter la machine dans le puppet master, MOUAHAHA:
Sur le client:
<pre>
$ puppet agent --test
warning: peer certificate won't be verified in this SSL session
warning: peer certificate won't be verified in this SSL session
warning: peer certificate won't be verified in this SSL session
Exiting; no certificate found and waitforcert is disabled
</pre>
Sur le serveur:
<pre>
$ puppetca --list
www.tetaneutral.net
$ puppetca --sign --all
notice: Signed certificate request for www.tetaneutral.net
notice: Removing file Puppet::SSL::CertificateRequest www.tetaneutral.net at '/var/lib/puppet/ssl/ca/requests/www.tetaneutral.net.pem'
</pre>
Sur le client:
<pre>
$ puppet agent --test
warning: peer certificate won't be verified in this SSL session
info: Caching certificate for www.tetaneutral.net
info: Caching certificate_revocation_list for ca
info: Caching catalog for www.tetaneutral.net
info: Applying configuration version '1325516709'
info: Creating state file /var/lib/puppet/state/state.yaml
notice: Finished catalog run in 0.01 seconds
</pre>
Sur le serveur, on associe les modules au client:
<pre>
$ cat manifests/nodes.pp
node basenode {
include backup
include motd
}
node 'www.tetaneutral.net' inherits basenode {
}
</pre>
h2. Récupération Récupération de fichier écrasé écrasé par puppet:
Voir la liste des fichiers backupés: backupés:
<pre>
find /var/*/puppet/clientbucket -name paths | while read path ; do echo $(cat $path): $(basename $(dirname $path)) $(stat -c %y $path) ; done
</pre>
Ensuite pour voir le fichier:
<pre>
A venir ... (un truc avec puppet filebucket ...)
</pre>
h2. Ajout d'un module (ie: un truc/service/user a configurer), ici module motdpour l'exemple :
h3. Création Création du module
<pre>
cd /etc/puppet/modules
mkdir -p motd/{files,lib,manifests,templates,tests}
$ cat motd/manifests/init.pp
class motd {
file {'motd':
ensure => file,
path => '/etc/motd.tail',
mode => 0644,
content => "Bienvenue sur ${::hostname}, machine de l'infrastructure ${::domain}\n\nCette machine est geree par puppet toutes modifications effectuee est suceptible d'etre perdu."
}
}
</pre>
h3. Ajout du module à Ã la liste des modules disponibles
<pre>
$ cat manifests/modules.pp
import "motd"
</pre>
h3. Utilisation du module pour une node
<pre>
$ cat manifests/nodes.pp
node 'www.tetaneutral.net' {
include motd
}
</pre>
h2. Installation du serveur PuppetMaster (obsolete TODO sileht: réécrire) réécrire)
Installation du paquet:
<pre>
$ apt-get install puppetmaster
</pre>
Voici le fichier de configuration /etc/puppet/puppet.conf qui permet de maintenir une conf de dev et de prod:
<pre>
[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
templatedir=$confdir/templates
pluginsync = true
[master]
certname=puppet.tetaneutral.net
manifest = $confdir/manifests/site_$environment.pp
</pre>
Exemple du fichier site_dev.php
<pre>
cat /etc/puppet/manifests/site_dev.pp
import "classes/*.pp"
import "keys.pp"
import "modules.pp"
import "nodes_dev.pp"
</pre>
Le fichier keys.pp contient les cle ssh des membres, le répertoire répertoire classes les fonctions créé créé pour ttnn (en autres les clés clés ssh)
Le fichier modules.pp, la liste des modules à chargé. à chargé.
Et enfin nodes_dev.pp la liste des machines puppetisées puppetisées avec leur configuration.
Dans /etc/puppet/fileserver.conf configurer les autorisations:
<pre>
[files]
path /etc/puppet/files
allow 91.224.149.0/24
allow 91.224.148.0/24
</pre>