Skip to main content

Installation de passlib conditionnellement

Introduction

Cette démarche vise à installer passlib de manière conditionnelle pour sécuriser les mots de passe utilisateurs :

  • Installation via APT sur Ubuntu/Debian
  • Installation via DNF sur AlmaLinux
  • Fallback sur pip3 si nécessaire

Résumé des étapes

Les étapes sont :

  1. Détection de la distribution et installation de python3/pip3
  2. Installation de passlib selon la distribution
  3. Vérification de passlib
  4. Création des utilisateurs avec mots de passe hashés (ou en clair si passlib indisponible)


1. Présentation Générale des Étapes


L'installation et la configuration de passlib sont effectuées de manière conditionnelle selon la distribution utilisée.

ÉtapeTâches PrincipalesRésultat Attendu
1Détecter la distribution via setupOn sait si c'est Debian/Ubuntu ou AlmaLinux
2Installer python3 et pip3 selon l'OSGarantir que pip3 est disponible
3Vérifier la présence de pip3Permet de diagnostiquer rapidement si l'installation a réussi
4Installer passlib - via APT (Debian/Ubuntu) - via DNF (AlmaLinux)Réduit les dépendances extérieures (pas besoin de pip si le paquet système existe)
5Vérifier la présence de passlibÉviter l'échec de la création d'utilisateurs
6Créer les utilisateurs - Hashé si passlib est dispo - Sinon, mot de passe en clairAssurer la création des comptes même en cas de souci de hashage

Ainsi, chaque étape est indépendante et facile à diagnostiquer en cas d’erreur.



2. Playbook de Débogage : Installation Conditionnelle:


  • Ce Playbook adopte une approche modulaire pour faciliter le diagnostic des erreurs courantes.
---
- name: Ajouter Plusieurs Utilisateurs (Avec Installation Conditionnelle de passlib)
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: Récupérer les informations système
setup:
# Permet d’obtenir ansible_os_family, ansible_distribution etc.

########################################################################
# 2. INSTALLER PYTHON3 ET PIP3 SELON L'OS #
########################################################################
- 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 AlmaLinux
dnf:
name:
- python3
- python3-pip
state: present
update_cache: yes
when: ansible_os_family == "RedHat"

########################################################################
# 3. VÉRIFIER LA DISPONIBILITÉ DE PIP3 #
########################################################################
- name: Vérifier si pip3 est disponible
command: which pip3
register: pip3_check
ignore_errors: yes
changed_when: false

- name: Afficher l'état de pip3
debug:
msg: "{{ '✅ pip3 est installé' if pip3_check.rc == 0 else '❌ pip3 est manquant' }}"

########################################################################
# 4. INSTALLER PASSLIB VIA LES PAQUETS SYSTÈME #
########################################################################
- name: Installer passlib avec APT (Debian/Ubuntu)
apt:
name: python3-passlib
state: present
when: ansible_os_family == "Debian"

- name: Installer passlib avec DNF (AlmaLinux)
dnf:
name: python3-passlib
state: present
when: ansible_os_family == "RedHat"

########################################################################
# (Optionnel) Installer passlib via pip3 en dernier recours #
# - À décommenter si nécessaire, quand le package système est introuvable
########################################################################
#- name: Installer passlib via pip3 (si le paquet système est absent)
# pip:
# name: passlib
# state: present
# when: passlib_system_check.rc != 0 and pip3_check.rc == 0

########################################################################
# 5. VÉRIFIER LA PRÉSENCE DE PASSLIB #
########################################################################
- name: Tester l'import de passlib
command: python3 -c "import passlib"
register: passlib_check
failed_when: false # On ne veut pas stopper le playbook si import échoue
changed_when: false

- name: Afficher l'état de passlib
debug:
msg: "{{ '✅ passlib est installé' if passlib_check.rc == 0 else '❌ passlib est manquant' }}"

########################################################################
# 6. CRÉER LES UTILISATEURS #
########################################################################
- name: Créer les utilisateurs avec hashage si passlib est 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 }}"
# Si passlib n'est pas installé, on utilise le mot de passe en clair
# (moins sécurisé, mais le Playbook n’échoue pas).


3. Exécution et Validation


  1. Lancement du Playbook

    ansible-playbook -i inventory.ini add-users.yml
  2. Vérifier si les utilisateurs sont créés

    ansible all -i inventory.ini -m shell -a "getent passwd alice bob charlie"
    • Vous devriez voir les entrées pour alice, bob et charlie.
  3. Connexion aux conteneurs (pour valider manuellement si besoin)

    docker exec -it node4 bash
    getent passwd alice bob charlie
    • Idem pour node5, node6, etc.



4. Points Forts de Cette Approche


  1. Pédagogie par étapes :
    Chaque bloc de tâches a un but précis, ce qui facilite le diagnostic (et le débogage) si quelque chose ne va pas.
  2. Détection automatique de l’OS :
    On utilise setup pour obtenir ansible_os_family. Ainsi, aucune supposition n’est faite sur la distribution.
  3. Gestion conditionnelle :
    • Installation de passlib via APT pour Debian/Ubuntu.
    • Installation de passlib via DNF pour AlmaLinux.
  4. Fallback possible :
    • Si vous le souhaitez, vous pouvez décommenter l’installation via pip en dernier recours.
  5. Tolérance aux erreurs :
    • Le Playbook ne s’arrête pas si passlib est absent.
    • Les utilisateurs sont quand même créés (avec un mot de passe non hashé).
  6. Clarté des messages :
    • Les tâches debug affichent explicitement si pip3 et passlib sont trouvés ou non.
    • Facilite la résolution en cas de problème.


5. Bonnes Pratiques Complémentaires


  • Mettre les mots de passe dans des variables sécurisées (Vault Ansible) en production.
  • Utiliser le module package plutôt que apt ou dnf si vous voulez avoir un code plus générique (mais package a parfois des comportements différents selon la distribution).
  • Séparer l’installation de passlib et la création d’utilisateurs dans des rôles distincts, pour plus de clarté et de réutilisabilité.
  • Gérer la configuration SSH si vous devez autoriser la connexion par mot de passe (par défaut, sur certains conteneurs, les connexions root peuvent être bloquées).

6. Conclusion


Ce Playbook permet de :

  1. Installer python3 et pip3
  2. Installer passlib via le gestionnaire de paquets
  3. Vérifier passlib
  4. Créer des utilisateurs avec mots de passe hashés (ou en clair si passlib absent)
approche modulaire

Cette approche modulaire facilite le débogage des problèmes courants.