Dank Dir terence, das war genau richtig ![]()
Anschließend bekam ich:
[2026-03-31 11:03:48] [ERROR] API Fehler 400: {"code":"server.patch.oneattribute","message":"Only one attribute at a time is allowed."}
Was auf die Unmöglichkeit hinweist, sowohl state = OFF als auch stateOption = POWEROFF in einem Patch-Request gleichzeitig zu setzen.
stateOption = POWEROFF allein hat er nicht gefressen, aber state = OFF hat den erwünschten Effekt erzielt, d.h. der Server mit der übergebenen ServerID war sofort aus und musste über das SCP neu gestartet werden. Über Stateoption denke ich jetzt erstmal nicht mehr nach.
---
def fence_server(token: str, server_id: str):
url = f"{API_BASE}/servers/{server_id}"
log("WARNING", f"Sende Fencing-Signal (OFF) an Server {server_id}...")
try:
# PATCH Request exakt wie im funktionierenden IP-Skript gestaltet:
resp = requests.patch(url,
headers={"Authorization": f"Bearer {token}", "Content-Type": "application/merge-patch+json"},
json={"state": "OFF"},
timeout=30)
if resp.status_code in (200, 202, 204):
log("SUCCESS", f"Server {server_id} erfolgreich ausgeschaltet (Status: {resp.status_code}).")
sys.exit(0)
else:
log("ERROR", f"API Fehler {resp.status_code}: {resp.text}")
sys.exit(1)
except Exception as e:
log("ERROR", f"Fencing Exception: {e}")
sys.exit(1)
---
Das kommt jetzt in die pacemaker-Config (Verzeichnisse, serverID und Servernamen sind geändert), in etwa so:
Definition für v01 um v02 zu fencen…
pcs stonith create fence_v02 fence_exec \
executable="/etc/NETCUP/NETCUP_Fence.py" \
cmdline_options="--fence 654321" \
monitor_options="--status" \
pcmk_host_list="v02" \
shell_timeout=30 \
op monitor interval=60s
Definiton für v02 um v01 zu fencen
pcs stonith create fence_v01 fence_exec \
executable="/etc/NETCUP/NETCUP_Fence.py" \
cmdline_options="--fence 123456" \
monitor_options="--status" \
pcmk_host_list="v01" \
shell_timeout=30 \
op monitor interval=60s
pcs constraint location fence_v01 avoids v01
pcs constraint location fence_v02 avoids v02
Kontrolle
pcs stonith status