Skip to main content

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 :

  1. Copiez le contenu dans un fichier add-users.yml
  2. 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
Exécution du playbook :

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 :

  1. Détection de la distribution

  2. Installation des prérequis selon l'OS

  3. Configuration spécifique pour AlmaLinux (EPEL)

  4. Installation et vérification de passlib

  5. Création des utilisateurs avec hashage des mots de passe

  6. 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?
Astuces - Décomposition du playbook en étapes simples

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é):

  1. Tester uniquement l'installation de Python et pip

  2. Tester l'installation de passlib via le gestionnaire de paquets

  3. Tester l'installation de passlib via pip en cas d'échec

  4. Tester la création des utilisateurs

  5. 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 :
  1. 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'"
  2. Vérifiez les permissions :

    # Sur les nodes
    ls -l /etc/shadow
    ls -l /etc/passwd
  3. Testez la création manuelle d'un utilisateur :

    # Sur un node test
    useradd -m testuser
  4. Examinez les logs système :

    # Sur les nodes
    tail -f /var/log/auth.log # Debian/Ubuntu
    tail -f /var/log/secure # RedHat/CentOS
  5. Vérifiez la configuration SELinux (RedHat/CentOS) :

    getenforce
    setenforce 0 # Temporairement désactiver
  6. Validez les variables Ansible :

    ansible-playbook playbook.yml -v