Joué au Meetup Puppet Paris @OCTO Technology le 9 juin 2015
Vidéo : http://youtu.be/Q2opUJXX_VY Repo avec quelques exemples : https://github.com/alex-raoul/minbeaker-apache_pfs
1© OCTO 2015© OCTO 2015Meetup Puppet Paris - 9 Juin 2015 - Alexandre RaoulLe Software Craftmanship :quelle signification pour du code Puppet?
View Slide
2© OCTO 2015Le Software Craftmanship?Encore un buzzword !Et en plus, c’est un truc de dev !
3© OCTO 2015“Le Software craftsmanship est une approchede développement de logiciels qui metl'accent sur les compétences de codagedes développeurs de logiciels eux-mêmes.”
4© OCTO 2015Mais en fait derrière, c’est l’idée …… que la mauvaise qualitéa (ou aura) un coût... qu’on ne court pasun marathon comme un sprint
5© OCTO 2015Mais en fait derrière, c’est l’idée …... qu’on peut toujourss’améliorer et apprendre... que partager son savoirest une noble chose
6© OCTO 2015C’est plus un mindset qu’une méthodologiemanifesto.softwarecraftsmanship.org
7© OCTO 2015Pas seulement des logicielsopérationnels, mais aussides logiciels bien conçus
8© OCTO 2015Test DrivenDevelopmentCollective CodeOwnershipSoftware Entropy Pair Programming Style GuideDesign Patterns Lint Refactoring Coding Dojo Clean CodeTest HarnessKeep It SimpleStupid (KISS)Behaviour DrivenDevelopmentTech Leading Newspaper StyleBroken Window Boy Scout RuleDon’t RepeatYourself (DRY)Unit TestingEgolessProgrammingYou Ain’t GonnaNeed It (YAGNI)Separation OfConcerns (SOC)Code Review Data Separation Code LegacyJouons au bingo !
9© OCTO 2015Dans notre contexte, c’est bien conçu si …“ça fait que ça dit et ça dit ce que ça fait”Keep It Simple Stupid (KISS)Exemple : un module mysql, n’installe que mysql,pas emacs en plus parceque les DBA préferent
10© OCTO 2015Dans notre contexte, c’est bien conçu si …“je comprends comment ça marche”Clean CodeExemple : on fait du puppet avec “package”, “file” etcpas des oneliner shell de 400 signes dans un execExemple : on n’abuse pas de l’héritage, des ancres partout ou descollecteurs pour modifier des ressources
11© OCTO 2015Pas seulement l'adaptation auxchangements, mais aussil'ajout constant de la valeur
12© OCTO 2015CoûtPérimètre DélaisQualité
13© OCTO 2015Exemple d’axes de valeurs …… pour les utilisateurs, le module java gère java 8 !… pour les adminsys, le module java est tellementbien fait que je suis serein pour mon OS
14© OCTO 2015Exemple d’axes de valeurs …… pour l’équipe sécurité, intégrer des confs durciespar défaut dans le module Apache… pour les astreintes, des noms de modulestellement clairs que le rapport Puppetdevient la référence quand on se réveille à 3h
15© OCTO 2015Pour les formaliser, on peut utiliser les user stories“Je développe ${telle fonctionnalité} pour que${telle personne} puisse effectuer ${telle action} qui adu sens parce que ${telle plus value}”
16© OCTO 2015Pas seulement les individus etleurs interactions,mais aussi une communauté deprofessionnels
17© OCTO 2015En tant que tech lead …… ne pas contraindre votreéquipe mais montrer l’exemple
18© OCTO 2015En tant que tech lead …… en montrant que vous continuez d’apprendre, que le chemin ne finit jamais
19© OCTO 2015Au niveau de votre équipe …… des revues de codes ...… du pair programming pour améliorerle “collective code ownership” ...… et des coding dojo pour faire progressertout le monde
20© OCTO 2015Au niveau de votre boîte …… partager votre veille avec vos collègues,… partager votre savoir avec des BBL(Brown Bag Lunch)
21© OCTO 2015Au niveau de la communauté dans sonensemble …… en contribuant avec des Pull Requestset en ouvrant votre code… en participant aux meetups !
22© OCTO 2015Pas seulementla collaboration avec les clients,mais aussides partenariats productifs
23© OCTO 2015La focalisation sur des deadlines arbitraires…Ne perdez pas d'énergie là dedans“Faut absolument livrer pour le 30 juin”“Pourquoi?”“Parce que dans la roadmap d’octobre, on adit que c’était un projet du 2e trimestre !”
24© OCTO 2015La focalisation sur le nom du poste...Souvent associé avec la paperasserie aigüe !Soyez efficients, aller voir les bonnes personnesdirectement“Pour faire X, il faut demander la validation àY et Z doit valider l’architecture”
25© OCTO 2015Si vous n’avez pas expliqué votre démarche…Vous passerez votre temps à vous justifier“Faire des tests? Tester c’est douter !”“Vous avez besoin de quoi?Faire du refactoring??”“Ça marche, pourquoi revenir dessus?
26© OCTO 2015Exprimez clairement pourquoi votre équipe existe pourse recentrer sur l’essentielQuel est le WHY de votre équipe?“Maintenir le SLA dans les clous” ?“Réduire le Time To Market du métier” ?
27© OCTO 2015Échangez avec les Dev !Imaginez : au lieu de demanderun accès root sur la prod, un devfait une Pull Request sur votrecode Puppet
28© OCTO 2015Et concrètement, on peut utiliserquoi pour tester du code Puppet?
29© OCTO 2015Tester du code son Puppetou tester son infrastructure?
30© OCTO 2015
31© OCTO 2015Le code Puppet n’a pas tout à faitles mêmes propriétés que dupython/java/autre langageSouvent, la difficulté/fragilité réside dans l’installation/configuration/exploitation d’uncomposantAu lieu de principalement refactorer unefonction de 20-50 lignes,on va refactorer une classe de 300 lignes
32© OCTO 2015L’analyse statique pour vérifier très vite lasyntaxe et le styleÉviter de commiter/pusher du codeavec une erreur de syntaxeou une indentation foireuse(surtout le vendredi soir)
33© OCTO 2015• S’assurer de la syntaxe du code produitOBJECTIFSVérifie la syntaxe :• .pp avec le Puppet DSL• .erb templates ruby DSL• .yml fichiers hiera YAML• .rb plugins en RubyFONCTIONNEMENT• Ça ne vérifie que la syntaxe, pas que les commandes existentOÙ EXÉCUTER ?SecondesTEMPS D'EXÉCUTIONServeur d’intégration continuePre-commit hook sur les postes detravailPOINTS CLÉSCarte d’identité : Puppet files parser
34© OCTO 2015• Vérifie que les règles de style sont bien suiviesOBJECTIFSVérifie des choses comme :• Tabs au lieu des double espaces• String avec double quote sans variable dedans• Paramètres dupliqués dans les ressources• Switch case sans case par défaut• “ensure” qui n’est pas le premier paramètre• …FONCTIONNEMENT• Utilise les conventions de la communauté• Possibilité d’étendre avec ses propres règlesOÙ EXÉCUTER ?SecondesTEMPS D'EXÉCUTIONServeur d’intégration continuePre-commit hook sur les postes detravailPOINTS CLÉSCarte d’identité : Puppet Lint
35© OCTO 2015
36© OCTO 2015Du test unitaire pour vérifier très vite lalogique du code n’est pas perdueParticulièrement utile pour conserver l’intention lors de l'écriture d’un profileOu pour écrire des modules ultra polyvalents(comme ceux de puppetlabs)
37© OCTO 2015• Vérifie ce que le module est censé faire dans différentes situations (OS,paramètres d’entrée)• Cela va valider la logique algorithmique (if/else), la propagation devariables...OBJECTIFS1) Puppet compile un catalogue avec certains facts (c’estl’idée, pas exactement ce qui est fait)2) RSpec-Puppet compare ce qu’il y a dans lecatalogue et ce que les tests disentFONCTIONNEMENT• Le plus difficile est de ne pas traduire son code dans un autre langage…• Les tests ne tournent pas sur une vraie machine : si le package n’existepas, ça ne le dira pasOÙ EXÉCUTER ?2 secondes à 2 minutesTEMPS D'EXÉCUTIONServeur d’intégration continuePre-commit hook sur les postes detravailPOINTS CLÉSCarte d’identité : RSpec-Puppet
38© OCTO 2015
39© OCTO 2015Du test d’intégration pour vérifier que lemodule fonctionne bien en vraiAttention, il y a certains pré-requis au niveaude votre SI : création de VM via API,isolation des environnements etc
40© OCTO 2015• S’assurer que le code Puppet fournit une infrastructure utilisable• S’assurer que le code est bien idempotentOBJECTIFS1) Demande une VM (vagrant, AWS, voir mêmeDocker)2) Applique le module Puppet3) Verifie à l’aide de Serverspec que tout est okFONCTIONNEMENT• L’idée est de tester les voies royales• L’idée est d’automatiser ce que vous testez manuellement : création d’unevm, puppet apply, netstat + ps pour vérifier que ça tourne ...OÙ EXÉCUTER ?2 minutes (docker simple) àplusieurs dizaines de minutesTEMPS D'EXÉCUTIONServeur d’intégration continuePOINTS CLÉSCarte d’identité : Beaker
41© OCTO 2015
42© OCTO 2015Et des outils hors écosystème PuppetL’idée : on crée un environnementplus ou moins complet (lab) avec Puppetet on en vérifie le comportement.
43© OCTO 2015Système de supervisionChaos Monkey pour vérifier la résilienceTir de performances via GatlingScénarios de pentests ou vérification deconformité SCAP pour la sécuritéTests end-to-end des applications déployées
44© OCTO 2015Avec tout ça, on ala boîte à outils pour faire duTest Driven Development sur de l’infrastructureTest Driven Infrastructure
45[email protected]Vous croyez que les technologies changent lemonde ?Nous aussi ! Rejoignez-nous !
On propose des formations !Adopter les bonnes pratiques DevOps appliquées auxéchangesFormations PuppetLabs officiellesSoftware CraftmanshipEt plein d’autres