Résolution avancée : Installation de passlib avec repli vers pip en cas d'échec
1 - Introduction
Ce playbook permet de gérer l'installation de passlib et la création d'utilisateurs.
2 - Pour tester ce playbook :
- Copiez le contenu dans un fichier add-users.yml
- Exécutez avec : ansible-playbook -i inventory.ini add-users.yml
3 - Structure et fonctionnement :
- Exécution sur tous les hôtes (hosts: all)
- Définition de 3 utilisateurs (alice, bob, charlie) avec mots de passe
- Détection automatique de la distribution Linux
- Installation des prérequis (python3, pip3) selon la distribution
- Gestion des cas particuliers comme EPEL sur AlmaLinux
ansible-playbook -i inventory.ini add-users.yml
4 - Playbook add-users.yml
---
- name: Gérer l'installation de passlib et créer des utilisateurs
hosts: all
become: yes
vars:
db_users:
- username: "alice"
password: "password1"
uid: 1001
- username: "bob"
password: "password2"
uid: 1002
- username: "charlie"
password: "password3"
uid: 1003
tasks:
########################################################################
# 1) DÉTECTER LA DISTRIBUTION #
########################################################################
- name: Gather facts
setup:
########################################################################
# 2) INSTALLER PYTHON3 ET PIP3 #
########################################################################
- name: Installer python3 et pip3 sur Debian/Ubuntu
apt:
name:
- python3
- python3-pip
state: present
update_cache: yes
when: ansible_os_family == "Debian"
- name: Installer python3 et pip3 sur RedHat/AlmaLinux
dnf:
name:
- python3
- python3-pip
state: present
update_cache: yes
when: ansible_os_family == "RedHat"
########################################################################
# 3) ACTIVER EPEL (OU CRB) SUR ALMALINUX SI BESOIN #
########################################################################
- name: Activer EPEL sur AlmaLinux
yum:
name: epel-release
state: present
when: ansible_os_family == "RedHat"
########################################################################
# 4) INSTALLER PASSLIB VIA LE GESTIONNAIRE DE PAQUETS #
########################################################################
- name: Installer passlib sur Debian/Ubuntu
apt:
name: python3-passlib
state: present
when: ansible_os_family == "Debian"
register: passlib_system_install_deb
ignore_errors: yes
- name: Installer passlib sur RedHat/AlmaLinux
dnf:
name: python3-passlib
state: present
when: ansible_os_family == "RedHat"
register: passlib_system_install_rh
ignore_errors: yes
########################################################################
# 5) (FALLBACK) INSTALLER PASSLIB VIA pip3 SI LES PACKAGES SYSTÈME ÉCHOUENT
########################################################################
- name: Installer passlib via pip3 (fallback Debian/Ubuntu)
pip:
name: passlib
state: present
when: ansible_os_family == "Debian" and passlib_system_install_deb is failed
- name: Installer passlib via pip3 (fallback RedHat/AlmaLinux)
pip:
name: passlib
state: present
when: ansible_os_family == "RedHat" and passlib_system_install_rh is failed
########################################################################
# 6) VÉRIFIER LA PRÉSENCE DE PASSLIB #
########################################################################
- name: Tester l'import de passlib
command: python3 -c "import passlib"
register: passlib_check
failed_when: false
changed_when: false
- name: Afficher l'état de passlib
debug:
msg: "{{ '✅ passlib est installé' if passlib_check.rc == 0 else '❌ passlib est manquant' }}"
########################################################################
# 7) CRÉER LES UTILISATEURS #
########################################################################
- name: Créer les utilisateurs (hashé si passlib dispo)
user:
name: "{{ item.username }}"
uid: "{{ item.uid }}"
password: "{{ item.password | password_hash('sha512') if passlib_check.rc == 0 else item.password }}"
shell: "/bin/bash"
state: present
loop: "{{ db_users }}"
5 - Sections principales :
-
Détection de la distribution
-
Installation des prérequis selon l'OS
-
Configuration spécifique pour AlmaLinux (EPEL)
-
Installation et vérification de passlib
-
Création des utilisateurs avec hashage des mots de passe
-
Vérification de la présence de passlib
- Test d'import de passlib via Python pour confirmer l'installation
- Affichage d'un message de statut (✅ ou ❌)
- Vos critiques et analyses?
Si le playbook complet ne fonctionne pas, décomposez le problème en étapes simples (plusieurs plays ou mêm mettez chawue tache dans un playbook séparé):
-
Tester uniquement l'installation de Python et pip
-
Tester l'installation de passlib via le gestionnaire de paquets
-
Tester l'installation de passlib via pip en cas d'échec
-
Tester la création des utilisateurs
-
Tester la vérification de la présence de passlib
6 - Résolution de problème avancée et manuelle
- Si ça ne marche toujours pas, décomposez le problème :
-
Vérifiez l'installation de passlib :
# Sur le controller Ansible
python3 -c "import passlib"
# Sur les nodes cibles
ansible all -m shell -a "python3 -c 'import passlib'" -
Vérifiez les permissions :
# Sur les nodes
ls -l /etc/shadow
ls -l /etc/passwd -
Testez la création manuelle d'un utilisateur :
# Sur un node test
useradd -m testuser -
Examinez les logs système :
# Sur les nodes
tail -f /var/log/auth.log # Debian/Ubuntu
tail -f /var/log/secure # RedHat/CentOS -
Vérifiez la configuration SELinux (RedHat/CentOS) :
getenforce
setenforce 0 # Temporairement désactiver -
Validez les variables Ansible :
ansible-playbook playbook.yml -v