La suite du précédent article « Utiliser chef #1 – Création d’un compte chez Opscode »

Chef2-BandeauChefVim

Parce que pour un bon Chef, le plus important c’est un bon poste de travail !

A commencer par :
Une Hote

Bon, plus sérieusement, vous verrez souvent ce schéma dans les présentations Chef :

Architecture Chef

On peut y voir plusieurs parties trés importantes :

L’ensemble des éléments pour construire un serveur

Je vais appeler cet ensemble « la cuisine » dans la suite de mes articles.

Les recettes (recipes)

C’est un script écrit, dans un DSL (Domain specific language) l’exécution se fait, dans le sens de la lecture. Cela va remplacer votre script d’installation automatique :).

Les attributs (attributes)

Comme vos recettes vont s’exécuter sur des machines différentes, vous allez vouloir changer des informations. Par exemple, une adresse mail, un nom de virtualhost, une taille mémoire, etc.

Les livres de recettes (cookbooks)

C’est l’ensemble des recettes rassemblées dans un package pour gérer un composant. Pour gèrer par exemple Apache, des versions de Java, Ruby, des serveurs d’application Rails, Tomcat, etc. Un cookbook pour Apache2 va contenir tout pour installer et configurer le serveur et ses vhosts. Et l’on peut gérer plusieurs versions de ces cookbooks.

Les sacs de données (data bags, oui je sais la traduction n’est pas trés classe !)

Pour mettre en vrac :p les informations qui vont êtres utilisés par les recettes. Comme par exemple, la définition d’un utilisateur avec sa clée SSH, une application, etc.

Les roles

Ils vont permettre d’assembler plusieurs recettes pour gérer un type de serveur.

Les environnements

Production, préproduction, etc. En limitant les versions de recette dans les différents environnements, nous allons pouvoir mettre en place une stratégie de validation des applications/middlewares.

On va faire quoi de tout ça ?

Les noeuds (nodes)

Le but est d’installer nos machines qui peuvent être physiques, virtualisées ou dans le Cloud (c’est à la mode parait-il :) ). Ce sont donc des noeuds. Pour exécuter les recettes sur les machines, vous avez le choix entre :

  • chef-solo qui va être lancé sur une machine isolée
  • Et chef-client qui va utiliser le reste de l’infrastructure que nous allons voir

Dans les deux cas, il y a la librairie ‘ohai’ qui liste plein d’informations sur la machine. Et la run-list définie ce qui va être réalisé sur notre serveur.

Le serveur chef

Nous allons installer toute notre cuisine sur un serveur pour le distribuer à nos noeuds. En plus de tout ça, il y a un moteur de recherche qui permet de trouver les noeuds en fonction de différents critères. Mais aussi un manager qui est la GUI sur laquelle vous vous êtes connecté dans l’article 1.

Le poste de travail (workstation)

Et pour gérer tout ça en ligne de commande, il y a l’outil « knife ».

L’installation sur le poste

Comme vous avez installé Ruby c’est trés simple :

% gem install chef --no-ri --no-rdoc
Successfully installed chef-11.4.4
1 gem installed

% rbenv rehash # Si vous utilisez rbenv

Allez donc un tour à l’adresse de la console d’administration Opscode.

Et générez la configuration de knife :
Génération de la configuration de knife

Préparez la clé de validation :
Génération de la clé de validation

Et copiez les fichiers téléchargé dans le répertoire « .chef ». Il resemble à ça pour le fichier « knife.rb » :

current_dir = File.dirname(__FILE__)
log_level :info
log_location STDOUT
node_name "nledez-demo"
client_key "#{current_dir}/nledez-demo.pem"
validation_client_name "nledez-demo-validator"
validation_key "#{current_dir}/nledez-demo-validator.pem"
chef_server_url "https://api.opscode.com/organizations/nledez-demo"
cache_type 'BasicFile'
cache_options( :path => "#{ENV['HOME']}/.chef/checksums" )
cookbook_path ["#{current_dir}/../cookbooks"]

Fichier « nledez-demo.pem » :

-----BEGIN RSA PRIVATE KEY-----
dnutNWZEhXApWvImbZdMw3bX0wVW28i7EADKz2cApPcWNYNyK2fN1fx6Y9m7bvEwp
boJYSf1JlkSWa68k0HXT6Bu8yJDWwHMfNwpJNQoTJsSoieZRNNxjlNL6m9QVjUpDX
jS1vCWemC3CbY2eUdffL8v4RMCJV9RoejcIISej7maprol240Eakz22ivqrVt6oQ4
KEOqEBPKFgke1ok6Dt0vwkAZfFjx7Wkraq9Tl9BbigQgsHPqbjFFvvItyxiXNMmMt
[...]
-----END RSA PRIVATE KEY-----

Placez vos clés dans le même répertoire :

% ls .chef
knife.rb nledez-demo-validator.pem nledez-demo.pem

Et pour tester que la configuration marche bien :

% for i in node client cookbook environment role ; do echo "===== $i:" ; knife $i list ; done
===== node:

===== client:
nledez-demo-validator
===== cookbook:

===== environment:
_default
===== role:

Vous constatez que c’est la même chose que dans l’IHM Web :)

Pour une raison que je n’explique pas, la clé que j’ai générée dans l’article précédent ne marchait pas…
Je l’ai regénérée à l’adresse de la gestion de compte.

Régénérer sa clé utilisateur

Voila voila, si tout ça marche pour vous c’est bon pour les articles à suivre. Sinon il va falloir trouver pourquoi :)

Vous pourrez retrouver les fichiers utilisés sur mon compte Github.
Et la version de l’article courant dans le tag article01.

Crédit photos :

La suite chef !