Puppet et certificats

August 3, 2011 by nono
Catégories geekeries - Mots-clés puppet

La demande populaire étant ce qu'elle est, voici un petit topo sur la façon dont je gère les certificats puppet.

De manière générale, quand j'installe une machine, je lance un script de bootstrap sur mon serveur d'admin, celui qui a la clé ssh qui va bien. Ce script (bash) comporte entre autres le bout de code suivant :

[ -d BY-HOST/$host ] || ./gen-host $host

( cd BY-HOST/$host && tar cf - . ) \
  | ssh $host '( mkdir -p /var/lib/puppet/ssl && \
    cd /var/lib/puppet/ssl && rm -f *.pem */*.pem && \
    tar xvf - && \
    /usr/sbin/puppetd --no-daemonize --onetime --no-splay --verbose && \
    touch /var/run/puppet/run-often )'

En résumé, ça efface les éventuels certificats et autres clés déjà présents sur la machine, ça les remplace par la version «qui fait autorité» et ça lance puppet pour amorcer la pompe. Pour le touch à la fin, c'est expliqué là : http://blogs.glou.org/arnaud/2011/02/24/lancer-puppet-depuis-cron/

Et si le serveur d'admin n'a pas les données en local ? Bah il les génère, tiens ! C'est le rôle de la première ligne. Le script gen-host fait moralement ça :

mkdir -p BY-HOST/${host}/{certs,private_keys}
cp ca-${puppetmaster}.pem BY-HOST/${host}/certs/ca.pem
ssh $puppetmaster "puppetca --clean $host ; puppetca --generate $host"
scp ${puppetmaster}:/var/lib/puppet/ssl/private_keys/${host}.pem BY-HOST/${host}/private_keys/
scp ${puppetmaster}:/var/lib/puppet/ssl/ca/signed/${host}.pem BY-HOST/${host}/certs/

Moralement, parce qu'il bosse un peu avant pour générer les variables $host et $puppetmaster. La première contient $1 éventuellement qualifié (j'utilise systématiquement le FQDN comme identifiant) ; la seconde est déterminée par une variable dans la fiche LDAP du client.

Voilà, c'est un peu bricolé mais ça marche bien.

Et je me rends compte qu'il faudrait que je migre vers la syntaxe de puppet 2.x un de ces jours. :-)