From 34004ad37118311ea7e035e8d0c6fff436a06da9 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 27 Oct 2026 11:29:01 +0100 Subject: [PATCH] API Proxmox : authentification par mot de passe (PROXMOX_CLAUDE / PROXMOX_PASSWORD) en plus du jeton Co-Authored-By: Claude Opus 5.5 (1M context) --- README.md | 9 ++++++++- inventory/group_vars/all.yml | 6 ++++-- playbooks/00-proxmox.yml | 6 ++++-- roles/proxmox_vm/tasks/main.yml | 6 +++--- 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index c6b8a91..36033a8 100644 --- a/README.md +++ b/README.md @@ -91,12 +91,19 @@ pveum acl modify /nodes/lancelot --users bwpoc@pve --roles PVEAuditor Si le réseau "LAB" est un VNet SDN plutôt qu'un tag sur `vmbr0`, l'ACL réseau devient `/sdn/zones//LAB` et, dans `all.yml`, `pve_bridge: LAB` avec `pve_vlan_tag: ""`. -Le secret du jeton reste hors du dépôt, dans l'environnement : +Les secrets restent hors du dépôt, dans l'environnement. Au choix, le jeton : ```bash export PVE_TOKEN_SECRET='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' ``` +ou l'identifiant et le mot de passe du compte (le jeton est prioritaire s'il est défini) : + +```bash +export PROXMOX_CLAUDE='bwpoc@pve' +export PROXMOX_PASSWORD='...' +``` + ## Déploiement ```bash diff --git a/inventory/group_vars/all.yml b/inventory/group_vars/all.yml index a75092b..7ca52dd 100644 --- a/inventory/group_vars/all.yml +++ b/inventory/group_vars/all.yml @@ -18,10 +18,12 @@ pve_bridge: vmbr0 # A ADAPTER pve_vlan_tag: "200" pve_pool: bwpoc # pool délégué au compte dédié -# Compte dédié pour le clonage par l'API (voir README, "Compte Proxmox dédié") -pve_api_user: bwpoc@pve +# Compte dédié pour le clonage par l'API (voir README, "Compte Proxmox dédié"). +# Jeton API (PVE_TOKEN_SECRET) prioritaire, sinon mot de passe (PROXMOX_PASSWORD). +pve_api_user: "{{ lookup('ansible.builtin.env', 'PROXMOX_CLAUDE') | default('bwpoc@pve', true) }}" pve_api_token_id: ansible pve_api_token_secret: "{{ lookup('ansible.builtin.env', 'PVE_TOKEN_SECRET') }}" +pve_api_password: "{{ lookup('ansible.builtin.env', 'PROXMOX_PASSWORD') }}" pve_validate_certs: false # certificat auto-signé du nœud pve_template_vmid: 9100 pve_template_name: debian13-cloud diff --git a/playbooks/00-proxmox.yml b/playbooks/00-proxmox.yml index 159cbd8..22b64d9 100644 --- a/playbooks/00-proxmox.yml +++ b/playbooks/00-proxmox.yml @@ -8,6 +8,7 @@ - proxmox_template # 2) Clonage des VM par l'API, avec le compte dédié bwpoc@pve (jeton API). +# Authentification : jeton (PVE_TOKEN_SECRET) ou mot de passe (PROXMOX_CLAUDE / PROXMOX_PASSWORD). # A sauter si vous fournissez vos propres VM (Debian 12/13 avec accès SSH). - name: Clonage des VM par l'API Proxmox hosts: proxmox @@ -20,8 +21,9 @@ group/community.proxmox.proxmox: api_host: "{{ ansible_host }}" api_user: "{{ pve_api_user }}" - api_token_id: "{{ pve_api_token_id }}" - api_token_secret: "{{ pve_api_token_secret }}" + api_token_id: "{{ pve_api_token_id if pve_api_token_secret | length > 0 else omit }}" + api_token_secret: "{{ pve_api_token_secret if pve_api_token_secret | length > 0 else omit }}" + api_password: "{{ pve_api_password if pve_api_token_secret | length == 0 else omit }}" validate_certs: "{{ pve_validate_certs }}" roles: - proxmox_vm diff --git a/roles/proxmox_vm/tasks/main.yml b/roles/proxmox_vm/tasks/main.yml index 03c75d1..3e7d259 100644 --- a/roles/proxmox_vm/tasks/main.yml +++ b/roles/proxmox_vm/tasks/main.yml @@ -1,10 +1,10 @@ --- # Clone et configure les VM du PoC par l'API Proxmox (compte dédié, voir README). # Exécuté sur le contrôleur Ansible : connection local dans le playbook. -- name: Contrôler la présence du jeton API +- name: Contrôler la présence d'un secret pour l'API ansible.builtin.assert: - that: pve_api_token_secret | length > 0 - fail_msg: "Exportez PVE_TOKEN_SECRET (secret du jeton {{ pve_api_user }}!{{ pve_api_token_id }})" + that: (pve_api_token_secret | length > 0) or (pve_api_password | length > 0) + fail_msg: "Exportez PVE_TOKEN_SECRET (jeton {{ pve_api_user }}!{{ pve_api_token_id }}) ou PROXMOX_CLAUDE et PROXMOX_PASSWORD" quiet: true - name: Créer le répertoire des host_vars par VM