Un monde d'octets

Aller au contenu | Aller au menu | Aller à la recherche

vendredi, août 3 2018

Puppet configuration

Puppet master

[main]
certname = puppetmaster01.example.com
server = puppet
environment = production
runinterval = 1h
strict_variables = true

[master]
dns_alt_names = puppetmaster01,puppetmaster01.example.com,puppet,puppet.example.com
reports = puppetdb
storeconfigs_backend = puppetdb
storeconfigs = true
environment_timeout = unlimited

Puppet agent

[main]
certname = agent01.example.com
server = puppet
environment = production
runinterval = 1h

Puppet Templating

La ou ansible utiliser jinja2 pour les templates, puppet utiliser ERB.

La documentation de puppet dit ceci sur les templates, mais voici un exemple d'utilisation résumant les cas les plus courant :

  • template avec variables
  • template avec nested loop
  • template aec conditions (si variable définie)

dans /etc/puppet/code :

cat environments/production/manifests/site.pp


$nameservers = ['8.8.8.8','8.8.4.4']
$search = 'free.fr'
$mydomain = 'pepiniere.local'

file { '/etc/resolv.conf.new':
  ensure  => file,
  owner   => 'root',
  group   => 'root',
  mode    => '0644',
  content => template('resolver/resolv.conf.erb'),
}


cat environments/production/modules/resolver/templates/resolv.conf.erb


# Resolv.conf generated by Puppet

<% [@nameservers].flatten.each do |ns| -%>
nameserver <%= ns %>
<% end -%>
<% unless @search.nil? -%>
search <%= [@search].flatten[0..5].join(' ') %>
<% end -%>
<% unless @mydomain.nil? -%>
domain <%= @mydomain %>
<% end -%>

jeudi, août 2 2018

Puppet structure

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 :)

Puppet 101

Installation

Sur le maitre :

apt install puppet puppetmaster

Puis éditer le ficihier /etc/puppet/puppet.conf

Sur le client :

apt install puppet

Puis éditer le fichier /etc/puppet/puppet.conf

Joindre le client au maitre

Sur le client :

puppet agent --server puppetmaster --waitforcert 60 --test

Sur le maitre :

puppet cert --list
puppet cert --sign nomduclient

Le maitre peut maintenant commander le client !