ausfuehrer: Nur-Lesen-Modus (nur Bericht, jeder andere Auftrag abgelehnt), wahlweise bei der Einrichtung
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
209549f0f3
commit
b452b5e672
@@ -5,10 +5,14 @@
|
||||
# Proxmox-Host und startet den Dienst. Das gemeinsame Geheimnis wandert vom Container des Homelab-Teils
|
||||
# per Pipe direkt auf den Host (0600) — es steht in keiner Befehlszeile.
|
||||
#
|
||||
# Nutzung: bash deploy/homelab/ausfuehrer-einrichten.sh <ip-des-containers>
|
||||
# Nutzung: bash deploy/homelab/ausfuehrer-einrichten.sh <ip-des-containers> [--nur-lesen]
|
||||
# --nur-lesen: nur der Bericht, jeder andere Auftrag wird abgelehnt (umschalten in
|
||||
# /etc/mc2-ausfuehrer.json, "nur_lesen": false, dann systemctl restart mc2-ausfuehrer).
|
||||
set -euo pipefail
|
||||
cd "$(dirname "$0")/../.."
|
||||
IP="${1:?Nutzung: ausfuehrer-einrichten.sh <ip-des-containers>}"
|
||||
IP="${1:?Nutzung: ausfuehrer-einrichten.sh <ip-des-containers> [--nur-lesen]}"
|
||||
NUR_LESEN=false
|
||||
[ "${2:-}" = "--nur-lesen" ] && NUR_LESEN=true
|
||||
PVE="${MC_PVE:-pve}"
|
||||
|
||||
ssh -o BatchMode=yes "$PVE" "install -d -m 755 /usr/local/lib/mc2"
|
||||
@@ -18,7 +22,7 @@ ssh -o BatchMode=yes "$PVE" "cat > /etc/systemd/system/mc2-ausfuehrer.service" <
|
||||
# shellcheck disable=SC2029 # $IP soll hier (am PC) eingesetzt werden
|
||||
ssh -o BatchMode=yes "root@$IP" "cat /var/lib/mc2/ausfuehrer.token" \
|
||||
| ssh -o BatchMode=yes "$PVE" "umask 077; read -r t; [ -n \"\$t\" ] || exit 1; \
|
||||
printf '{\"server\": \"http://%s:9001\", \"token\": \"%s\", \"node\": \"%s\"}\n' '$IP' \"\$t\" \"\$(hostname)\" \
|
||||
printf '{\"server\": \"http://%s:9001\", \"token\": \"%s\", \"node\": \"%s\", \"nur_lesen\": %s}\n' '$IP' \"\$t\" \"\$(hostname)\" '$NUR_LESEN' \
|
||||
> /etc/mc2-ausfuehrer.json"
|
||||
ssh -o BatchMode=yes "$PVE" "systemctl daemon-reload && systemctl enable --now mc2-ausfuehrer.service \
|
||||
&& systemctl restart mc2-ausfuehrer.service && sleep 5 && systemctl is-active mc2-ausfuehrer.service"
|
||||
|
||||
@@ -13,7 +13,8 @@ Container des Homelab-Teils braucht keinen Proxmox-Schlüssel.
|
||||
vertraut — er kann nur aus der Liste wählen.
|
||||
|
||||
Nur die Standardbibliothek (Debian-Python des Hosts). Konfiguration: /etc/mc2-ausfuehrer.json
|
||||
{"server": "http://192.168.178.x:9001", "token": "<gemeinsames Geheimnis>", "node": "pve"}
|
||||
{"server": "http://192.168.178.x:9001", "token": "<gemeinsames Geheimnis>", "node": "pve", "nur_lesen": false}
|
||||
„nur_lesen": true liefert nur den Bericht und lehnt jeden anderen Auftrag ab.
|
||||
|
||||
Aufruf: ausfuehrer.py Dauerbetrieb (systemd)
|
||||
ausfuehrer.py --bericht Bericht einmal auf die Konsole (nur lesend, zum Prüfen)
|
||||
@@ -327,6 +328,9 @@ def ausfuehren(auftrag: dict) -> dict:
|
||||
aktion = AKTIONEN.get(str(auftrag.get("aktion")))
|
||||
if aktion is None:
|
||||
return {"code": 2, "text": f"Unbekannte Aktion: {auftrag.get('aktion')!r}"}
|
||||
# Nur-Lesen-Modus ("nur_lesen": true in der Konfiguration): Bericht ja, Änderungen nein.
|
||||
if NUR_LESEN and aktion is not a_bericht:
|
||||
return {"code": 2, "text": "Abgelehnt: Der Ausführer läuft im Nur-Lesen-Modus."}
|
||||
try:
|
||||
code, text = aktion(auftrag.get("parameter") or {})
|
||||
except (ValueError, RuntimeError) as exc:
|
||||
@@ -379,6 +383,7 @@ _konfig = _konfig_laden()
|
||||
SERVER = str(_konfig.get("server") or "").rstrip("/")
|
||||
TOKEN = str(_konfig.get("token") or "")
|
||||
NODE = str(_konfig.get("node") or platform.node())
|
||||
NUR_LESEN = bool(_konfig.get("nur_lesen"))
|
||||
|
||||
|
||||
def main() -> int:
|
||||
|
||||
Reference in New Issue
Block a user