Welle 2 · Sicherheits-Markierung: Debian-Sicherheitsupdates, Alpine über secdb, Lücken-Scans aus Arcane
Der Ausführer zählt je Gast, wie viele offene Updates aus einer Sicherheits-Suite kommen („-security“ in apt list), beim Proxmox-Host ebenso; für Alpine (NPMplus) schickt er die Paketliste, und der Homelab-Teil gleicht sie mit Alpines Sicherheitsdatenbank ab (im Hintergrund geladen, zwölf Stunden gemerkt, Alpine-Versionsvergleich). Die Update-Tabelle, die Kacheln und die Übersicht zeigen „· 3 Sicherheit“, die Rückfrage nennt es. Je Docker-Container steht, was Arcanes Lücken-Scan (Trivy, sonntags 02:00) im Image fand, kritische und hohe. Der Ausführer braucht ausfuehrer-einrichten.sh. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
995a0f34ee
commit
1c66daad0b
@@ -219,6 +219,32 @@ def _container_liste(url: str) -> list[dict] | None:
|
||||
return ergebnis
|
||||
|
||||
|
||||
def luecken(url: str, image_ids: tuple[str, ...]) -> dict[str, dict]:
|
||||
"""Arcanes Lücken-Scan (Trivy) je Image: {imageId: {"kritisch", "hoch", "mittel", "gesamt", "zeit"}} — nur für
|
||||
gescannte Images. Leer ohne Schlüssel, ohne Scan oder wenn Arcane nicht antwortet (seit 25.09.2026)."""
|
||||
if not schluessel() or not image_ids:
|
||||
return {}
|
||||
return _gemerkt(f"luecken:{url}:{','.join(image_ids)}", lambda: _luecken(url, list(image_ids))) or {}
|
||||
|
||||
|
||||
def _luecken(url: str, image_ids: list[str]) -> dict[str, dict]:
|
||||
ergebnis: dict[str, dict] = {}
|
||||
try:
|
||||
for umgebung in umgebungen(url):
|
||||
r = httpx.post(f"{url}/api/environments/{umgebung['id']}/images/vulnerabilities/summaries",
|
||||
headers={"X-API-Key": schluessel()}, json={"imageIds": image_ids}, timeout=ZEITLIMIT)
|
||||
r.raise_for_status()
|
||||
for image_id, s in (((r.json() or {}).get("data") or {}).get("summaries") or {}).items():
|
||||
zahlen = (s or {}).get("summary") or {}
|
||||
if s and s.get("scanTime") and zahlen:
|
||||
ergebnis[image_id] = {"kritisch": int(zahlen.get("critical") or 0), "hoch": int(zahlen.get("high") or 0),
|
||||
"mittel": int(zahlen.get("medium") or 0), "gesamt": int(zahlen.get("total") or 0),
|
||||
"zeit": s.get("scanTime")}
|
||||
except (httpx.HTTPError, ValueError, TypeError, AttributeError):
|
||||
return {}
|
||||
return ergebnis
|
||||
|
||||
|
||||
def container_zahlen(url: str) -> dict | None:
|
||||
"""Laufende und alle Container über alle Umgebungen, für die Kachel (seit 25.09.2026): {"laufend", "gesamt"}.
|
||||
None ohne Schlüssel oder wenn Arcane nicht antwortet."""
|
||||
|
||||
Reference in New Issue
Block a user