Chef Infra est un gestionnaire de configuration qui fonctionne
principalement soit en mode client-serveur, soit en mode autonome. Je me
limiterai dans cette présentation au mode autonome qui utilise la commande
chef-solo.
Chef Infra prend en charge la configuration des serveurs Linux, Windows,
MacOS mais aussi Unix.
Chef ne cesse d’évoluer et c’est ce qui m’a poussé à écrire ce billet. En effet,
la plupart des ressources en français datent et font référence à des commandes
qui ont été dépréciées ou renommées.
Faire ses premiers pas avec Chef Infra
Terminologie
Dans un premier temps il faut que je définisse le vocabulaire que l’on
rencontre, tout tourne autour de la cuisine :
cookbook : Les cookbooks, livres de recettes, sont des packages qui
regroupent plus recipes qui permettent de configurer un composant
spécifique sur les nœuds cibles.
recipe : Ce sont les actions qui vont être executées sur les noeuds cibles
écrit en Ruby.
databags : à définir
kitchen : Outils de test.
Installation de Chef-Workstation
Auparavant, on installait le ChefDK mais il a été remplacé par
Chef-Workstation qui inclut la plupart des outils nécessaires pour développer
des cookbooks.
Pour installer Chef-Workstation, il suffit de se rendre sur le site de
Chef ↗ pour récupérer les
packages à destination de vos machines.
Voilà comment l’installer sur une Ubuntu, une fois le lien récupéré :
On vérifie que tout est bien installé :
Passons aux choses sérieuses en écrivant notre premier cookbook.
Générer la structure de notre premier cookbook
Pour ne pas perdre de temps et surtout pour partir sur de bonnes bases, nous
allons utiliser la commande chef pour générer notre premier cookbook.
Dans un répertoire vierge, créez un dossier cookbooks et lancez la commande
chef generate cookbook dedans.
Affichons le contenu pour identifier les principaux éléments :
C’est dans le fichier recipes/default.rb que nous allons décrire les actions
que notre recette va exécuter.
Ces actions sont déclarées en ruby et contiennent des ressources fournies
par chef. Une ressource est décrite de cette manière :
Par exemple, nous allons utiliser la ressource package qui installe des
packages sur toutes les distributions prises en charge par Chef.
Dans notre fichier de recette recipes/default.rb, ajoutez ces lignes :
Comment tester notre Cookbook ?
Mise en place du terrain de test avec Vagrant
Plutôt que de tester nos cookbooks sur notre machine de développement, nous
allons utiliser une machine virtuelle instanciée avec Vagrant. Ça tombe bien
puisque Vagrant mets à disposition un provisionnerchef-solo ↗ qui se
charge d’installer chef-solo, de copier les cookooks sur la machine cible
avant de lancer leurs exécutions.
Tester notre premier cookbook sur notre machine cible
Maintenant que notre machine est prête, nous allons lancer sa première exécution
:
Vous voyez Vagrant s’est bien chargé d’installer chef-solo et de copier notre
cookbook avant de l’exécuter.
Vérifions que nmap a bien été installé sur notre machine :
Super. Nous pouvons continuer à développer notre recette en piochant dans les
ressources mises à notre disposition. La liste se trouve
ici ↗
Ajoutons la création d’un user sur notre machine :
Relançons notre cookbook, mais attention pour que nos modifications soient
prises en compte il faut recharger notre machine :
Vérifions que notre utilisateur a bien été créé sur la machine cible :
Utiliser des cookbooks de la communauté
Plutôt que de réinventer la roue, nous allons utiliser les cookbooks mis à
disposition par la communauté. Il suffit de faire ses courses dans le
supermarket chef ↗.
Attention : Attention vérifier que le cookbook prend en charge votre
distribution et ne soit pas trop VIEUX. Je vais tester le cookbookpyenv.
Pour télécharger des cookbooks il faut créer un fichier Berksfile, dans
lequel nous allons mettre notre liste de courses :
Maintenant, nous pouvons le récupérer sur notre machine, pour cela nous allons
utiliser l’outil berks :
Si vous regardez dans le répertoire cookbooks, vous y trouverez le cookbook.
Il faut maintenant y ajouter notre recette. Créer un dossier recipes avec le
fichier default.rb :
Mettez-y ce contenu (exemple récupéré dans le projet source) :
En quelques mots, nous demandons à installer pyenv au niveau system et
python dans sa version 3.7.7. On installe également le plugin
pyenv-virtualenv et le package requests avec pyenv_pip.
Avant de le lancer il faut ajouter la recette pyenv à notre le Vagrantfile :