Chef la recette !

Après avoir comparé au boulot 3 outils de gestion de conf, j’en retiens les éléments suivants :

  • Cfengine : DSL spécifique et horrible à apprendre, orientations peu claire (à-la-Nagios), une communauté amorphe, pas hackable. Poubelle.
  • Puppet : en ruby, un DSL spécifique pour les confs (bof), a fait ses preuves, une bonne doc, de plus en plus hackable (la doc s’améliore de jour en jour), une communauté dynamique, et le projet est géré sous redmine. Sympa.
  • Chef : en ruby, tout en ruby, donc pas de DSL à apprendre (yeah!), une doc pas mal, hackable à l’infini, le projet est hyper mega dynamique, et ils ont des références énormes dans le monde ruby, du genre 37signals ou Engine Yard. Adopté !

Seul défaut de Chef, ça bouge vite, très vite. Et les versions 0.7 présentes dans mes distrib préférées commencent à être vraiment dépassées.

Hier je me prends donc par la main, en m’inspirant de l’article de akitaonrails, et je cherche comment installer une 0.8. Miracle, tout est dans leur wiki, et ils proposent même des dépôts pour ma Ubuntu Lucid.

Voici un script chef-install pondu en 3 secondes :

#installation
add-apt-repository ppa:jtimberman/opschef
aptitude update
aptitude -y install chef
service chef-client stop
update-rc.d chef-client disable >/dev/null

#configuration
sed -i -e 's#^file.*#file_cache_path "/tmp/chef-solo"#' \
  -e 's#^cook.*#cookbook_path ["/var/chef-solo/cookbooks"]#' /etc/chef/solo.rb

#cookbooks (install 'git-core' if needed)
mkdir -p /var/chef-solo
cd /var/chef-solo
git clone http://github.com/opscode/cookbooks.git

#hyperspace!
cat >/etc/chef/recipes.json <<EOF
{
"resolver": {"nameservers":["192.168.0.1"], "search":"home"},
"recipes": ["resolver"]
}
EOF

Go ?

% sudo chef-solo -j /etc/chef/recipes.json
[Tue, 23 Mar 2010 13:47:37 +0100] INFO: Starting Chef Solo Run
[Tue, 23 Mar 2010 13:47:42 +0100] WARN: Missing gem 'right_aws'
[Tue, 23 Mar 2010 13:47:42 +0100] WARN: Missing gem 'mysql'
[Tue, 23 Mar 2010 13:47:43 +0100] INFO: Updating template[/etc/resolv.conf] at /etc/resolv.conf
[Tue, 23 Mar 2010 13:47:43 +0100] INFO: Backing up template[/etc/resolv.conf] to /etc/resolv.conf.chef-20100323134743
[Tue, 23 Mar 2010 13:47:43 +0100] INFO: Chef Run complete in 5.588404 seconds

Yeeehaa !

Mon fonctionnement actuel m’empêche de m’attacher à un serveur central et ainsi fonctionner en client/serveur. Je pense que je vais donc commencer à me faire des cookbooks et les utiliser “bêtement” via chef-solo, à voir.

Enfin pour l’instant, c’est juste énorme.