Retour
Featured image of post Ma boite à outils DevOps (édition 2021)

Ma boite à outils DevOps (édition 2021)

Qui n'a pas déjà perdu de précieuses minutes à reconfigurer son poste entre deux projets ? Découvrez comment j'ai résolu ce problème !

Je pense qu’on sera tous d’accord pour dire que la complexité des stacks et des technologies nous force aujourd’hui à jongler de plus en plus entre différents outils et contextes projet. C’est pour cela que je vous propose de voir comment et avec quels logiciels j’organise mon quotidien afin de vous faire découvrir comment on peut gagner en efficacité. Autant dire qu’on va aborder toutes sortes d’outils et quelques astuces, mais avant de parler de tout ça je vais un peu vous décrire mon contexte afin de bien comprendre la manière dont je voie la problématique.

Comme pas mal de personnes le savent déjà, je suis consultant Cloud & DevOps un métier qui accentue encore plus les multiples changements de contexte et de client. L’année dernière, je me suis retrouvé à jongler entre plusieurs clients sur des missions courtes, la société où je travaille et certains projets perso. Au-delà de l’organisation humaine, j’ai eu pas mal de soucis techniques, me connecter déconnecter en boucle de compte Google, changer en permanence mes configurations Kubernetes, SSH, bref une horreur où j’ai perdu trop de temps à mon goût. J’ai donc travaillé sur comment répondre à ces problématiques et comment être plus efficace et je vous partage aujourd’hui où j’en suis arrivé !

Toujours suivre les bons conseils de Bear Grylls
Toujours suivre les bons conseils de Bear Grylls

À noter pour le reste de l’article que je travaille exclusivement sous GNU/Linux au niveau de ma station de travail (Debian), mais la grande majorité de la suite de l’article sera adaptable sur d’autres systèmes. Pour la configuration automatique de mon poste de travail avec Ansible, j’avais écrit cet article et bien évidemment le code est toujours disponible par ici, pour le partage des fichiers j’utilise Nextcloud.

Mes outils du quotidien

Comme tout bon artisan, nous avons nos outils et de bons outils, ça change le métier, en bien. On va donc aborder les différents logiciels que j’utilise et j’apprécie pour me faire gagner en temps ou encore en efficacité. Je ne ferai pas un tutoriel pour chacun, mais dans la mesure du possible je vous conseillerai un article francophone pour aller plus loin.

Firefox et ses addons

Aujourd’hui le navigateur est surement un des logiciels qu’on utilise le plus, personnellement j’ai choisi Firefox, car je pense que c’est eux qui ont la vision du web qui me tente le plus. Passons en revue les addons dont je n’arriverais pas à me passer :

  • uBlock Origin, que vous connaissez surement pour bloquer les pubs autant pour la pollution visuelle que pour gagner en légèreté sur les pages web.
  • Disconnect, pour réduire le traking et là encore rendre le web un peu plus léger.
  • I don’t care about cookies, pour se débarrasser de la demande de stockage des cookies depuis la directive EU.
  • NoScript, un peu violent, je conçois qu’il ne va pas plaire à tous. Cet addons bloque toutes les exécutions JavaScript, Java et Flash, hors ceux que vous autorisez. Un peu lourd au départ, je m’y suis habitué et je le trouve très efficace notamment grâce à un moteur de règles d’autorisation.
  • Firefox container, le dernier, mais surement le plus important pour moi il permet de conteneuriser les onglets dans des contextes isolés. Grâce à ça je peux notamment être connecté à plusieurs comptes Google sur le même navigateur sans risquer de conflit. Je vous invite fortement à le tester, d’ailleurs un article très sympa de la communauté Firefox est disponible par ici.

Système

Les outils que j’utilise le plus en addition de ma Debian

  • Zsh avec p10k, la combinaison des deux me permet d’avoir un Shell efficace et très interactif notamment avec beaucoup d’information contextuelle (version logiciel, contexte Kubernetes etc.). On pourrait juste reprocher à cette solution d’être encore un peu lourde à mon sens.

Toutes les informations en un coup d’œil
Toutes les informations en un coup d’œil

  • Tmux on ne le présente plus le multiplexeur de terminal dont je me sers tous les jours. Au départ j’utilisais Terminator, mais celui-ci contrairement à Tmux ne permet pas d’être exécuté sur un serveur distant au travers d’SSH. Si ça vous intéresse, un article est disponible ici pour le découvrir.

Diviser pour mieux régner
Diviser pour mieux régner

  • Direnv un petit binaire très sympathique qui permet d’exécuter automatiquement des actions au passage dans répertoire, par exemple charger les bonnes versions logiciels. Un billet de blog plus complet par ici vous permet d’en savoir plus sur l’outil.
  • Makefile une base sur tout système Unix, il est toujours utile de le garder sous la main pour automatiser des actions quand la CI/CD n’est pas disponible où possible. Un article très sympathique que je vous conseille pour découvrir son utilisation côté Ops : Makefile pour les Ops.
  • Pass utiliser un gestionnaire de mot de passe est surement la décision à prendre qui vous fera gagner le plus de temps ! Et dans ce domaine mon préféré c’est Pass, j’en avais d’ailleurs écrit un article d’introduction toujours disponible à ce lien.

Git et collaboration

  • pre-commit vous aussi vous avez tendance à oubliez de passer le linter avant de commit ou encore d’avoir peur d’oublier un secret dans le commit ? N’ayez plus peur avec pre-commit ! Ce petit logiciel va se déclencher avant de valider le commit à l’aide d’un hook git pour effectuer des actions (linter, check de sécurité, etc.). Bref, le tester c’est l’adopter. Si vous voulez en savoir plus, foncez sur ce lien.

Toujours mieux quand tous les tests sont au vert
Toujours mieux quand tous les tests sont au vert

  • asdf a l’heure ou les outils se multiplie et que leurs distributions n’est plus toujours centralisé sur les gestionnaires de packet, gérer les versions notamment en fonction des projets est proche de l’enfer, on ne va pas se mentir. C’est là qu’arrive asdf ! Un petit outil qui va vous permettre de gérer les différentes versions de vos logiciels favoris. Un très bon article est disponible par ici pour le découvrir plus en détail.

Vim comme environnement de développement

Rien qu’à son évocation, il peut évoquer la joie ou le bonheur. Après plusieurs années, je ne l’ai pas encore quitté et cela reste un de mes outils quotidiens j’apprécie notamment le fait que celui-ci s’exécute directement dans un terminal et soit très largement extensible. J’utilise Vim comme environnement de développement (Python, Terraform, yaml, etc.), pour cela j’y ai adjoint plusieurs addons parmi lesquels les plus intéressants sont :

  • Nerdtree / nerdtree-git-plugin pas essentiel, mais ils permettent d’afficher l’arborescence de fichier avec le statut git de chaque fichier.

Qui a dit que Vim était austère ?
Qui a dit que Vim était austère ?

  • Gitgutter qui en complément du plugin précédent va permettre d’afficher dans la marge un statut git de la ligne. Très confortable au quotidien.
  • Vim-matchup les utilisateurs de Vim sont habitués à utiliser la touche % qui permet notamment à partir d’une ouverture de parenthèse de se téléporter à la dernière. Ce plugin va étendre le fonctionnement de cette touche à d’autres langages et surtout à des mots spécifiques.
  • Coc qui est permets de clairement passer d’un éditeur de texte à un IDE. Cette extension permet de faire de la complétion automatique et d’afficher des informations contextuelles. Pour cela l’extension communique avec un backend NodeJS qui est celui de VSCode, vous pouvez donc profiter de tous les addons de celui-ci.

Vim sous stéroïdes
Vim sous stéroïdes

  • Vim-terraform pour les utilisateurs de Terraform il s’agit d’un must have qui va permettre d’exécuter des commandes Terraform à partir de Vim (:terraform), mais aussi de gérer la coloration HCL. Je n’ai pas encore migré sous NeoVim, mais il y a de grandes chances que je passe sous NeoVim à terme notamment pour des questions de performance.

Terraform

L’outil d’Infra As code par excellence, sa maturité et le nombre de providers disponible en font un outil de choix quand il s’agit de passer de l’interface graphique au code. Voici 4 petits logiciels qui viendront compléter à la perfection le fonctionnement de Terraform.

  • tfenv surement l’extension à avoir, beaucoup d’entre vous la connaisse surement cette extension vous permet automatiquement ou manuellement de changer votre version de Terraform en une commande, un must have.
  • tfsec on a toutes et tous peur qu’un jour malgré les codes review un security group un peu trop ouvert soit déployé en production. Pour cela je vous conseille tfsec un petit binaire qui va parser votre code Terraform à la recherche de configuration un peu faiblarde sur l’aspect sécurité.

Préserez-vous des règles trop larges
Préserez-vous des règles trop larges

  • tflint un peu méta, car il ne s’agit “que” d’un framwork. Néanmoins celui-ci va vous permettre d’ajouter des fonctionnalités comme la recherche d’erreur, les dépréciations de syntaxe ou encore vérifier les conventions de nommage et j’en passe.
  • terraform-docs quand vous écrivez notamment des Modules Terraform, vous savez qu’il est important de documenter les inputs et les output, mais vous savez aussi qu’ils sont rarement mis à jour. Grâce à terraform-docs vous allez automatiquement générer cette documentation !

Conteneurs et virtualisation

Malgré les environnements cloud et les chaînes CI/CD il est parfois nécessaire et plus simple de manipuler VM et conteneur sur son poste, une petite occasion de parler de ces outils toujours bons à garder sous la main.

  • kvm / Virt-Manager depuis 2 ans j’ai arrêté d’utiliser VirtualBox au profit de KVM, simple et efficace il permet de créer et gérer des VMs. Quand une interface graphique se fait manquer, Virt-Manager remplit parfaitement son office pour des manipulations basiques. Découvrez comment créer une machine en quelques cliques sur ce tutoriel.
  • Vagrant les fameux outils de la société HashiCorp on pourrait faire un article rien que sur eux. Vagrant vous permet globalement de faire de faire de l’infra as code pour vos labs locaux. Autant vous dire que combiné à KVM cité précédemment, vous pouvez gérer efficacement vos environnements de tests sur votre poste. Là encore, un petit article découvert est disponible par ici.
  • Podman une alternative à Docker, Podman propose une cli complète totalement compatible avec la syntaxe Docker qui a l’avantage notamment de pouvoir manipuler des Pods ! Pour en savoir plus, j’avais écrit un article par ici.
  • Buildah contrairement à Docker Podman ne permet pas de construire des images, mais pas de panique, un outil très efficace existe pour cela il s’agit de Buildah. Pour découvrir comment l’utiliser, je vous conseille cet article.

Kubernetes

Ah Kubernetes, un des grands sujets qui divise le monde de l’informatique tout comme Vim vs Emacs ou encore tab vs espace. Qu’on l’aime ou non, forcé de constater qu’aujourd’hui il est de plus en plus difficile de trouver des infrastructures sans Kubernetes.

  • kubectx & kubens Il peut être parfois lourd de switcher entre les différents clusters ou les différents namespace Kubernetes. Pour faciliter la vie, voici deux petits scripts qui vont permettre de faire ça rapidement et efficacement.
  • k9s les commandes kubectl c’est cool, mais quand on doit chercher des informations faire des tests, on enchaîne rapidement les longues commandes en perdant beaucoup de temps. Grâce à K9s cette époque est révolue ! Ce binaire vous permet d’interagir de manière interactive avec votre cluster, avec un grand nombre de raccourcie cet outil est là encore un indispensable quand vous manipulez du Kubernetes. De plus un article très cool sur le sujet est disponible par ici.

Ne vous perdez plus dans votre cluster
Ne vous perdez plus dans votre cluster

Comment j’ai automatisé le changement de contexte client

C’est bien beau depuis tout à l’heure je vous parle de pleins d’outils, super sympas, mais ça ne règle pas totalement ma problématique de base simplifier mon quotidien en particulier les changements de contexte.

Alors commençons par la base, dans mon home, j’ai créé un dossier par contexte, cela peut-être par exemple : perso, client1, client2. Dans chacune de ces arborescences, je vais retrouver à la base 2 fichiers :

  • .direnv comme j’en parlais dans les outils au-dessus, celui-ci va permettre d’exécuter des commandes et d’exporter des variables à chaque passage. Dans notre cas, il peut servir par exemple à sélectionner le bon cluster Kubernetes, exporter le bon profil AWS, etc. Bref paramétrer beaucoup de choses pour nous faire gagner du temps !
  • .gitconfig : certains ce demanderons surement, pourquoi il n’est pas dans le home. En faite il est dans le home et dans mes dossiers de contextes. Depuis quelque temps Gitconfig supporte les includes ! Donc pour chacun de mes contextes ma configuration Git va être surchargée par des valeurs spécifiques pour s’adapter à mon compte par exemple ou changer la clé PGP.
[includeIf "gitdir:~/contexte1/"]
    path = ~/contexte1/.gitconfig
[includeIf "gitdir:~/contexte2/"]
    path = ~/contexte2/.gitconfig

Bien sûr je fais cela au premier niveau de l’arborescence, mais cela ne m’empêche pas de l’exécuter plus loin dans celle-ci afin de m’adapter à un sous projet.

Pour ce qui est des clés (SSH et PGP), je créer systématiquement une clé par contexte, tout simplement pour pouvoir identifier un scope et les révoquer sans impacte sur les autres contextes je vous conseille grandement cette hygiène de sécurité.

En parlant de SSH, n’hésitez pas à configurer des hosts spécifiques dans votre fichier de configuration ~/.ssh/config ça vous fera gagner un temps précieux et vous permettra aussi par exemple d’avoir plusieurs comptes Github avec des clés SSH différentes sans soucis. La plupart des logiciels vous proposent ce type de fichier utilisez les !

Cette organisation est simple et efficace, je pense que c’est son avantage, rester simple. Trop la complexifier multiplierait surement les problèmes et le temps de debug, je suis donc plutôt satisfait de cet équilibre.

Retour sur 1 an avec ce système

Cela fait aujourd’hui environ un an que je marche avec ce système. Bien qu’encore à affiner sur certains points, je pense que l’ensemble de ces outils et l’organisation de mon code m’a permis de gagner en efficacité.

Pour beaucoup, la liste d’outil peut paraitre immense, alors que j’en ai zappé quelques-uns moins intéressant où trop situationnel. Cependant, une grande partie du nombre est aussi dû à la philosophie KISS, chacun de ces outils à un rôle précis et le fait bien. J’apprécie réellement cela, ma configuration est très flexible et en grande partie automatisée.

Je vois néanmoins deux limites. La première concerne automatisation, il est simple de ne plus savoir ce qui est fait derrière la boite noire. Je vous recommande donc de faire attention à ça et de vous assurer qu’il n’y a pas de doute là-dessus. La seconde est le debug, a ajouté des surcharges de layer il est parfois pas très simple de s’y retrouver dans ceux-ci quand une valeur est erronée. Ce problème est néanmoins limité, car avec une bonne structuration on ne se perd pas trop.

Tous mes fichiers de configuration sont toujours disponibles par ici : Github.

Head photo by Philip Swinburn on Unsplash

Généré avec Hugo
Thème Stack conçu par Jimmy