infra as code, choisissez vous la pilule rouge ou la pilule bleue - devoxx 2016

53
#DevoxxFR Devoxx France 2016 Infra as Code, choisissez vous la pilule rouge ou la pilule bleue ? Fabien Arcellier @farcellier Alexandre Raoul @alex_raoul 1

Upload: fabien-arcellier

Post on 12-Apr-2017

636 views

Category:

Software


1 download

TRANSCRIPT

#DevoxxFR

Devoxx France 2016Infra as Code, choisissez vous

la pilule rouge ou la pilule bleue ?Fabien Arcellier @farcellierAlexandre Raoul @alex_raoul

1

#DevoxxFR

Alexandre RaoulL’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 chargeJe suis au 6e, je veux aller au 2e1) Je reste appuyé sur Down2) Je vois “2”3) J'arrête d’appuyer

17

L’ascenseur

Je suis au 6e, je veux aller au 2e1) J’appuie sur “2”2) Je joue sur mon téléphone

Bonus : je suis au 2e, j’appuie sur “2”, rien ne se passeL’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érosRésout vos problèmes

mais …casse tout autour pour le faire

20

Le moine codeurImplémente tout ce que vous voulez

mais …dans son coin

Le grand architecteFait un dossier d’archi pour chaque

évolution mais …il se retrouve périmé après

chaque implem’

Le critiqueA des convictions sur tout

mais …n’a jamais rien implémenté de concret

L’archivisteRefactore 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

Testsautomatisé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éeArrête l'exécution si une commande échoue

Petit bonus lisibilité : utilisez les flags en mode longGenre “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

TestsEnd to End

TestsIntégrations

TestsUnitaires

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 longLa 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 miracleQuand on ne sait pas, on fait ultra simple !

#DevoxxFR 49

à propos des tests d’intégration ...

Pas de solution miracleQuand 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 !

[email protected]

Merci

Culture CodeSoftware Craftsmanship :

Better Places with Better Code

Un livre collectif disponible gratuitement en téléchargement

http://www.octo.com/fr/publications/20-culture-code