From 40a1e178f34ba61ada2652abdd884e8e7343f51a Mon Sep 17 00:00:00 2001 From: Mathieu Benoit Date: Mon, 31 Aug 2026 07:17:22 -0400 Subject: [PATCH] =?UTF-8?q?[FIX]=20qemu=20manage=20:=20ni=20adresse,=20ni?= =?UTF-8?q?=20nom=20de=20VM,=20ni=20r=C3=A9cit=20en=20commentaire?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- script/todo/qemu_manage.py | 46 +++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 26 deletions(-) diff --git a/script/todo/qemu_manage.py b/script/todo/qemu_manage.py index 04f4694..30ba3bd 100644 --- a/script/todo/qemu_manage.py +++ b/script/todo/qemu_manage.py @@ -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, []