31 lines
1.4 KiB
Python
31 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")
|