Skip to main content

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 (comme ansible) dans un environnement virtuel isolé, sans polluer le Python système.
  • La commande pipx inject ansible passlib ajoute le package passlib dans le même environnement que celui où ansible est installé.
  • Ainsi, lorsque vous lancez ansible-playbook, le module passlib 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’option password_hash('sha512'), c’est Ansible-Controller qui fait le travail. D’où l’erreur courante quand on oublie d’installer passlib 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 :

  1. Installez passlib dans le même environnement Python qu’Ansible (machine de contrôle).
  2. Vous pouvez le faire :
    • Via pipx inject ansible passlib (environnement virtuel isolé).
    • Via pip install passlib directement.
  3. Vérifiez que ansible --version et which 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 !