Corriger 3 bugs trouvés au premier déploiement réel (asgard)

- 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 <noreply@anthropic.com>
This commit is contained in:
Daniel Allaire 2026-07-01 15:38:42 -04:00
parent 614cebcc55
commit da85af2a62
4 changed files with 37 additions and 9 deletions

View file

@ -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

View file

@ -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'*) \

View file

@ -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

View file

@ -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 %}