Ajouter proxmox_create_admin
This commit is contained in:
parent
5f187faf78
commit
b19a6f67cb
|
|
@ -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 /."
|
||||
Loading…
Reference in New Issue