Exemple de Playbook avec UID Dynamique - Playbook 3
1 - Introduction
Ce playbook propose une solution avancée pour gérer la création d'utilisateurs en :
- Vérifiant l'existence des UIDs
- Générant dynamiquement des UIDs alternatifs en cas de conflit
- Utilisant des mots de passe hashés de manière sécurisée
Nous verrons un playbook Ansible amélioré qui :
✅ Vérifie si un UID est déjà utilisé
✅ Génère dynamiquement un nouvel UID si le précédent est pris
✅ Crée les utilisateurs avec un mot de passe sécurisé
2 - Playbook Final : UID Dynamique en Cas de Conflit
- name: Générer des utilisateurs avec des mots de passe hashés
hosts: all
tasks:
- name: Générer un sel sécurisé
ansible.builtin.set_fact:
secure_salt: "{{ lookup('password', '/dev/null chars=ascii_letters,digits length=16') }}"
- 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: Générer un UID unique si nécessaire
shell: "shuf -i 2000-65000 -n 1"
register: unique_uid
when: item.stdout is not search('not found')
loop: "{{ uid_check.results }}"
- name: Associer les UID dynamiques aux utilisateurs
set_fact:
user_list: >-
[{% for item in uid_check.results %}
{
"username": "{{ item.item.username }}",
"password": "{{ ('password' ~ loop.index) | password_hash('sha512', secure_salt) }}",
"uid": "{{ unique_uid.results[loop.index0].stdout if item.stdout is not search('not found') else item.item.uid }}"
}
{% if not loop.last %},{% endif %}
{% endfor %}
]
loop: "{{ uid_check.results }}"
loop_control:
extended: true
- name: Créer des utilisateurs avec UID dynamiques si nécessaire
ansible.builtin.user:
name: "{{ item.username }}"
password: "{{ item.password }}"
uid: "{{ item.uid }}"
loop: "{{ user_list }}"
3 - Explication du Playbook
Explication
-
Vérification des UID existants
shell: id -u {{ item.uid }} || echo 'not found'
- Stocke les résultats dans
uid_check
.
-
Génération d'un UID unique si nécessaire
- Si l'UID est déjà pris (
not found
absent), un nouvel UID aléatoire entre2000-65000
est généré viashuf
.
- Si l'UID est déjà pris (
-
Création d'une liste avec les UID corrigés
- On remplace l'UID existant par un UID aléatoire si nécessaire.
user_list
est une nouvelle liste d'utilisateurs avec UID corrigés.
-
Création des utilisateurs
ansible.builtin.user
crée les utilisateurs avec leurs UID mis à jour.
4 - Avantages
✔ Empêche tout conflit d'UID ✅
✔ Génère un UID unique dynamiquement si nécessaire ✅
✔ Utilise des mots de passe sécurisés avec un sel dynamique ✅
Recommandation
💡 Si vous ne voulez aucun problème d’UID et que l'UID statique n’est pas obligatoire, vous pouvez aussi supprimer uid
du ansible.builtin.user
et laisser le système gérer.
Avec ce playbook, les utilisateurs sont créés proprement avec un UID garanti unique ! 🚀