homelab: alte Kernel per Knopf entfernen; Systemplatte des Proxmox-Hosts im Blick

User-Wunsch 25.09.: Auf dem Host lagen 25 Kernel (~23 GB), 20 davon hält apt für
entbehrlich (19,7 GB).
- Ausführer: host.kernel_alt/kernel_bleiben aus apt-get -s autoremove (nur
  Kernel, nie laufender, nächster oder festgepinnter), host.systemplatte;
  neue Aktion kernel_aufraeumen bestimmt die Liste selbst und purgt.
- Homelab-Teil: Lauf „kernel“ (Ergebnis aufgeraeumt), POST
  /api/homelab/ziele/pve/kernel-aufraeumen, Vorschlag mit Knopf, Wächter für die
  Systemplatte (80/90 %).
- Oberfläche: Kachel Systemplatte, Knopf „Alte Kernel entfernen“ mit Rückfrage.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-09-25 12:16:14 +02:00
co-authored by Claude Opus 5.5
parent 28888890ec
commit 7a456c8efa
36 changed files with 377 additions and 60 deletions
+32
View File
@@ -148,6 +148,8 @@ def _ausfuehrer_spielen(stopp: threading.Event, neue_version: str, protokoll: li
text = ""
if auftrag["aktion"] == "snapshot":
text = "snapshot=mc2-20260924-190000"
elif auftrag["aktion"] == "kernel_aufraeumen":
text = "entfernt=20\nfrei=18300000000\nRemoving proxmox-kernel-6.17.2-1-pve-signed …"
elif auftrag["aktion"] == "bericht":
neu = json.loads(json.dumps(BERICHT))
next(g for g in neu["gaeste"] if g["vmid"] == 104)["app"]["version"] = neue_version
@@ -451,3 +453,33 @@ def test_neuer_kernel_heisst_neustart(daten):
host = {b["id"]: b for b in next(z for z in inventar.ziele()["ziele"] if z["id"] == "pve")["bausteine"]}
assert host["neustart"]["grund"] == "Neuer Kernel 7.0.14-19-pve ist installiert, es läuft noch 7.0.14-12-pve."
assert host["neustart"]["aktion"]["label"] == "Jetzt neu starten"
def test_alte_kernel_nur_auf_knopfdruck(ausfuehrer):
"""25.09.2026: 25 Kernel auf dem Host, 20 davon hielt apt für entbehrlich."""
starten, protokoll, meldungen, verlauf = ausfuehrer
starten("1.27.3")
lauf = _auf_ende(updates.starten("pve", "kernel")["lauf"])
assert (lauf["ergebnis"], protokoll) == ("aufgeraeumt", ["kernel_aufraeumen", "bericht"])
assert meldungen[-1] == ("Proxmox-Host: 20 alte Kernel entfernt, 18,3 GB frei geworden.", False)
assert verlauf[-1][2:4] == ("pve", "aufgeraeumt")
from services.homelab import protokoll as prot
assert prot._lauf(lauf, lambda *a: None) is None or True # Titel-Zweig existiert (kein KeyError)
def test_ausfuehrer_waehlt_alte_kernel_selbst():
a = _ausfuehrer_modul()
simulation = """NOTE: This is only a simulation!
Reading package lists...
The following packages will be REMOVED:
proxmox-kernel-6.14.11-2-pve-signed proxmox-kernel-7.0.14-12-pve-signed libfoo1
Remv proxmox-kernel-6.14.11-2-pve-signed [6.14.11-2]
Remv proxmox-kernel-7.0.14-12-pve-signed [7.0.14-12]
Remv proxmox-kernel-7.0.14-5-pve-signed [7.0.14-5]
Remv proxmox-kernel-6.17 [6.17.13-21]
Remv libfoo1 [1.2-3]
Remv pve-kernel-6.8.12-4-pve [6.8.12-4]
"""
behalten = {"7.0.14-12-pve", "7.0.14-19-pve"}
assert a.alte_kernel(simulation, behalten) == [
"proxmox-kernel-6.14.11-2-pve-signed", "proxmox-kernel-7.0.14-5-pve-signed", "pve-kernel-6.8.12-4-pve"]