Puppet

De Linuxmemo.

Sommaire

[modifier] Master

[modifier] Installation

sudo apt-get install puppetserver

[modifier] Configuration

[modifier] Prérequis

Résolution DNS pour tout les noeuds an "A" and "PTR" record,(ou a défaut via fichier hosts)
Ouverture sur les part-feu du port 8140 pour les les noeuds. 

[modifier] Réglage du nom dns et configuration des certificats

vim /etc/puppet/puppet.conf
dns_alt_names = nsdnamefq 

Possibilité de recréation automatique des certificats:

sudo rm -rf /var/lib/puppet/ssl
sudo puppet master --verbose --no-daemonize
sudo puppet cert list -all

[modifier] Configuration et réglages nécessaire

Faire tout les réglages désiré dans /etc/puppet/puppet.conf

Section [main] contient la configuration globale
Section [master] puppet master
Section [agent] configure le puppet agent

Les réglages par défaut conviennent parfaitement.

[modifier] déposer les "Puppet modules" et les "manifests"

Le manifestes par défaut:

/etc/puppet/manifests/site.pp
C'est le premier fichier analysé par PuppetMaster pour définir son référentiel. Il permet de définir des variables globales et d'importer des modules (ensembles de classes) ainsi que des fichiers templates et noeuds de votre réseau. Attention de ne pas définir directement les templates et les noeuds dans ce fichier... C'est techniquement faisable mais pas très propre à maintenir.
/etc/puppet/manifests/template.pp
(optionnel) Permet de définir ou d'étendre (notion d'héritage comme en POO) des classes spécifiques à votre réseau.
/etc/puppet/manifests/node.pp
Permet de définir les noeuds (machines) de votre réseau.
Il est conseillé de défini le nom d'un noeud par le nom FQDN de la machine.
Si votre réseau est important (plusieurs centaines de machines à gérer), il est tout à fait possible de créer une arborescence dédié avec un fichier node.pp par sous-réseau.
/etc/puppet/modules/<module>/
Sous répertoire contenant la définition du module (action).
Un fichier <module>/manifests/init.pp contient la définition du module (en clair c'est ici que l'on va définir ce que l'on doit faire sur la machine cliente) et le répertoire <module>/files/l'ensemble des fichiers nécessaires à l’exécution de ce module.

[modifier] Configure a production-ready web server

[modifier] Configure load balancing and CA service routing if you’re using multiple masters

[modifier] Start the puppet master service

[modifier] Agent

[modifier] Installation

sudo apt-get install puppet
sudo vi /etc/default/puppet
START=yes

[modifier] Configuration

sudo vi /etc/puppet/puppet.conf
[agent]
server = dnsnamefq.du.serveur

[modifier] Lancement du service

sudo service puppet start

[modifier] Validation des requete de certificat sur le serveur

Avant que les noeuds puissent est gérés, les certificats clients doivent être signé par le serveur.

sudo puppet cert list #Pour lister les requêtes
sudo puppet cert list --all #Pour tout voir

Si le retour de commande affiche des ligne sans signe + devant, c'est que ce sont des machine non signées

sudo puppet cert sign dnsnamefq #Pour signer un host
ou bien pour tout signer d'un seul coup
sudo puppet cert sign --all

Pour révoquer un certificat:

sudo puppet cert clean hostname

Sur le client, voir l'empreinte numérique de certification

puppet agent --fingerprint

[modifier] Application des manifestes toute les 30 minutes

Pour forcer l'application sur un client:

puppet agent --enable
puppet agent --test

[modifier] Puppet manifest (puppet code saved to a file with the .pp extension)

[modifier] Aide: syntaxe et pratique

Best practices:

  1. puppet resource (tools to inspect)
  2. puppet describe (tools to learn about)
  3. puppet parser validate manifest.pp (tools to verifi syntax)
  4. puppet apply --noop manifest.pp, (test manifest with noop)
  5. puppet apply manifest.pp (tools to change resources on the system)
puppet resource --type #lister les type de ressources
ou
puppet describe --list  

puppet describe typename   #List options pour type user
Générer du code:
puppet ressource typename ressource
exemple:
puppet resource file /etc/passwd

Howto: First, check the state of...

puppet resource package ntp

check the ... configuration file:

puppet resource file /etc/ntp.conf

finally, see if the service is running:

puppet resource service ntpd

Edit your stuff

vim ...

Check syntax

puppet parser validate manifest.pp

Apply with noop

puppet apply --noop manifest.pp

Finaly apply

puppet apply manifest.pp

[modifier] block of the Puppet configuration language built-in resources

Users, Groups, Files, Hosts, Packages, Services,...and many more. Pour obtenir de l'aide:

puppet resource --type #lister les type de ressources

[modifier] Déclaration de ressources

The format is always the same:

resource_type { 'resource_title':
  ensure     => present,         # usually 'present' or 'absent'
  attribute1 => 1234,            # number
  attribute2 => 'value',         # string
  attribute3 => ['red','blue'],  # array
  noop       => false,           # boolean
}

"resource_title" doit être unique. Si deux ressources porte le même nom, la deuxième de sera pas traitée. Il est possible de nommer une ressource "file" par le path entier du fichier.

[modifier] Attributes (des ressources)

https://docs.puppet.com/puppet/latest/reference/type.html

   user - A user
   group - A user group
   file - A specific file
   package - A software package
   service - A running service
   cron - A scheduled cron job
   exec - An external command
   host - A host entry

[modifier] Utilisation du langage de configuration de Puppet

  • Variables

Le nom: start with $ name must start with a lower case letter, and may contain lower case letters, numbers, and underscores.)

$myvar # valid
$MyVar # invalid
$my_var # valid
$my-var # invalid
$_myvar # invalid
$my3numbers # valid
$3numbers # invalid

La valeur:

Boolean $not_true = false
Integer $num_tokens = 115
String $my_name =  'Joe'
Array[Integer] $my_list = [1,4,7]
Array[String] [$first,$last] = ['Jo','Rhett']
Hash $key_pairs = {name => 'Joe', uid => 1001}
  • Conditional Operators
  • Regular Expressions
  • Conditional Expressions
If / Elsif / Else Statements
Unless / Else Statements
Case Statements
Selectors
  • Lambda Blocks

[modifier] Class Declaration (a class is a named block of Puppet code)

A class declaration occurs when a class is called in a manifest. A class declaration tells Puppet to evaluate the code within the class. Class declarations come in two different flavors: normal and resource-like.

A normal class declaration occurs when the include keyword is used in Puppet code, like so:

include example_class

This will cause Puppet to evaluate the code in example_class.

A resource-like class declaration occurs when a class is declared like a resource, like so:

class { 'example_class': }

Using resource-like class declarations allows you to specify class parameters, which override the default values of class attributes. If you followed the prerequisite tutorial, you have already used a resource-like class declaration ("apache" class) when you used the PuppetLabs Apache module to install Apache on host2:

node 'host2' {
 class { 'apache': }             # use apache module
 apache::vhost { 'example.com':  # define vhost resource
   port    => '80',
   docroot => '/var/www/html'
 }
}

[modifier] Modules (module is a self-contained bundle of all the Puppet code and other data needed to manage some aspect of your configuration)

Modules allow you to organize your Puppet code into units that are testable, reusable, and portable, in short, modular. This means that instead of writing Puppet code from scratch for every configuration you need, you can mix and match solutions from a few well-written modules. And because these modules are separate and self-contained, they're much easier to test, maintain, and share than a collection of one-off solutions.

https://forge.puppet.com/

puppet module search apache
puppet module install puppetlabs-stdlib
puppet module list
 build        Build a module release package.
 changes      Show modified files of an installed module.
 generate     Generate boilerplate for a new module.
 install      Install a module from the Puppet Forge or a release archive.
 list         List installed modules
 search       Search the Puppet Forge for a module.
 uninstall    Uninstall a puppet module.
 upgrade      Upgrade a puppet module.

Structure:

  • Remember, the manifest that includes the main class for a module is always called init.pp.
cd /etc/puppetlabs/code/environments/production/modules
mkdir vimrc
mkdir vimrc/{manifests,examples,files}
vim vimrc/manifests/init.pp

[modifier] Utilisation

  • tester ses manifests sans les appliquer

puppet apply /vagrant/manifests/helloworld.pp --noop

[modifier] Astuces

  • version
  • facter
facter --puppet
Outils personnels