agent: complete plan05 closeout

This commit is contained in:
Abel Luck 2026-02-27 13:48:52 +01:00
parent 33ba248c49
commit 2f0fffa905
12 changed files with 1347 additions and 313 deletions

View file

@ -106,14 +106,11 @@ def _parse_args() -> argparse.Namespace:
subparsers.add_parser("slots", help="List slots")
subparsers.add_parser("reservations", help="List reservations")
parser_drain = subparsers.add_parser("drain", help="Drain a slot (not implemented)")
parser_drain = subparsers.add_parser("drain", help="Drain a slot")
parser_drain.add_argument("slot_id")
parser_unq = subparsers.add_parser(
"unquarantine",
help="Unquarantine a slot (not implemented)",
)
parser_unq = subparsers.add_parser("unquarantine", help="Unquarantine a slot")
parser_unq.add_argument("slot_id")
subparsers.add_parser("reconcile-now", help="Run reconciler now (not implemented)")
subparsers.add_parser("reconcile-now", help="Trigger immediate reconcile tick")
return parser.parse_args()
@ -130,19 +127,31 @@ def main() -> None:
if not args.command:
raise SystemExit(1)
if args.command in {"drain", "unquarantine", "reconcile-now"}:
print(f"{args.command}: not yet implemented in API v1")
raise SystemExit(0)
endpoint_map = {
"status": "/v1/state/summary",
"slots": "/v1/slots",
"reservations": "/v1/reservations",
}
path = endpoint_map[args.command]
method = "GET"
path = ""
body: dict[str, Any] | None = None
if args.command == "status":
path = "/v1/state/summary"
elif args.command == "slots":
path = "/v1/slots"
elif args.command == "reservations":
path = "/v1/reservations"
elif args.command == "drain":
method = "POST"
path = "/v1/admin/drain"
body = {"slot_id": args.slot_id}
elif args.command == "unquarantine":
method = "POST"
path = "/v1/admin/unquarantine"
body = {"slot_id": args.slot_id}
elif args.command == "reconcile-now":
method = "POST"
path = "/v1/admin/reconcile-now"
else:
raise SystemExit(1)
try:
status, data = _uds_request(args.socket, "GET", path)
status, data = _uds_request(args.socket, method, path, body=body)
except OSError as err:
print(f"Error: cannot connect to daemon at {args.socket}")
raise SystemExit(1) from err
@ -151,7 +160,7 @@ def main() -> None:
_print_error(data)
raise SystemExit(1)
if args.command == "status":
if args.command in {"status", "drain", "unquarantine", "reconcile-now"}:
print(json.dumps(data, indent=2))
elif args.command == "slots":
if isinstance(data, list):