Retire reserved host access and drain lending
const url = 'https://example.com/apis/nodus.dev/v1/namespaces/example/reservedhosts/example/release-capacity';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"agreed":true,"epoch":1}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://example.com/apis/nodus.dev/v1/namespaces/example/reservedhosts/example/release-capacity \ --header 'Content-Type: application/json' \ --data '{ "agreed": true, "epoch": 1 }'Parameters
Section titled “ Parameters ”Path Parameters
Section titled “ Path Parameters ”The project.
The object’s name.
Query Parameters
Section titled “ Query Parameters ”Header Parameters
Section titled “ Header Parameters ”Request Bodyrequired
Section titled “ Request Bodyrequired ”ReservedHostReleaseRequest confirms irreversible retirement under the reviewed reservation epoch.
object
Agreed confirms access retirement without shortening the supplier’s reservation term.
Epoch identifies the reservation assignment reviewed before retirement.
Example generated
{ "agreed": true, "epoch": 1}Responses
Section titled “ Responses ”OK
ReservedHost is a project-scoped physical server assignment (Beta). Operators assign the entire machine; customer connections never create or replace capacity.
object
object
object
object
object
object
object
ReservedHostStatus is the customer-safe view of a physical host assignment.
object
Conditions reports host connectivity and reservation eligibility.
object
ReservedHostConnect describes access to the physical operating system through Nodus.
object
Command sets up SSH and opens a shell on this host.
Host is the stable SSH alias installed by the Nodus CLI.
HostKey is the public SSH host key used for strict host verification.
LoginUser is the operator-configured operating-system account.
NodeInventory is the host’s hardware and software.
object
CPU is the host’s CPU count.
DiskGiB is the host’s free disk in GiB.
GPUs are the host’s GPUs.
NodeGPU is one device on the host.
object
Driver is the GPU driver version.
MemoryMiB is the GPU’s memory in MiB.
Accelerator model, “h100-sxm-80g”
MemoryMiB is the host’s memory in MiB.
NodusdVersion is the nodusd release on the host.
OS is the host’s operating system.
LastHeartbeatTime is the latest host heartbeat.
Pool is the enrolled capacity group used for this host’s lending agreement.
ReservedHostReleaseStatus reports execution drainage, never early contract cancellation or disk sanitization.
object
DrainedAt is when current-agent evidence confirmed that owner and borrower execution had ended.
RequestedAt is when the owner requested retirement of access and execution.
HostReservation is the customer-safe projection of the physical server’s assignment (Beta).
object
EndsAt is the exclusive end of the reservation term.
Epoch fences connections after access changes.
LoginUser is the fixed operating-system account.
Project identifies the customer project authorized to connect.
StartsAt is the beginning of the reservation term.
State controls access, never hardware availability to other workloads.
Example generated
{ "apiVersion": "example", "kind": "example", "metadata": { "annotations": { "additionalProperty": "example" }, "creationTimestamp": "example", "deletionGracePeriodSeconds": 1, "deletionTimestamp": "example", "finalizers": [ "example" ], "generateName": "example", "generation": 1, "labels": { "additionalProperty": "example" }, "managedFields": [ { "apiVersion": "example", "fieldsType": "example", "fieldsV1": { "additionalProperty": "example" }, "manager": "example", "operation": "example", "subresource": "example", "time": "example" } ], "name": "example", "namespace": "example", "ownerReferences": [ { "apiVersion": "example", "blockOwnerDeletion": true, "controller": true, "kind": "example", "name": "example", "uid": "example" } ], "resourceVersion": "example", "selfLink": "example", "uid": "example" }, "status": { "conditions": [ { "lastTransitionTime": "example", "message": "example", "observedGeneration": 1, "reason": "example", "status": "example", "type": "example" } ], "connect": { "command": "example", "host": "example", "hostKey": "example", "loginUser": "example" }, "inventory": { "cpu": 1, "diskGiB": 1, "gpus": [ { "driver": "example", "memoryMiB": 1, "type": "example" } ], "memoryMiB": 1, "nodusdVersion": "example", "os": "example" }, "lastHeartbeatTime": "example", "pool": "example", "release": { "drainedAt": "example", "requestedAt": "example" }, "reservation": { "endsAt": "example", "epoch": 1, "loginUser": "example", "project": "example", "startsAt": "example", "state": "example" } }}default
Section titled “ default ”An error: a metav1.Status whose reason is a registered code.
Status is the error body of every API response: a Kubernetes metav1.Status (so kubectl and client-go understand it) plus three top-level extensions that those clients ignore (ADR-028).
object
object
object
Docs is the URL of the code’s docs page.
Fix says what to do next, for example a CLI command or the field to change.
object
object
RequestID identifies the request in logs and support tickets.
Example generated
{ "apiVersion": "example", "code": 1, "details": { "causes": [ { "field": "example", "message": "example", "reason": "example" } ], "group": "example", "kind": "example", "name": "example", "retryAfterSeconds": 1, "uid": "example" }, "docs": "example", "fix": "example", "kind": "example", "message": "example", "metadata": { "continue": "example", "remainingItemCount": 1, "resourceVersion": "example", "selfLink": "example", "shardInfo": { "selector": "example" } }, "reason": "example", "requestId": "example", "status": "example"}