Aller au contenu

direnv et asdf les outils DevOps indispensables!

logo devops

Nous travaillons tous sur de nombreux projets, chacun utilisant des versions différentes des CLI Devops. Par exemple, vous travaillez pour un client qui utilise Kubernetes 1.23 et Terraform 1.1.4. Ensuite, on vous met sur un nouveau projet client qui lui utilise Kubernetes 1.25 et Terraform 1.3.6. Si vous ne gérez pas vos versions correctement cela peut vite tourner au drame avec des incompatibilités ou du code non pris en charge au moment de la livraison de celui-ci.

Dans un précédent billet, je vous avais présenté asdf, que j’appelle le maxi-choco du Devops. Voyons comment l’utiliser conjointement avec direnv pour définir finement chaque version des outils Devops de chacun de vos projets.

Utilisation de direnv avec asdf

Pour rappel, asdf permet d’installer et d’utiliser différentes versions d’un même outil dans différents répertoires. direnv permet de charger et de décharger des variables d’environnements en fonction du dossier dans lequel vous vous trouvez.

En combinant asdf à direnv on peut ainsi définir automatiquement les variables d’environnement et les versions des outils d’un projet.

Installation d’asdf et de direnv

Je ne vais pas à nouveau documenter l’installation d’asdf, je vous renvoie à mon précédent billet.

Pour installer direnv, nous allons utiliser asdf bien sur.

Terminal window
asdf install direnv 2.32.1
asdf global direnv 2.32.1

Maintenant, ajoutez la ligne à votre fichier .bashrc ou .zshrc.

Terminal window
# Pour bashrc
eval "$(asdf exec direnv hook bash)"
# Pour zshrc
eval "$(asdf exec direnv hook zsh)"

Rechargez votre shell.

Définir les versions de vos CLI pour votre projet

Ajoutons quelques plugins asdf pour installer vos CLI :

Terminal window
asdf plugin add terraform
asdf plugin add helmfile
asdf plugin add kubectl
asdf plugin add helm

Allez dans le dossier de votre projet et tapez ces commandes :

Terminal window
asdf direnv setup --shell zsh --version 2.32.1
cat <<EOF> .envrc
use asdf
export AWS_DEFAULT_REGION=eu-west-1
EOF

Définissons les versions des outils de ce répertoire en éditant un fichier .tool-versions :

Terminal window
terraform 1.1.4
kubernetes 1.23.0

Rechargez votre shell et lançons l’installation :

Terminal window
asdf install
awscli 2.7.34 is already installed
bat 0.22.1 is already installed
direnv 2.32.1 is already installed
docker-compose-v1 v2.9.0 is already installed
exa 0.10.1 is already installed
github-cli 2.16.1 is already installed
gohugo 0.103.1 is already installed
hadolint 2.10.0 is already installed
helm 3.9.4 is already installed
jq 1.6 is already installed
k9s 0.26.5 is already installed
kind 0.16.0 is already installed
krew 0.4.3 is already installed
Downloading kubectl from https://dl.k8s.io/release/v1.23.0/bin/linux/amd64/kubectl
kubectx 0.9.4 is already installed
kustomize 4.5.7 is already installed
minikube 1.27.0 is already installed
mkcert 1.4.4 is already installed
nomad 1.3.5 is already installed
packer 1.8.3 is already installed
polaris 7.1.4 is already installed
popeye v0.10.1 is already installed
rclone 1.59.2 is already installed
tekton-cli 0.26.0 is already installed
terraform 1.3.6 is already installed
tflint 0.40.1 is already installed
tfsec 1.28.0 is already installed
trivy 0.32.0 is already installed
vault 1.11.3 is already installed
yq 4.27.5 is already installed
asdf exec direnv allow

Vous remarquez qu’il se charge de télécharger la version de kubectl qui n’était pas encore installé localement. Vérifions que notre variable d’environnement est bien défini avec la valeur attendue :

Terminal window
echo $AWS_DEFAULT_REGION
eu-west-1
cd ..
direnv: unloading
echo $AWS_DEFAULT_REGION

Vous remarquez en changeant de dossier direnv à décharger les variables d’environnement et affichant celle définie, elle n’a plus de valeur.

Conclusion

J’espère que ce billet, vous aurez compris l’intérêt de coupler ces deux outils que sont asdf et direnv !

Fini de recharger sans cesse vos variables et désinstaller et d’installer sans cesse les versions de vos outils.