Velocity • Durability

10. StorageSets

The StorageSets that volumes are created within, their space usage, and StorageSet-level actions.

Endpoint Summary

Path Summary Method
/api/v1/storagesets List storagesets GET
/api/v1/storagesets Create StorageSet POST
/api/v1/storagesets/{storageset_id} Get StorageSet details GET
/api/v1/storagesets/{storageset_id} Update StorageSet PATCH
/api/v1/storagesets/{storageset_id} Delete StorageSet DELETE
/api/v1/storagesets/{storageset_id}/actions Perform StorageSet Action POST
/api/v1/storagesets/{storageset_id}/space Get StorageSet space GET

GET /api/v1/storagesets

List storagesets

Returns a list of storagesets accessible to the authenticated user.

Authentication: required (PasswordLogin or BearerJWT).

Responses

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

Response Body (200, StorageSetListResponse)

Field Type Required Default Example Description
storagesets array of StorageSet object no n/a Array of StorageSet objects
total integer yes n/a 1, 5, 10 Total count of StorageSets in this response.

Example

{
   "storagesets" : [
      {
         "capacity_balancing" : true,
         "encrypted" : false,
         "fips_mode" : false,
         "id" : 1,
         "mlec" : false,
         "name" : "Set 1",
         "nodes_not_responding" : 0,
         "nodes_offline" : 0,
         "nodes_online" : 6,
         "nodes_reconstructing" : 0,
         "nodes_total" : 6,
         "spares_available" : 2,
         "spares_requested" : 2,
         "state" : {
            "conditions" : [],
            "status" : "ok"
         },
         "topology_aware_placement" : false,
         "ure_default" : false,
         "vhosts_total" : 6
      }
   ],
   "total" : 1
}

POST /api/v1/storagesets

Create StorageSet

Creates a new StorageSet with the specified configuration.

Authentication: required (PasswordLogin or BearerJWT).

Request Body (application/json, required)

Schema: StorageSetCreateRequest

Request payload for creating a StorageSet.

Requires a unique StorageSet name. Optional parameters use system defaults when omitted.

Field Type Required Default Example Description
flags array of StorageSetFlag (ure_default, capacity_balancing_disabled, encrypted, fips_mode, topology_aware_placement, mlec) no n/a ["mlec"], [] Flags to set during StorageSet creation.
name string yes n/a Set 2, Production Set Unique display name of the StorageSet. Must be unique within the realm.
spares_requested integer no 2 2, 4, 6 Number of VPODs to be reserved for reconstruction within the new StorageSet. Default: 2.

Example

{
   "flags" : [
      "mlec"
   ],
   "name" : "Set 1",
   "spares_requested" : 4
}

Responses

Status Description Schema
201 StorageSet created successfully StorageSetCreateResponse
400 Bad request. Invalid parameters or validation error. -
401 Unauthorized. Authentication required. -
403 Forbidden. Insufficient permissions. -
409 Conflict. StorageSet name already exists. -
422 Validation error. Returned for invalid request body. -
500 Internal server error. -

Response Body (201, StorageSetCreateResponse)

Field Type Required Default Example Description
id integer yes n/a 1, 2, 3 Unique StorageSet identifier assigned by the system

Example

{
   "id" : 3
}

GET /api/v1/storagesets/{storageset_id}

Get StorageSet details

Returns details for a specific StorageSet by its ID.

Authentication: required (PasswordLogin or BearerJWT).

Parameters

Name In Type Required Description
storageset_id path integer yes StorageSet identifier

Responses

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

Response Body (200, StorageSetGetResponse)

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

Example

{
   "storageset" : {
      "capacity_balancing" : true,
      "encrypted" : false,
      "fips_mode" : false,
      "id" : 1,
      "mlec" : false,
      "name" : "Set 1",
      "nodes_not_responding" : 0,
      "nodes_offline" : 0,
      "nodes_online" : 6,
      "nodes_reconstructing" : 0,
      "nodes_total" : 6,
      "spares_available" : 2,
      "spares_requested" : 2,
      "state" : {
         "conditions" : [],
         "status" : "ok"
      },
      "topology_aware_placement" : false,
      "ure_default" : false,
      "vhosts_total" : 6
   }
}

PATCH /api/v1/storagesets/{storageset_id}

Update StorageSet

Updates an existing StorageSet using PATCH semantics. Only the fields provided in the request are modified.

Authentication: required (PasswordLogin or BearerJWT).

Parameters

Name In Type Required Description
storageset_id path integer yes StorageSet identifier

Request Body (application/json, required)

Schema: StorageSetPatchRequest

Request payload for updating an existing StorageSet via PATCH.

Field Type Required Default Example Description
capacity_balancing_disabled boolean, nullable no null true, false True to disable capacity balancing (set flag), False to enable it (clear flag).
name string, nullable no null Set 3, Production Set Updated StorageSet name. Must be unique within the realm.
spares_requested integer, nullable no null 1, 2, 4 Optional updated number of VPOD spares reserved for reconstruction. If provided, must be at least 1.

Example

{
   "capacity_balancing_disabled" : false,
   "name" : "Set 3",
   "spares_requested" : 3
}

Responses

Status Description Schema
204 StorageSet updated successfully. -
400 Bad request. Invalid storageset_id or custom validation error. -
401 Unauthorized. Authentication required. -
403 Forbidden. Insufficient permissions. -
404 StorageSet not found. -
409 Conflict. StorageSet update conflicts with system state. -
422 Validation error. Returned for invalid request body or Path parameter. -
500 Internal server error. -

DELETE /api/v1/storagesets/{storageset_id}

Delete StorageSet

Deletes a StorageSet by its ID.

Authentication: required (PasswordLogin or BearerJWT).

Parameters

Name In Type Required Description
storageset_id path integer yes StorageSet identifier

Responses

Status Description Schema
204 StorageSet successfully deleted. -
401 Unauthorized. Authentication required. -
403 Forbidden. Insufficient permissions. -
404 StorageSet not found. -
409 StorageSet cannot be deleted due to a conflict (e.g. it still contains volumes). -
422 Validation Error HTTPValidationError
500 Internal server error. -

POST /api/v1/storagesets/{storageset_id}/actions

Perform StorageSet Action

Performs an action on a StorageSet. Currently supports “add_storage” action to add unassigned storage nodes (dataserials). The add_storage action supports “add_spare” mode to expand capacity with optional spare adjustment, or “migration” mode to add storage for draining another enclosure. A vhost adds its capacity later, not at once. Each of its VPODs joins the StorageSet after it installs and boots, which takes tens of minutes. Until the first VPOD joins, the StorageSet reports the “activating” condition.

Authentication: required (PasswordLogin or BearerJWT).

Parameters

Name In Type Required Description
storageset_id path integer yes StorageSet identifier

Request Body (application/json, required)

Schema: StorageSetAddStorageActionRequest

Request to perform an add_storage action on a StorageSet.

Field Type Required Default Example Description
action literal add_storage yes n/a The action to perform on the storageset.
params StorageSetAddStorageParams object yes n/a Parameters required to perform the add_storage action.

Responses

Status Description Schema
204 Action completed successfully. -
400 Bad Request. Dataserials belong to non-storage nodes. -
401 Unauthorized. Authentication required. -
403 Forbidden. Insufficient permissions. -
404 StorageSet not found. -
409 Conflict. Operation conflicts with current system state. -
422 Validation error. Returned for invalid request body or Path parameter. -
500 Internal server error. -

GET /api/v1/storagesets/{storageset_id}/space

Get StorageSet space

Returns detailed space usage for a specific StorageSet: raw, usable, and reserved capacity buckets (each with total/free/used), plus volume/node counts, capacity-balancing state, and volume hard quota.

Authentication: required (PasswordLogin or BearerJWT).

Parameters

Name In Type Required Description
storageset_id path integer yes StorageSet identifier

Responses

Status Description Schema
200 Successful response containing space information for the StorageSet. StorageSetSpaceResponse
400 Bad request. Validation error (e.g., invalid StorageSet ID). -
401 Unauthorized. Authentication required. -
403 Forbidden. Insufficient permissions. -
404 StorageSet not found. -
422 Validation error. Returned for invalid path parameters. -
500 Internal server error. -

Response Body (200, StorageSetSpaceResponse)

Field Type Required Default Example Description
capacity_balancing_active boolean yes n/a true, false Whether automatic capacity balancing is currently active for this StorageSet.
node_count integer yes n/a 12, 6 Number of OSD nodes (storage blades) in this StorageSet.
raw StorageSetSpaceCapacity object yes n/a Overall physical capacity across all buckets in this StorageSet.
reserved StorageSetSpaceCapacity object yes n/a Reconstruction reserve capacity. Held for spare rebuilds; not available for regular data storage.
usable StorageSetSpaceCapacity object yes n/a Capacity available for data storage (usable bucket).
volume_hard_quota integer yes n/a 524288000, 0 Sum of hard quotas for all volumes in this StorageSet, in bytes. A create is reflected immediately; after a delete the RM releases the quota asynchronously, so this figure can briefly overstate the true sum.

Example

{
   "capacity_balancing_active" : true,
   "node_count" : 6,
   "raw" : {
      "free" : 333884440576,
      "total" : 333900152832,
      "used" : 15712256
   },
   "reserved" : {
      "free" : 55650041856,
      "total" : 55650041856,
      "used" : 0
   },
   "usable" : {
      "free" : 278234398720,
      "total" : 278250110976,
      "used" : 15712256
   },
   "volume_hard_quota" : 524288000
}