Projet

Général

Profil

PUPPET » Historique » Version 68

Mehdi Abaakouk, 04/05/2014 18:26

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