TDD 
pour les DevOps 
BBL 
Puppet édition
BrownBagLunch.fr - @bbl_fr 
Bagger 
BBL + = Profit ! 
1 expert(e) 
1 panier 
Apprendre 
passionné(e) 
repas 
Échanger 
Participer - Contribuer - Accueillir - Suivre
Sommaire 
Infrastructure As Code 
Test all the things! 
Conclusion
Intervenant 
Olivier Bazoud @obazoud 
DevOps Chef/Puppet 
Spring-*/JEE, Node.js 
NoSQL 
Co-auteur de “Spring Batch in Action”
Et vous ?
Infrastructure 
As Code 
avec Puppet
Infrastructure as code 
Coder l’infrastructure 
installation de logiciels, configuration, … 
administrateur système 
Technique de dévelopement logiciel 
Meilleures pratiques logiciels
Choix 
http://koruxypress.blogspot.fr/2013/10/art-by-venn-diagrams-lauren-panepinto.html
Dette technique
Coût d’un bug 
http://codefol.io/posts/ship-early
Test Driven Development 
Ecrire un test pour une fonctionnalité 
Vérifier que le test est “failed” 
Ecrire une implémentation minimale 
Vérifier que le test passe 
Répéter
Test Driven Development
Bénéfices 
Cercle vertueux 
Inspire la confiance 
Refactoring sécurisé 
Cas d’usage auto documenté
Allez plus loin 
● “Continuous integration” 
● “Continuous deployment”
Exemple: haproxy 
https://github.com/obazoud/tdd-for-devops-puppet.git 
● Spécifications 
○ Installer le package ‘haproxy’ 
○ Configuration (basique) 
○ Service up 
● Installation 
○ apt-get/yum install puppet 
○ gem install bundler 
○ bundle install
Rake 
● Le “make” pour Ruby
La synthaxe
Vérification de la syntaxe
Vérification de la syntaxe
Les bonnes pratiques
Analyse statique 
Puppet lint: http://puppet-lint.com 
● Vérification des bonnes pratiques 
● Vérification de la qualité du code 
● Personnalisation possible
Analyse statique
Tests unitaires
Tests unitaires 
http://rspec-puppet.com/ 
Tester le comportement des manifests lorsque 
Puppet compile un manifest vers le catalogue 
de ressources Puppet 
Ici, on ne teste pas un OS réel!
Exemple TDD HAProxy 
● Spécifications 
○ Installer le package ‘haproxy’ 
○ Configuration (basique) 
○ Service up 
Les tests doivent être “rouge”
Exemple TDD HAProxy
Exemple TDD HAProxy 
Implémentation
Exemple TDD HAProxy 
Le test est dans le “vert”
Exemple HAProxy
Tests acceptance
Tests acceptance 
“Puppet acceptance testing harness” 
● https://github.com/puppetlabs/beaker 
● https://github.com/puppetlabs/beaker-rspec 
Test sur un “vrai” OS 
Vagrant + Virtualbox 
Docker, Aws, ...
Configuration 
default.yml
Serverspec 
“RSpec tests for your servers configured by Puppet, Chef 
or anything else.”
Acceptance
Allez plus loin
Outils 
● Guard 
○ Permet de lancer des commandes à chaque 
modifications de fichiers 
○ “Fast feedback” 
● Rubocop 
○ Analyse statique de code Ruby 
● Bats 
○ Framework de test bash
Outils 
● Cucumber 
○ Framework de type BDD 
● Kitchen (Chef) 
○ Equivalent à Beaker mais avec beaucoup plus de 
fonctionnalités et stabilité 
○ Existe un PR pour intégrer Puppet 
● Jenkins 
○ Continuous integration / deploiment
Conclusion
Questions ?
ROTI 
J'ai 
perdu 
mon 
temps 
Bof, 
j'ai 
baillé 
Excellent ! 
Encore ! 
Bien, 
mais 
sans 
plus 
Intéressant, j'ai 
appris des 
choses

BBL - TDD pour les DevOps - Puppet