Puppet

De Wiki LDN
Sauter à la navigation Sauter à la recherche
Voir aussi: Droits et accès | Système-Réseau | Site et listes | ARN / LDN | Infra-ldn

Intro

Puppet est un gestionnaire de configuration basé sur une DSL, on décrit l'état dans lequel la machine doit être à la fin du run de Puppet. Nous utilisons Git pour stocker les recettes Puppet afin de travailler de manière décentralisée, de sauvegarder, et de garder un historique.

Liens

Git

Configuration

Exemple de ~/.gitconfig :

[user]
  name = John Doe
  email = john@doe.fr
  signingkey = 1337E42A
[core]
  editor = vi
[merge]
  tool = meld
[color]
  ui = true
  log = auto
  branch = auto
  diff = auto
  status = auto

Récupération des repos GIT

Terminal.png laptop:
apt install openssh-client rsync git r10k
Note.png

Si vous ne souhaitez absolument pas modifier votre fichier ~/.ssh/config, vous pouvez aussi cloner les repos en utilisant la commande suivante:
git clone git+ssh://git@zoidberg.ldn-fai.net:2222/puppet/puppet-private.git

Sinon ajoutez à votre fichier ~/.ssh/config (voir https://repo.ldn-fai.net/)

 Host gitldn
 Hostname repo.ldn-fai.net
 User git 
 Port 2222

Puis pour lister les repos sur l'instance gitolite de repo.ldn-fai.net (puppet-private)

Terminal.png laptop:
ssh gitldn info

Lire le fichier README.md. Il explique en détails la procédure à employer.

Résumé :

Terminal.png laptop:
cd puppet-private
Terminal.png laptop:
r10k puppetfile install Puppetfile

Utilisation

Architecture/Organisation

Les environments

L'infra actuelle est séparée en plusieurs environement :

  • production : cet environment, suit la branch master du GIT, c'est l'env de référence, aussi celui par défaut de pupppet.
  • feature: n environment (le nom de l'admin + celui de la feature, environment synchronisé par rsync entre le laptop de l'admin et le serveur (idéal pour faire des tests)).

Écriture de modules

Afin de garantir la pérennité de nos recettes en fonction des évolutions de puppet, il est nécessaire de suivre les coding styles du language puppet.

Warning.png Attention

Merci de lancer la commande ($ .scritps/validate) avant vos commit, et de corriger si des erreurs sont reportées (voir:

Pour aider

Qualifier ses messages de commit GIT

Tout ceci dans le but, d'avoir un historique et des mails de commit compréhensibles et clairs.

"[module] Manifest - Modification message (closes: #bug)"
  • Le nom du module entre crochets
  • Suivi du manifest ou de la sous arbo dans laquelle on travaille
  • Un message concernant notre modification
  • Et enfin une référence si le commit clos ou résout un bug (closes/fixes/refs).

Exemple:

git commit -m "[ssh] Server - Add augeas lens for ssh configs (refs: #123)"

Sinon vous pouvez aussi regarder le git log :-)

Utilisation avec les scritps shell

Tester une configuration puppet en cours de développement

Envoyer la version de dev courante sur le serveur puppet (dans un environnement spécifique) :

 ./scripts/upload-env gabrielvpn

Appliquer l'environnement sur une machine :

 ssh fry.ldn-fai.net sudo puppet agent --noop -t --environment=gabrielvpn

Appliquer l'environnement sur une machine :

 ssh fry.ldn-fai.net sudo puppet agent -t --environment=gabrielvpn

Infrastructure

Ajouter un client

  • Installer puppet
Terminal.png client:
apt-get update;apt-get install puppet
  • Vérifier le FQDN, et corriger au besoin dans /etc/hosts
Terminal.png client:
facter fqdn
  • S'enregistrer au prêt de puppet master:
Terminal.png client:
puppet agent --server zoidberg.ldn-fai.net --certname host.ldn-fai.net --test
  • Puis signer le certificat SSL sur le puppet master (zoidberg)
Terminal.png puppet:
puppet cert list
Terminal.png puppet:
puppet cert sign host.ldn-fai.net

Appliquer puppet

Pour l'instant, puppet n'applique pas automatiquement les changements sur les clients. Il faut donc lancer à la main le puppet agent sur la VM qu'on souhaite mettre à jour :

Terminal.png client:
sudo puppet agent --test --noop
* --test signifie que l'on veut appliquer la configuration et terminer (plutôt que de tourner en daemon);
* --noop permet de faire tourner la commande sans toucher à la config, pour s'assurer que tout va bien avant d'appliquer les changements pour de vrai.

Pour mettre à jour tout le monde

Terminal.png laptop:
cd ansible ; ansible ldn -s -a "puppet agent --test"
* -s signifie que l'on veut utiliser sudo pour passer root

Misc

Changer son mot de passe

Pour changer son mot de passe (pour sudo):, modifier l'entrée dans puppet/hiera/ldn.yaml avec la sortie de :

Terminal.png laptop:
mkpasswd -m sha-512