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:
co-authored by
Claude Opus 5.5
parent
28888890ec
commit
7a456c8efa
@@ -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"]
|
||||
|
||||
@@ -239,3 +239,27 @@ def test_schnittstelle(monkeypatch):
|
||||
assert daten["bericht"] is True and daten["pools"][0]["stufe"] == "ok"
|
||||
assert daten["nas"][0]["erreichbar"] is True and daten["sicherungen"]["stufe"] == "ok"
|
||||
assert daten["empfehlungen"][0]["art"] == "trim-vm"
|
||||
|
||||
|
||||
def test_alte_kernel_mit_knopf_und_systemplatte(monkeypatch):
|
||||
b = _bericht()
|
||||
b["host"].update(
|
||||
kernel_alt=[{"paket": f"proxmox-kernel-6.17.{i}-1-pve-signed", "version": f"6.17.{i}-1-pve", "groesse": 915_000_000}
|
||||
for i in range(20)],
|
||||
kernel_bleiben=["6.14.8-2-pve", "6.17.13-21-pve", "7.0.14-12-pve", "7.0.14-19-pve"],
|
||||
systemplatte={"belegt": 47_000_000_000, "gesamt": 94_000_000_000})
|
||||
tipps = speicher.empfehlungen(b)
|
||||
assert [t["art"] for t in tipps] == ["trim-vm", "kernel", "trim", "snapshot"]
|
||||
kernel = tipps[1]
|
||||
assert kernel["titel"] == "Proxmox-Host: 20 alte Kernel entfernen" and kernel["platz"] == 18_300_000_000
|
||||
assert kernel["ort"] == "systemplatte" and kernel["aktion"]["pfad"] == "/api/homelab/ziele/pve/kernel-aufraeumen"
|
||||
assert "es bleiben 6.14.8-2, 6.17.13-21, 7.0.14-12, 7.0.14-19" in kernel["text"]
|
||||
assert speicher.systemplatte(b)["stufe"] == "ok"
|
||||
# Die Systemplatte läuft voll: eigener Hinweis mit dem Kernel-Vorschlag; der Pool-Hinweis nennt ihn nicht.
|
||||
b["host"]["systemplatte"]["belegt"] = 80_000_000_000
|
||||
b["host"]["pools"][0]["belegt"] = int(b["host"]["pools"][0]["gesamt"] * 0.95)
|
||||
monkeypatch.setattr(speicher, "antwortet", lambda s, p: True)
|
||||
monkeypatch.setattr(speicher, "_bericht", lambda: b)
|
||||
befunde = {x.id: x for x in speicher.pruefe_speicher(JETZT)}
|
||||
assert befunde["host-platte"].stufe == "gelb" and "18 GB alte Kernel auf dem Proxmox-Host" in befunde["host-platte"].text
|
||||
assert "Kernel" not in befunde["pool:local-lvm"].text
|
||||
|
||||
Reference in New Issue
Block a user