On arrive à une section très concrète pour Nordika : la gestion du personnel au sol. Chaque nouvel employé qui arrive a besoin d’un compte sur les serveurs concernés ; chaque départ doit voir son accès révoqué proprement. Fait à la main sur quinze serveurs, c’est long et source d’oublis. Avec le module user, c’est une seule tâche, appliquée à toute la flotte en une exécution.
Créer un compte simple
- name: Créer le compte d'un nouvel employé
ansible.builtin.user:
name: alice
state: presentComme tous les modules qu’on utilise depuis le début de cette formation, state: present suit la logique déclarative posée en 1.1 : si alice existe déjà, la tâche affiche ok ; sinon, elle est créée et la tâche affiche changed.
Les options les plus utiles
- name: Créer un compte complet
ansible.builtin.user:
name: alice
state: present
comment: "Alice Dupont - Service Support"
shell: /bin/bash
create_home: yes
groups: sudo
append: yescomment: le champ GECOS, souvent utilisé pour le nom complet (visible dans/etc/passwd).shell: le shell par défaut du compte (/bin/bash,/bin/sh, ou/usr/sbin/nologinpour un compte de service qui ne doit jamais se connecter interactivement).create_home: crée le dossier personnel (/home/alice) s’il n’existe pas déjà.groups+append: yes: ajoute le compte au groupesudo, sans retirer les groupes existants.
⚠️ Piège classique : sans
append: yes,groupsremplace la liste complète des groupes secondaires du compte, au lieu de s’y ajouter. Sur un compte déjà existant avec d’autres groupes, ça peut retirer des accès de façon inattendue. Le réflexe à prendre :append: yesdès que vous ajoutez un groupe à un compte qui pourrait déjà en avoir d’autres.
Définir un mot de passe
Le module user accepte un mot de passe, mais jamais en clair — il attend un hash déjà chiffré :
- name: Créer un compte avec mot de passe
ansible.builtin.user:
name: alice
state: present
password: "{{ 'MonMotDePasse123!' | password_hash('sha512') }}"Le filtre Jinja2 password_hash('sha512') génère le hash à la volée, à partir d’une valeur en clair — mais dans un vrai projet, ce mot de passe en clair ne devrait jamais apparaître tel quel dans un playbook versionné dans Git. On verra en section 8 comment le protéger avec Ansible Vault, ce qui rendra cette ligne réellement utilisable en production.
Modifier un compte existant
Exactement la même syntaxe : on redécrit l’état voulu, Ansible compare et ajuste uniquement ce qui diffère.
- name: Changer le shell d'un compte existant
ansible.builtin.user:
name: alice
shell: /bin/zshSi alice a déjà /bin/zsh comme shell, ok. Sinon, changed, et seul le shell est modifié — tout le reste du compte (mot de passe, groupes…) reste intact.
Supprimer un compte
- name: Supprimer le compte d'un employé parti
ansible.builtin.user:
name: alice
state: absent
remove: yesstate: absent supprime le compte. remove: yes va plus loin : il supprime aussi le dossier personnel et les fichiers associés (sans remove: yes, le compte disparaît mais /home/alice reste sur le disque).
Vérifier le résultat
Comme pour n’importe quel module, un simple getent en commande ad-hoc permet de confirmer rapidement :
ansible all -i inventaire.yaml -m command -a "getent passwd alice"Ce qu’il faut retenir
state: present/absentsuit la même logique déclarative que tous les autres modules vus jusqu’ici.append: yesest indispensable dès qu’on ajoute un groupe à un compte qui pourrait déjà en avoir d’autres.- Un mot de passe se transmet toujours hashé, jamais en clair — et un vrai projet le protège en plus avec Vault (section 8).
remove: yessupprime aussi le dossier personnel ; sans lui, le compte disparaît mais ses fichiers restent.
Dans la prochaine leçon, on s’attaque aux groupes eux-mêmes : comment les créer, et comment gérer l’appartenance à plusieurs groupes proprement.