homelab: Arcane und Docker (eigene Version oeffentlich, Images mit Schluessel, Updates zuerst als Probelauf); Datei-Sperren gegen Windows-Wettlauf
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
5e9227c4a3
commit
209549f0f3
@@ -31,6 +31,10 @@ def daten(tmp_path, monkeypatch):
|
||||
"tag": neueste.get(repo, "2026-07-24-r1"), "version": neueste.get(repo, "2026-07-24-r1"),
|
||||
"datum": "2026-07-24"})
|
||||
monkeypatch.setattr(inventar, "erreichbar", lambda url: True)
|
||||
monkeypatch.setattr(inventar.arcane, "app_version",
|
||||
lambda url: {"installiert": "2.12.0", "neu": "2.13.1", "update": True})
|
||||
monkeypatch.delenv("MC_ARCANE_KEY", raising=False)
|
||||
monkeypatch.delenv("MC_ARCANE_ECHT", raising=False)
|
||||
yield tmp_path
|
||||
einstellungen_mod.einstellungen.cache_clear()
|
||||
|
||||
@@ -106,8 +110,11 @@ def test_ziele_aus_dem_echten_bericht(daten):
|
||||
assert {b["id"]: b for b in z["ct-101"]["bausteine"]}["app"]["zustand"] == "aktuell" # Image jünger
|
||||
# NetBird hat keine Weboberfläche: erreichbar heißt hier „läuft“.
|
||||
assert z["ct-102"]["erreichbar"] is True
|
||||
arcane = z["vm-106"]
|
||||
assert arcane["name"] == "Arcane (Docker)" and arcane["bausteine"][0]["id"] == "freigabe"
|
||||
arcane = {b["id"]: b for b in z["vm-106"]["bausteine"]}
|
||||
assert z["vm-106"]["name"] == "Arcane (Docker)"
|
||||
# Arcane läuft über seine eigene Schnittstelle: ohne Schlüssel sagt die Übersicht das ehrlich.
|
||||
assert (arcane["arcane"]["zustand"], arcane["arcane"]["kurz"]) == ("neu", "2.12.0 → 2.13.1")
|
||||
assert arcane["docker"]["zustand"] == "unbekannt" and "MC_ARCANE_KEY" in arcane["docker"]["grund"]
|
||||
|
||||
|
||||
def test_ohne_bericht_leer_und_ehrlich(daten):
|
||||
@@ -252,3 +259,21 @@ def test_ausfuehrer_lehnt_fremdes_ab(monkeypatch):
|
||||
assert ausgefuehrt == []
|
||||
assert a.ausfuehren({"aktion": "update", "parameter": {"vmid": 104}})["code"] == 0
|
||||
assert ausgefuehrt[-1][:4] == ["pct", "exec", "104", "--"] and "PHS_SILENT=1" in ausgefuehrt[-1][-1]
|
||||
|
||||
|
||||
def test_docker_ueber_arcane_erst_als_probelauf(ausfuehrer, monkeypatch):
|
||||
_, _, meldungen, _ = ausfuehrer
|
||||
monkeypatch.setenv("MC_ARCANE_KEY", "schluessel")
|
||||
monkeypatch.setattr(inventar.arcane, "images_mit_update", lambda url: [
|
||||
{"name": "ghcr.io/tobi/nerdquiz:latest", "aktuell": None, "neu": None, "umgebung": 0, "benutzt": ["nerdquiz"]}])
|
||||
docker = {b["id"]: b for b in _ziele(None)["vm-106"]["bausteine"]}["docker"]
|
||||
assert (docker["zustand"], docker["kurz"], docker["aktion"]["label"]) == ("neu", "1 Images", "Probelauf")
|
||||
aufrufe: list[bool] = []
|
||||
monkeypatch.setattr(updates.arcane, "updater", lambda url, probelauf: aufrufe.append(probelauf) or {
|
||||
"local": {"checked": 7, "updated": 0, "failed": 0,
|
||||
"items": [{"resourceName": "nerdquiz", "updateAvailable": True}]}})
|
||||
lauf = _auf_ende(updates.starten("vm-106", "docker")["lauf"])
|
||||
assert aufrufe == [True] and lauf["ergebnis"] == "offen"
|
||||
assert meldungen[-1][0] == "Arcane-Probelauf: 1 von 7 Containern würden aktualisiert (nerdquiz). Geändert wurde nichts."
|
||||
monkeypatch.delenv("MC_ARCANE_KEY")
|
||||
assert updates.starten("vm-106", "docker")["ok"] is False
|
||||
|
||||
Reference in New Issue
Block a user