Les Manifests

Les manifests sont les scripts puppet qui sont à jouer sur les clients.
ils sont dans le répertoire /etc/puppet/code/environment/****/manifests/ portant le nom manifest_a_wam.pp.

Les ressources

une ressource est une définition d'objet pour puppet, ex :

user { 'mitchell':
ensure => present,
uid => '1000',
gid => '1000',
shell => '/bin/bash',
home => '/home/mitchell'
}

Lister les ressources :

puppet resource --types

Les classes

Une classe est un bloc de code qui ne sera exécuté que quand appelé ailleurs, ex :

class example_class {
...
code
...
}

il y'a encre beaucoup d'objets : exec, package, service, file, certains étant déclaratifs (exec, qui va créer une commande pour un autre objet) et d'autre d'ordre impératif (package, service, file, qui vont bien procéder à l'installation ou autre tache)

Exemple de Manifest lamp.ppter

# execute 'apt-get update'
exec { 'apt-update':                    # exec resource named 'apt-update'
  command => '/usr/bin/apt-get update'  # command this resource will run
}

# install apache2 package
package { 'apache2':
  require => Exec['apt-update'],        # require 'apt-update' before installing
  ensure => installed,
}

# ensure apache2 service is running
service { 'apache2':
  ensure => running,
}

# install mysql-server package
package { 'mysql-server':
  require => Exec['apt-update'],        # require 'apt-update' before installing
  ensure => installed,
}

# ensure mysql service is running
service { 'mysql':
  ensure => running,
}

# install php5 package
package { 'php5':
  require => Exec['apt-update'],        # require 'apt-update' before installing
  ensure => installed,
}

# ensure info.php file exists
file { '/var/www/html/',
       ensure => file,
       content => '<?php  phpinfo(); ?>',    # phpinfo code
       require => Package['apache2'],        # require 'apache2' package before creating
} 

Ce sont des exemples possibles de manifest, de la à dire que çà suffit à écrire un manifest qui sait ce qu'il doit faire si il est en centos 6 ou 8 ou debian 8 ou 9, ... !

Ansible reste quand même mon choix de prédilection de par le push plutot que le pull et aussi parce qu'il est bien conçu sans tomber dans l'usine atomique :)