chore(fleet): sync operator memory, hatch menu dialogs, and watchdog alerts
This commit is contained in:
@@ -182,6 +182,10 @@ def get_toggle(node, name):
|
||||
else:
|
||||
value = None
|
||||
if value is None:
|
||||
if kind == "website":
|
||||
return {"ok": False, "node": node, "toggle": name,
|
||||
"error": "host not in Websites list (effective: "
|
||||
"permissions.web_access default)"}
|
||||
return {"ok": False, "node": node, "toggle": name,
|
||||
"error": "toggle not readable (site changed?)"}
|
||||
return {"ok": True, "node": node, "toggle": name, "value": value}
|
||||
@@ -226,15 +230,19 @@ def set_toggle(node, name, value):
|
||||
ok = _PERM.set_protocol(ws, spec["label"], want == "on")
|
||||
else:
|
||||
ok = False
|
||||
if not ok:
|
||||
return {"ok": False, "node": node, "toggle": name,
|
||||
"error": "set failed verification (site changed?)"}
|
||||
# The fresh-session readback is the source of truth: switch
|
||||
# commits can land slowly or on dialog close, after the
|
||||
# in-flow verify had its chance.
|
||||
readback = get_toggle(node, name)
|
||||
if not readback.get("ok") or readback.get("value") != want:
|
||||
return {"ok": False, "node": node, "toggle": name,
|
||||
"error": "readback mismatch (want %r, got %r)"
|
||||
% (want, readback.get("value"))}
|
||||
return {"ok": True, "node": node, "toggle": name, "value": want}
|
||||
if readback.get("ok") and readback.get("value") == want:
|
||||
out = {"ok": True, "node": node, "toggle": name,
|
||||
"value": want}
|
||||
if not ok:
|
||||
out["readback_only"] = True
|
||||
return out
|
||||
return {"ok": False, "node": node, "toggle": name,
|
||||
"error": "readback mismatch (want %r, got %r)"
|
||||
% (want, readback.get("value"))}
|
||||
except Exception as e:
|
||||
return {"ok": False, "node": node, "toggle": name,
|
||||
"error": "%s: %s" % (type(e).__name__, e)}
|
||||
|
||||
Reference in New Issue
Block a user