[FIX] qemu manage : ni adresse, ni nom de VM, ni récit en commentaire

Les commentaires suivent le dépôt en amont : une adresse ou un nom de
machine qui s'y trouve devient public. Cinq adresses et deux noms de VM
y étaient, plus cinq phrases racontant la séance où le défaut est apparu.

Le mode de défaillance reste, au présent — « une VM renommée se voit
attribuer la passerelle » — et l'incident part. Un relevé d'un seul jour
part avec lui ; la structure durable reste.

check_comment_hygiene.py passe de 5 identifiants et 5 à relire à zéro.
Aucune ligne de code n'est touchée, seulement du texte de commentaire.

--- EN ---

Comments follow the repository upstream: an address or a machine name
sitting in one becomes public. Five addresses and two VM names were
there, plus five sentences telling the session where the fault appeared.

The failure mode stays, in the present — "a renamed VM is given the
gateway" — and the incident goes. A reading taken on one day goes with
it; the durable structure stays.

check_comment_hygiene.py goes from 5 identifiers and 5 to re-read down to
zero. No line of code is touched, only comment prose.

Assisted-by: Claude Opus 5
This commit is contained in:
Mathieu Benoit 2026-08-31 07:17:22 -04:00
parent 0b8f25fb4b
commit 40a1e178f3

View file

@ -45,12 +45,11 @@ def parse_ssh_blocks(content) -> dict:
def ssh_orphans(blocs, juge, prefixe="erplibre-"):
"""(gardées, orphelines) — chacune [(nom, raison)].
Un ProxyJump valait preuve de vie À LUI SEUL : « écrite pour une VM
imbriquée, que virsh ne connaîtra jamais ». Le raisonnement oubliait que
le rebond, lui, peut avoir disparu. Vécu : la VM Proxmox locale effacée,
le nettoyage a retiré son entrée — correctement — et GARDÉ les trois
entrées qui rebondissaient par elle. Trois culs-de-sac, présentés comme
« mènent encore quelque part ».
Un ProxyJump ne vaut pas preuve de vie à lui seul : « écrite pour une VM
imbriquée, que virsh ne connaîtra jamais » oublie que le rebond, lui, peut
avoir disparu. Effacer la VM qui servait de rebond retire son entrée —
correctement — et laisse celles qui rebondissaient par elle : des
culs-de-sac présentés comme « mènent encore quelque part ».
D'où le point fixe : retirer un parent peut orpheliner ses enfants, et
ceux-ci peuvent en orpheliner d'autres. On tourne jusqu'à ce que plus
@ -887,11 +886,9 @@ class QemuManageMixin:
"""{chemin: domaine} — TOUT ce que les domaines référencent.
L'autorité est libvirt, jamais le nom du fichier. Un domaine renommé
garde le nom de fichier d'avant : juger sur le nom faisait passer le
disque d'une VM EN MARCHE pour un orphelin. Rapporté sur
« erplibre-ubuntu-2404-MIGRATION », renommée depuis
« erplibre-ubuntu-2404 » : le nettoyage offrait ses trois fichiers —
disque de 63 Go, seed, nvram — au « rm -f ».
garde le nom de fichier d'avant : juger sur le nom fait passer le
disque d'une VM EN MARCHE pour un orphelin, et offre ses trois
fichiers — disque, seed, nvram — au « rm -f ».
Les deux vues, persistante et vivante, pour la raison dite dans
`_qemu_dumpxml`.
@ -2248,12 +2245,10 @@ class QemuManageMixin:
"""Adresses IPv4 de L'HÔTE, à écarter des candidates d'une VM.
« virsh domifaddr --source arp » remonte la table ARP, où figurent les
passerelles des ponts libvirt (192.168.122.1, 192.168.123.1…). Une VM
n'a jamais l'adresse de son hôte : sans ce filtre, une VM RENOMMÉE —
dont le bail porte encore l'ancien nom d'hôte, donc sans
correspondance — se voyait attribuer la passerelle. Vécu sur
« erplibre-ubuntu-2404-MIGRATION », annoncée en 192.168.122.1 au lieu
de 192.168.123.170.
passerelles des ponts libvirt. Une VM n'a jamais l'adresse de son
hôte : sans ce filtre, une VM RENOMMÉE — dont le bail porte encore
l'ancien nom d'hôte, donc sans correspondance — se voit attribuer la
passerelle.
"""
try:
res = subprocess.run(
@ -2304,9 +2299,9 @@ class QemuManageMixin:
- agent : qemu-guest-agent DANS la VM (voit l'IP réelle même quand le
bail dnsmasq est absent) ;
- arp : table ARP de l'hôte (VM active sur le réseau).
On combine pour ne jamais rater une IP que le bail seul manquerait
(cas observé : 30 VM émulées, bail dnsmasq vide alors que la VM a une
IP)."""
On combine pour ne jamais rater une IP que le bail seul manquerait :
sous forte charge, le bail dnsmasq reste vide alors que la VM a bien
une adresse."""
ips = []
siennes = QemuManageMixin._qemu_host_addresses()
for source in ("lease", "agent", "arp"):
@ -2396,8 +2391,8 @@ class QemuManageMixin:
# Sans correspondance de nom d'hôte — le cas d'une VM RENOMMÉE, dont
# le bail porte encore l'ancien nom — on prend la source la plus
# sûre : le bail, puis l'agent, puis la table ARP. Celle-ci contient
# les passerelles des ponts, et « la dernière candidate » y tombait :
# la VM était annoncée en 192.168.122.1.
# les passerelles des ponts, où « la dernière candidate » tombe : la
# VM se voit alors annoncée avec l'adresse de sa passerelle.
for source in ("lease", "agent", "arp"):
if par_source.get(source):
return par_source[source][-1]
@ -2549,10 +2544,9 @@ class QemuManageMixin:
tourne dans la VM — install_proxmox.sh, les scripts d'installation, le
Makefile — vient donc de là.
Vécu deux fois de suite. Un correctif de install_proxmox.sh, commité
ici, absent du distant : chaque VM déployée ensuite recevait l'ancien
script, et le défaut « revenait » alors qu'il était corrigé. Rien ne
le disait ; il a fallu comparer les deux versions à la main.
Un correctif commité ici mais pas poussé ne part donc pas : chaque VM
déployée ensuite reçoit l'ancien script, et le défaut « revient »
alors qu'il est corrigé. Rien ne le signale, d'où ce décompte.
"""
if not branche:
return 0, []