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 :
$ 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.
0 commentaire