Meez, écrit par Paul Czarkowski de Rackspace, est un outil en ligne de commande permettant de créer de nouveaux cookbooks avec tout le nécessaire pour faire du TDD sur votre infrastructure. Meez était à l'origine un squelette de cookbook, mais a depuis évolué pour devenir plus flexible et plus simple en pré-remplissant par exemple certaines meta-données.
D'après son auteur, son nom vient de l'argot pour mise en place, une expression française qui vient du monde de la restauration et qui veut que l'on sépare et ordonne tous les ingrédients pour un certain plat. Comme beaucoup d'outils autour de Chef, il utilise une analogie à la cuisine pour décrire son but : un cookbook créé avec meez est accompagné de nombreux outils pour évaluer la qualité du code, aider à commencer à tester l'infrastructure, etc. Sans cela, l'utilisateur doit ajouter chaque outil à la main et créer tous les dossiers nécessaires avant de pouvoir écrire la première ligne de test, ce qui peut être un exercice fastidieux de recherche sur internet pour trouver de la documentation ou des exemples de code. En rendant ces outils facilement accessibles, cela encourage les bonnes pratiques et l'écriture d'un meilleur code. Cela fait aussi que l'on teste les cas où tout se passe mal, ce qui est souvent omis. Après tout, la structure a été créée en suivant des modèles connus pour fonctionner.
Voici les outils que meez inclut dans un cookbook :
- Berkshelf pour gérer les dépendances ;
- RuboCop pour vérifier le style du code ruby ;
- Foodcritic pour vérifier le style du cookbook ;
- ChefSpec pour les tests unitaires ;
- Serverspec pour les tests d'acceptance ;
- Test Kitchen pour lancer les tests sur plusieurs plateformes ;
- Strainer qui permet de lancer tous les tests en isolation avec une seule commande.
Le seul paramètre obligatoire est le nom du cookbook. D'autres paramètres peuvent être fournis pour la licence, le nom et l'email de l'auteur, etc et viendront remplir les meta-données correspondantes aux emplacements adéquates. Une fonctionnalité appréciable lors de la création d'un cookbook.
Il est également possible de lancer meez sur un cookbook existant pour ajouter le nécessaire de tests. L'outil demande toujours quoi faire en cas de conflit. Par exemple, lorsqu'il est lancé sur le cookbook apache2 officiel, il s'arrête avant de modifier le Berksfile existant :
* Initializing Cookbook
** Creating cookbook apache2
** Creating README for cookbook: apache2
** Creating CHANGELOG for cookbook: apache2
** Creating metadata for cookbook: apache2
Rewriting metadata.rb
Rewriting recipes/default.rb
* Initializing Berkshelf
conflict apache2/Berksfile
Overwrite /home/user/chef-repo/cookbooks/apache2/Berksfile? (enter "h" for help) [Ynaqdh]
Le même comportement est adopté pour tous les fichiers conflictuels.
Le mois dernier, sur le canal freenode #openstack-chef, l'auteur a indiqué qu'il était impossible de personnaliser le template. Cela signifie que, pour le moment, si un besoin particulier se présente comme l'intégration avec d'autres outils ou une modification du fichier metadata.rb (qui sert à décrire le cookbook), le nécessaire doit être fait après coup. Il en va de même lorsque vous utilisez un outil plus classique comme Berkshelf ou Knife pour créer un cookbook. Il a également fait part de son intention d'ajouter un tâche Rake et d'intégrer Travis CI.
James Wickett, partisan de Rugged DevOps, drapeau sous lequel il encourage l'union des communautés InfoSec et DevOps, préconisant les méthodes agiles et un système de livraison logicielle plus sécurisée, décrit son expérience avec la gem :
Une fois que vous avez dit à meez de créer un cookbook pour vous, il met en place tous les frameworks et vous êtes directement à même d'écrire vos recettes et de travailler sur votre cookbook. Plus besoin de se souvenir comment mettre en place tous les outils de test. Génial !
Le README de la gem sur GitHub est la principale source d'information sur son fonctionnement.