The 2008-02-07 at 13:50 by Loïc d'Anterroches filed under News.
C’est long, c’est très long d’écrire les recettes pour Puppet, mais au final c’est satisfaisant de savoir que l’on ne fait les choses qu’une fois et que par la suite il est facile de dupliquer ou mettre à jour un serveur très facilement.
Voici par exemple une recette pour PostgreSQL (il peut certainement y avoir des erreurs dedans) :
class postgresql {
package { "postgresql-8.2": ensure => installed }
group {"postgres":
ensure => present,
require => Package["postgresql-8.2"],
}
user {"postgres":
ensure => present,
require => Group["postgres"],
}
# Init the pgdata directory
file {"/home/pgdata":
owner => "postgres",
group => "postgres",
ensure => directory,
require => User["postgres"],
}
file {"/home/pgdata/main":
owner => "postgres",
group => "postgres",
ensure => directory,
require => File["/home/pgdata"],
}
exec {"initdb":
command => "/usr/lib/postgresql/8.2/bin/initdb -D /home/pgdata/main -E UTF-8",
group => "postgres",
user => "postgres",
creates => "/home/pgdata/main/base",
require => File["/home/pgdata/main"],
}
# Symlink the new pgdata directory correctly
file {"/etc/postgresql/8.2/main/pgdata":
ensure => "/home/pgdata/main",
require => Exec["initdb"],
}
# Get the configuration file
file {"/etc/postgresql/8.2/main/postgresql.conf":
owner => "postgres",
group => "postgres",
mode => 644,
source => "puppet://puppet/files/postgresql.conf",
require => File["/etc/postgresql/8.2/main/pgdata"],
}
file {"/etc/postgresql/8.2/main/pg_hba.conf":
owner => "postgres",
group => "postgres",
mode => 644,
source => "puppet://puppet/files/pg_hba.conf",
require => File["/etc/postgresql/8.2/main/pgdata"],
}
service {"postgresql-8.2":
ensure => running,
enable => true,
# check for the main cluster here
pattern => "/usr/lib/postgresql/8.2/bin/postgres -D /home/pgdata/main -c config_file=/etc/postgresql/8.2/main/postgresql.conf",
require => User["postgres"],
subscribe => [File["/etc/postgresql/8.2/main/pgdata"],
File["/etc/postgresql/8.2/main/postgresql.conf"],
File["/etc/postgresql/8.2/main/pg_hba.conf"],
Package["postgresql-8.2"]
],
}
service {"postgresql-8.2-old":
ensure => stopped,
pattern => "/usr/lib/postgresql/8.2/bin/postgres -D /var/lib/postgresql/8.2/main -c config_file=/etc/postgresql/8.2/main/postgresql.conf",
require => User["postgres"],
before => Exec["initdb"],
provider => base,
subscribe => Package["postgresql-8.2"],
}
}
Cette recette assure que le paquet de postgresql est installé et fait quelques accrobaties pour changer la position des données de /var/lib vers /home/pgdata. Ce sont ces accrobaties qui prennent du temps à définir car il faut qu’elles fonctionnent quelque soit le niveau d’installation du serveur. Par exemple, si initdb a déjà été lancé, il ne faut pas le relancer, etc…
Notez que la configuration est stockée sur mon serveur puppet, cela veut dire que si je mets à jour la configuration sur le serveur central puppet, mon serveur commandé va se mettre à jour automatiquement et redémarrer postgresql tout aussi automatiquement.
Comments from readers