From da85af2a6227c5edf76b03c29bb453b082395d17 Mon Sep 17 00:00:00 2001 From: Daniel Allaire Date: Wed, 1 Jul 2026 15:38:42 -0400 Subject: [PATCH] =?UTF-8?q?Corriger=203=20bugs=20trouv=C3=A9s=20au=20premi?= =?UTF-8?q?er=20d=C3=A9ploiement=20r=C3=A9el=20(asgard)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - clonage/Makefile : chemin proxmox codé en dur `inventories/lab` → détection lab>principal>production (débloque les instances principal) - resize disque grow-only : tolère le cas disque dérivé < template (shrinking not supported), la VM garde le disque du template - PowerDNS : ne plus redéclarer launch+=bind (déjà posé par le paquet pdns-backend-bind) → « multiple backends 'bind' » résolu Trouvés en déployant réellement infra-dns-01 (clone + socle durci + PowerDNS qui résout) sur le cluster Proxmox. Co-Authored-By: Claude Opus 4.8 --- CHANGELOG.md | 11 +++++++++ Makefile | 8 +++++-- playbooks/proxmox/cloner_vm_debian.yml | 24 ++++++++++++++----- .../templates/setops-bind.conf.j2 | 3 ++- 4 files changed, 37 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a917ec9..988fa35 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -56,6 +56,17 @@ intrants-communs.md §H, QUICKSTART). Le GUI ne stocke toujours aucun secret. ### Corrigé +- **Trois bugs trouvés au premier déploiement réel (cluster asgard).** + - **Clonage/Makefile codaient `inventories/lab` en dur** (config Proxmox + voûte) — + vestige du modèle env qui cassait les instances `principal`. Le playbook de clonage + et le Makefile détectent maintenant l'inventaire (`lab` > `principal` > `production`). + - **Redimensionnement disque non idempotent** : quand le disque dérivé du plan est + plus petit que le golden template, Proxmox refuse (`shrinking disks is not + supported`) et le clone échouait. Le resize est désormais **grow-only** (tolère le + cas, la VM garde le disque du template — le dérivé est un minimum). + - **PowerDNS refusait de démarrer** (`multiple backends 'bind'`) : le rôle + redéclarait `launch+=bind` que le paquet `pdns-backend-bind` pose déjà. Le rôle ne + déclare plus `launch` (seulement `bind-config`). - **`chezlepro_timezone` n'était appliqué nulle part.** Cet intrant de base global était défini mais aucun rôle ne s'en servait. Le rôle `chrony` (appliqué à tout hôte via `serveur_debian`) règle désormais le fuseau horaire à partir de diff --git a/Makefile b/Makefile index ccf0f4f..eed039a 100644 --- a/Makefile +++ b/Makefile @@ -353,8 +353,12 @@ cloner-vm: ansible-runtime extra_vars+=( -e proxmox_clone_vlan="$(VLAN)" ); \ [[ -n "$(DEMARRER)" ]] && extra_vars+=( -e proxmox_clone_demarrer="$(DEMARRER)" ); \ vault_args=(); \ - vault_file="$(SETOPS_INSTANCE)/inventories/lab/group_vars/proxmox.vault.yml"; \ - if [[ -f "$$vault_file" ]]; then \ + vault_file=""; \ + for d in lab principal production; do \ + f="$(SETOPS_INSTANCE)/inventories/$$d/group_vars/proxmox.vault.yml"; \ + [[ -f "$$f" ]] && vault_file="$$f" && break; \ + done; \ + if [[ -n "$$vault_file" && -f "$$vault_file" ]]; then \ read -r premiere_ligne < "$$vault_file" || true; \ case "$$premiere_ligne" in \ '$$ANSIBLE_VAULT'*) \ diff --git a/playbooks/proxmox/cloner_vm_debian.yml b/playbooks/proxmox/cloner_vm_debian.yml index b3e50fc..c3eb618 100644 --- a/playbooks/proxmox/cloner_vm_debian.yml +++ b/playbooks/proxmox/cloner_vm_debian.yml @@ -5,14 +5,19 @@ gather_facts: false become: false + vars: + # Config Proxmox de l'instance : on cherche dans l'inventaire de l'instance, + # quel que soit son nom (lab > principal > production). Compatible « par instance ». + setops_inventaires: [lab, principal, production] + setops_gv_proxmox: [proxmox.yml, proxmox.vault.yml, proxmox.local.yml] + tasks: - name: Verifier les fichiers de variables Proxmox optionnels ansible.builtin.stat: - path: "{{ item }}" - loop: - - "{{ playbook_dir }}/../../instance/inventories/lab/group_vars/proxmox.yml" - - "{{ playbook_dir }}/../../instance/inventories/lab/group_vars/proxmox.vault.yml" - - "{{ playbook_dir }}/../../instance/inventories/lab/group_vars/proxmox.local.yml" + path: "{{ playbook_dir }}/../../instance/inventories/{{ item.0 }}/group_vars/{{ item.1 }}" + loop: "{{ setops_inventaires | product(setops_gv_proxmox) | list }}" + loop_control: + label: "{{ item.0 }}/{{ item.1 }}" register: proxmox_fichiers_variables - name: Charger les variables Proxmox non sensibles disponibles @@ -147,7 +152,7 @@ - proxmox_clone_pont is defined - proxmox_clone_pont | length > 0 - - name: Agrandir le disque principal du clone + - name: Agrandir le disque principal du clone (grow-only) community.general.proxmox_disk: api_host: "{{ proxmox_api_host_effectif }}" api_port: "{{ proxmox_api_port_effectif | int if proxmox_api_port_effectif | length > 0 else omit }}" @@ -159,6 +164,13 @@ disk: "{{ proxmox_clone_disque | default('scsi0') }}" size: "{{ proxmox_clone_taille_disque }}" state: resized + register: proxmox_redim_disque + # Le disque derive du plan est un MINIMUM. Si le template est deja plus grand, + # Proxmox refuse de retrecir : on tolere ce cas (grow-only), la VM garde le + # disque du template. Toute autre erreur reste bloquante. + failed_when: + - proxmox_redim_disque is failed + - "'shrinking disks is not supported' not in (proxmox_redim_disque.msg | default(''))" when: - proxmox_clone_taille_disque is defined - proxmox_clone_taille_disque | length > 0 diff --git a/roles/serveur_powerdns/templates/setops-bind.conf.j2 b/roles/serveur_powerdns/templates/setops-bind.conf.j2 index 8138e81..a295cba 100644 --- a/roles/serveur_powerdns/templates/setops-bind.conf.j2 +++ b/roles/serveur_powerdns/templates/setops-bind.conf.j2 @@ -1,4 +1,5 @@ -launch+=bind +{# launch=bind est deja declare par le paquet pdns-backend-bind (pdns.d/bind.conf). + Ne PAS le redeclarer ici : sinon PowerDNS refuse « multiple backends 'bind' ». #} bind-config={{ serveur_powerdns_bind_config }} local-address={{ serveur_powerdns_listen_addresses | join(',') }} {% if serveur_powerdns_allow_axfr_ips | length > 0 %}