infra as code, choisissez vous la pilule rouge ou la pilule bleue - devoxx 2016
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
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
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
# 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
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 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
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
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 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 52
Vous croyez que les technologies changent le monde ?
Nous aussi ! Rejoignez-nous !
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
#DevoxxFR
http://docs.ansible.com/ansible/glossary.htmlhttp://blog.octo.com/revue-de-code-quel-format-choisir/https://www.atlassian.com/git/tutorials/comparing-workflows/feature-branch-workflowhttps://docs.puppetlabs.com/pe/latest/cmgmt_puppetfile.htmlhttp://docs.ansible.com/ansible/galaxy.html#installing-multiple-roles-from-a-fileInfrastructure as Code - Kief Morrishttp://garylarizza.com/blog/2013/12/08/when-to-hiera/
Bibliographie
53