Loading search data...

asdf le maxi choco du Devops !

Publié le : 11 février 2022 | Mis à jour le : 22 janvier 2023

logo

J’avais qualifié arkade de choco du Devops, et bien pour les gourmands, il y a le maxi-choco qui se nomme asdf. Arkade ne permet d’installer qu’une seule version de la plupart des outils Devops, alors qu'asdf reprend le fonctionnement des outils de type pyenv, gvm, nvm, rbenv. C’est-à-dire qu’il permet d’installer différentes versions d’un même outil, et de définir quelle version sera utilisé dans un répertoire précis.

Installation

ASDF ne demande que deux dépendances et si vous êtes développeur elles sont forcément déjà installées sur votre poste. Il s’agit de curl et git, donc il suffit juste de l’installer. Pour cela il suffit de cloner le projet dans votre home directory :

pip install lastversion --user
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v$(lastversion asdf-vm/asdf)

Il faut ensuite ajouter cette ligne dans votre fichier .bashrc ou .zshrc :

. $HOME/.asdf/asdf.sh

Si vous utilisez zsh, vous pouvez aussi ajouter ses lignes pour activer l'auto-completion :

# append completions to fpath
fpath=(${ASDF_DIR}/completions $fpath)
# initialise completions with ZSH's compinit
autoload -Uz compinit && compinit

Utilisation d’asdf

Pour démarrer bien sûr il suffit de taper la commande asdf --help, mais je vais vous expliquer le fonctionnement avant.

Lorsque vous installez asdf, en fait vous ne pouvez pas installer d’outils. Il faut dans un premier temps ajouter des plugins. Pour obtenir la liste des plugins disponibles, il suffit de taper la commande asdf plugin list all |more Pourquoi ai-je mis un |more? Tout simplement parce que la liste retournée donne juste le vertige. Difficile ne pas trouver votre bonheur.

Je tiens tout de même à préciser que cette liste n’est pas exhaustive et que parfois certains plugins ne fonctionnent pas correctement. Mais attention certains plugins nécessitent la présence de certaines dépendances, donc en cas de problème le mieux est de se rendre sur la page du projet de ce plugin et de lire sa documentation.

Heureusement il existe parfois plusieurs versions du même plugin (il faut fouiller sur github), et on peut aussi développer ses propres plugins.

Installation de plugins

Maintenant que nous avons la liste des plugins voyons comment en installer. La commande pour installer un plugin est : asdf plugin add <nom de votre choix> <repository du plugin>

Par exemple pour installer direnv :

asdf plugin-list-all| grep -i direnv
direnv                        https://github.com/asdf-community/asdf-direnv.git

asdf plugin add direnv https://github.com/asdf-community/asdf-direnv.git

Pourquoi je conseille d’ajouter le lien, alors qu’on pourrait simplement utiliser le nom. Tout simplement parce que vous pourrez installer d’autres versions d’un plugin si celui par défaut ne vous donne pas satisfaction.

Que s’est-il passé ? En fait dans le répertoire $HOME/.asdf asdf à cloner le projet dans le répertoire plugins. Et l’outil n’est toujours pas installé !

direnv
zsh: command not found: direnv

Installation de différentes versions des outils

Bon nous allons pouvoir installer notre outil direnv. Je vous rappelle qu’il est possible d’installer plusieurs versions d’un même outil et de configurer la version par répertoire. Voyons cela en détail. Pour afficher la liste des versions disponibles, il suffit d’utiliser la commande asdf list all <nom du plugin>. Pour notre exemple cela donne :

asdf list all direnv

...
2.26.0
2.27.0
2.28.0
2.29.0
2.30.0
2.30.1
2.30.2
2.30.3

Pour installer la dernière version, si le plugin est bien écrit, il suffit d’utiliser la commande asdf install <nom du plugin> latest.

asdf install direnv latest
∗ Downloading and installing direnv...
The installation was successful!

Voyons si nous pouvons utiliser notre outil :

direnv
No version is set for command direnv
Consider adding one of the following versions in your config file at /home/vagrant/.asdf/.tool-versions
direnv 2.30.3

Toujours pas. Il faut comme indiqué ajouter une ligne au fichier de configuration se trouvant dans le répertoire $HOME/.asdf ou dans directement dans la home directory. Cela peut aussi se faire avec la commande asdf global <nom du plugin> <version|latest>:

asdf global direnv latest

cat ~/.tool-versions
direnv 2.30.3

Maintenant on peut utiliser direnv :

direnv
direnv version
2.30.3

Maintenant vous voulez pouvoir installer votre outil avec une version précise dans un répertoire. Nous allons utiliser cette fois la commande asdf local <nom du plugin> <version|latest>. Il faut au préalable installer la version ! :

mkdir test

asdf install direnv 2.26.0
asdf local direnv 2.26.0

direnv version
2.26.0

ls -alrt
total 12
-rw-r--r--.  1 vagrant vagrant   14 Feb 11 09:45 .tool-versions
drwxr-xr-x.  2 vagrant vagrant   28 Feb 11 09:45 .
drwx------. 51 vagrant vagrant 4096 Feb 11 09:45 ..

cat .tool-versions
direnv 2.26.0

Pour revenir à une version standard :

asdf local <nom du plugin> system

cat .tool-versions
direnv system

Mise à jour d’asdf

Pour la mise à jour vers la dernière release stable, asdf intègre son propre mécanisme d’update :

asdf update

Gestion des plugins

Pour lister les plugins :

asdf plugin list --urls
direnv                       https://github.com/asdf-community/asdf-direnv.git

Mettre à jour tous les plugins :

asdf plugin update --all

Mettre à jour d’un plugin :

asdf plugin update <nom du plugin>

Vérifier les dernières versions disponibles de vos outils :

asdf latest --all
awscli  2.8.0   missing
bat     0.22.1  installed
direnv  2.32.1  installed
docker-compose-v1       docs-v1.8.0-2016-08-03  missing
exa     0.10.1  installed
gohugo  0.104.3 missing
hadolint        2.10.0  installed
helm    3.10.0  missing
jq      1.6     installed
k9s     0.26.6  missing
kind    0.16.0  installed
krew    0.4.3   installed
kubectl 1.25.2  installed
kubectx 0.9.4   installed
kustomize       4.5.7   installed
minikube        1.27.0  installed
mkcert  1.4.4   installed
nomad   1.3.5   installed
packer  1.8.3   installed
polaris 7.1.5   installed
popeye  v0.10.1 installed
rclone  1.59.2  installed
tekton-cli      0.26.0  installed
terraform       1.3.1   missing
tflint  0.41.0  missing
tfsec   1.28.0  installed
trivy   0.32.1  missing
vault   1.11.4+ent      missing
yq      4.27.5  installed

Désinstaller une version d’un outil :

asdf uninstall <nom du plugin> <version>

Désinstaller un plugin :

asdf plugin remove <nom du plugin>

Pourquoi pas pour construire des images Docker ?

En parcourant cet outil je me suis fait cette réflexion : pourquoi pas l’utiliser lors de la construction d’image Docker.

Je vais reprendre mon exemple avec direnv :

FROM alpine:3.15

ENV ASDF_VERSION "v0.9.0"
ENV DIRENV_VERSION "2.26.0"
ENV PATH "/root/.asdf/bin:/root/.asdf/shims:$PATH"
RUN apk add --no-cache --update bash grep curl git && \
    bash && \
    PATH="$HOME/.asdf/bin:$HOME/.asdf/shims:$PATH" && \
    git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch $ASDF_VERSION && \
    asdf plugin-add direnv https://github.com/asdf-community/asdf-direnv.git && \
    asdf install direnv $DIRENV_VERSION && \
    asdf global direnv $DIRENV_VERSION

Construisons l’image :

docker build . -t direnv:0.0.1

Maintenant testons :

docker run --rm -it direnv:0.0.1 direnv version
2.26.0

J’imagine parfaitement son utilisation dans la construction d’images destinées à tourner dans les pipelines CI/CD de Gitlab.

Développement de plugins

asdf est un superbe outil et il existe des outils qui ne sont pas encore géré. Donc pourquoi pas contribuer ?

A venir …

Conclusion

asdf est très bel outil, qui va vous permettre de rendre même vos projets idempotent. C’est-à-dire qu’à tout moment, vous êtes sûr de construire vos projets avec des versions précises des outils utilisés.

Je l’ai intégré dans ma configuration devops 2022.

Plus d’infos

Mots clés :

devops tutorials

Si vous avez apprécié cet article de blog, vous pouvez m'encourager à produire plus de contenu en m'offrant un café sur  Ko-Fi. Vous pouvez aussi passer votre prochaine commande sur amazon, sans que cela ne vous coûte plus cher, via  ce lien . Vous pouvez aussi partager le lien sur twitter ou Linkedin via les boutons ci-dessous. Je vous remercie pour votre soutien.

Autres Articles


Commentaires: