AnsibleVoici 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

Astucedirenv 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

AstucePeut-ê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 :

$ 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

Lire la suite : Configuration de base


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.

 

Catégories : Formation

0 commentaire

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *