Voici le cinquième article de la formation Ansible. Dans mon précédent article, nous avons mis en place l’authentification par clé SSH entre le Control Host et les Target Hosts avant d’envoyer un ping Ansible vers ces derniers. Aujourd’hui, nous allons voir de plus près un composant qui ne fait pas partie d’Ansible à proprement parler, mais qui va nous faciliter la vie dans l’organisation et la gestion de nos configurations : l’outil direnv.
Gérer les variables de projet avec Direnv
Là comme ailleurs, nous allons préférer la pratique à la théorie. Placez-vous dans le répertoire du quatrième atelier pratique :
$ cd ~/formation-ansible/atelier-04
Voici les deux machines virtuelles de cet atelier :
Machine virtuelle
Adresse IP
debian
10.23.45.10
rocky
10.23.45.20
Démarrez les machines virtuelles :
$ vagrant up
Connectez-vous à la VM sous Debian :
$ vagrant ssh debian
direnv est une extension du shell qui permet de définir ou de modifier des variables d’environnement en fonction du répertoire de travail en cours. L’opération se fait de manière automatique, simplement en changeant de répertoire. Dès que vous quittez le répertoire en question, les modifications spécifiques sont supprimées.
Mettez à jour les informations sur les paquets :
$ sudo apt update
direnv est fourni par les dépôts officiels de la distribution :
$ sudo apt install -y direnv
Pour intégrer direnv au shell Bash, ajoutez une ligne au fichier de configuration ~/.bashrc :
$ echo ‘eval « $(direnv hook bash) »‘ >> ~/.bashrc
Activez direnv sans passer par une reconnexion :
$ source ~/.bashrc
Pour utiliser direnv, il suffit de créer un fichier .envrc avec une définition de variable dans un répertoire donné :
$ mkdir -v monprojet
mkdir: created directory ‘monprojet’
$ cd monprojet/
$ pwd
/home/vagrant/monprojet
À présent, créez le fichier .envrc suivant dans ce répertoire :
$ echo « export TESTVAR=Yatahongaga » > .envrc
Chaque fois que vous créez ou modifiez un tel fichier .envrc, direnv vous affiche une demande d’autorisation qu’il faudra confirmer explicitement :
direnv: error /home/vagrant/monprojet/.envrc is blocked.
Run `direnv allow` to approve its content
$ direnv allow
direnv: loading ~/monprojet/.envrc
direnv: export +TESTVAR
Partant de là, la définition de la variable TESTVAR dépendra du répertoire où vous vous trouvez :
$ echo $TESTVAR
Yatahongaga
$ cd
direnv: unloading
$ echo $TESTVAR
$ cd monprojet/
direnv: loading ~/monprojet/.envrc
direnv: export +TESTVAR
$ echo $TESTVAR
Yatahongaga
À présent, nous allons modifier .envrc pour utiliser expand_path, une fonction qui transforme un chemin relatif en chemin absolu :
$ echo ‘export ANSIBLE_CONFIG=$(expand_path ansible.cfg)’ > .envrc
direnv: error /home/vagrant/monprojet/.envrc is blocked.
Run `direnv allow` to approve its content
$ direnv allow
direnv: loading ~/monprojet/.envrc
direnv: export +ANSIBLE_CONFIG
La valeur de la variable ANSIBLE_CONFIG correspondra au chemin absolu du fichier ansible.cfg en argument :
$ echo $ANSIBLE_CONFIG
/home/vagrant/monprojet/ansible.cfg
$ mkdir -v sousrepertoire
mkdir: created directory ‘sousrepertoire’
$ cd sousrepertoire/
$ echo $ANSIBLE_CONFIG
/home/vagrant/monprojet/ansible.cfg
Peut-être bien que vous ne voyez pas exactement à quoi tout cela peut nous servir. Je vous conseille de suspendre votre jugement et d’attendre la mise en place de nos premiers playbooks Ansible. Vous verrez alors toute l’utilité de direnv.
Quittez la VM :
$ exit
Installer Direnv sous Rocky Linux
Connectez-vous à la VM sous Rocky Linux :
$ vagrant ssh rocky
Red Hat Enterprise Linux et les clones comme Rocky Linux ne fournissent pas direnv, ni dans les dépôts officiels ni même dans les dépôts tiers comme EPEL. Il faut donc procéder à une installation manuelle depuis la page du projet :
https://github.com/direnv/direnv/releases
$ VERSION= »2.34.0″
$ sudo wget https://github.com/direnv/direnv/releases/download/v$VERSION/direnv.linux-amd64
-O /usr/local/bin/direnv
$ sudo chmod 0755 /usr/local/bin/direnv
$ echo ‘eval « $(direnv hook bash) »‘ >> ~/.bashrc
$ source ~/.bashrc
Maintenant que direnv est installé, je peux tester son bon fonctionnement :
$ mkdir test
$ cd test/
$ pwd
/home/vagrant/test
$ echo « export TESTVAR=Yatahongaga » > .envrc
direnv: error /home/vagrant/test/.envrc is blocked.
Run `direnv allow` to approve its content
$ direnv allow
direnv: loading ~/test/.envrc
direnv: export +TESTVAR
$ echo $TESTVAR
Yatahongaga
$ cd
direnv: unloading
Quittez la VM :
$ exit
Supprimez les deux VM :
$ vagrant destroy -f
La suite au prochain numéro.
La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.