Ajoutee pour rendre la reconstruction from-zero REPETABLE — un test qu'on ne peut jouer qu'une fois n'est pas une recette. Verrous, tous eprouves avant usage : - VMID derives du plan uniquement (le gabarit dore est structurellement exclu) - le NOM doit correspondre : un VMID du plan sous un autre nom fait refuser l'operation ENTIERE. Pas theorique — le 2026-08-07 une VM heritee portait un VMID du plan sous le nom web-frontal-01 et proxmox_kvm rapportait ok. - il faut NOMMER l'ecosysteme (INSTANCE=) : le symlink instance/ peut pointer n'importe ou ; taper le nom distingue le POC de la production. - CONFIRMER=true ; sans lui, inventaire et rien d'autre. Le verrou du nom est le seul qu'on ne peut pas eprouver sur le vrai cluster sans y fabriquer une collision : scripts/tests/test_raser.py l'isole derriere un faux cluster, rattache a P02. Harnais : 31 preuves, 0 sautee. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
30 lines
1.4 KiB
Python
30 lines
1.4 KiB
Python
"""`raser` : un VMID du plan portant un AUTRE nom doit faire REFUSER l'operation entiere.
|
|
|
|
C'est le verrou le plus important de la seule commande destructive du moteur, et le seul
|
|
qu'on ne peut pas eprouver sur le vrai cluster sans y fabriquer une collision. On isole
|
|
donc la logique derriere un faux cluster.
|
|
|
|
Le danger n'est pas theorique : le 2026-08-07, une VM heritee portait un VMID du plan sous
|
|
le nom `web-frontal-01`, et `proxmox_kvm` avait rapporte `ok` sans rien faire. Rase sans ce
|
|
controle, on detruisait la machine de quelqu'un d'autre.
|
|
"""
|
|
import sys, pathlib
|
|
sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent.parent))
|
|
import raser
|
|
|
|
class FauxCluster:
|
|
"""Le cluster repond que 117603101 s'appelle « vm-heritee-de-2019 »."""
|
|
@classmethod
|
|
def depuis_hebergeur(cls):
|
|
return cls(), None
|
|
def __call__(self, chemin, methode="GET", corps=None):
|
|
return [{"type": "qemu", "vmid": 117603101, "name": "vm-heritee-de-2019", "node": "asgard"},
|
|
{"type": "qemu", "vmid": 117101101, "name": "infra-edge-01", "node": "asgard"}]
|
|
def rate(self, rep):
|
|
return None
|
|
|
|
raser.Cluster = FauxCluster
|
|
code = raser.main(["--instance", "chezlepro", "--confirmer"])
|
|
print(f"\n>>> code de sortie : {code} (2 = refus attendu)")
|
|
assert code == 2, "LE VERROU N'A PAS TENU"
|
|
print(">>> le verrou tient : aucune VM n'aurait ete touchee")
|