Solutions aux problèmes courants d'Ansible
Introduction
Lors de l'utilisation d'Ansible, certaines erreurs reviennent fréquemment, notamment autour du hashage des mots de passe et de la gestion des dépendances Python. Voici quelques solutions pratiques partagées par la communauté pour résoudre ces problèmes.
Solutions proposées par la communauté
1 - Installer passlib
dans l’environnement Ansible via pipx
Installation de passlib via pipx
La première solution, proposée par Maxi Mumi sur les forums Ansible, consiste à utiliser pipx
pour installer passlib
dans l'environnement virtuel d'Ansible :
Réponse de Maxi Mumi :
Use "inject" argument for add passlib in venv ansible
pipx inject ansible passlib
Pourquoi ça marche ?
pipx
permet d’installer des outils Python (commeansible
) dans un environnement virtuel isolé, sans polluer le Python système.- La commande
pipx inject ansible passlib
ajoute le packagepasslib
dans le même environnement que celui oùansible
est installé. - Ainsi, lorsque vous lancez
ansible-playbook
, le modulepasslib
est disponible pour le Python qui exécute Ansible.
2 - Installer passlib
directement sur le serveur Ansible (la machine de contrôle)
Réponse de Desblock :
I also had this issue today. I had to pip install passlib on the ansible server itself, not the target host.
pip install --break-system-packages passlib
(Le
--break-system-packages
est optionnel et dépend de votre distribution.)
Pourquoi ça marche ?
- Lorsque vous utilisez le module
user:
avec un mot de passe hashé, c’est Ansible (sur la machine de contrôle) qui réalise le hash avant d’envoyer le mot de passe final (hashé) à la machine cible. - Donc si vous n’installez
passlib
que sur la machine cible, Ansible ne pourra toujours pas hasher le mot de passe, car la bibliothèque n’existe pas dans l’environnement Python du contrôle. - En installant
passlib
sur le même Python qu’Ansible (la machine controller), vous rendez la librairie immédiatement disponible pour la phase de hashage.
Important : comme l’a souligné un commentaire, il faut bien noter (et c’est souvent source de confusion) que pour le hashage du module
user:
, c’est le contrôleur qui en a besoin, pas forcément la cible !
3 - Quel est le meilleur choix ?
-
Méthode
pipx
:- Parfait si vous gérez plusieurs versions d’Ansible ou que vous ne voulez pas toucher au Python global du système.
- Vous gardez un environnement virtuel propre pour Ansible.
-
Méthode
pip install passlib
sur la machine de contrôle :- Plus rapide si vous avez déjà un Python système où Ansible est installé directement.
- Peut nécessiter des droits d’administrateur (ou un
virtualenv
) selon votre distribution.
Dans les deux cas, l’essentiel est que passlib
soit disponible dans l’environnement Python qui exécute Ansible lors du hashage.
4 - Et si je veux absolument installer passlib
sur la cible ?
- Pour d’autres usages (par exemple si vous exécutez localement un script Python sur la machine cible), vous pourriez vouloir installer
passlib
aussi là-bas. - Mais pour le module
user:
et l’optionpassword_hash('sha512')
, c’est Ansible-Controller qui fait le travail. D’où l’erreur courante quand on oublie d’installerpasslib
du côté Controller.
Conclusion
Pour résoudre l’erreur « No module named 'passlib' » lors de la création d’utilisateurs avec un mot de passe hashé dans Ansible :
- Installez
passlib
dans le même environnement Python qu’Ansible (machine de contrôle). - Vous pouvez le faire :
- Via
pipx inject ansible passlib
(environnement virtuel isolé). - Via
pip install passlib
directement.
- Via
- Vérifiez que
ansible --version
etwhich python3
pointent bien vers le Python oùpasslib
est installé.
Ainsi, plus besoin de s’arracher les cheveux : Ansible trouvera passlib
et pourra hasher vos mots de passe sans erreur !