Bulk-VM-Agent-Update tut nichts: latest_version-Pfad falsch (→ (any)) + optimistischer Erfolg ohne Verifikation #28
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Symptom
Bulk-„VM-Agent-Update" meldet für alle VMs „Update gesendet (kein Versions-Check)", Ziel-Version „(any)" — es wird aber faktisch nichts aktualisiert.
Root Cause (zwei zusammenwirkende Defekte)
A) Pfad-Mismatch →
latest_versionleer → „(any)"server/routers/deploy_router.py:988_read_vm_agent_latest_version():__file__=server/routers/deploy_router.py→.parent.parent.parent= Repo-Root/VM-Guest-Agent.Der Binary-Endpoint
server/main.py:345vm_agent_binary_for_osserviert dagegen aus:→ zwei verschiedene Verzeichnisse. Im Deployment (nur
server/ausgeliefert) existiert der Repo-Root-Pfad nicht →read_textwirft → Funktion liefert""→latest_versionleer → „(any)". (In der Dev-Checkout-Umgebung liest sie zufällig, deshalb fällt's nur in Prod auf.)B) Leere
latest_version→ optimistischer „Erfolg" ohne VerifikationNode-Agent/src/vm_self_update.rsupdate_one:Es wird fire-and-forget gesendet und sofort als „aktualisiert" gezählt — kein
wait_for_reconnect, kein QEMU-Fallback. Scheitert das Self-Update im Gast (Binary-404, Download-Fehler, …), bleibt es unbemerkt.Fix
1. Version zuverlässig auflösen (Backend)
_read_vm_agent_latest_version()aus derselben Quelle lesen, aus der das Binary serviert wird (Path(__file__).parent.parent / "VM-Guest-Agent"=server/), und sicherstellen, dass das Packaging die Version dort mitliefert (Cargo.toml oder eineVERSION-Datei neben dem Binary). Wenn nicht auffindbar: definierter Fallback (Konstante/ENV) statt stillem"". Ziel:latest_versionist im Normalbetrieb nie leer.2. Empty-Version-Zweig nicht blind als Erfolg werten (Agent)
Mit (1) läuft ohnehin der
wait_for_reconnect-Pfad (verifiziert). Zusätzlich denlatest_version.is_empty()-Zweig härten:tcp_ok = truesetzen. Stattdessen: auf Reconnect des Agents warten (Drop→Reconnect = Erfolg, auch ohne fixe Zielversion) oder in den QEMU-Fallback fallen, der real installiert.3. Reporting
In der Zusammenfassung „aktualisiert" (verifiziert) vs. „gesendet, unbestätigt" unterscheiden, damit das UI keinen Erfolg meldet, wenn nichts passiert ist.
Akzeptanz
cargo build/clippygrün — Agent-Build vor Merge.Branch
fix/vm-agent-bulk-update-versionKeine Agent Updates auf alle VM'sto Bulk-VM-Agent-Update tut nichts: latest_version-Pfad falsch (→ (any)) + optimistischer Erfolg ohne Verifikation