Read a Offering
const url = 'https://example.com/apis/nodus.dev/v1/offerings/example';const options = {method: 'GET'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://example.com/apis/nodus.dev/v1/offerings/exampleParameters
Section titled “ Parameters ”Path Parameters
Section titled “ Path Parameters ”The object’s name.
Responses
Section titled “ Responses ”OK
Offering is a class of capacity Nodus can run work on now: an accelerator and count (or a CPU shape), a region class and interruptible or on-demand, with live customer prices and availability. Offerings are read-only and the same for every organization; name one in spec.placement.offerings to restrict where work runs.
object
object
object
object
object
object
object
OfferingSpec is the shape of a capacity class.
object
OfferingAccelerator is an accelerator from the Nodus accelerator catalog.
object
Arch is the CUDA architecture, such as sm_90.
Family is the accelerator family, such as H100, that spec.resources.gpu.type matches.
FormFactor is the board form factor, such as SXM or PCIe.
ID is the exact accelerator variant, such as H100-SXM.
Memory is the memory of one accelerator, such as 80Gi.
Category is GPU or CPU.
Count is the accelerators per machine; 0 for CPU offerings.
OfferingHost is the CPU, memory and disk of a machine.
object
CPU is the vCPUs.
Disk is the ephemeral disk, when the class reports one.
Memory is the host memory.
Interconnect is the accelerator interconnect, such as NVLink, when it is verified.
Interruptible capacity can be reclaimed while running and costs less; Nodus checkpoints and resumes work on it.
MultiNode reports that machines of this class can run multi-node (gang) Jobs together.
RegionClass is where the machines are, such as us or eu; unknown when the location is not reported.
OfferingSupports are the kinds of work an Offering can run.
object
Gangs (multi-node Jobs) can run on this class.
Jobs can run on this class.
RestrictedEgress reports that outbound network restrictions are enforced on this class.
Sandboxes can run on this class.
Workspaces can run on this class.
OfferingStatus is the live price and availability of a capacity class.
object
Availability is Available, Limited or Unavailable.
AvailableNow is a lower bound of the machines free now.
Conditions carry Available, False with reason NoCapacity when no machine is free.
object
InterruptionRatePerHour is the observed reclaims per machine-hour; set for interruptible offerings only.
ListPriceUSDPerHour is the published list price per machine-hour.
ObservedTime is when the price and availability were last confirmed.
OfferingPrice is a customer rate range.
object
From is the rate of the cheapest machine free now, which the default placement profile takes, or of the cheapest machine when none is free, such as “2.85”.
Typical is the median current rate of the machines free now, or of every machine when none is free.
OfferingStartup is the observed time from request to a running machine.
object
P50 is the median startup time.
P90 is the 90th-percentile startup time.
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" }, "spec": { "accelerator": { "arch": "example", "family": "example", "formFactor": "example", "id": "example", "memory": "example" }, "category": "example", "count": 1, "host": { "cpu": "example", "disk": "example", "memory": "example" }, "interconnect": "example", "interruptible": true, "multiNode": true, "regionClass": "example", "supports": { "gangs": true, "jobs": true, "restrictedEgress": true, "sandboxes": true, "workspaces": true } }, "status": { "availability": "example", "availableNow": 1, "conditions": [ { "lastTransitionTime": "example", "message": "example", "observedGeneration": 1, "reason": "example", "status": "example", "type": "example" } ], "interruptionRatePerHour": "example", "listPriceUSDPerHour": "example", "observedTime": "example", "priceUSDPerHour": { "from": "example", "typical": "example" }, "startup": { "p50": "example", "p90": "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"}