SlideShare une entreprise Scribd logo
#DevoxxFR
Devoxx France 2016
Infra as Code, choisissez vous
la pilule rouge ou la pilule bleue ?
Fabien Arcellier @farcellier
Alexandre Raoul @alex_raoul
1
#DevoxxFR
Alexandre Raoul
L’OPS, kiffs : Puppet, Ansible, des
APIs et pas de clicodrome
2
Fabien Arcellier
Le DEV, kiffs : tout automatiser,
mettre en prod
#DevoxxFR 3
Infra as code, késako?
Une team de winner
Une gestion du code de winner
Aller en production comme un winner
Au programme
#DevoxxFR
Infra as Code
Décrire sous forme de code
exécutable et testable la configuration
de l’architecture technique
d’infrastructure
#DevoxxFR
If you can’t spin up
a full copy of your infra and test it,
you don’t actually have “infrastructure as code”.
You just have ... some code, and duct tape.
https://charity.wtf/2016/03/23/aws-networking-environments-and-you/
#DevoxxFR
Infra as Code, en théorie
http://www.xkcd.com/1319/
6
#DevoxxFR
Infra as Code, en pratique
http://www.xkcd.com/1319/
7
#DevoxxFR
La Pilule Rouge,
on prend conscience
… qu’à l’arrache ou en mode
pompier, on ne tiendra pas
longtemps pas la cadence
… que l’Infra as Code c’est du
code finalement assez classique
8
La Pilule Bleue,
on reste
… à maintenir les services
disponibles avec des bouts de
ficelle,
… à scripter l’existant tel quel et à
survivre avec les systèmes pourris
Pilule Bleue ou Rouge ?
#DevoxxFR
Boucle de feedback
c’est le temps mis pour
se rendre compte de sa connerie
9
#DevoxxFR
Oui mais bon, on parle de l’infra là ...
10
“Je monte une copie de
mon SI pour valider ma
sonde de monitoring”
“Je le fais en prod - YOLO”
#DevoxxFR
Pour réduire la boucle de
feedback, on isole !
11
#DevoxxFR
# Exemple de container
# qui monte un elasticsearch
?> docker run -d --name search -v $pwd:/mnt -
w /mnt ubuntu
?> docker exec --tty search ansible-playbook
roles/elasticsearch/tests.yml
?> docker exec --tty search curl http:
//localhost:9200
?> docker stop search
12
Pilule rouge : les outils pour isoler existent
# Exemple de VM avec Vagrant
# qui monte un elasticsearch
?> vagrant up
?> vagrant ssh -c 'curl http://localhost:9200'
?> vagrant halt
Monter des VMs avec vagrant Monter des containers avec docker
#DevoxxFR
Pilule rouge : utiliser des pratiques de développement adaptés
---
- hosts: all
roles:
- role: fabientools.monitoring
when: ff_monitoring_active
feature flipping
---
- hosts: all
roles:
- role: fabientools.monitoring,
nagios_plugins_nrpe_url: 'http://www.trololo.org/nagios_plugins_nrpe.tar.gz'
injection de configuration
13
#DevoxxFR
Les états désirés
Pour alléger son code, on déclare l'état attendu
plutôt que l’action à faire.
14
#DevoxxFR 15
if (grep -q “(d){1,3}.(d){1,3}.(d){1,3}.(d){1,3}(s)+myapi.dev”
/etc/hosts | grep -qv 127.0.0.1); then sed ‘s/.* myapi.dev/127.0.0.1 myapi.
dev/g’ -i /etc/hosts; fi
if (!grep -q myapi.dev /etc/hosts); then echo "127.0.0.1 myapi.dev" >>
/etc/hosts; fi
echo "127.0.0.1 myapi.dev" >> /etc/hosts
Pilule bleue : ajouter une entrée
dans un fichier hosts
#DevoxxFR 16
if (grep -q “(d){1,3}.(d){1,3}.(d){1,3}.(d){1,3}(s)+myapi.dev”
/etc/hosts | grep -qv 127.0.0.1); then sed ‘s/.* myapi.dev/127.0.0.1 myapi.
dev/g’ -i /etc/hosts; fi
if (!grep -q myapi.dev /etc/hosts); then echo "127.0.0.1 myapi.dev" >>
/etc/hosts; fi
echo "127.0.0.1 myapi.dev" >> /etc/hosts
Pilule bleue : ajouter une entrée
dans un fichier hosts
#DevoxxFR
Le monte charge
Je suis au 6e, je veux aller au 2e
1) Je reste appuyé sur Down
2) Je vois “2”
3) J'arrête d’appuyer
17
L’ascenseur
Je suis au 6e, je veux aller au 2e
1) J’appuie sur “2”
2) Je joue sur mon téléphone
Bonus : je suis au 2e, j’appuie sur “2”, rien ne se passe
L’idempotence, c’est ça
#DevoxxFR
- lineinfile:
dest: /etc/hosts
regexp: 'myapi.dev$'
line: '127.0.0.1 myapi.dev'
AnsiblePuppet
Pilule rouge : lisibilité + idempotence
host { 'myapi.dev':
ip => '127.0.0.1',
}
18
#DevoxxFR 19
Une team de winner
#DevoxxFR
Le super héros
Résout vos problèmes
mais …
casse tout autour pour le faire
20
Le moine codeur
Implémente tout ce que vous voulez
mais …
dans son coin
Le grand architecte
Fait un dossier d’archi pour chaque
évolution mais …
il se retrouve périmé après
chaque implem’
Le critique
A des convictions sur tout
mais …
n’a jamais rien implémenté de concret
L’archiviste
Refactore le code tout le temps
mais …
ne fait rien de nouveau
#DevoxxFR
documentation
as code
definition of
done &
tests
d’acceptance
Rétrospectives
revue de
code
Tests
automatisés
21
Construire votre équipe à l’aide
des pratiques de dev
#DevoxxFR 22
Méthode : Revue de code
Identifier les erreurs
Monter / Faire monter en
compétence
Expliquer le code
Faire émerger les standards
de l’équipe
Partager la propriété du code
#DevoxxFR
C’est quoi le meilleur “DevOps tool” ?
23
Objectif :
Partager la vérité sur ce qui doit se passer
#DevoxxFR 24
Une gestion du code de winner
#DevoxxFR
Pilule bleue : La dette technique
25
#DevoxxFR
Pilule rouge : On prend conscience …
26
le craft, c’est comme Tetris
#DevoxxFR 27
Pilule bleue : subir ses scripts bash
#DevoxxFR 28
Pilule rouge : maîtriser ses scripts bash
#!/usr/bin/env bash
echo "Hello world"
Objectif : ramener bash dans le droit chemin
set -o errexit
set -o nounset Arrête l'exécution si une variable n’est pas déclarée
Arrête l'exécution si une commande échoue
Petit bonus lisibilité : utilisez les flags en mode long
Genre “curl --output” et pas “curl -o”
Et bien sûr plein d’autres …
#DevoxxFR
Aller en prod comme un winner
29
#DevoxxFR
Pilule bleue : pour savoir ce qu’il y a en production...
30
On va voir l’architecte
#DevoxxFR
Pilule rouge : pour savoir ce qu’il y a en prod,
il faut logger chaque changement d’infra
infra à
l’instant T
31
le code
d’infrastructure
le résultat de
l'exécution= +
Le résultat peut vivre dans Jenkins, PuppetDB,
Ansible Tower, Rundeck, être remonté via ELK …
#DevoxxFR
Pilule rouge : pour savoir ce qu’il y a en prod,
il faut logger chaque changement d’infra
infra à
l’instant T
32
le code
d’infrastructure
le résultat de
l'exécution= +
Le résultat peut vivre dans Jenkins, PuppetDB,
Ansible Tower, Rundeck, être remonté via ELK …
#DevoxxFR
- name: wait for tomcat to be ready
pause: seconds=30
33
Pilule bleue : après avoir lancé Tomcat,
“on attend un peu”
- name: start Tomcat
service: name=tomcat state=started
#DevoxxFR
- name: wait for tomcat to be ready
pause: seconds=30
34
Pilule bleue : après avoir lancé Tomcat,
“on attend un peu plus”
- name: start Tomcat
service: name=tomcat state=started
- name: wait for tomcat to be ready
pause: seconds=60
#DevoxxFR 35
Pilule rouge : Retirer tous les “sleep”
Objectif : rendre le système plus prédictible
- name: start Tomcat
service: name=tomcat state=started
- name: wait for tomcat to listen
wait_for: port=8080
- name: wait to be serving
uri:
url: "http://127.0.0.1:8080/ABC"
status_code: 200
register: result
until: 'ABC app' in result.content
retries: 5
delay: 10
#DevoxxFR 36
Methode : cli first !
un script qui tourne sur jenkins, ... , doit fonctionner en ligne de commande
● Debugger plus facilement
● Jouer en mode dégradé
● Versionner le code de votre job
#DevoxxFR 37
la pyramide des tests
Test
manuel
Tests
End to End
Tests
Intégrations
Tests
Unitaires
Un test qui sert à quelque chose ...
Spécifier l’intention d’un code
Assurer la non régression dans le temps
Assurer que le code fait ce qu’il dit
38
#DevoxxFR 39
à propos des tests unitaires ...
Tests unitaires de l’outil
à ne pas confondre avec
Tests unitaires de notre code construit avec le DSL
#DevoxxFR 40
Un petit refactoring avec les tests unitaires
dans le monde Puppet
On a une classe toute simple qui installe “curl” et “vim”
On veut rendre cette liste de packages variable sans casser l’existant
#DevoxxFR 41
On pose notre filet
#DevoxxFR 42
On pose notre filet
#DevoxxFR 43
On ajoute le test de la nouvelle feature
#DevoxxFR 44
On ajoute le test de la nouvelle feature
#DevoxxFR 45
Et on passe tout au vert !
#DevoxxFR 46
Et on passe tout au vert !
#DevoxxFR 47
à propos des tests d’intégration ...
On crée une VM et on lance le code
Forcément, c’est long
La boucle de feedback en prend un coup ...
Et vu qu’on a une combinatoire infinie,
il faut faire des choix
#DevoxxFR 48
à propos des tests d’intégration ...
Pas de solution miracle
Quand on ne sait pas, on fait ultra simple !
#DevoxxFR 49
à propos des tests d’intégration ...
Pas de solution miracle
Quand on ne sait pas, on fait ultra simple !
Setup, test, teardown :
1) On crée une VM,
2) On lance le code,
3) On lance les tests,
4) On nettoie
#DevoxxFR 50
à propos des tests d’intégration ...
Niveau 1 : Smoke test
Niveau 2 : Test de la voie royale
Niveau 3 : Tests de non régression en
cas de bug d’intégration
Niveau 4 : venez faire un talk dessus
L'échelle de maturité du vendredi soir
#DevoxxFR 51
#DevoxxFR 52
Vous croyez que les technologies
changent le monde ?
Nous aussi ! Rejoignez-nous !
recrutement@octo.com
Merci
Culture Code
Software Craftsmanship :
Better Places with Better Code
Un livre collectif disponible
gratuitement en téléchargement
http://www.octo.com/fr/publications/20-culture-code
#DevoxxFR
http://docs.ansible.com/ansible/glossary.html
http://blog.octo.com/revue-de-code-quel-format-choisir/
https://www.atlassian.com/git/tutorials/comparing-workflows/feature-branch-
workflow
https://docs.puppetlabs.com/pe/latest/cmgmt_puppetfile.html
http://docs.ansible.com/ansible/galaxy.html#installing-multiple-roles-from-a-file
Infrastructure as Code - Kief Morris
http://garylarizza.com/blog/2013/12/08/when-to-hiera/
Bibliographie
53

Contenu connexe

Tendances

Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Ludovic Piot
 
Déploiements avec Docker
Déploiements avec DockerDéploiements avec Docker
Déploiements avec Docker
Luis Lopez
 

Tendances (20)

Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
Déploiements avec Docker
Déploiements avec DockerDéploiements avec Docker
Déploiements avec Docker
 
Introduction à docker.io
Introduction à docker.ioIntroduction à docker.io
Introduction à docker.io
 
Introduction à Docker et Gaudi
Introduction à Docker et GaudiIntroduction à Docker et Gaudi
Introduction à Docker et Gaudi
 
Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...
Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...
Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...
 
Codons notre infrastructure
Codons notre infrastructureCodons notre infrastructure
Codons notre infrastructure
 
Support formation vidéo : Construire et administrer vos conteneurs avec Docker
Support formation vidéo : Construire et administrer vos conteneurs avec DockerSupport formation vidéo : Construire et administrer vos conteneurs avec Docker
Support formation vidéo : Construire et administrer vos conteneurs avec Docker
 
Docker@linuq
Docker@linuqDocker@linuq
Docker@linuq
 
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
 
Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...
Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...
Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ans...
 
Présentation Docker
Présentation DockerPrésentation Docker
Présentation Docker
 
Alter Way's digitalks - Docker : des conteneurs pour tout faire ?
Alter Way's digitalks - Docker  : des conteneurs pour tout faire ?Alter Way's digitalks - Docker  : des conteneurs pour tout faire ?
Alter Way's digitalks - Docker : des conteneurs pour tout faire ?
 
Journée DevOps : Puppet, un outil pour les installer tous
Journée DevOps : Puppet, un outil pour les installer tousJournée DevOps : Puppet, un outil pour les installer tous
Journée DevOps : Puppet, un outil pour les installer tous
 
Puppet, la philosophie DevOps
Puppet, la philosophie DevOpsPuppet, la philosophie DevOps
Puppet, la philosophie DevOps
 
Docker Tours Meetup #1 - Introduction à Docker
Docker Tours Meetup #1 - Introduction à DockerDocker Tours Meetup #1 - Introduction à Docker
Docker Tours Meetup #1 - Introduction à Docker
 
Intro docker
Intro dockerIntro docker
Intro docker
 
Docker du mythe à la réalité
Docker du mythe à la réalitéDocker du mythe à la réalité
Docker du mythe à la réalité
 
Docker - YaJUG
Docker  - YaJUGDocker  - YaJUG
Docker - YaJUG
 
Gdg lille-intro-to-kubernetes
Gdg lille-intro-to-kubernetesGdg lille-intro-to-kubernetes
Gdg lille-intro-to-kubernetes
 
Varnish & blue/green deployments
Varnish & blue/green deploymentsVarnish & blue/green deployments
Varnish & blue/green deployments
 

En vedette

En vedette (20)

REX déploiement Ansible et Utilisation avec Docker
REX déploiement Ansible et Utilisation avec DockerREX déploiement Ansible et Utilisation avec Docker
REX déploiement Ansible et Utilisation avec Docker
 
Joe Mobile sur le Cloud - DevoxxFR 2013
Joe Mobile sur le Cloud - DevoxxFR 2013Joe Mobile sur le Cloud - DevoxxFR 2013
Joe Mobile sur le Cloud - DevoxxFR 2013
 
Devops@Kelkoo - Agile Grenoble 2012
Devops@Kelkoo - Agile Grenoble 2012Devops@Kelkoo - Agile Grenoble 2012
Devops@Kelkoo - Agile Grenoble 2012
 
DEVOPS - La synthèse
DEVOPS - La synthèseDEVOPS - La synthèse
DEVOPS - La synthèse
 
Introduction à la démarche Devops
Introduction à la démarche DevopsIntroduction à la démarche Devops
Introduction à la démarche Devops
 
Integration continue et déploiement automatisé
Integration continue et déploiement automatiséIntegration continue et déploiement automatisé
Integration continue et déploiement automatisé
 
Concept de l’Intégration Continue
Concept de l’Intégration ContinueConcept de l’Intégration Continue
Concept de l’Intégration Continue
 
Deploiement continu AgileFfrance 2011
Deploiement continu AgileFfrance 2011Deploiement continu AgileFfrance 2011
Deploiement continu AgileFfrance 2011
 
Du cycle en V à DevOps, en passant par agile - Normation
Du cycle en V à DevOps, en passant par agile - NormationDu cycle en V à DevOps, en passant par agile - Normation
Du cycle en V à DevOps, en passant par agile - Normation
 
Packaging et déploiement d'une application avec Docker et Ansible @DevoxxFR 2015
Packaging et déploiement d'une application avec Docker et Ansible @DevoxxFR 2015Packaging et déploiement d'une application avec Docker et Ansible @DevoxxFR 2015
Packaging et déploiement d'une application avec Docker et Ansible @DevoxxFR 2015
 
Ansible loves Python, Python Philadelphia meetup
Ansible loves Python, Python Philadelphia meetupAnsible loves Python, Python Philadelphia meetup
Ansible loves Python, Python Philadelphia meetup
 
Ansible Automation to Rule Them All
Ansible Automation to Rule Them AllAnsible Automation to Rule Them All
Ansible Automation to Rule Them All
 
Ansible presentation
Ansible presentationAnsible presentation
Ansible presentation
 
Network Automation: Ansible 102
Network Automation: Ansible 102Network Automation: Ansible 102
Network Automation: Ansible 102
 
DevOps
DevOpsDevOps
DevOps
 
Welcome to the era of DevOps!
Welcome to the era of DevOps!Welcome to the era of DevOps!
Welcome to the era of DevOps!
 
Ansible Introduction
Ansible Introduction Ansible Introduction
Ansible Introduction
 
Ansible intro
Ansible introAnsible intro
Ansible intro
 
Retour Hadoop Summit 2012
Retour Hadoop Summit 2012Retour Hadoop Summit 2012
Retour Hadoop Summit 2012
 
Démo puppet et état du projet
Démo puppet et état du projetDémo puppet et état du projet
Démo puppet et état du projet
 

Similaire à Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
AbdellahELMAMOUN
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide
 

Similaire à Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016 (20)

5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
 
Kubernetes University - Cap sur l'orchestration
Kubernetes University - Cap sur l'orchestrationKubernetes University - Cap sur l'orchestration
Kubernetes University - Cap sur l'orchestration
 
Devoxx France : Kubernetes University, Cap sur l’orchestration Docker !
Devoxx France : Kubernetes University, Cap sur l’orchestration Docker !Devoxx France : Kubernetes University, Cap sur l’orchestration Docker !
Devoxx France : Kubernetes University, Cap sur l’orchestration Docker !
 
Kubernetes University, Cap sur l’orchestration Docker
Kubernetes University, Cap sur l’orchestration DockerKubernetes University, Cap sur l’orchestration Docker
Kubernetes University, Cap sur l’orchestration Docker
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
Docker le buzz est il justifié ?
Docker le buzz est il justifié ? Docker le buzz est il justifié ?
Docker le buzz est il justifié ?
 
Kit de survie pour l'IoT façon DIY
Kit de survie pour l'IoT façon DIYKit de survie pour l'IoT façon DIY
Kit de survie pour l'IoT façon DIY
 
Lego bonnes pratiques_devoxx_2017
Lego bonnes pratiques_devoxx_2017Lego bonnes pratiques_devoxx_2017
Lego bonnes pratiques_devoxx_2017
 
A la découverte de docker
A la découverte de dockerA la découverte de docker
A la découverte de docker
 
Spring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'tsSpring Boot & Containers - Do's & Don'ts
Spring Boot & Containers - Do's & Don'ts
 
Devoxx 17 - Orchestration de conteneurs : le choix des armes !
Devoxx 17 - Orchestration de conteneurs : le choix des armes !Devoxx 17 - Orchestration de conteneurs : le choix des armes !
Devoxx 17 - Orchestration de conteneurs : le choix des armes !
 
Networxx (intro et fin)
Networxx (intro et fin)Networxx (intro et fin)
Networxx (intro et fin)
 
Java (8) eXperiments - DevoxxFR 2016
Java (8) eXperiments - DevoxxFR 2016Java (8) eXperiments - DevoxxFR 2016
Java (8) eXperiments - DevoxxFR 2016
 
DevOps, freedom to get stuff done
DevOps, freedom to get stuff doneDevOps, freedom to get stuff done
DevOps, freedom to get stuff done
 
De la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logicielsDe la chaîne de production au SI géré par des logiciels
De la chaîne de production au SI géré par des logiciels
 
Jenkins Workflow
Jenkins WorkflowJenkins Workflow
Jenkins Workflow
 
Midi technique - présentation docker
Midi technique - présentation dockerMidi technique - présentation docker
Midi technique - présentation docker
 
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services Par Al...
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services  Par Al...XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services  Par Al...
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services Par Al...
 
Be zend docker
Be zend dockerBe zend docker
Be zend docker
 
Gab17 lyon-Docker pour quoi faire - Cédric Leblond et Derue
Gab17 lyon-Docker pour quoi faire - Cédric Leblond et DerueGab17 lyon-Docker pour quoi faire - Cédric Leblond et Derue
Gab17 lyon-Docker pour quoi faire - Cédric Leblond et Derue
 

Infra as Code, choisissez vous la pilule rouge ou la pilule bleue - Devoxx 2016

  • 1. #DevoxxFR Devoxx France 2016 Infra as Code, choisissez vous la pilule rouge ou la pilule bleue ? Fabien Arcellier @farcellier Alexandre Raoul @alex_raoul 1
  • 2. #DevoxxFR Alexandre Raoul L’OPS, kiffs : Puppet, Ansible, des APIs et pas de clicodrome 2 Fabien Arcellier Le DEV, kiffs : tout automatiser, mettre en prod
  • 3. #DevoxxFR 3 Infra as code, késako? Une team de winner Une gestion du code de winner Aller en production comme un winner Au programme
  • 4. #DevoxxFR Infra as Code Décrire sous forme de code exécutable et testable la configuration de l’architecture technique d’infrastructure
  • 5. #DevoxxFR If you can’t spin up a full copy of your infra and test it, you don’t actually have “infrastructure as code”. You just have ... some code, and duct tape. https://charity.wtf/2016/03/23/aws-networking-environments-and-you/
  • 6. #DevoxxFR Infra as Code, en théorie http://www.xkcd.com/1319/ 6
  • 7. #DevoxxFR Infra as Code, en pratique http://www.xkcd.com/1319/ 7
  • 8. #DevoxxFR La Pilule Rouge, on prend conscience … qu’à l’arrache ou en mode pompier, on ne tiendra pas longtemps pas la cadence … que l’Infra as Code c’est du code finalement assez classique 8 La Pilule Bleue, on reste … à maintenir les services disponibles avec des bouts de ficelle, … à scripter l’existant tel quel et à survivre avec les systèmes pourris Pilule Bleue ou Rouge ?
  • 9. #DevoxxFR Boucle de feedback c’est le temps mis pour se rendre compte de sa connerie 9
  • 10. #DevoxxFR Oui mais bon, on parle de l’infra là ... 10 “Je monte une copie de mon SI pour valider ma sonde de monitoring” “Je le fais en prod - YOLO”
  • 11. #DevoxxFR Pour réduire la boucle de feedback, on isole ! 11
  • 12. #DevoxxFR # Exemple de container # qui monte un elasticsearch ?> docker run -d --name search -v $pwd:/mnt - w /mnt ubuntu ?> docker exec --tty search ansible-playbook roles/elasticsearch/tests.yml ?> docker exec --tty search curl http: //localhost:9200 ?> docker stop search 12 Pilule rouge : les outils pour isoler existent # Exemple de VM avec Vagrant # qui monte un elasticsearch ?> vagrant up ?> vagrant ssh -c 'curl http://localhost:9200' ?> vagrant halt Monter des VMs avec vagrant Monter des containers avec docker
  • 13. #DevoxxFR Pilule rouge : utiliser des pratiques de développement adaptés --- - hosts: all roles: - role: fabientools.monitoring when: ff_monitoring_active feature flipping --- - hosts: all roles: - role: fabientools.monitoring, nagios_plugins_nrpe_url: 'http://www.trololo.org/nagios_plugins_nrpe.tar.gz' injection de configuration 13
  • 14. #DevoxxFR Les états désirés Pour alléger son code, on déclare l'état attendu plutôt que l’action à faire. 14
  • 15. #DevoxxFR 15 if (grep -q “(d){1,3}.(d){1,3}.(d){1,3}.(d){1,3}(s)+myapi.dev” /etc/hosts | grep -qv 127.0.0.1); then sed ‘s/.* myapi.dev/127.0.0.1 myapi. dev/g’ -i /etc/hosts; fi if (!grep -q myapi.dev /etc/hosts); then echo "127.0.0.1 myapi.dev" >> /etc/hosts; fi echo "127.0.0.1 myapi.dev" >> /etc/hosts Pilule bleue : ajouter une entrée dans un fichier hosts
  • 16. #DevoxxFR 16 if (grep -q “(d){1,3}.(d){1,3}.(d){1,3}.(d){1,3}(s)+myapi.dev” /etc/hosts | grep -qv 127.0.0.1); then sed ‘s/.* myapi.dev/127.0.0.1 myapi. dev/g’ -i /etc/hosts; fi if (!grep -q myapi.dev /etc/hosts); then echo "127.0.0.1 myapi.dev" >> /etc/hosts; fi echo "127.0.0.1 myapi.dev" >> /etc/hosts Pilule bleue : ajouter une entrée dans un fichier hosts
  • 17. #DevoxxFR Le monte charge Je suis au 6e, je veux aller au 2e 1) Je reste appuyé sur Down 2) Je vois “2” 3) J'arrête d’appuyer 17 L’ascenseur Je suis au 6e, je veux aller au 2e 1) J’appuie sur “2” 2) Je joue sur mon téléphone Bonus : je suis au 2e, j’appuie sur “2”, rien ne se passe L’idempotence, c’est ça
  • 18. #DevoxxFR - lineinfile: dest: /etc/hosts regexp: 'myapi.dev$' line: '127.0.0.1 myapi.dev' AnsiblePuppet Pilule rouge : lisibilité + idempotence host { 'myapi.dev': ip => '127.0.0.1', } 18
  • 20. #DevoxxFR Le super héros Résout vos problèmes mais … casse tout autour pour le faire 20 Le moine codeur Implémente tout ce que vous voulez mais … dans son coin Le grand architecte Fait un dossier d’archi pour chaque évolution mais … il se retrouve périmé après chaque implem’ Le critique A des convictions sur tout mais … n’a jamais rien implémenté de concret L’archiviste Refactore le code tout le temps mais … ne fait rien de nouveau
  • 21. #DevoxxFR documentation as code definition of done & tests d’acceptance Rétrospectives revue de code Tests automatisés 21 Construire votre équipe à l’aide des pratiques de dev
  • 22. #DevoxxFR 22 Méthode : Revue de code Identifier les erreurs Monter / Faire monter en compétence Expliquer le code Faire émerger les standards de l’équipe Partager la propriété du code
  • 23. #DevoxxFR C’est quoi le meilleur “DevOps tool” ? 23 Objectif : Partager la vérité sur ce qui doit se passer
  • 24. #DevoxxFR 24 Une gestion du code de winner
  • 25. #DevoxxFR Pilule bleue : La dette technique 25
  • 26. #DevoxxFR Pilule rouge : On prend conscience … 26 le craft, c’est comme Tetris
  • 27. #DevoxxFR 27 Pilule bleue : subir ses scripts bash
  • 28. #DevoxxFR 28 Pilule rouge : maîtriser ses scripts bash #!/usr/bin/env bash echo "Hello world" Objectif : ramener bash dans le droit chemin set -o errexit set -o nounset Arrête l'exécution si une variable n’est pas déclarée Arrête l'exécution si une commande échoue Petit bonus lisibilité : utilisez les flags en mode long Genre “curl --output” et pas “curl -o” Et bien sûr plein d’autres …
  • 29. #DevoxxFR Aller en prod comme un winner 29
  • 30. #DevoxxFR Pilule bleue : pour savoir ce qu’il y a en production... 30 On va voir l’architecte
  • 31. #DevoxxFR Pilule rouge : pour savoir ce qu’il y a en prod, il faut logger chaque changement d’infra infra à l’instant T 31 le code d’infrastructure le résultat de l'exécution= + Le résultat peut vivre dans Jenkins, PuppetDB, Ansible Tower, Rundeck, être remonté via ELK …
  • 32. #DevoxxFR Pilule rouge : pour savoir ce qu’il y a en prod, il faut logger chaque changement d’infra infra à l’instant T 32 le code d’infrastructure le résultat de l'exécution= + Le résultat peut vivre dans Jenkins, PuppetDB, Ansible Tower, Rundeck, être remonté via ELK …
  • 33. #DevoxxFR - name: wait for tomcat to be ready pause: seconds=30 33 Pilule bleue : après avoir lancé Tomcat, “on attend un peu” - name: start Tomcat service: name=tomcat state=started
  • 34. #DevoxxFR - name: wait for tomcat to be ready pause: seconds=30 34 Pilule bleue : après avoir lancé Tomcat, “on attend un peu plus” - name: start Tomcat service: name=tomcat state=started - name: wait for tomcat to be ready pause: seconds=60
  • 35. #DevoxxFR 35 Pilule rouge : Retirer tous les “sleep” Objectif : rendre le système plus prédictible - name: start Tomcat service: name=tomcat state=started - name: wait for tomcat to listen wait_for: port=8080 - name: wait to be serving uri: url: "http://127.0.0.1:8080/ABC" status_code: 200 register: result until: 'ABC app' in result.content retries: 5 delay: 10
  • 36. #DevoxxFR 36 Methode : cli first ! un script qui tourne sur jenkins, ... , doit fonctionner en ligne de commande ● Debugger plus facilement ● Jouer en mode dégradé ● Versionner le code de votre job
  • 37. #DevoxxFR 37 la pyramide des tests Test manuel Tests End to End Tests Intégrations Tests Unitaires
  • 38. Un test qui sert à quelque chose ... Spécifier l’intention d’un code Assurer la non régression dans le temps Assurer que le code fait ce qu’il dit 38
  • 39. #DevoxxFR 39 à propos des tests unitaires ... Tests unitaires de l’outil à ne pas confondre avec Tests unitaires de notre code construit avec le DSL
  • 40. #DevoxxFR 40 Un petit refactoring avec les tests unitaires dans le monde Puppet On a une classe toute simple qui installe “curl” et “vim” On veut rendre cette liste de packages variable sans casser l’existant
  • 41. #DevoxxFR 41 On pose notre filet
  • 42. #DevoxxFR 42 On pose notre filet
  • 43. #DevoxxFR 43 On ajoute le test de la nouvelle feature
  • 44. #DevoxxFR 44 On ajoute le test de la nouvelle feature
  • 45. #DevoxxFR 45 Et on passe tout au vert !
  • 46. #DevoxxFR 46 Et on passe tout au vert !
  • 47. #DevoxxFR 47 à propos des tests d’intégration ... On crée une VM et on lance le code Forcément, c’est long La boucle de feedback en prend un coup ... Et vu qu’on a une combinatoire infinie, il faut faire des choix
  • 48. #DevoxxFR 48 à propos des tests d’intégration ... Pas de solution miracle Quand on ne sait pas, on fait ultra simple !
  • 49. #DevoxxFR 49 à propos des tests d’intégration ... Pas de solution miracle Quand on ne sait pas, on fait ultra simple ! Setup, test, teardown : 1) On crée une VM, 2) On lance le code, 3) On lance les tests, 4) On nettoie
  • 50. #DevoxxFR 50 à propos des tests d’intégration ... Niveau 1 : Smoke test Niveau 2 : Test de la voie royale Niveau 3 : Tests de non régression en cas de bug d’intégration Niveau 4 : venez faire un talk dessus L'échelle de maturité du vendredi soir
  • 52. #DevoxxFR 52 Vous croyez que les technologies changent le monde ? Nous aussi ! Rejoignez-nous ! recrutement@octo.com Merci Culture Code Software Craftsmanship : Better Places with Better Code Un livre collectif disponible gratuitement en téléchargement http://www.octo.com/fr/publications/20-culture-code