From b19a6f67cbf35a62fcfe8953ff41aa41735f9c6b Mon Sep 17 00:00:00 2001 From: "l.covela" Date: Fri, 21 Nov 2025 14:43:15 +0100 Subject: [PATCH] Ajouter proxmox_create_admin --- proxmox_create_admin | 98 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 proxmox_create_admin diff --git a/proxmox_create_admin b/proxmox_create_admin new file mode 100644 index 0000000..53b9a22 --- /dev/null +++ b/proxmox_create_admin @@ -0,0 +1,98 @@ +--- +- name: Créer un utilisateur admin Proxmox via SSH (pve/pam) + hosts: proxmox + gather_facts: false + become: true + become_user: root + serial: 5 + + vars_prompt: + - name: new_user + prompt: "Nouvel utilisateur (ex: adminops)" + private: no + - name: new_realm + prompt: "Realm (pve ou pam)" + default: "pve" + private: no + - name: new_password + prompt: "Mot de passe du nouvel utilisateur" + private: yes + + vars: + userid: "{{ new_user }}@{{ new_realm }}" + + tasks: + # --- Liste des utilisateurs en JSON (forcer le format) --- + - name: Liste des utilisateurs (JSON) + command: pvesh get /access/users --output-format json + register: users_json + changed_when: false + + - name: Parser la liste des users en toute sécurité + set_fact: + users_list: "{{ (users_json.stdout | default('[]')) | from_json }}" + + - name: Déterminer si l'utilisateur existe déjà + set_fact: + user_exists: "{{ users_list | selectattr('userid','equalto', userid) | list | length > 0 }}" + + # --- Realm pve : création directe avec mot de passe --- + - name: Créer l'utilisateur (realm pve) + shell: > + pveum user add {{ userid | quote }} + --password {{ new_password | quote }} + --comment "Compte créé par Ansible" + when: not user_exists and new_realm == 'pve' + no_log: true + + # --- Realm pam : créer l'utilisateur Linux + déclarer dans Proxmox --- + - name: Créer l'utilisateur Linux (realm pam) + user: + name: "{{ new_user }}" + password: "{{ new_password | password_hash('sha512') }}" + shell: /bin/bash + create_home: true + when: new_realm == 'pam' + + - name: Déclarer l'utilisateur PAM à Proxmox + shell: > + pveum user add {{ userid | quote }} + --comment "Compte PAM créé par Ansible" + when: not user_exists and new_realm == 'pam' + no_log: true + + - name: Activer l'utilisateur (au cas où) + shell: pveum user modify {{ userid | quote }} --enable 1 + changed_when: false + + # --- ACL Administrator sur / (idempotent) --- + - name: Récupérer les ACL existantes (JSON) + command: pvesh get /access/acl --output-format json + register: acls_json + changed_when: false + + - name: Parser les ACL + set_fact: + acls_list: "{{ (acls_json.stdout | default('[]')) | from_json }}" + + - name: Vérifier si l'ACL Administrator sur / existe déjà + set_fact: + has_admin_acl: >- + {{ + acls_list + | selectattr('path','equalto','/') + | selectattr('ugid','equalto', userid) + | selectattr('roleid','equalto','Administrator') + | list | length > 0 + }} + + - name: Attribuer le rôle Administrator sur / + shell: > + pveum acl modify / -user {{ userid | quote }} + -role Administrator -propagate 1 + when: not has_admin_acl + no_log: true + + - name: Résumé + debug: + msg: "Sur {{ inventory_hostname }} : {{ userid }} présent et rôle Administrator appliqué sur /." \ No newline at end of file