Projet

Général

Profil

PUPPET » Historique » Version 64

Mehdi Abaakouk, 04/05/2014 17:26

1 6 Mehdi Abaakouk
h1. Master of Puppet
2 1 Mehdi Abaakouk
3 10 Laurent GUERBY
h2. Misc links
4 10 Laurent GUERBY
5 22 Laurent GUERBY
* http://ldn-fai.net/introduction-puppet/
6 17 Laurent GUERBY
* http://blog.octo.com/passer-du-shell-a-puppet/
7 16 Laurent GUERBY
* http://devopsanywhere.blogspot.fr/2011/10/puppet-vs-chef-fight.html
8 16 Laurent GUERBY
* http://blog.loof.fr/2011/10/puppet-vs-chef-fight.html
9 10 Laurent GUERBY
* http://finninday.net/wiki/index.php/Zero_to_puppet_in_one_day
10 11 Laurent GUERBY
* http://blog.wikimedia.org/2011/09/19/ever-wondered-how-the-wikimedia-servers-are-configured/
11 12 Laurent GUERBY
* https://gerrit.wikimedia.org/r/gitweb?p=operations/puppet.git;a=tree
12 11 Laurent GUERBY
* http://blog.wikimedia.org/2012/04/16/introduction-to-wikimedia-labs/
13 13 Mehdi Abaakouk
* http://docs.puppetlabs.com/references/stable/
14 13 Mehdi Abaakouk
* http://madeinsyria.fr/2011/06/howto-puppet-administration-et-industrialisation-de-masse/
15 19 Laurent GUERBY
* http://puppetconf.com/blog/watch-and-learn-puppetconf-2012-videos/
16 19 Laurent GUERBY
** Keynote: CERN - Accelerating Science with Puppet - Tim Bell http://www.youtube.com/watch?v=-Ykb2j2ojYU
17 20 Laurent GUERBY
** Configuration Management @CERN - Ben Jones http://www.youtube.com/watch?v=ehVMxbJdld8
18 19 Laurent GUERBY
** The Setup: Managing an Army of Developer Laptops with Puppet - Will Farrington of GitHub http://www.youtube.com/watch?v=YlKXRdSAZhY
19 10 Laurent GUERBY
20 64 Mehdi Abaakouk
h2. Organisation manifest/modules tetaneutral.net
21 64 Mehdi Abaakouk
22 64 Mehdi Abaakouk
23 64 Mehdi Abaakouk
24 14 Mehdi Abaakouk
h2. Installation d'un server de mail (roundcube+dovecot+spamassasin+spf+postgrey+postfix en virtual domain) comme celui de ttnn avec puppet
25 1 Mehdi Abaakouk
26 64 Mehdi Abaakouk
Sur votre puppet-master (qui peux être votre machine ou le server lui-meme)
27 14 Mehdi Abaakouk
28 14 Mehdi Abaakouk
<pre>
29 14 Mehdi Abaakouk
apt-get install puppet puppetmaster
30 14 Mehdi Abaakouk
cd /etc/puppet/modules/
31 14 Mehdi Abaakouk
git clone http://git.tetaneutral.net/puppet-mailserver.git mailserver
32 14 Mehdi Abaakouk
33 14 Mehdi Abaakouk
mkdir /etc/puppet/{templates,ssl}
34 14 Mehdi Abaakouk
touch /etc/puppet/templates/<hostname>-{mail,aliases,sender_access,recipient_access}
35 14 Mehdi Abaakouk
</pre>
36 1 Mehdi Abaakouk
37 14 Mehdi Abaakouk
38 64 Mehdi Abaakouk
Créé le fichier /etc/puppet/manifest/site.pp
39 14 Mehdi Abaakouk
<pre>
40 14 Mehdi Abaakouk
node "<HOSTNAME>" {
41 14 Mehdi Abaakouk
        class {'ttnn_mail_master': domains => [ "mydomain.tld", "myotherdomains.tld" ], }
42 14 Mehdi Abaakouk
}
43 15 Mehdi Abaakouk
44 15 Mehdi Abaakouk
node "<HOSTNAME_RELAY>" {
45 15 Mehdi Abaakouk
        class {'ttnn_mail_relay': domains => [ "mydomain.tld", "myotherdomains.tld" ], }
46 15 Mehdi Abaakouk
}
47 15 Mehdi Abaakouk
48 14 Mehdi Abaakouk
class ttnn_mail_master ($domains = []) {
49 14 Mehdi Abaakouk
50 14 Mehdi Abaakouk
        class { 'mysql::server':
51 14 Mehdi Abaakouk
                config_hash => {
52 14 Mehdi Abaakouk
                        root_password => "dummy_password"],
53 14 Mehdi Abaakouk
                },
54 14 Mehdi Abaakouk
        }
55 14 Mehdi Abaakouk
56 14 Mehdi Abaakouk
        class { 'apache':}
57 14 Mehdi Abaakouk
        class { 'mailserver::params':
58 14 Mehdi Abaakouk
                domains     => $domains,
59 14 Mehdi Abaakouk
                passwd_content    => template("$fqdn-mail"),
60 14 Mehdi Abaakouk
                aliases_content   => template("$fqdn-aliases"),
61 14 Mehdi Abaakouk
                sender_access_content   => template("$fqdn-sender_access"),
62 14 Mehdi Abaakouk
                recipient_access_content   => template("$fqdn-recipient_access"),
63 14 Mehdi Abaakouk
                ssl_cert_source   => "puppet:///ssl/$fqdn.pem",
64 14 Mehdi Abaakouk
                ssl_key_source   => "puppet:///ssl/$fqdn.key",
65 14 Mehdi Abaakouk
        }
66 14 Mehdi Abaakouk
        class { 'mailserver::spamassassin': }
67 14 Mehdi Abaakouk
        class { 'mailserver::rbl': }
68 14 Mehdi Abaakouk
        class { 'mailserver::greylisting': }
69 14 Mehdi Abaakouk
        class { 'mailserver::dovecot':}
70 14 Mehdi Abaakouk
        #       class { 'mailserver::spf': }
71 14 Mehdi Abaakouk
        class { 'mailserver::roundcube': session_key => '<A_RANDOM_STRING>' }
72 14 Mehdi Abaakouk
        class { 'mailserver::postfix': }
73 14 Mehdi Abaakouk
74 14 Mehdi Abaakouk
75 14 Mehdi Abaakouk
}
76 15 Mehdi Abaakouk
77 15 Mehdi Abaakouk
class ttnn_mail_relay(
78 15 Mehdi Abaakouk
        $domains = [],
79 15 Mehdi Abaakouk
){
80 15 Mehdi Abaakouk
        class { 'mailserver::params':
81 15 Mehdi Abaakouk
                domains => $domains,
82 15 Mehdi Abaakouk
        }
83 15 Mehdi Abaakouk
        class { 'mailserver::spamassassin': }
84 15 Mehdi Abaakouk
        class { 'mailserver::rbl': }
85 15 Mehdi Abaakouk
        class { 'mailserver::greylisting': }
86 15 Mehdi Abaakouk
        #class { 'mailserver::spf': }
87 15 Mehdi Abaakouk
        class { 'mailserver::relay': }
88 15 Mehdi Abaakouk
        class { 'mailserver::postfix': }
89 15 Mehdi Abaakouk
}
90 15 Mehdi Abaakouk
91 15 Mehdi Abaakouk
92 14 Mehdi Abaakouk
</pre>
93 14 Mehdi Abaakouk
94 14 Mehdi Abaakouk
Editer le fichier /etc/puppet/templates/<HOSTNAME>-mail et ajouter des comptes mails:
95 14 Mehdi Abaakouk
<pre>
96 14 Mehdi Abaakouk
toto@mydomain.tld:{PLAIN}clear_password
97 1 Mehdi Abaakouk
toto@myotherdomain.tld:{SHA1}crypted_password
98 14 Mehdi Abaakouk
</pre>
99 14 Mehdi Abaakouk
100 64 Mehdi Abaakouk
Ajouter les certificats et clé ssl (TODO: expliquer comment faire ces fichiers):
101 14 Mehdi Abaakouk
<pre>
102 14 Mehdi Abaakouk
cp mon_certificat.pem(ou.crt) /etc/puppet/ssl/<HOSTNAME>.pem
103 14 Mehdi Abaakouk
cp mon_certificat.key /etc/puppet/ssl/<HOSTNAME>.key
104 14 Mehdi Abaakouk
</pre>
105 14 Mehdi Abaakouk
106 14 Mehdi Abaakouk
Ensuite sur le server de mail (<HOSTNAME>):
107 14 Mehdi Abaakouk
108 14 Mehdi Abaakouk
taper:
109 14 Mehdi Abaakouk
<pre>
110 1 Mehdi Abaakouk
# puppet agent-vt
111 14 Mehdi Abaakouk
...
112 1 Mehdi Abaakouk
</pre>
113 1 Mehdi Abaakouk
114 64 Mehdi Abaakouk
note: si il y a des erreurs, relancer une fois avec de chercher le problème.
115 15 Mehdi Abaakouk
116 15 Mehdi Abaakouk
Idem sur le relay
117 15 Mehdi Abaakouk
118 64 Mehdi Abaakouk
Vos serveurs de mail sont prêt
119 15 Mehdi Abaakouk
120 21 Laurent GUERBY
Pour ajouter un alias a /etc/aliases-dovecot il faut editer /etc/puppet/templates/mx1.tetaneutral.net/aliases sur puppet.ttnn
121 14 Mehdi Abaakouk
122 6 Mehdi Abaakouk
h2. Exemple duplication www avec puppet et les backups:
123 6 Mehdi Abaakouk
124 6 Mehdi Abaakouk
Installation d'une vm (ici: puppet-tester) avec ganeti:
125 1 Mehdi Abaakouk
126 6 Mehdi Abaakouk
sur h1:
127 6 Mehdi Abaakouk
<pre>
128 6 Mehdi Abaakouk
./gnt-addvm puppet-tester
129 6 Mehdi Abaakouk
</pre>
130 7 Mehdi Abaakouk
131 64 Mehdi Abaakouk
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):
132 7 Mehdi Abaakouk
133 7 Mehdi Abaakouk
<pre>
134 7 Mehdi Abaakouk
cat www.tetaneutral.net-var-www.20120102.master.tar.gz | gpg -d | tar -xzf - -C /
135 8 Mehdi Abaakouk
cat www.tetaneutral.net-var-www.20120103.tar.gz | gpg -d | tar -xzf - -C /
136 7 Mehdi Abaakouk
cat www.tetaneutral.net-var-www.20120104.tar.gz | gpg -d | tar -xzf - -C /
137 6 Mehdi Abaakouk
</pre>
138 6 Mehdi Abaakouk
139 6 Mehdi Abaakouk
Puis installation de puppet:
140 6 Mehdi Abaakouk
<pre>
141 6 Mehdi Abaakouk
$ apt-get install puppet
142 6 Mehdi Abaakouk
143 6 Mehdi Abaakouk
$ cat /etc/puppet/puppet.conf ajouter:
144 6 Mehdi Abaakouk
[main]
145 6 Mehdi Abaakouk
logdir=/var/log/puppet
146 6 Mehdi Abaakouk
vardir=/var/lib/puppet
147 6 Mehdi Abaakouk
ssldir=/var/lib/puppet/ssl
148 6 Mehdi Abaakouk
rundir=/var/run/puppet
149 6 Mehdi Abaakouk
factpath=$vardir/lib/facter
150 6 Mehdi Abaakouk
templatedir=$confdir/templates
151 6 Mehdi Abaakouk
pluginsync = true
152 6 Mehdi Abaakouk
153 6 Mehdi Abaakouk
[agent]
154 6 Mehdi Abaakouk
server=puppet.tetaneutral.net
155 6 Mehdi Abaakouk
156 6 Mehdi Abaakouk
$ puppet agent --test
157 6 Mehdi Abaakouk
</pre>
158 6 Mehdi Abaakouk
159 6 Mehdi Abaakouk
Sur puppet.teteneutral.net, dans le fichier nodes.pp copie du bloc de la machine www en puppet-tester
160 6 Mehdi Abaakouk
puis on sign la cle de puppet-tester
161 6 Mehdi Abaakouk
<pre>
162 6 Mehdi Abaakouk
puppetca --sign puppet-tester.tetaneutral.net
163 6 Mehdi Abaakouk
</pre>
164 6 Mehdi Abaakouk
165 6 Mehdi Abaakouk
sur puppet-tester, on descend la configuration via puppet:
166 6 Mehdi Abaakouk
167 6 Mehdi Abaakouk
<pre>puppet agent --test</pre>
168 6 Mehdi Abaakouk
169 6 Mehdi Abaakouk
et pour finir on restaure le backup mysql:
170 6 Mehdi Abaakouk
171 1 Mehdi Abaakouk
<pre>
172 1 Mehdi Abaakouk
mysql -u root < www.tetaneutral.net-all-mysql-databases.20120103.sql
173 14 Mehdi Abaakouk
</pre>
174 1 Mehdi Abaakouk
175 13 Mehdi Abaakouk
Et c'est fini !
176 6 Mehdi Abaakouk
177 13 Mehdi Abaakouk
h2. Ajout d'une machine (obsolete):
178 1 Mehdi Abaakouk
179 1 Mehdi Abaakouk
Sur le client:
180 1 Mehdi Abaakouk
181 1 Mehdi Abaakouk
<pre>
182 1 Mehdi Abaakouk
$ apt-get install puppet
183 1 Mehdi Abaakouk
</pre>
184 1 Mehdi Abaakouk
185 1 Mehdi Abaakouk
dans /etc/default/puppet mettre:
186 1 Mehdi Abaakouk
<pre>
187 1 Mehdi Abaakouk
START=yes
188 1 Mehdi Abaakouk
</pre>
189 1 Mehdi Abaakouk
190 1 Mehdi Abaakouk
et dans /etc/puppet/puppet.conf ajouter:
191 1 Mehdi Abaakouk
<pre>
192 6 Mehdi Abaakouk
pluginsync=true
193 6 Mehdi Abaakouk
194 1 Mehdi Abaakouk
[agent]
195 1 Mehdi Abaakouk
server=puppet.tetaneutral.net
196 1 Mehdi Abaakouk
</pre>
197 1 Mehdi Abaakouk
198 1 Mehdi Abaakouk
Ensuite ajouter la machine dans le puppet master, MOUAHAHA:
199 1 Mehdi Abaakouk
Sur le client: 
200 1 Mehdi Abaakouk
<pre>
201 1 Mehdi Abaakouk
$ puppet agent --test
202 1 Mehdi Abaakouk
warning: peer certificate won't be verified in this SSL session
203 1 Mehdi Abaakouk
warning: peer certificate won't be verified in this SSL session
204 1 Mehdi Abaakouk
warning: peer certificate won't be verified in this SSL session
205 1 Mehdi Abaakouk
Exiting; no certificate found and waitforcert is disabled
206 1 Mehdi Abaakouk
</pre>
207 1 Mehdi Abaakouk
208 1 Mehdi Abaakouk
Sur le serveur:
209 1 Mehdi Abaakouk
<pre>
210 1 Mehdi Abaakouk
$ puppetca --list
211 1 Mehdi Abaakouk
www.tetaneutral.net
212 1 Mehdi Abaakouk
213 1 Mehdi Abaakouk
$ puppetca  --sign --all
214 1 Mehdi Abaakouk
notice: Signed certificate request for www.tetaneutral.net
215 1 Mehdi Abaakouk
notice: Removing file Puppet::SSL::CertificateRequest www.tetaneutral.net at '/var/lib/puppet/ssl/ca/requests/www.tetaneutral.net.pem'
216 1 Mehdi Abaakouk
</pre>
217 1 Mehdi Abaakouk
218 1 Mehdi Abaakouk
Sur le client: 
219 1 Mehdi Abaakouk
<pre>
220 1 Mehdi Abaakouk
$ puppet agent --test
221 1 Mehdi Abaakouk
warning: peer certificate won't be verified in this SSL session
222 1 Mehdi Abaakouk
info: Caching certificate for www.tetaneutral.net
223 1 Mehdi Abaakouk
info: Caching certificate_revocation_list for ca
224 1 Mehdi Abaakouk
info: Caching catalog for www.tetaneutral.net
225 1 Mehdi Abaakouk
info: Applying configuration version '1325516709'
226 4 Mehdi Abaakouk
info: Creating state file /var/lib/puppet/state/state.yaml
227 4 Mehdi Abaakouk
notice: Finished catalog run in 0.01 seconds
228 4 Mehdi Abaakouk
</pre>
229 4 Mehdi Abaakouk
230 4 Mehdi Abaakouk
Sur le serveur, on associe les modules au client:
231 4 Mehdi Abaakouk
232 4 Mehdi Abaakouk
<pre>
233 4 Mehdi Abaakouk
$ cat manifests/nodes.pp
234 4 Mehdi Abaakouk
235 4 Mehdi Abaakouk
node basenode {
236 2 Mehdi Abaakouk
    include backup
237 5 Mehdi Abaakouk
    include motd
238 5 Mehdi Abaakouk
}
239 1 Mehdi Abaakouk
240 1 Mehdi Abaakouk
node 'www.tetaneutral.net' inherits basenode {
241 5 Mehdi Abaakouk
}
242 5 Mehdi Abaakouk
</pre>
243 5 Mehdi Abaakouk
244 5 Mehdi Abaakouk
245 5 Mehdi Abaakouk
246 64 Mehdi Abaakouk
h2. Récupération de fichier écrasé par puppet:
247 1 Mehdi Abaakouk
248 64 Mehdi Abaakouk
Voir la liste des fichiers backupés:
249 2 Mehdi Abaakouk
<pre>
250 1 Mehdi Abaakouk
find /var/*/puppet/clientbucket -name paths | while read path ; do echo $(cat $path): $(basename $(dirname $path))  $(stat -c %y $path) ; done
251 2 Mehdi Abaakouk
</pre>
252 2 Mehdi Abaakouk
Ensuite pour voir le fichier:
253 2 Mehdi Abaakouk
<pre>
254 6 Mehdi Abaakouk
A venir ... (un truc avec puppet filebucket ...)
255 2 Mehdi Abaakouk
</pre>
256 2 Mehdi Abaakouk
257 2 Mehdi Abaakouk
h2. Ajout d'un module (ie: un truc/service/user a configurer), ici module motdpour l'exemple :
258 2 Mehdi Abaakouk
259 64 Mehdi Abaakouk
h3. Création du module
260 2 Mehdi Abaakouk
261 2 Mehdi Abaakouk
<pre>
262 2 Mehdi Abaakouk
cd /etc/puppet/modules
263 2 Mehdi Abaakouk
mkdir -p  motd/{files,lib,manifests,templates,tests}
264 2 Mehdi Abaakouk
$ cat motd/manifests/init.pp
265 2 Mehdi Abaakouk
class motd {
266 1 Mehdi Abaakouk
        file {'motd':
267 2 Mehdi Abaakouk
                ensure  => file,
268 2 Mehdi Abaakouk
                path    => '/etc/motd.tail',
269 2 Mehdi Abaakouk
                mode    => 0644,
270 2 Mehdi Abaakouk
                content => "Bienvenue sur ${::hostname}, machine de l'infrastructure ${::domain}\n\nCette machine est geree par puppet toutes modifications effectuee est suceptible d'etre perdu."
271 2 Mehdi Abaakouk
        }
272 2 Mehdi Abaakouk
}
273 2 Mehdi Abaakouk
</pre>
274 2 Mehdi Abaakouk
275 2 Mehdi Abaakouk
276 64 Mehdi Abaakouk
h3. Ajout du module à la liste des modules disponibles
277 1 Mehdi Abaakouk
278 2 Mehdi Abaakouk
<pre>
279 2 Mehdi Abaakouk
$ cat manifests/modules.pp
280 2 Mehdi Abaakouk
import "motd"
281 2 Mehdi Abaakouk
</pre>
282 1 Mehdi Abaakouk
283 2 Mehdi Abaakouk
h3. Utilisation du module pour une node
284 2 Mehdi Abaakouk
285 2 Mehdi Abaakouk
<pre>
286 2 Mehdi Abaakouk
$ cat manifests/nodes.pp
287 6 Mehdi Abaakouk
node 'www.tetaneutral.net' {
288 2 Mehdi Abaakouk
    include motd
289 2 Mehdi Abaakouk
}
290 1 Mehdi Abaakouk
</pre>
291 1 Mehdi Abaakouk
292 1 Mehdi Abaakouk
293 64 Mehdi Abaakouk
h2. Installation du serveur PuppetMaster (obsolete TODO sileht: réécrire)
294 1 Mehdi Abaakouk
295 1 Mehdi Abaakouk
Installation du paquet:
296 1 Mehdi Abaakouk
<pre>
297 1 Mehdi Abaakouk
$ apt-get install puppetmaster
298 1 Mehdi Abaakouk
</pre>
299 1 Mehdi Abaakouk
300 9 Mehdi Abaakouk
Voici le fichier de configuration /etc/puppet/puppet.conf qui permet de maintenir une conf de dev et de prod:
301 1 Mehdi Abaakouk
<pre>
302 9 Mehdi Abaakouk
[main]
303 9 Mehdi Abaakouk
logdir=/var/log/puppet
304 9 Mehdi Abaakouk
vardir=/var/lib/puppet
305 9 Mehdi Abaakouk
ssldir=/var/lib/puppet/ssl
306 9 Mehdi Abaakouk
rundir=/var/run/puppet
307 9 Mehdi Abaakouk
factpath=$vardir/lib/facter
308 9 Mehdi Abaakouk
templatedir=$confdir/templates
309 9 Mehdi Abaakouk
310 9 Mehdi Abaakouk
pluginsync = true
311 9 Mehdi Abaakouk
312 1 Mehdi Abaakouk
[master]
313 1 Mehdi Abaakouk
certname=puppet.tetaneutral.net
314 1 Mehdi Abaakouk
manifest = $confdir/manifests/site_$environment.pp
315 1 Mehdi Abaakouk
</pre>
316 9 Mehdi Abaakouk
317 9 Mehdi Abaakouk
Exemple du fichier site_dev.php
318 9 Mehdi Abaakouk
<pre>
319 9 Mehdi Abaakouk
cat /etc/puppet/manifests/site_dev.pp
320 9 Mehdi Abaakouk
import "classes/*.pp"
321 9 Mehdi Abaakouk
import "keys.pp"
322 9 Mehdi Abaakouk
import "modules.pp"
323 9 Mehdi Abaakouk
import "nodes_dev.pp"
324 9 Mehdi Abaakouk
</pre>
325 9 Mehdi Abaakouk
326 64 Mehdi Abaakouk
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)
327 64 Mehdi Abaakouk
Le fichier modules.pp, la liste des modules à chargé.
328 64 Mehdi Abaakouk
Et enfin nodes_dev.pp la liste des machines puppetisées avec leur configuration.
329 9 Mehdi Abaakouk
330 1 Mehdi Abaakouk
331 1 Mehdi Abaakouk
Dans /etc/puppet/fileserver.conf configurer les autorisations:
332 6 Mehdi Abaakouk
<pre>
333 6 Mehdi Abaakouk
[files]
334 6 Mehdi Abaakouk
  path /etc/puppet/files
335 6 Mehdi Abaakouk
  allow 91.224.149.0/24
336 6 Mehdi Abaakouk
  allow 91.224.148.0/24
337 6 Mehdi Abaakouk
</pre>