Velocity • Durability

12. Nodes and Hardware

12.1 Nodes

Endpoint Summary

Path Summary Method
/api/v1/nodes List nodes GET
/api/v1/nodes/{dataserial} Get node info GET
/api/v1/nodes/{dataserial}/actions Perform action on node POST
/api/v1/nodes/{dataserial}/drain Get OSD drain status GET
/api/v1/nodes/{dataserial}/drain Start or stop OSD drain POST

GET /api/v1/nodes

List nodes

Returns a list of nodes accessible to the authenticated user.

Authentication: required (PasswordLogin or BearerJWT).

Responses

Status Description Schema
200 Successful response containing the list of nodes NodeListResponse
401 Unauthorized. Authentication required. -
403 Forbidden. Insufficient permissions. -
500 Internal server error. -

Response Body (200, NodeListResponse)

Field Type Required Default Example Description
nodes array of Node object no n/a Array of node objects matching the query. Empty array if no nodes found
total integer yes n/a 0, 2, 150 Total count of nodes available (may exceed returned array size if paginated).

Example

{
   "nodes" : [
      {
         "capacity_bytes" : 55650025472,
         "dataserial" : "e9ff4075d18233",
         "flags" : [
            "repset",
            "activated"
         ],
         "hw_serial" : "3e7e0000310fff001",
         "ip_address" : "10.97.18.200",
         "name" : "ASD-1,1",
         "role" : "any_director",
         "shelf_id" : "3e7e0001402001001",
         "status" : "online",
         "storageset_id" : 1,
         "vhost_id" : "bf806fa0c17feb"
      }
   ],
   "total" : 1
}

GET /api/v1/nodes/{dataserial}

Get node info

Returns details for a specific node by its dataserial identifier.

Authentication: required (PasswordLogin or BearerJWT).

Parameters

Name In Type Required Description
dataserial path string yes dataserial to retrieve

Responses

Status Description Schema
200 Successfully retrieved detailed information about the node. NodeGetResponse
400 Bad request. Invalid dataserial parameter. -
401 Unauthorized. Authentication required. -
403 Forbidden. Insufficient permissions. -
404 Node not found. -
422 Validation Error HTTPValidationError
500 Internal server error. -

Response Body (200, NodeGetResponse)

Field Type Required Default Example Description
node Node object yes n/a Node entity with all available details.

Example

{
   "node" : {
      "capacity_bytes" : 55650025472,
      "dataserial" : "e9ff4075d18233",
      "flags" : [
         "repset",
         "activated"
      ],
      "hw_serial" : "3e7e0000310fff001",
      "ip_address" : "10.97.18.200",
      "name" : "ASD-1,1",
      "role" : "any_director",
      "shelf_id" : "3e7e0001402001001",
      "status" : "online",
      "storageset_id" : 1,
      "vhost_id" : "bf806fa0c17feb"
   }
}

POST /api/v1/nodes/{dataserial}/actions

Perform action on node

Performs a specified action on a node (see request body for supported actions).

Authentication: required (PasswordLogin or BearerJWT).

Parameters

Name In Type Required Description
dataserial path string yes Node dataserial to perform action on

Request Body (application/json, required)

One of the following, selected by action:

action: halt - NodeHaltActionRequest

Field Type Required Default Example Description
action literal halt yes n/a The action to perform on the node.
params null (not used) no n/a

action: reboot - NodeRebootActionRequest

Field Type Required Default Example Description
action literal reboot yes n/a The action to perform on the node.
params null (not used) no n/a

Responses

Status Description Schema
204 Action performed successfully on the node. No content is returned. -
400 Bad request. Invalid dataserial or invalid action parameters. -
401 Unauthorized. Authentication required. -
403 Forbidden. Insufficient permissions. -
404 Node not found. -
409 Conflict. Action conflicts with current system state. -
422 Validation Error HTTPValidationError
500 Internal server error. -

GET /api/v1/nodes/{dataserial}/drain

Get OSD drain status

Returns drain progress for a node: byte and object counts, rate, state, percent complete, and ETA.

Authentication: required (PasswordLogin or BearerJWT).

Parameters

Name In Type Required Description
dataserial path string yes Node dataserial to query drain status for

Responses

Status Description Schema
200 Successfully retrieved drain progress for the node. NodeDrainStatusResponse
400 Bad request. Invalid dataserial parameter. -
401 Unauthorized. Authentication required. -
403 Forbidden. Insufficient permissions. -
404 Node not found. -
409 Conflict. The node is not currently draining, so there is no drain progress to report. -
422 Validation Error HTTPValidationError
500 Internal server error. -

Response Body (200, NodeDrainStatusResponse)

Field Type Required Default Example Description
amount_error integer yes n/a Bytes that could not be migrated.
amount_moved integer yes n/a Bytes already migrated off the node.
amount_remaining integer yes n/a Bytes still to be migrated off the node.
eta_seconds integer, nullable yes n/a 51, 0, null Estimated seconds to completion at the current rate, or null when the rate is zero.
objects_error integer yes n/a Objects that could not be migrated.
objects_moved integer yes n/a Objects already migrated off the node.
objects_remaining integer yes n/a Objects still to be migrated off the node.
percent_complete number, nullable yes n/a 50, 100, null Percentage of bytes migrated, or null when there is nothing to drain.
pm_id integer yes n/a Identifier of the performance manager (PM) reporting this drain.
rate_bytes_per_sec integer yes n/a Current data-movement rate for the drain, in bytes per second.
state NodeDrainState (draining, not_draining, suspended, unknown) yes n/a High-level state of the drain operation.

Example

{
   "amount_error" : 0,
   "amount_moved" : 5368709120,
   "amount_remaining" : 5368709120,
   "eta_seconds" : 51,
   "objects_error" : 0,
   "objects_moved" : 1024,
   "objects_remaining" : 1024,
   "percent_complete" : 50,
   "pm_id" : 4,
   "rate_bytes_per_sec" : 104857600,
   "state" : "draining"
}

POST /api/v1/nodes/{dataserial}/drain

Start or stop OSD drain

Starts or stops draining data off a storage node (OSD). Draining migrates all data off the node onto other nodes in the same StorageSet.

Authentication: required (PasswordLogin or BearerJWT).

Parameters

Name In Type Required Description
dataserial path string yes Node dataserial to drain

Request Body (application/json, required)

One of the following, selected by action:

action: start_drain - NodeStartDrainRequest

Field Type Required Default Example Description
action literal start_drain yes n/a The drain action to perform.
params null (not used) no n/a

action: stop_drain - NodeStopDrainRequest

Field Type Required Default Example Description
action literal stop_drain yes n/a The drain action to perform.
params null (not used) no n/a

Responses

Status Description Schema
204 Drain action performed successfully on the node. No content is returned. -
400 Bad request. Invalid dataserial or invalid action parameters. -
401 Unauthorized. Authentication required. -
403 Forbidden. Insufficient permissions. -
404 Node not found. -
409 Conflict. Action conflicts with current system state. -
422 Validation Error HTTPValidationError
500 Internal server error. -

12.2 Hardware

Endpoint Summary

Path Summary Method
/api/v1/hardware List hardware models GET
/api/v1/hardware/{dataserial}/actions Perform an action on a hardware component POST
/api/v1/hardware/{model_id} Get hardware model info GET

GET /api/v1/hardware

List hardware models

Returns the hardware models present in the current realm.

Authentication: required (PasswordLogin or BearerJWT).

Parameters

Name In Type Required Description
refresh query boolean no Bypass the cache: re-read the catalog from disk and refresh the cached entries.

Responses

Status Description Schema
200 Successful response containing the list of hardware models HardwareListResponse
401 Unauthorized. Authentication required. -
403 Forbidden. Insufficient permissions. -
422 Validation Error HTTPValidationError
500 Internal server error. -

Response Body (200, HardwareListResponse)

Field Type Required Default Example Description
hardware array of Hardware object no n/a Array of hardware models present in the current realm. Empty array if none are found.
total integer yes n/a 0, 1, 3 Total count of hardware models present in the current realm.

Example

{
   "hardware" : [
      {
         "arch" : 64,
         "compatibility_type" : "bravo",
         "component_type" : "node",
         "cpu" : "Intel Xeon E5-1630 v4 3.7GHz",
         "generation" : "100",
         "hdinfo" : "(1) 512GB SSD",
         "id" : "301002001",
         "introduced" : "7.0.0",
         "memory" : "96GB",
         "name" : "ASD-1-100-96-80",
         "network" : "2x200GbE",
         "platform" : "freebsd_142_amd64",
         "powerdraw" : 400,
         "product_name" : "Bravo Director Node 100",
         "product_type" : "Bravo Director Node",
         "role" : "director"
      }
   ],
   "total" : 1
}

POST /api/v1/hardware/{dataserial}/actions

Perform an action on a hardware component

Performs a component-scoped action, selected by the request body. blink_node_led turns on a node’s identify (“locate”) LED so the component can be found physically; stop_node_led turns it off. blink_drive_led / stop_drive_led do the same for a single drive, identified by params.drive_number. dataserial is always the hosting node/blade data serial (for a drive, the node that hosts it). A drive_number past the node’s last drive answers 404. Platform Admin only.

Authentication: required (PasswordLogin or BearerJWT).

Parameters

Name In Type Required Description
dataserial path string yes Data serial of the hardware component to act on

Request Body (application/json, required)

One of the following, selected by action:

action: blink_drive_led - HardwareBlinkDriveLedActionRequest

Field Type Required Default Example Description
action literal blink_drive_led yes n/a The action to perform on the component.
params HardwareDriveLedActionParams object yes n/a Identifies the drive on the hosting node.

action: blink_node_led - HardwareBlinkNodeLedActionRequest

Field Type Required Default Example Description
action literal blink_node_led yes n/a The action to perform on the component.
params null (not used) no n/a

action: stop_drive_led - HardwareStopDriveLedActionRequest

Field Type Required Default Example Description
action literal stop_drive_led yes n/a The action to perform on the component.
params HardwareDriveLedActionParams object yes n/a Identifies the drive on the hosting node.

action: stop_node_led - HardwareStopNodeLedActionRequest

Field Type Required Default Example Description
action literal stop_node_led yes n/a The action to perform on the component.
params null (not used) no n/a

Responses

Status Description Schema
204 Action performed successfully on the hardware component. No content is returned. -
400 Bad request. Invalid component id or invalid action parameters. -
401 Unauthorized. Authentication required. -
403 Forbidden. Insufficient permissions. -
404 Not found. The requested resource does not exist. -
409 Conflict. Action conflicts with current system state. -
422 Validation Error HTTPValidationError
500 Internal server error. -

GET /api/v1/hardware/{model_id}

Get hardware model info

Returns details for a hardware model present in the current realm, by its catalog id.

Authentication: required (PasswordLogin or BearerJWT).

Parameters

Name In Type Required Description
model_id path string yes Catalog id of the hardware model to retrieve
refresh query boolean no Bypass the cache: re-read the catalog from disk and refresh the cached entry.

Responses

Status Description Schema
200 Successfully retrieved detailed information about the hardware model. HardwareGetResponse
401 Unauthorized. Authentication required. -
403 Forbidden. Insufficient permissions. -
404 Hardware model not found. -
422 Validation Error HTTPValidationError
500 Internal server error. -

Response Body (200, HardwareGetResponse)

Field Type Required Default Example Description
hardware Hardware object yes n/a Hardware model with all available details.

Example

{
   "hardware" : {
      "arch" : 64,
      "compatibility_type" : "bravo",
      "component_type" : "node",
      "cpu" : "Intel Xeon E5-1630 v4 3.7GHz",
      "generation" : "100",
      "hdinfo" : "(1) 512GB SSD",
      "id" : "301002001",
      "introduced" : "7.0.0",
      "memory" : "96GB",
      "name" : "ASD-1-100-96-80",
      "network" : "2x200GbE",
      "platform" : "freebsd_142_amd64",
      "powerdraw" : 400,
      "product_name" : "Bravo Director Node 100",
      "product_type" : "Bravo Director Node",
      "role" : "director"
   }
}