modeles_vm : trois commandes qui ne pouvaient rien faire
Le groupe etait TOUJOURS vide et rien ne le signalait. instancier l'emet comme squelette, les etats d'un serveur ne connaissent que actif et planifie — aucun chemin ne permettait d'y faire entrer une machine. Les trois cibles recevaient « skipping: no hosts matched », qui n'est pas une erreur. Le gabarit ne PEUT PAS venir du plan : sa config Proxmox le place sur le reseau de fabrication (192.168.12.99/24), pas dans le supernet. Ce n'est pas un hote de l'ecosysteme, c'est la matrice dont il est tire. Le forcer dans plan/serveurs.yml aurait ete le mettre dans un registre qui n'est pas le sien. MODELE_HOTE=<ip> le designe ; l'inventaire d'un seul hote sert les trois playbooks, prerequis d'acces et de privileges compris. Sans lui, elles REFUSENT en expliquant au lieu de ne rien faire. Meme famille que le reste de la journee : une capacite declaree dont personne ne verifiait qu'elle est branchee — a ceci pres qu'elle ne se manifestait par aucun symptome. Elle ne faisait rien, poliment. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
711676ca69
commit
ff3ca3bf26
3 changed files with 107 additions and 13 deletions
31
CHANGELOG.md
31
CHANGELOG.md
|
|
@ -1,5 +1,36 @@
|
|||
# CHANGELOG — Set-OPS
|
||||
|
||||
## 2026-08-09 — `modeles_vm` : trois commandes qui ne pouvaient rien faire
|
||||
|
||||
Le groupe était **toujours vide**, et rien ne le signalait. `instancier` l'émet comme
|
||||
squelette (`"modeles_vm": {"hosts": {}}`) et les états d'un serveur ne connaissent que
|
||||
`actif` et `planifie` — aucun chemin ne permettait d'y faire entrer une machine. Les trois
|
||||
cibles qui le ciblent recevaient « skipping: no hosts matched », qui n'est pas une erreur.
|
||||
|
||||
**Le gabarit ne peut pas venir du plan, et c'est structurel.** Sa configuration Proxmox le
|
||||
place sur le réseau de fabrication (`ip=192.168.12.99/24`), pas dans le supernet. Ce n'est
|
||||
pas un hôte de l'écosystème : c'est la matrice dont l'écosystème est tiré. Peupler
|
||||
`modeles_vm` depuis `plan/serveurs.yml` aurait été forcer un objet dans un registre qui
|
||||
n'est pas le sien.
|
||||
|
||||
`MODELE_HOTE=<ip>` le désigne explicitement, et l'inventaire d'un seul hôte (`-i "<ip>,"`)
|
||||
sert les trois playbooks. Sans lui — et sans groupe peuplé — elles **refusent en
|
||||
expliquant**, au lieu de ne rien faire :
|
||||
|
||||
```
|
||||
Refus: aucune VM de gabarit designee.
|
||||
Le gabarit vit sur le reseau de fabrication, pas dans le tenant :
|
||||
il ne peut pas venir du plan. Le designer explicitement —
|
||||
make preparer-modele MODELE_HOTE=192.168.12.99
|
||||
```
|
||||
|
||||
Les prérequis d'accès et de privilèges suivent la même cible : ils interrogeaient eux aussi
|
||||
le groupe vide.
|
||||
|
||||
C'est la même famille que tout ce que la journée a produit — **une capacité déclarée dont
|
||||
personne ne vérifiait qu'elle est branchée**. À la différence près que celle-ci ne se
|
||||
manifestait par aucun symptôme : elle ne faisait rien, poliment.
|
||||
|
||||
## 2026-08-09 — Le gabarit doré : ce qu'il transporte de son réseau de naissance
|
||||
|
||||
Question de l'exploitant : « on peut l'optimiser ? ». Mesuré avant de répondre — et la
|
||||
|
|
|
|||
56
Makefile
56
Makefile
|
|
@ -187,13 +187,13 @@ lint: ansible-runtime ## Passe ansible-lint sur tout le depot
|
|||
syntaxe: syntaxe-modele syntaxe-verification-modele syntaxe-nettoyage syntaxe-verification-hote syntaxe-groupes syntaxe-proxmox ## Verifie la syntaxe de TOUS les playbooks (modele, hote, groupes, proxmox)
|
||||
|
||||
syntaxe-modele: ansible-runtime ## Verifie la syntaxe du playbook de preparation du gabarit dore
|
||||
ansible-playbook -i $(INVENTAIRE_LAB) $(PLAYBOOK_PREPARER_MODELE) --syntax-check
|
||||
ansible-playbook -i $(INVENTAIRE_MODELE) $(PLAYBOOK_PREPARER_MODELE) --syntax-check
|
||||
|
||||
syntaxe-verification-modele: ansible-runtime ## Verifie la syntaxe du playbook de verification du gabarit
|
||||
ansible-playbook -i $(INVENTAIRE_LAB) $(PLAYBOOK_VERIFIER_MODELE) --syntax-check
|
||||
ansible-playbook -i $(INVENTAIRE_MODELE) $(PLAYBOOK_VERIFIER_MODELE) --syntax-check
|
||||
|
||||
syntaxe-nettoyage: ansible-runtime ## Verifie la syntaxe du playbook de nettoyage du gabarit
|
||||
ansible-playbook -i $(INVENTAIRE_LAB) $(PLAYBOOK_NETTOYER_MODELE) --syntax-check
|
||||
ansible-playbook -i $(INVENTAIRE_MODELE) $(PLAYBOOK_NETTOYER_MODELE) --syntax-check
|
||||
|
||||
syntaxe-verification-hote: ansible-runtime ## Verifie la syntaxe du playbook de verification d'hote
|
||||
ansible-playbook -i $(INVENTAIRE_PRODUCTION) $(PLAYBOOK_VERIFIER_HOTE) --syntax-check
|
||||
|
|
@ -841,24 +841,54 @@ inventaire-production: ## Affiche le graphe de l'inventaire de production
|
|||
$(MAKE) inventaire-graphe FICHIER_INVENTAIRE="$(INVENTAIRE_PRODUCTION)"
|
||||
|
||||
.PHONY: _verifier-acces-modele _verifier-privileges-modele preparer-modele verifier-modele nettoyer-modele
|
||||
_verifier-acces-modele: ansible-runtime
|
||||
ansible -i $(INVENTAIRE_LAB) $(GROUPE_MODELE) -m ping -e ansible_become=false
|
||||
_verifier-acces-modele: ansible-runtime _modele-requis
|
||||
ansible -i $(INVENTAIRE_MODELE) $(CIBLE_MODELE) -m ping -e ansible_become=false
|
||||
|
||||
_verifier-privileges-modele: ansible-runtime
|
||||
ansible -i $(INVENTAIRE_LAB) $(GROUPE_MODELE) -b -m command -a "whoami"
|
||||
_verifier-privileges-modele: ansible-runtime _modele-requis
|
||||
ansible -i $(INVENTAIRE_MODELE) $(CIBLE_MODELE) -b -m command -a "whoami"
|
||||
|
||||
preparer-modele: ansible-runtime _verifier-acces-modele _verifier-privileges-modele ## Prepare le gabarit dore (VM de reference clonee pour chaque hote)
|
||||
ansible-playbook -i $(INVENTAIRE_LAB) $(PLAYBOOK_PREPARER_MODELE)
|
||||
# Le gabarit dore n'est PAS un hote du tenant : sa configuration Proxmox le place sur le
|
||||
# reseau de fabrication (192.168.12.x), pas dans le supernet. `instancier` emet donc
|
||||
# `modeles_vm` toujours VIDE, et les etats d'un serveur ne connaissent que `actif` et
|
||||
# `planifie` — rien ne pouvait y entrer. Resultat mesure le 2026-08-09 : trois cibles
|
||||
# documentees qui ne pouvaient rien faire, et Ansible qui repondait « skipping: no hosts
|
||||
# matched » sans que ce soit une erreur.
|
||||
#
|
||||
# On DESIGNE donc la machine explicitement : `MODELE_HOTE=<ip-ou-nom>`. A defaut, on
|
||||
# refuse au lieu de ne rien faire — une commande qui ne fait rien en silence est pire
|
||||
# qu'une commande absente.
|
||||
, := ,
|
||||
|
||||
verifier-modele: ansible-runtime ## Verifie le gabarit dore
|
||||
ansible-playbook -i $(INVENTAIRE_LAB) $(PLAYBOOK_VERIFIER_MODELE)
|
||||
_modele-requis:
|
||||
@if [[ -z "$(MODELE_HOTE)" ]] && ! ansible-inventory -i $(INVENTAIRE_LAB) --list 2>/dev/null | python3 -c 'import json,sys; d=json.load(sys.stdin); sys.exit(0 if (d.get("modeles_vm") or {}).get("hosts") else 1)' 2>/dev/null; then \
|
||||
printf '%s\n' 'Refus: aucune VM de gabarit designee.'; \
|
||||
printf '%s\n' ' Le gabarit vit sur le reseau de fabrication, pas dans le tenant :'; \
|
||||
printf '%s\n' ' il ne peut pas venir du plan. Le designer explicitement —'; \
|
||||
printf '%s\n' ' make preparer-modele MODELE_HOTE=192.168.12.99'; \
|
||||
printf '%s\n' ' make verifier-modele MODELE_HOTE=192.168.12.99'; \
|
||||
printf '%s\n' ' make nettoyer-modele MODELE_HOTE=192.168.12.99 CONFIRMER=true'; \
|
||||
printf '%s\n' ' (la VM doit etre DEMARREE : un template Proxmox ne boote pas ;'; \
|
||||
printf '%s\n' ' le convertir en VM ou en cloner une copie de travail.)'; \
|
||||
exit 2; \
|
||||
fi
|
||||
|
||||
nettoyer-modele: ansible-runtime ## Nettoie le gabarit avant capture — exige CONFIRMER=true
|
||||
# `-i "<hote>,"` : la virgule finale fait de la chaine un inventaire d'un seul hote.
|
||||
INVENTAIRE_MODELE = $(if $(MODELE_HOTE),"$(MODELE_HOTE)$(,)",$(INVENTAIRE_LAB))
|
||||
# Cible : la machine designee, ou le groupe si l'inventaire en contient un.
|
||||
CIBLE_MODELE = $(if $(MODELE_HOTE),$(MODELE_HOTE),$(GROUPE_MODELE))
|
||||
|
||||
preparer-modele: ansible-runtime _modele-requis _verifier-acces-modele _verifier-privileges-modele ## Prepare le gabarit dore (VM de reference clonee pour chaque hote)
|
||||
ansible-playbook -i $(INVENTAIRE_MODELE) $(PLAYBOOK_PREPARER_MODELE)
|
||||
|
||||
verifier-modele: ansible-runtime _modele-requis ## Verifie le gabarit dore
|
||||
ansible-playbook -i $(INVENTAIRE_MODELE) $(PLAYBOOK_VERIFIER_MODELE)
|
||||
|
||||
nettoyer-modele: ansible-runtime _modele-requis ## Nettoie le gabarit avant capture — exige CONFIRMER=true
|
||||
@if [[ "$(CONFIRMER)" != "true" ]]; then \
|
||||
printf '%s\n' 'Refus: relancer avec CONFIRMER=true pour le nettoyage final du modele.'; \
|
||||
exit 2; \
|
||||
fi
|
||||
ansible-playbook -i $(INVENTAIRE_LAB) $(PLAYBOOK_NETTOYER_MODELE) -e template_cleanup_confirm=true
|
||||
ansible-playbook -i $(INVENTAIRE_MODELE) $(PLAYBOOK_NETTOYER_MODELE) -e template_cleanup_confirm=true
|
||||
|
||||
.PHONY: _verifier-acces-hote _verifier-privileges-hote _attendre-hote faits verifier-hote
|
||||
|
||||
|
|
|
|||
|
|
@ -816,3 +816,36 @@ Cloud-init donne son identité au clone.
|
|||
Ansible configure le vrai serveur.
|
||||
Set-OPS documente et automatise l’ensemble.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 28. Rejouer la préparation sur une VM existante — `MODELE_HOTE`
|
||||
|
||||
Ajouté le 2026-08-09, après avoir constaté que `make preparer-modele`,
|
||||
`verifier-modele` et `nettoyer-modele` **ne pouvaient rien faire**.
|
||||
|
||||
Ils ciblaient le groupe `modeles_vm`, qu'`instancier` émet **toujours vide** : les états
|
||||
d'un serveur ne connaissent que `actif` et `planifie`, donc rien ne pouvait y entrer.
|
||||
Ansible répondait « skipping: no hosts matched » — ce qui n'est pas une erreur, et passait
|
||||
donc inaperçu.
|
||||
|
||||
**Pourquoi le gabarit ne peut pas venir du plan.** Sa configuration Proxmox le place sur le
|
||||
réseau de *fabrication* (`ip=192.168.12.99/24`), pas dans le supernet du tenant. Ce n'est
|
||||
pas un hôte de l'écosystème : c'est la matrice dont l'écosystème est tiré.
|
||||
|
||||
On le désigne donc explicitement :
|
||||
|
||||
```bash
|
||||
make preparer-modele MODELE_HOTE=192.168.12.99
|
||||
make verifier-modele MODELE_HOTE=192.168.12.99
|
||||
make nettoyer-modele MODELE_HOTE=192.168.12.99 CONFIRMER=true
|
||||
```
|
||||
|
||||
Sans `MODELE_HOTE` — et sans groupe `modeles_vm` peuplé — les trois **refusent** en
|
||||
expliquant comment les appeler. Une commande qui ne fait rien en silence est pire qu'une
|
||||
commande absente.
|
||||
|
||||
> **La VM doit être démarrée.** Un template Proxmox ne démarre pas : le convertir en VM, ou
|
||||
> en cloner une copie de travail et ne convertir celle-ci en template qu'une fois prouvée.
|
||||
> Le gabarit en service reste intact pendant toute l'opération.
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue