VM-Updates: EINEN einheitlichen Bulk-Flow (immer Auswahl-Tabelle + Bestätigung, kanonisch bulk-job) — 3 Pfade konsolidieren #123
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?
Problem
Der VM-Update-Flow ist dreifach zersplittert und verhaelt sich je nach Einstieg unterschiedlich — "da macht er so, da so, da so". Konkret beobachtet: Im NodeCard startet "Alle X aktualisieren" sofort den Run (running/pending, keine Tabelle), im Node→VMs-Panel landet man dagegen im Bulk-Modus mit Auswahl-Tabelle. Erwartet war ueberall der Auswahl-Modus.
Ist-Zustand (verifiziert @
915fc87)Backend — 3 parallele Pfade (
update_router.py):POST /bulk-job+GET /bulk-job/{id}+/cancel-item(async Job + Polling) ← PanelPOST /bulk-run+GET /bulk-run/{id}+/cancel(anderer async Run) ← NodeCard (bulkRunApi)POST /vms/bulk-update+/vms/bulk-preview(synchroner Batch) ← Panel-VorschauFrontend — 2 Einstiege, unterschiedliches Verhalten:
+page.svelte:849-922,bulkRunByNode): nurconfirm()→ sofortbulkRunApi.start+ Poll. Keine Tabelle, keine Auswahl.NodeUpdatesPanel.svelte):enterBulkSelectAll()→ Bulk-Modus mit Tabelle (vorselektiert, abwaehlbar) → "Vorschau"/"Updates ausfuehren".Soll-Zustand (Entscheidung)
EIN einziger, ueberall identischer Update-Flow. Immer Bulk-Modus.
bulk-job(+getBulkJob-Polling,cancel-item).bulk-runund der synchronebulk-update-Run werden entfernt (bulk-preview kann als Vorschau-Helfer bleiben, wenn vom Bulk-Modus genutzt — sonst auch raus)./vms/{vmid}/updatedarf intern bleiben, aber der Nutzer-Flow ist immer Bulk).Aufgaben
BulkUpdateMode.svelte+ Store), von NodeCard und NodeUpdatesPanel genutzt.bulkRunByNode(+page.svelte:849-922) entfernen; Button ruft nur noch "enter Bulk-Modus (alle vorselektiert)".bulk-jobvereinheitlichen;bulkRunApi(/bulk-run*),BulkRunModal.svelte,BulkHistoryModal.sveltesowie/bulk-update(sofern nicht als Vorschau gebraucht) entfernen — inkl. toter Backend-Endpoints.startBulkJob.BULK_LS_KEY/bulk_job_id_*) auf den einen Pfad vereinheitlichen.Akzeptanz
bulk-job.Bezug
#122 (hatte das Auswahl-Modal entfernt — wird hier neu/anders geloest), #94 (NodeCard lebt im 4.158-Z. +page.svelte → diese Konsolidierung zahlt auf die Zerlegung ein), #95.
Branch
refactor/unify-vm-bulk-update-flowBulk-Flow vereinheitlicht — ein einziger Weg (bulk-job) über alle Einstiege.
Commits (
main):7291a19feat(updates): unified BulkUpdateMode component + bulkUpdate store (#123)1bbac96refactor(updates): NodeUpdatesPanel uses BulkUpdateMode (#123)58748f8refactor(updates): NodeCard + global dropdown use BulkUpdateMode, drop direct-start (#123)e3924farefactor(updates): remove dead bulk-run + sync bulk-update paths (#123)Architektur (zahlt auf #94 ein):
frontend/src/lib/stores/bulkUpdate.svelte.ts— Runes-Class-Singleton, EIN aktiver Job, ein localStorage-Keytheprox.bulkJob, Phasen idle/select/running/done, Poll @1s übergetBulkJob, bei Abschlussscander „done"-Items + Eventtheprox:bulk-done,resume()nach Reload.frontend/src/lib/components/updates/BulkUpdateMode.svelte— EIN globales Modal (einmal in+page.sveltegerendert): Auswahl-Tabelle (vorselektiert, einzeln abwählbar, Node-Spalte nur bei >1 Node, Preview) → Bestätigung → Live-Fortschritt (cancel-item pro VM). Tabellen-Optik 1:1 aus dem Panel übernommen.Akzeptanzkriterien:
bulk-job. Auch bei genau 1 VM (keine Sonderbehandlung).startNodeBulkUpdate/bulkJobByNode-Direktlauf entfernt).update_router.py:bulk-preview,bulk-job(+get/cancel-item), neuGET /bulk-candidates?scope=(ersetzt die/bulk-run-Discovery, nutzt_collect_pending_items). Entfernt:/bulk-run*,/bulk-runs, synchroner/vms/bulk-update, FrontendbulkRunApi,BulkRunModal.svelte,BulkHistoryModal.svelte,services/bulk_update_runner.py.BulkRun-Model + Tabelle bleiben (keine Migration/kein Table-Drop)./bulk-candidatesalle aktualisierbaren VMs über die sichtbaren Nodes und öffnet damit denselben Bulk-Modus (bulk-job ist multi-node).Single-VM-User-Flow: per-Zeilen-„Update"-Button im Panel entfernt (read-only „Preview" bleibt).
/vms/{vmid}/updatebleibt intern (von bulk-job pro Item genutzt).Hinweis / offen für Maintainer-Entscheid: CT-Kandidaten-Parität. Per-Node-Einstieg (NodeCard/Panel) selektiert wie bisher
updates_available > 0→ CTs ohne Update-Count erscheinen dort nicht; das/bulk-candidates-Backend listet laufende CTs immer mit. Bewusst nicht „neu erfunden" (kein neues Verhalten außer Vereinheitlichung) — falls exakte Parität gewünscht: per-node CTs ebenfalls immer einschließen. Kurzer Follow-up.svelte-check: 3 Errors → 3 Errors (alle vorbestehend, fremde Dateien), Warnings 236 → 230. Backend parst.
+page.svelte1810 → 1696.