# TDID ### « Test Driven Infrastructure Developpement » ### avec Salt, GitLab, Kitchen et Testinfra #### PyconFR Bordeaux 2019 ![](https://i.imgur.com/T5pBV74.png =300x) --- ## Introduction * Arthur Lutz * ![](https://social.logilab.org/system/custom_emojis/images/000/002/814/original/63c72d3387d84738.png =30x)<!-- .element style="border:0;margin:0" --> [@arthurlutz@social.logilab.org](https://social.logilab.org/@arthurlutz) * [![](https://social.logilab.org/system/custom_emojis/images/000/002/815/original/d91b01cc6bc88981.png =30x)<!-- .element style="border:0;margin:0" --> @arthurlutz](https://twitter.com/arthurlutz) * Logilab * ![](https://social.logilab.org/system/custom_emojis/images/000/002/814/original/63c72d3387d84738.png =30x)<!-- .element style="border:0;margin:0" --> [@logilab@social.logilab.org](https://social.logilab.org/@logilab) * [![](https://social.logilab.org/system/custom_emojis/images/000/002/815/original/d91b01cc6bc88981.png =30x)<!-- .element style="border:0;margin:0" --> @logilab](https://twitter.com/logilab) * Groupe OT / Oceanet Technology * [![](https://social.logilab.org/system/custom_emojis/images/000/002/815/original/d91b01cc6bc88981.png =30x)<!-- .element style="border:0;margin:0" --> @ot_group_](https://twitter.com/ot_group_) <img src=https://i.imgur.com/5RvZeV5.png width="150" style="border:0;margin:0"/> <img src=https://www.oceanet-technology.com/wp-content/uploads/sites/2/2017/06/logo_ot_group.png width=150 style="border:0;margin:0"> --- ## ... début novembre ### Movember https://fr.movember.com/ ![](https://mzansilifeandstyle.files.wordpress.com/2013/10/movember-480x328.png)<!-- .element style="border:0;margin:0" --> --- ## Grandes lignes 1/3 * Intrastructure et deploiements pilotés par Salt * formulas * syndics --- ## Grandes lignes 2/3 * Tests de ces configuration, codes et deploiements * syntaxes * documentation * (un peu de) code * deploiements --- ## Grandes lignes 3/3 * Collaboration * gestion de projet avec gitlab * integration continue avec gitlab-ci * integration des modifications avec gitlab * DX developer experience --- ## Contexte * Infrastructure as Code chez un hébergeur * Utilisation de Salt ![](https://res.cloudinary.com/crunchbase-production/image/upload/v1397185611/ddd2130f2a69731ce90ebf4fc205866f.jpg =150x)<!-- .element style="border:0;margin:0" --> * Assurance Qualité * Nombreux contributeurs - profils variés * Montée en compétence et adoption de Salt --- ## Objectifs * Conventions de code pour faciliter la collaboration * Couverture de tests pour fiabiliser le déploiement * Indicateurs pour faciliter l'intégration * Test Driven Development * Intégration Continue pour la reproductibilité --- ## SaltStack Fast, scalable and flexible software for data center automation, from infrastructure and any cloud, to the entire application stack. Logiciel rapide, adaptable, qui permet la scalabilité et la flexibilité pour l’automatisation des data centers, depuis l’infrastructure matérielle ou n’importe quel cloud, jusqu’à l’ensemble de la pile applicative. --- ## SaltStack formulas ![](https://i.imgur.com/VL1QUNU.png)<!-- .element style="border:0" --> --- ## Outils * `yamllint`: pour les fichiers yaml * `flake8`: pour le code python * `doc8`: pour la documentation * `tox` : pour lancer l'ensemble en local * `sphinx`: linkcheck * `pytest`: pour lancer des tests unittaires sur des bouts de code * `gitlab-ci.yml` : pour lancer l'ensemble sur gitlab --- ## tox :::success tox est :heart: ::: ```bash tox ``` <pre>______ summary ___________ <font color="green"> py3: commands succeeded</font> <font color="green"> flake8: commands succeeded</font> <font color="green"> yamllint: commands succeeded</font> <font color="green"> congratulations :)</font> </pre> --- ## Tester dans un bac à sable ![](https://kitchen.ci/images/logo.png =100x)<!-- .element style="border:0" --> ![](https://www.virtualbox.org/graphics/vbox_logo2_gradient.png =100x)<!-- .element style="border:0" --> ![](https://testinfra.readthedocs.io/en/latest/_static/logo.svg =100x)<!-- .element style="border:0" --> --- # kitchen ![](https://kitchen.ci/images/logo.png)<!-- .element style="border:0" --> * pop VM (virtualbox) * deploy salt * lancer les tests * destroy VM --- ![](https://i.imgur.com/wVYiOZl.png) --- # tests en python * pytest * testinfra --- # pytest ## external pillars * deploy sites, template, input / output --- # testinfra https://testinfra.readthedocs.io/en/latest/ ![](https://i.imgur.com/cgCz0QR.png)<!-- .element style="border:0" --> --- ## testinfra - exemples ```python def test_ssh(host): assert host.socket('tcp://22').is_listening def test_nrpe(host): assert host.socket('tcp://5666').is_listening ``` ```python def test_ssh_root_login(host): assert host.file('/etc/ssh/sshd_config').contains('PermitRootLogin no') ``` --- # testinfra - exemples ``` tests/test_separate_nagios_config.py tests/test_118_bareos_ipv6.py tests/test_salt_master.py tests/test_shared_readonly.py tests/test_288_no_gid_group.py tests/test_nagios.py tests/test_default.py tests/test_nagios_nrpe.py tests/test_phpmyadmin.py tests/test_ssh_config.py ``` --- ## kitchen en local pour le dev ``` kitchen test debian # complete cycle kitchen init kitchen converge kitchen verify kitchen destroy kitchen login debian KITCHEN_NFS=1 SALT_MINION_ID=specificmachine.example.org \ kitchen converge debian ``` --- # Gitlab 1/2 ### community edition * utilisé pour la revue et l'intégration * pleins de dépots git * branches pour divisions environments et entités dans le groupe de l'entreprise --- # Gitlab 1/2 * usage intensif des références entre commit / merge request et tickets * références possibles entre projets * références sur plusieurs dépots permettent de groupe des contributions * [Everything is connected](https://about.gitlab.com/blog/2016/03/08/gitlab-tutorial-its-all-connected/) * pilote l'intégration continue --- # .gitlab-ci.yml * cibles tox ```yaml flake8: script: tox -e flake8 yamllint: script: tox -e yamllint ``` * kitchen * kitchen avec cibles multiples --- # GitLab pipelines ![](https://i.imgur.com/cDM4lu9.png)<!-- .element style="border:0" --> :::success :tada: All green! ::: --- # GitLab runners * shell * machine avec virtualbox :warning: --- # badges ! synthèse visuelle dans la documentation ![](https://i.imgur.com/ARFCrc0.png)<!-- .element style="border:0" --> --- # Suites ? * [kitchen-ec2](https://github.com/test-kitchen/kitchen-ec2) kitchen sur AWS * gitlab-runner sur un salt-master pour test des merge requests en `test=True` * [tlv](https://pypi.org/project/tlv/) *Too less variation - A tool to discover code duplication in various languages* --- ## Pistes pour aller plus loin * DX - Developer Experience * `git pre-commit` * Test Driven Infrastructure * Réutilisation des tests dans la supervision * `testinfra` pour les architectures n-tiers --- ## Conclusion * Responsabilité collective du code * Contribuer sur un dépot qui est déjà au vert est plus comfortable * Intégrer quand c'est au vert --- ## Logilab recrute ! ![](https://www.logilab.fr/file/2622/raw)<!-- .element style="border:0" --> --- ## Questions ? * Merci pour votre attention * Des questions ? * Diapositives (avec les liens !) : [html](https://hackmd.logilab.org/p/SJpRvMDtr#/), [pdf ](http://slides.logilab.fr/2019/tdid-salt-testinfra-kitchen-gitlab.pdf) ![](https://www.logilab.fr/file/2831/raw/logo-logilab.svg =150x)<!-- .element style="border:0" -->
{"title":"TDID / Pycon","tags":"presentation,saltstack,pyconfr","slideOptions":{"transition":"none","theme":"white","allottedMinutes":1}}