97 lines
3.2 KiB
YAML
97 lines
3.2 KiB
YAML
---
|
|
- name: Créer un utilisateur admin Proxmox via SSH (pve/pam)
|
|
#hosts: Proxmox
|
|
gather_facts: false
|
|
become: true
|
|
become_user: root
|
|
serial: 5
|
|
|
|
# Les variables new_user, new_realm et new_password seront fournies
|
|
# par Semaphore via des Prompts de template.
|
|
vars:
|
|
new_realm: "{{ new_realm | default('pve') }}" # valeur par défaut
|
|
userid: "{{ new_user }}@{{ new_realm }}"
|
|
|
|
tasks:
|
|
- name: Vérifier que les variables obligatoires sont renseignées
|
|
assert:
|
|
that:
|
|
- new_user is defined and new_user | length > 0
|
|
- new_password is defined and new_password | length > 0
|
|
fail_msg: "Les variables new_user et new_password doivent être fournies (Prompts Semaphore)."
|
|
|
|
# --- 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 /."
|