PUPPET » Historique » Version 68
Version 67 (Mehdi Abaakouk, 04/05/2014 18:09) → Version 68/69 (Mehdi Abaakouk, 04/05/2014 18:26)
{{>toc}}
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 tetaneutral.net
<pre>
root@puppet:/etc/puppet/manifests# tree
.
├── authorized_key_generator.py # script qui génére le contenu de manifests/files/ssh_keys et manifests/classes/sshkeys_groups.pp
├── classes # bout de configuration commune à plusieurs machines
│ ├── sshkeys_groups.pp # NE PAS EDITER: listes des groups de clés ssh
│ ├── sshkeys.pp # NE PAS EDITER: listes des groups de clés ssh
│ ├── ttnn_apache_mod_pagespeed.pp # config du module apache pagespeed
│ ├── ttnn_apache_mod_php.pp # config de php avec apache+wsgi+phpfpm
│ ├── ttnn_cache_ns.pp # config de nos caches DNS
│ ├── ttnn_mail_master.pp # config de notre mx principal smtp+imap
│ ├── ttnn_mail_relay.pp # config de nos mx secondaires smpt seulement
│ ├── ttnn_primary_ns.pp # config de notre DNS principal
│ ├── ttnn_secondary_ns.pp # config de nos DNS secondaires
│ └── ttnnssl.pp # class qui install des certificats ssl de tetaneutral
│
├── common.pp # config commun à toutes les machines
│
├── files # fichiers/templates qui sont copier sur les machines
│ ├── bashrc
│ ├── h2.tetaneutral.net
│ │ ├── ipv6-ra-log.sh
│ │ └── ramond.conf
│ ├── h7.tetaneutral.net
│ │ └── dnsmasq-ttnnstgo.conf
│ ├── mx1.tetaneutral.net # Ici, sont nos boites aux lettres, aliases, régles d'exception pour bypass l'antispam.
│ │ ├── aliases
│ │ ├── mail
│ │ ├── recipient_access
│ │ └── sender_access
│ ├── pupper-tester.tetaneutral.net
│ │ ├── aliases
│ │ ├── mail
│ │ ├── recipient_access
│ │ └── sender_access
│ ├── puppet-auth.conf.erb
│ ├── puppet.conf.erb
│ └── ssh_keys # NE PAS EDITER: c'est clé sont extraite de redmine par le script "authorized_key_generator.py"
│ ├── ssh-routeur
│ │ ├── redmine_fab.pub
│ │ ├── redmine_guerby.pub
│ │ ├── redmine_matthieu.pub
│ │ └── redmine_sileht.pub
│ └── ssh-serveur
│ ├── redmine_guerby.pub
│ └── redmine_sileht.pub
│
├── nodes # Les configurations de chaques machines
│ ├── chiliproject.tetaneutral.net.pp
│ ├── dns1.tetaneutral.net.pp
│ ├── gandi1.tetaneutral.net.pp
│ ├── ganeti.tetaneutral.net.pp # contient h1 h4 h5 h6
│ ├── gw.tetaneutral.net.pp
│ ├── h2.tetaneutral.net.pp
│ ├── h3.tetaneutral.net.pp
│ ├── h7.tetaneutral.net.pp
│ ├── lists.tetaneutral.net.pp
│ ├── mx1.tetaneutral.net.pp
│ ├── n7.tetaneutral.net.pp
│ ├── nagios.tetaneutral.net.pp
│ ├── openvpn.tetaneutral.net.pp
│ ├── pano.tetaneutral.net.pp
│ ├── puppet-test.pp
│ ├── puppet.tetaneutral.net.pp
│ ├── ssd1.tetaneutral.net.pp
│ ├── tetaneutral.grenode.net.pp
│ ├── ttnn.vps.arn-fai.net.pp
│ └── www.tetaneutral.net.pp
│
├── password.pp # mot de passe et cert ssl de ttnn (n'est pas versionné dans git)
└── site.pp # fichier bootstrap de puppet
</pre>
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 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éé 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é 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.
Idem sur le relay
Vos serveurs de mail sont 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é 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 de fichier écrasé par puppet:
Voir la liste des fichiers 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 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)
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 classes les fonctions créé pour ttnn (en autres les clés ssh)
Le fichier modules.pp, la liste des modules à chargé.
Et enfin nodes_dev.pp la liste des machines 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>
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 tetaneutral.net
<pre>
root@puppet:/etc/puppet/manifests# tree
.
├── authorized_key_generator.py # script qui génére le contenu de manifests/files/ssh_keys et manifests/classes/sshkeys_groups.pp
├── classes # bout de configuration commune à plusieurs machines
│ ├── sshkeys_groups.pp # NE PAS EDITER: listes des groups de clés ssh
│ ├── sshkeys.pp # NE PAS EDITER: listes des groups de clés ssh
│ ├── ttnn_apache_mod_pagespeed.pp # config du module apache pagespeed
│ ├── ttnn_apache_mod_php.pp # config de php avec apache+wsgi+phpfpm
│ ├── ttnn_cache_ns.pp # config de nos caches DNS
│ ├── ttnn_mail_master.pp # config de notre mx principal smtp+imap
│ ├── ttnn_mail_relay.pp # config de nos mx secondaires smpt seulement
│ ├── ttnn_primary_ns.pp # config de notre DNS principal
│ ├── ttnn_secondary_ns.pp # config de nos DNS secondaires
│ └── ttnnssl.pp # class qui install des certificats ssl de tetaneutral
│
├── common.pp # config commun à toutes les machines
│
├── files # fichiers/templates qui sont copier sur les machines
│ ├── bashrc
│ ├── h2.tetaneutral.net
│ │ ├── ipv6-ra-log.sh
│ │ └── ramond.conf
│ ├── h7.tetaneutral.net
│ │ └── dnsmasq-ttnnstgo.conf
│ ├── mx1.tetaneutral.net # Ici, sont nos boites aux lettres, aliases, régles d'exception pour bypass l'antispam.
│ │ ├── aliases
│ │ ├── recipient_access
│ │ └── sender_access
│ ├── pupper-tester.tetaneutral.net
│ │ ├── aliases
│ │ ├── recipient_access
│ │ └── sender_access
│ ├── puppet-auth.conf.erb
│ ├── puppet.conf.erb
│ └── ssh_keys # NE PAS EDITER: c'est clé sont extraite de redmine par le script "authorized_key_generator.py"
│ ├── ssh-routeur
│ │ ├── redmine_fab.pub
│ │ ├── redmine_guerby.pub
│ │ ├── redmine_matthieu.pub
│ │ └── redmine_sileht.pub
│ └── ssh-serveur
│ ├── redmine_guerby.pub
│ └── redmine_sileht.pub
│
├── nodes # Les configurations de chaques machines
│ ├── chiliproject.tetaneutral.net.pp
│ ├── dns1.tetaneutral.net.pp
│ ├── gandi1.tetaneutral.net.pp
│ ├── ganeti.tetaneutral.net.pp # contient h1 h4 h5 h6
│ ├── gw.tetaneutral.net.pp
│ ├── h2.tetaneutral.net.pp
│ ├── h3.tetaneutral.net.pp
│ ├── h7.tetaneutral.net.pp
│ ├── lists.tetaneutral.net.pp
│ ├── mx1.tetaneutral.net.pp
│ ├── n7.tetaneutral.net.pp
│ ├── nagios.tetaneutral.net.pp
│ ├── openvpn.tetaneutral.net.pp
│ ├── pano.tetaneutral.net.pp
│ ├── puppet-test.pp
│ ├── puppet.tetaneutral.net.pp
│ ├── ssd1.tetaneutral.net.pp
│ ├── tetaneutral.grenode.net.pp
│ ├── ttnn.vps.arn-fai.net.pp
│ └── www.tetaneutral.net.pp
│
├── password.pp # mot de passe et cert ssl de ttnn (n'est pas versionné dans git)
└── site.pp # fichier bootstrap de puppet
</pre>
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 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éé 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é 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.
Idem sur le relay
Vos serveurs de mail sont 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é 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 de fichier écrasé par puppet:
Voir la liste des fichiers 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 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)
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 classes les fonctions créé pour ttnn (en autres les clés ssh)
Le fichier modules.pp, la liste des modules à chargé.
Et enfin nodes_dev.pp la liste des machines 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>