phase3+4: Homelab-Teil (Ausfuehrer, Ziele, Jetzt updaten mit Rueckweg) und Seite Homelab fuer alle Geraete
- deploy/homelab/ausfuehrer.py: laeuft als root auf dem Proxmox-Host, holt Auftraege beim Homelab-Teil ab (Pull, kein offener Port), feste Aktionsliste, prueft Etiketten selbst; Bericht gegen den echten Host erprobt (nur lesend). Kein Proxmox-Schluessel im Container noetig. - services/homelab: Kanal mit gemeinsamem Geheimnis, App-Katalog, Inventar -> Ziele im gemeinsamen Modell (GitHub-Versionen, Webpruefung, alte Paketlisten = unklar), Jetzt updaten: Snapshot -> Update -> Pruefung -> bei Rot zurueck + dringende Meldung - Waechter in der Rolle homelab: Ausfuehrer schweigt, Gaeste antworten nicht - kern/github.py fuer beide Rollen (auch untagged Releases mit Version im Namen) - Oberflaeche: Seite Homelab zeigt alle Geraete als Karten (KI-Box ueber /api/ziele, Homelab ueber /api/homelab/ziele) mit Stand, Rueckweg und Knopf samt Rueckfrage - Einrichtung als Skripte (container-anlegen, ausrollen, ausfuehrer-einrichten, box-partner) — noch nicht ausgefuehrt, jeder Schritt braucht das User-OK - frontend-bauen-box.sh: Frontend-Pruefung und Build auf der Box, wenn der PC keinen Speicher hat Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
a47489fa85
commit
5e9227c4a3
@@ -37,15 +37,19 @@ class _Antwort:
|
||||
|
||||
|
||||
def test_github_antworten_werden_gemerkt_fehler_nicht(monkeypatch):
|
||||
monkeypatch.setattr(maintenance, "_github_cache", {})
|
||||
antworten = [_Antwort(403, {"message": "API rate limit exceeded"}), _Antwort(200, {"tag_name": "v258"})]
|
||||
from kern import github
|
||||
|
||||
monkeypatch.setattr(github, "_cache", {})
|
||||
antworten = [_Antwort(403, {"message": "API rate limit exceeded"}),
|
||||
_Antwort(200, {"tag_name": "v258", "published_at": "2026-09-20T10:00:00Z"})]
|
||||
aufrufe = []
|
||||
monkeypatch.setattr(maintenance.httpx, "get", lambda url, **kw: aufrufe.append(url) or antworten.pop(0))
|
||||
monkeypatch.setattr(github.httpx, "get", lambda url, **kw: aufrufe.append(url) or antworten.pop(0))
|
||||
with pytest.raises(httpx.HTTPStatusError):
|
||||
maintenance._github_json("repos/a/b/releases/latest")
|
||||
assert maintenance._github_json("repos/a/b/releases/latest") == {"tag_name": "v258"}
|
||||
assert maintenance._github_json("repos/a/b/releases/latest") == {"tag_name": "v258"}
|
||||
github.github_json("repos/a/b/releases/latest")
|
||||
assert github.neueste_version("a/b") == {"tag": "v258", "version": "258", "datum": "2026-09-20"}
|
||||
assert github.github_json("repos/a/b/releases/latest")["tag_name"] == "v258"
|
||||
assert len(aufrufe) == 2
|
||||
assert maintenance._github_json is github.github_json
|
||||
|
||||
|
||||
def test_hermes_version_auch_wenn_der_abruf_haengt(monkeypatch, tmp_path):
|
||||
|
||||
Reference in New Issue
Block a user