Skip to main content

Résolution des UIDs dupliqués - Exemple 2



1 - Introduction


Un exemple de résolution du problème des utilisateurs dupliqués avec Ansible est présenté ici. Ce problème est fréquemment rencontré lorsque des utilisateurs sont créés avec des UIDs qui sont déjà existants sur le système.

Objectif

Montrer comment gérer proprement la création d'utilisateurs en :

  • Vérifiant si les UIDs sont déjà utilisés
  • Proposant des solutions alternatives
  • Évitant les conflits d'UIDs
Contexte

Lors de la création d'utilisateurs avec Ansible, il est courant de rencontrer l'erreur dans la section suivante :

The error occurs during the "Create users with hashed passwords" task because the specified UIDs (1001 for alice1, 1002 for bob1, 1003 for charlie1) already exist on the system. As a result, the useradd command returns the error "UID ... is not unique", which prevents the creation of these users.



2 - Analyse du message d'erreur


Erreur

The error occurs during the "Create users with hashed passwords" task because the specified UIDs (1001 for alice1, 1002 for bob1, 1003 for charlie1) already exist on the system. As a result, the useradd command returns the error "UID ... is not unique", which prevents the creation of these users.



3 - Explication du message d'erreur


Le problème se produit lors de la tâche « Créer des utilisateurs avec mots de passe hashés », car les UIDs spécifiés (1001 pour alice1, 1002 pour bob1, 1003 pour charlie1) existent déjà sur le système. En conséquence, la commande useradd renvoie l'erreur « UID ... is not unique », ce qui empêche la création de ces utilisateurs.

🔍 Problème Identifié

L'erreur "useradd: UID X is not unique" indique que le même UID (User ID) est déjà attribué à un utilisateur existant sur vos serveurs.

Cela se produit lorsque :

  1. Vous essayez de créer un utilisateur (alice1, bob1, charlie1) avec un UID déjà existant.
  2. L’UID spécifié est statique (1001, 1002, 1003), et il est déjà utilisé sur certaines machines.


4 - Solution 1 : Vérifier les UID avant de créer les utilisateurs


Une vérification doit être ajoutée pour voir si l'UID est déjà utilisé avant qu'un utilisateur ne soit créé.

Ajoutez cette tâche avant de créer les utilisateurs :

- name: Vérifier si l'UID existe déjà sur le système
shell: "id -u {{ item.uid }} || echo 'not found'"
register: uid_check
changed_when: false
failed_when: false
loop:
- { username: "alice1", uid: 1001 }
- { username: "bob1", uid: 1002 }
- { username: "charlie1", uid: 1003 }

- name: Afficher les UID existants
debug:
msg: "UID {{ item.item.uid }} déjà utilisé : {{ item.stdout }}"
loop: "{{ uid_check.results }}"
when: item.stdout is not search('not found')

Si des UID existent déjà, ils seront affichés, et vous devrez les ajuster.



5 - Solution 2 : Laisser le Système Attribuer un UID Automatiquement


Si vous n’avez pas besoin d’un UID fixe, laissez le système attribuer automatiquement un UID disponible en supprimant uid :

- name: Créer des utilisateurs avec des mots de passe hashés
ansible.builtin.user:
name: "{{ item.username }}"
password: "{{ item.password }}"
loop:
- { username: "alice1", password: "{{ 'password1' | password_hash('sha512', 'secure_salt') }}" }
- { username: "bob1", password: "{{ 'password2' | password_hash('sha512', 'secure_salt') }}" }
- { username: "charlie1", password: "{{ 'password3' | password_hash('sha512', 'secure_salt') }}" }

🔥 Avantage : Plus de conflit d’UID. Le système choisira un UID libre.



6 - Solution 3 : Générer Dynamiquement des UID Uniques


Si vous voulez des UID fixes mais sans conflit, générez un UID au-dessus de 2000 (réservé aux utilisateurs non-système) :

- name: Générer un UID unique pour chaque utilisateur
shell: "shuf -i 2000-65000 -n 1"
register: unique_uid
with_items:
- alice1
- bob1
- charlie1

- name: Créer des utilisateurs avec UID unique
ansible.builtin.user:
name: "{{ item.item }}"
password: "{{ 'password1' | password_hash('sha512', 'secure_salt') }}"
uid: "{{ item.stdout }}"
loop: "{{ unique_uid.results }}"

🔥 Avantage : Chaque utilisateur aura un UID aléatoire, sans risque de duplication.

7 - Résumé des Solutions

SolutionDescriptionAvantages
✅ Vérification des UIDVérifie si l'UID est déjà utilisé avant créationÉvite les conflits sans modifier la logique
✅ UID automatiqueSupprime l’attribut uid, le système attribue un UID libreSimplicité, aucun conflit
✅ UID dynamiqueGénère un UID aléatoire (2000-65000) pour chaque utilisateurContrôle sur les UID sans conflit
💡 Recommandation :

Si possible, optez pour la solution 2 (UID automatique) pour éviter tout problème futur.