Installation du dépôt EPEL pour RH/CentOS 6:
rpm -ivh http://mirrors.ircam.fr/pub/fedora/epel/6/i386/epel-release-6-7.noarch.rpm
Installation du dépôt Foreman pour RH/CentOS 6:
rpm -ivh http://yum.theforeman.org/releases/1.0/el6/foreman-release.rpm
Paquet principal:
yum install foreman
Pour le support libvirt:
yum install foreman-libivrt
Pour le support mysql:
yum install foreman-mysql
La configuration de Foreman se fait dans le fichier /etc/foreman/settings.yaml.
Pour la base de données, éditer le fichier /etc/foreman/database.yml. Par défaut la base de données est au format sqlite (il faut avoir le paquet foreman-sqlite pour l'utiliser).
Pour initialiser la base de données:
su - foreman -s /bin/bash -c /usr/share/foreman/extras/dbmigrate
Sur le serveur puppetmaster, qui héberge aussi foreman, il faut executer la commande suivante (en cron par exemple):
cd /usr/share/foreman/script; rake puppet:import:hosts_and_facts RAILS_ENV=production
Ainsi Foreman collecte les informations sur les clients, tel que les facts (de facter).
Sur chaque client puppet, dans /etc/puppet/puppet.conf, ajouter dans la partie [agent] la ligne suivante:
report = true
Puis redemarrer le service puppet:
service puppet restart
Sur le serveur puppetmaster, les rapports de chaque client seront stockés dans /var/lib/puppet/reports.
Il faut ensuite créer un script pour injecter les rapports puppet dans Foreman. Ce script doit être placé dans /usr/lib/ruby/site_ruby/1.8/puppet/reports/foreman.rb. Son contenu est le suivant:
# copy this file to your report dir - e.g. /usr/lib/ruby/1.8/puppet/reports/ # add this report in your puppetmaster reports - e.g, in your puppet.conf add: # reports=log, foreman # (or any other reports you want) # URL of your Foreman installation $foreman_url="http://127.0.0.1:3000" require 'puppet' require 'net/http' require 'uri' Puppet::Reports.register_report(:foreman) do Puppet.settings.use(:reporting) desc "Sends reports directly to Foreman" def process begin uri = URI.parse($foreman_url) http = Net::HTTP.new(uri.host, uri.port) if uri.scheme == 'https' then http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE end req = Net::HTTP::Post.new("/reports/create?format=yml") req.set_form_data({'report' => to_yaml}) response = http.request(req) rescue Exception => e raise Puppet::Error, "Could not send report to Foreman at #{$foreman_url}/reports/create?format=yml: #{e}" end end end
Attention à SeLinux qui peut bloquer les connexions de puppetmaster vers Foreman.
Pour que ce script soit appeler à chaque génération de rapport par puppetmaster, il faut ajouter la ligne suivante dans /etc/puppet/puppet.conf dans la section [puppetmaster]:
reports = log, foreman