"""Zentrale Einstellungen einer Instanz des Homelab Orchestrators. Zwei Rollen, derselbe Code (User-Entscheid 24.09.2026, „zwei Instanzen, eine Oberfläche“): box — auf der KI-Box: Box-Wart (Updates, Wächter, Modelle, Radar, Gateway für Lucy) homelab — auf dem Proxmox-PC: Homelab-Teil (Proxmox-Host, Container, Arcane) Beide kennen die jeweils andere Instanz als Partner: die Oberfläche zeigt beide Bereiche, und jede Instanz prüft, ob die andere noch antwortet. """ import os from dataclasses import dataclass from functools import lru_cache from pathlib import Path ROLLEN = ("box", "homelab") @dataclass(frozen=True) class Einstellungen: rolle: str # "box" | "homelab" instanz: str # Anzeigename dieser Instanz daten_dir: Path # Zustandsdateien dieser Instanz partner_url: str # Basis-URL der anderen Instanz, leer = keine partner_name: str # Anzeigename der anderen Instanz @lru_cache(maxsize=1) def einstellungen() -> Einstellungen: rolle = os.environ.get("MC_ROLLE", "box").strip().lower() or "box" if rolle not in ROLLEN: raise ValueError(f"MC_ROLLE muss eine von {ROLLEN} sein, nicht {rolle!r}.") box = rolle == "box" standard_daten = os.environ.get("MC_MODELS_DIR", "/srv/models") if box else "/var/lib/mc2" return Einstellungen( rolle=rolle, instanz=os.environ.get("MC_INSTANZ", "Box-Wart" if box else "Homelab"), daten_dir=Path(os.environ.get("MC_DATEN_DIR", standard_daten)), partner_url=os.environ.get("MC_PARTNER_URL", "").strip().rstrip("/"), partner_name=os.environ.get("MC_PARTNER_NAME", "Homelab" if box else "Box-Wart"), )