Ce diaporama a bien été signalé.
Le téléchargement de votre SlideShare est en cours. ×

TDD for DevOps with Chef

Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Chargement dans…3
×

Consultez-les par la suite

1 sur 45 Publicité

TDD for DevOps with Chef

Le Test Driven Infrastructure, c'est un peu le TDD pour les projets DevOps. Il va vous permettre de tester votre infrastructure unitairement, de bout en bout et à chaque changement.

Lors de ce Hand's on Lab, nous mettrons en oeuvre une infrastructure avec Chef ainsi que les tests associés.

Github: https://github.com/obazoud/devoxx-tdd-for-devops

Le Test Driven Infrastructure, c'est un peu le TDD pour les projets DevOps. Il va vous permettre de tester votre infrastructure unitairement, de bout en bout et à chaque changement.

Lors de ce Hand's on Lab, nous mettrons en oeuvre une infrastructure avec Chef ainsi que les tests associés.

Github: https://github.com/obazoud/devoxx-tdd-for-devops

Publicité
Publicité

Plus De Contenu Connexe

Diaporamas pour vous (20)

Publicité

Similaire à TDD for DevOps with Chef (20)

Publicité

Plus récents (20)

TDD for DevOps with Chef

  1. 1. @obazoud - @joelwurtz#tdd4devops Test Driven Infrastructure @obazoud - @jwurtz Kyriba, Jolicode Chefs étoilés
  2. 2. @obazoud - @joelwurtz#tdd4devops 2 Speakers •Olivier Bazoud –Développeur, DevOps –Spring-*/JEE, Node.js, ... –Co-auteur de “Spring Batch in Action” •Joel Wurtz –Développeur pour les devs @jolicode –PHP (haters gonna hate), Chef, Docker, ... –Formateur Chef @humancoders
  3. 3. @obazoud - @joelwurtz#tdd4devops 3 Test Driven Infrastructure •Présentation de chef - 25mn •Cookbooks •Tout est ressource •Tests et qualités •Mise en place de l'environnement de travail - 5mn •Écriture d'un cookbook en TDD - 2h30
  4. 4. @obazoud - @joelwurtz#tdd4devops 4 Gestionnaire de configuration •Automatisation de son infrastructure •Orchestration •Configuration unique, partagée et dynamique •Framework de scripts •Normalisation
  5. 5. @YourTwitterHandle#DVXFR14{session hashtag} @obazoud - @joelwurtz#tdd4devops
  6. 6. @obazoud - @joelwurtz#tdd4devops 6 Chef •Créé en 2008 •Open-source (Apache) •Ruby (+ Erlang pour le serveur) •Écriture des scripts en ruby et json •Système agent-serveur •Exécution des scripts dans l'ordre où c'est écrit •Disponible sans serveur (chef-solo) •Script en mode Normalisation over Configuration •Idempotent
  7. 7. @obazoud - @joelwurtz#tdd4devops 7 Bien plus que des scripts... •Orchestration complète de votre infrastructure •Interfaçage avec différents providers – Amazon – Google Cloud – Vagrant – ... •Nombreux scripts open-source – community.opscode.com – Cookbooks TravisCi – ...
  8. 8. @obazoud - @joelwurtz#tdd4devops 8 Composants •Chef-Solo : Joue les recettes chef sur un environnement •Chef-Client : Chef-Solo + Récuperation des recettes sur un serveur distant (Chef-Server) •Chef-Server : Possède la connaissance de votre infrastructure •Knife : Outil permettant de communiquer avec Chef-Server
  9. 9. @YourTwitterHandle#DVXFR14{session hashtag} @obazoud - @joelwurtz#tdd4devops Cookbooks
  10. 10. @obazoud - @joelwurtz#tdd4devops 10 Chef repository certificats/ cookbooks/ tomcat7/ ... data_bags/ environments/ roles/
  11. 11. @obazoud - @joelwurtz#tdd4devops 11 Cookbooks cookbooks/ tomcat7/ php/ mysql/ ... Ensemble de scripts décrivant l'installation d'un (et un seul) service/application
  12. 12. @obazoud - @joelwurtz#tdd4devops 12 Cookbook (sans le s) cookbooks/ tomcat7/ recipes/ default.rb Minimum requis pour un cookbook (exemple d'une recette pour tomcat7)
  13. 13. @obazoud - @joelwurtz#tdd4devops 13 Exemple # Install package package 'tomcat7' do action :install end # Use setenv.sh template template '/usr/share/tomcat7/bin/setenv.sh' do source 'setenv.sh.erb' owner 'tomcat7' group 'tomcat7' mode '755' end # Service managed by Chef service 'tomcat7' do supports restart: true, reload: false, status: true action [:start, :enable] end
  14. 14. @obazoud - @joelwurtz#tdd4devops 14 Exemple # Install package package 'tomcat7' do action :install end
  15. 15. @obazoud - @joelwurtz#tdd4devops 15 Exemple # Use setenv.sh template template '/usr/share/tomcat7/bin/setenv.sh' do source 'setenv.sh.erb' owner 'tomcat7' group 'tomcat7' mode '755' end
  16. 16. @obazoud - @joelwurtz#tdd4devops 16 Exemple # Service managed by Chef service 'tomcat7' do supports restart: true, reload: false, status: true action [:start, :enable] end
  17. 17. @YourTwitterHandle#DVXFR14{session hashtag} @obazoud - @joelwurtz#tdd4devops Ressources
  18. 18. @obazoud - @joelwurtz#tdd4devops 18 Tout est ressource •DSL Chef •package, template et service sont des ressources •Une ressource est une définition •Une ressource consiste en un type, un nom et des attributs •L’exécution de cette dernière est réalisée avec des providers
  19. 19. @obazoud - @joelwurtz#tdd4devops 19 Exemple # Install package package 'tomcat7' do action :install end
  20. 20. @obazoud - @joelwurtz#tdd4devops 20 Ressource •Certains attributs sont communs à toutes les ressources – action : état souhaité de la ressource (le nom est trompeur) – ignore_failure : n'arrête pas l’exécution en cas d'erreur – provider : implémentation pour la ressource – …
  21. 21. @obazoud - @joelwurtz#tdd4devops 21 Ressource •Condition d'exécution –attributs permettant de définir si la ressource doit s’exécuter (permet de passer une ressource non idempotente en ressource idempotente) • Subscribes –attribut permettant de dire que la ressource s'exécute après une autre ressource •Notifications –exécute une action sur une autre ressource après l'exécution de la ressource courante
  22. 22. @YourTwitterHandle#DVXFR14{session hashtag} @obazoud - @joelwurtz#tdd4devops Tests
  23. 23. @obazoud - @joelwurtz#tdd4devops 23 Tests •Unitaires : rspec, chefspec •Intégrations : test-kitchen •Bonne pratique et qualité : rubocop, foodcritic •Indépendant de chef : bats, minitest, serverspec
  24. 24. @obazoud - @joelwurtz#tdd4devops 24 TDD
  25. 25. @obazoud - @joelwurtz#tdd4devops 25 TDD •Écrire un test pour une fonctionnalité •Vérifier qu'il ne passe pas •Écrire son implémentation minimal pour qu'il passe •Répéter le cycle sur les autres fonctionnalités en faisant en sorte que les tests existants passent toujours
  26. 26. @obazoud - @joelwurtz#tdd4devops 26 Chefspec •Rspec : Spécification en test unitaire de nos fonctionnalites •Chefspec : Librairie pour écrire les spécifications de nos cookbooks avec rspec •On ne teste pas Chef !
  27. 27. @obazoud - @joelwurtz#tdd4devops 27 Chefspec require 'chefspec' describe 'example::default' do let(:chef_run) { ChefSpec::Runner.new.converge(described_recipe) } it 'does something' do expect(chef_run).to install_package('tomcat7') end end
  28. 28. @obazoud - @joelwurtz#tdd4devops 28 Test-kitchen •Exécution de nos cookbooks sur plusieurs environnements •Permet de tester la chaine complète •Très utile pour multi OS / multi environnement •Driver : Utilisable avec Vagrant, Amazon EC2, Docker, Rackspace, … •Busser : Exécute des tests bats, serverspec, minitest, cucumber, …
  29. 29. @obazoud - @joelwurtz#tdd4devops 29 Test-kitchen driver: name: vagrant provisioner: name: chef_zero platforms: - name: ubuntu-13.04 - name: centos-6.5 suites: - name: client run_list: - recipe[postgresql::client] - name: server run_list: - recipe[postgresql::server]
  30. 30. @obazoud - @joelwurtz#tdd4devops 30 Bats •Bash Automated Testing System (indépendant de Chef) •Écriture des spécifications pour vos serveurs •Basé sur bash
  31. 31. @obazoud - @joelwurtz#tdd4devops 31 Bats #!/usr/bin/env bats @test 'it creates tomcat directory' { test -d /var/lib/tomcat7 } @test 'it starts tomcat' { service tomcat7 status } @test 'it responses with content' { run curl http://localhost:8080/ [ "$status" -eq 0 ] echo "$output" | grep 'hipster' }
  32. 32. @obazoud - @joelwurtz#tdd4devops 32 Minitest •Outil en Ruby - indépendant de Chef •Écriture des spécifications pour vos serveurs •Offre une gamme complète : TDD, BDD, Mock, Bench,...
  33. 33. @obazoud - @joelwurtz#tdd4devops 33 Minitest require 'minitest/autorun' describe 'stack::tomcat7' do describe 'services' do # You can assert that a service must be running following the converge: it 'runs as a daemon' do assert system('service tomcat7 status') end # And that it will start when the server boots: it 'boots on startup' do assert File.exists?(Dir.glob('/etc/rc5.d/S*tomcat7').first) end end end
  34. 34. @obazoud - @joelwurtz#tdd4devops 34 Serverspec •Outil en Ruby (indépendant de Chef) •Écriture des spécifications pour vos serveurs •Basé sur rspec •À distance (via ssh) ou en local •Support multi OS •Init d'un projet : serverspec-init
  35. 35. @obazoud - @joelwurtz#tdd4devops 35 Serverspec require 'spec_helper' describe package('httpd') do it { should be_installed } end describe service('httpd') do it { should be_enabled } it { should be_running } end describe port(80) do it { should be_listening } end describe file('/etc/httpd/conf/httpd.conf') do it { should be_file } its(:content) { should match /ServerName www.example.jp/ } end
  36. 36. @obazoud - @joelwurtz#tdd4devops 36 Rubocop •Vérifie les bonnes pratiques Ruby •Analyse statique du code Ruby •https://github.com/bbatsov/rubocop
  37. 37. @obazoud - @joelwurtz#tdd4devops 37 Foodcritic •Vérifie les bonnes pratiques pour vos recettes •Règles établies par la communauté •http://acrmp.github.io/foodcritic/ •Vous pouvez rajouter vos propres règles
  38. 38. @YourTwitterHandle#DVXFR14{session hashtag} @obazoud - @joelwurtz#tdd4devops Environnement de travail
  39. 39. @obazoud - @joelwurtz#tdd4devops 39 Environnement de travail •Ruby 1.9.3 – bundle install --local •Vagrant 1.4.3 •VirtualBox 4.3.10 •Git 1.9 •Et votre éditeur de texte préféré :) •Voir les instructions
  40. 40. @YourTwitterHandle#DVXFR14{session hashtag} @obazoud - @joelwurtz#tdd4devops Cookbook en TDD
  41. 41. @obazoud - @joelwurtz#tdd4devops 41 Cookbook en TDD • Cookbook « Stack » – Mysql – Tomcat 7 – Jhipster Disclaimer « bonnes pratiques » – Il faudrait séparer en plusieurs cookbooks « stack » – Il faudrait créer une ressource pour la création de la base de données
  42. 42. @obazoud - @joelwurtz#tdd4devops 42 Cookbook en TDD
  43. 43. @obazoud - @joelwurtz#tdd4devops 43 Cookbook en TDD • Mysql – Déploiement du fichier seed – Installation du package mysql-server / mysql-client – Création de la base 'jhipster' • Tomcat 7 – Installation du package tomcat7 – Personnalisation de setenv.sh • JHipster – Application java / spring – Déploiement du WAR
  44. 44. @obazoud - @joelwurtz#tdd4devops 44 #tdd4devops
  45. 45. @obazoud - @joelwurtz#tdd4devops 45 Liens utiles • http://docs.opscode.com/just_enough_ruby_for_chef.html • http://docs.opscode.com/resource.html • http://community.opscode.com/ • https://github.com/travis-ci/travis-cookbooks • http://code.sethvargo.com/chefspec/ • http://serverspec.org/

×