REST API
This reference document describes the StorPool API version 21.0 and the supported API calls.
- General
-
Volumes
- List all volumes
- Get volume and snapshot status and stored size
- Get volume and snapshot status
- List total used space by each volume
- List a single volume
- Describe a volume
- Get volume info
- List the parent snapshots of a volume
- Create a new volume
- Update a volume
- Freeze a volume
- Rebase a volume
- Abandon disk
- Delete a volume
- Backup a volume to a remote location
- Backup a group of volumes to a remote location
- Move a volume from the local cluster to a remote cluster
- Export a volume to another cluster, so it can be attached when allowRemoteExports is true
- Move the volume from its current remote cluster to the local one. Noop if already here. Multicluster only call
- Create a volume from a snapshot from a remote location
- Revert a volume to a snapshot discarding all its current data.
- Revert a group of volumes to snapshots discarding all of theirs current data.
- Templates
-
Snapshots
- List all snapshots
- List snapshots space estimations
- List a single snapshot
- Describe a snapshot
- Get snapshot info
- Snapshot a volume
- Update a snapshot
- Rebase a snapshot
- Abandon disk
- Delete a snapshot
- Delete multiple snapshot
- Delete a snapshot by global id
- Create consistent snapshots of a group of volumes
- Copy a snapshot from a remote location
- Move a snapshot from the local cluster to a remote cluster
- Allow a remote location to access a local snapshot
- Revoke a remote location's access to a local snapshot
- List exported snapshots
- List exported volumes
- List the available remote snapshots
- List the available remote volumes
- Instruct the remote location that we will no longer use those snapshots
- Attachments
-
Disks
- List all disks
- Describe a disk
- Eject a disk
- Forget a disk
- Ignore a disk
- Soft-eject a disk
- Pause a disk's soft-eject operation
- Cancel a disk's soft-eject operation
- Set a disk's description
- List all the active requests on a disk
- Start scrubbing process
- Pause scrubbing process
- Continue paused scrubbing process
- Retrim disk
-
Placement Groups
- List all placement groups
- Describe a single placement group
- Create and/or update a placement group
- Delete a placement group
- List all fault sets
- List the properties of a volume allocation group
- Update the allocation group of a volume
- Update the allocation group of a snapshot
- Update the targets of a volume allocation group
- Services
- Servers
- Clients
- Node maintenance
- Network
- iSCSI
- Volume Relocator
-
Balancer
- Get the balancer's status
- Set the balancer's status
- List balancer volume and snapshot status
- List total per disk rebalancing estimates
- List per disk rebalancing estimated for a given volume
- List per disk rebalancing estimates for a given snapshot
- Get the disk sets computed by the balancer for a given volume
- Get the disk sets computed by the balancer for a given snapshot
- Tasks
-
Remote locations, bridges, and clusters
- List the registered remote locations
- Register a new remote location
- Remove a remote location
- Update a remote location
- Rename a remote location
- List the registered remote clusters
- Register a new remote cluster
- Remove a remote cluster
- Rename a remote cluster
- List the registered remote bridges
- Register a new remote bridge
- Deregister a remote bridge
- Key Value Store
- Metadata volumes
- StorPool Features
- Data Types
General
The StorPool API can be used with any tool that can generate HTTP requests with the GET and POST methods. The only requirement is to supply the Authorization header and, if required by the request, valid JSON data.
For each call there is an explanation of the HTTP request and response and an example in raw format as it should be sent to the StorPool management service.
Here are two examples using curl using the GET and POST methods respectively and their counterparts as issued by the StorPool CLI:
curl -H "Authorization: Storpool v1:1556129910218014736" 192.168.42.208:81/ctrl/1.0/DisksList
storpool disk list
curl -d '{"addDisks":["1"]}' -H "Authorization: Storpool v1:1556129910218014736" 192.168.42.208:81/ctrl/1.0/PlacementGroupUpdate/hdd
storpool placementGroup hdd addDisk 1
Python programs may use the API by importing the Python StorPool bindings (use 'pip install storpool' to install them):
# Use the default StorPool configuration settings
>>> from storpool import spapi
>>> api=spapi.Api.fromConfig()
# Use the default StorPool configuration settings, but do NOT allow environment variables to
# override them
>>> from storpool import spapi
>>> api=spapi.Api.fromConfig(use_env=False)
# Use an already-created spconfig.SPConfig object
>>> api=spapi.Api.fromConfig(cfg=cfg)
# Explicitly specify the hostname, port, and authentication string
>>> api=spapi.Api(host='192.168.0.5', port=80, auth='1556560560218011653')
# Use the default StorPool configuration settings but explicitly specify the source address as
# a string
>>> from storpool import spapi
>>> api=spapi.Api.fromConfig(source='192.168.0.2')
# Use the created API access object
>>> api.peersList()
{
1: {
'networks': {
0: {
'mac': '00:4A:E6:5F:34:C3'
}
}
},
2: {
'networks': {
0: {
'mac': '52:54:E6:5F:34:DF'
}
}
},
3: {
'networks': {
0: {
'mac': '52:57:5F:54:E6:3A'
}
}
}
}
Any of the methods may be invoked with the additional boolean parameter "returnRawAPIData"; if it has a true value, the method call will not construct a Python object representing the return value, but will return a Python dictionary or list corresponding to the JSON response data instead.
The calls that may be used may be found in the file spapi.py. As a rule of thumb, the name of the call is the name of the HTTP query with the first letter in lowercase (as above: "peersList()" for the "PeersList" query). To view them all once the StorPool bindings are installed, run a Python interpreter and then:
>>> from storpool import spapi
>>> help(spapi)
Note: Requests will sometimes use GET instead of POST and consequently, will not require JSON. Responses on the other hand always produce JSON content.
Some of the API calls may be used in a StorPool multicluster environment to reference and modify volumes and snapshots in a different (but connected) StorPool cluster. These have a "MultiCluster/" component in their URL path. When using the Python StorPool bindings, multicluster feature is enabled by adding a "multiCluster=True" parameter to the Api constructor invocation.
In a StorPool multicluster environment an instance of the StorPool API may be used to forward a command to the API instance of another cluster by adding a "RemoteCommand/<cluster_name>/" path component immediately after the API version prefix:
curl -H "Authorization: Storpool v1:1556129910218014736" 192.168.42.208:81/ctrl/1.0/RemoteCommand/backup/DisksList
When using the Python StorPool bindings, this is done by adding a "clusterName=clusterName" parameter to the API method invocation:
api.disksList(clusterName="backup")
Peers
List the network peers (NetworkPeersList)
List the network nodes running the StorPool beacon including information such as the ID of the node, the networks it communicates through and the corresponding MAC addresses.
- Request:
- Example HTTP Request:
GET /ctrl/1.0/NetworkPeersList HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/NetworkPeersList
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "PeerID": { "beaconStatus": BeaconNodeStatus, "clusterStatus": BeaconClusterStatus, "joined": bool, "networks": { "NetID": { "mac": MAC Address }, ... } /* Optional */, "nonVoting": bool, "rdma": { "NetID": { "guid": GUID, "state": RdmaState }, ... } }, ... } } - Response Data:
A dict from PeerID to PeerDesc
- Key type: PeerID
- Value type: PeerDesc
- beaconStatus: (BeaconNodeStatus): Whether a beacon is running at all on this node.
- clusterStatus: (BeaconClusterStatus): Whether we consider this node a part of the cluster quorum.
- joined: (bool): Whether the node considers itself a part of the cluster quorum.
- networks: (Optional {NetID: NetDesc}): List of the Ethernet networks that StorPool communicates through on this node.
- nonVoting: (bool): Whether this is a non-voting StorPool node (e.g. client only).
- rdma: List of the RDMA networks that StorPool communicates through on this node.A dict from NetID to RdmaDesc
- Example HTTP Response:
Tasks
List tasks (TasksList)
List the currently active recovery tasks. This call will return JSON data only when there is a relocation in progress. Under normal operation of the cluster it will return no data.
- Request:
- Example HTTP Request:
GET /ctrl/1.0/TasksList HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/TasksList
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": [{ "allObjects": int, "completedObjects": int, "diskId": DiskID, "dispatchedObjects": int, "transactionId": int, "unresolvedObjects": int /* Internal */ }, ...] } - Response Data:
- Element type: Task
- allObjects: (int): The number of all the objects that the task is performing actions on.
- completedObjects: (int): The number of objects that the task has finished working on.
- diskId: (DiskID): The ID of the disk this task is on.
- dispatchedObjects: (int): Objects that the task has started working on.
- transactionId: (int): An ID associated with the currently running task. This ID is the same for all the
- unresolvedObjects: (Internal int)
- Example HTTP Response:
Services
List all StorPool services (ServicesList)
List all the services in the cluster (StorPool servers, clients, management, etc). If the whole cluster is not operational this call will return an error.
- Request:
- Example HTTP Request:
GET /ctrl/1.0/ServicesList HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/ServicesList
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "bridges": { "BridgeId": { "id": BridgeId, "nodeId": NodeID /* Optional */, "startTime": Either(null, int), "status": BridgeStatus, "version": string }, ... }, "clients": { "ClientID": { "id": ClientID, "nodeId": NodeID /* Optional */, "startTime": Either(null, int), "status": ClientStatus, "version": string }, ... }, "clusterStatus": ClusterStatus, "iscsiTargets": { "iscsiTargetId": { "id": iscsiTargetId, "nodeId": NodeID /* Optional */, "startTime": Either(null, int), "status": iscsiTargetStatus, "version": string }, ... }, "mgmt": { "MgmtID": { "active": bool, "id": MgmtID, "nodeId": NodeID /* Optional */, "prio": int /* Internal */, "startTime": Either(null, int), "status": ClientStatus, "version": string }, ... }, "servers": { "ServerID": { "id": ServerID, "missingDisks": [DiskID, ...], "nodeId": NodeID /* Optional */, "pendingDisks": [DiskID, ...], "startTime": Either(null, int), "status": ServerStatus, "version": string }, ... } } } - Response Data:
ClusterStatus
- bridges: A dict from BridgeId to Bridge
- Key type: BridgeId
- Value type: Bridge
- id: (BridgeId): The ID of the service.
- nodeId: (Optional NodeID): The ID of the node on which the service is running.
- startTime: The start time of this service (UNIX timestamp).The value must be of one of the following types: null, int.
- status: (BridgeStatus): The current status of the remote cluster bridge.
- version: (string): The version of the running StorPool service.
- clients: A dict from ClientID to Client
- Key type: ClientID
- Value type: Client
- id: (ClientID): The ID of the service. Currently this is the same as the ID of the node.
- nodeId: (Optional NodeID): The ID of the node on which the service is running.
- startTime: The start time of this service (UNIX timestamp).The value must be of one of the following types: null, int.
- status: (ClientStatus): The current status of the client.
- version: (string): The version of the running StorPool service.
- clusterStatus: (ClusterStatus)
- iscsiTargets: A dict from iscsiTargetId to IscsiTarget
- Key type: iscsiTargetId
- Value type: IscsiTarget
- id: (iscsiTargetId): The ID of the service.
- nodeId: (Optional NodeID): The ID of the node on which the service is running.
- startTime: The start time of this service (UNIX timestamp).The value must be of one of the following types: null, int.
- status: (iscsiTargetStatus): The current status of the iSCSI target service.
- version: (string): The version of the running StorPool service.
- mgmt: A dict from MgmtID to Mgmt
- Key type: MgmtID
- Value type: Mgmt
- active: (bool): If the instance is currently active. For a given cluster one mgmt instance will be
- id: (MgmtID): The ID of the service.
- nodeId: (Optional NodeID): The ID of the node on which the service is running.
- prio: (Internal int)
- startTime: The start time of this service (UNIX timestamp).The value must be of one of the following types: null, int.
- status: (ClientStatus): The current status of the mgmt instance.
- version: (string): The version of the running StorPool service.
- servers: A dict from ServerID to Server
- startTime: The start time of this service (UNIX timestamp).The value must be of one of the following types: null, int.
- status: (ServerStatus)
- version: (string): The version of the running StorPool service.
- bridges: A dict from BridgeId to Bridge
- Example HTTP Response:
List all blocked StorPool servers (ServersListBlocked)
List the currently active StorPool servers even before the cluster has become operational, along with information about any missing disks that the cluster is waiting for.
- Request:
- Example HTTP Request:
GET /ctrl/1.0/ServersListBlocked HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/ServersListBlocked
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "bridges": { "BridgeId": { "id": BridgeId, "nodeId": NodeID /* Optional */, "startTime": Either(null, int), "status": BridgeStatus, "version": string }, ... }, "clients": { "ClientID": { "id": ClientID, "nodeId": NodeID /* Optional */, "startTime": Either(null, int), "status": ClientStatus, "version": string }, ... }, "clusterStatus": ClusterStatus, "iscsiTargets": { "iscsiTargetId": { "id": iscsiTargetId, "nodeId": NodeID /* Optional */, "startTime": Either(null, int), "status": iscsiTargetStatus, "version": string }, ... }, "mgmt": { "MgmtID": { "active": bool, "id": MgmtID, "nodeId": NodeID /* Optional */, "prio": int /* Internal */, "startTime": Either(null, int), "status": ClientStatus, "version": string }, ... }, "servers": { "ServerID": { "id": ServerID, "missingDisks": [DiskID, ...], "nodeId": NodeID /* Optional */, "pendingDisks": [DiskID, ...], "startTime": Either(null, int), "status": ServerStatus, "version": string }, ... } } } - Response Data:
ClusterStatus
- bridges: A dict from BridgeId to Bridge
- Key type: BridgeId
- Value type: Bridge
- id: (BridgeId): The ID of the service.
- nodeId: (Optional NodeID): The ID of the node on which the service is running.
- startTime: The start time of this service (UNIX timestamp).The value must be of one of the following types: null, int.
- status: (BridgeStatus): The current status of the remote cluster bridge.
- version: (string): The version of the running StorPool service.
- clients: A dict from ClientID to Client
- Key type: ClientID
- Value type: Client
- id: (ClientID): The ID of the service. Currently this is the same as the ID of the node.
- nodeId: (Optional NodeID): The ID of the node on which the service is running.
- startTime: The start time of this service (UNIX timestamp).The value must be of one of the following types: null, int.
- status: (ClientStatus): The current status of the client.
- version: (string): The version of the running StorPool service.
- clusterStatus: (ClusterStatus)
- iscsiTargets: A dict from iscsiTargetId to IscsiTarget
- Key type: iscsiTargetId
- Value type: IscsiTarget
- id: (iscsiTargetId): The ID of the service.
- nodeId: (Optional NodeID): The ID of the node on which the service is running.
- startTime: The start time of this service (UNIX timestamp).The value must be of one of the following types: null, int.
- status: (iscsiTargetStatus): The current status of the iSCSI target service.
- version: (string): The version of the running StorPool service.
- mgmt: A dict from MgmtID to Mgmt
- Key type: MgmtID
- Value type: Mgmt
- active: (bool): If the instance is currently active. For a given cluster one mgmt instance will be
- id: (MgmtID): The ID of the service.
- nodeId: (Optional NodeID): The ID of the node on which the service is running.
- prio: (Internal int)
- startTime: The start time of this service (UNIX timestamp).The value must be of one of the following types: null, int.
- status: (ClientStatus): The current status of the mgmt instance.
- version: (string): The version of the running StorPool service.
- servers: A dict from ServerID to Server
- startTime: The start time of this service (UNIX timestamp).The value must be of one of the following types: null, int.
- status: (ServerStatus)
- version: (string): The version of the running StorPool service.
- bridges: A dict from BridgeId to Bridge
- Example HTTP Response:
Active requests
Query all peers for their status and active requests (AllPeersActiveRequests)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/AllPeersActiveRequests HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "msecsTimeout": int /* Optional */ } /* Optional */ - Method: GET
- Path: /ctrl/1.0/AllPeersActiveRequests
- Arguments: No arguments
- JSON: Optional AllPeersActiveRequestsQuery
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "requests": [Either({ "diskId": DiskID, "lastState": LastState, "peerId": PeerID, "service": { "id": string, "type": Id }, "status": "diskExpected" }, { "allObjectsFlushed": bool /* Internal */, "diskId": DiskID, "diskState": DiskState, "objectsOutdated": int /* Internal */, "objectsOutdatedRemote": int /* Internal */, "objectsWaitingForVersion": int /* Internal */, "peerId": PeerID, "service": { "id": string, "type": Id }, "status": "diskState" }, { "address": int, "diskId": Either(4294967294, DiskID), "drOp": string /* Optional */ /* Internal */, "op": RequestOp, "peerId": PeerID, "peers": [{ "diskId": Either(4294967294, DiskID), "peerId": PeerID, "service": { "id": string, "type": Id } /* Optional */ }, ...], "prevState": string /* Internal */, "requestId": string, "requestIdx": int, "service": { "id": string, "type": Id }, "size": int, "state": string /* Internal */, "status": "request", "usecActive": int, "volume": Either(VolumeNameOrGlobalId, SnapshotNameOrGlobalId) /* Optional */, "volumeId": int }, { "peerId": PeerID, "service": { "id": string, "type": Id }, "status": Status }), ...] } } - Response Data:
AllPeersActiveRequests
- requests: list containing service status messages and active requests descriptions
- Element type: The value must be of one of the following types: AllPeersActiveRequestsDiskExpected, AllPeersActiveRequestsDiskStatus, AllPeersActiveRequestsRequest, AllPeersActiveRequestsSimpleStats.
- AllPeersActiveRequestsDiskExpected
- AllPeersActiveRequestsDiskStatus
- allObjectsFlushed: (Internal bool): An internal boolean attribute to indicate if all objects have been flushed
- diskId: (DiskID): disk id
- diskState: (DiskState)
- objectsOutdated: (Internal int): An internal attribute used only for debugging.
- objectsOutdatedRemote: (Internal int): An internal attribute used only for debugging.
- objectsWaitingForVersion: (Internal int): An internal attribute used only for debugging.
- peerId: (PeerID): peer id
- service: identification json for the service
- status: ("diskState"): "diskState"
- AllPeersActiveRequestsRequest
- address: (int): The offset in bytes within the logical volume.
- diskId: The value must be of one of the following types: 4294967294, DiskID.
- Subtypes:
- 4294967294
- DiskID
- drOp: (Internal Optional): An internal attribute used only for debugging.
- op: (RequestOp): The type of the requested operation; one of
- peerId: (PeerID): peer id
- peers: list of peers associated with the request
- Element type: AllPeersActiveRequestsRequestPeer
- diskId: disk idThe value must be of one of the following types: 4294967294, DiskID.
- Subtypes:
- 4294967294
- DiskID
- peerId: (PeerID): peer id
- service: (Optional AllPeersActiveRequestsServiceDesc): identification json for the service
- diskId: disk idThe value must be of one of the following types: 4294967294, DiskID.
- prevState: (Internal string): An internal attribute used only for debugging.
- requestId: (string): A unique request ID that may be matched between clients and disks.
- requestIdx: (int): A temporary local request identifier for this request on this client or disk.
- service: identification json for the service
- size: (int): The size of the request in bytes.
- state: (Internal string): An internal attribute used only for debugging.
- status: ("request"): "request"
- usecActive: (int): Time in microseconds since the request was submitted.
- volume: (Optional Either(VolumeNameOrGlobalId, SnapshotNameOrGlobalId)): global id or name of the volume associated with the request
- volumeId: (int): id of the volume associated with the request
- Subtypes:
- AllPeersActiveRequestsSimpleStats
- requests: list containing service status messages and active requests descriptions
- Example HTTP Response:
Servers
List all Storpool servers (ServersList)
Returns the the same output as ServicesList but omits clients. Returns an error if the whole cluster is not operational.
- Request:
- Example HTTP Request:
GET /ctrl/1.0/ServersList HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/ServersList
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "bridges": { "BridgeId": { "id": BridgeId, "nodeId": NodeID /* Optional */, "startTime": Either(null, int), "status": BridgeStatus, "version": string }, ... }, "clients": { "ClientID": { "id": ClientID, "nodeId": NodeID /* Optional */, "startTime": Either(null, int), "status": ClientStatus, "version": string }, ... }, "clusterStatus": ClusterStatus, "iscsiTargets": { "iscsiTargetId": { "id": iscsiTargetId, "nodeId": NodeID /* Optional */, "startTime": Either(null, int), "status": iscsiTargetStatus, "version": string }, ... }, "mgmt": { "MgmtID": { "active": bool, "id": MgmtID, "nodeId": NodeID /* Optional */, "prio": int /* Internal */, "startTime": Either(null, int), "status": ClientStatus, "version": string }, ... }, "servers": { "ServerID": { "id": ServerID, "missingDisks": [DiskID, ...], "nodeId": NodeID /* Optional */, "pendingDisks": [DiskID, ...], "startTime": Either(null, int), "status": ServerStatus, "version": string }, ... } } } - Response Data:
ClusterStatus
- bridges: A dict from BridgeId to Bridge
- Key type: BridgeId
- Value type: Bridge
- id: (BridgeId): The ID of the service.
- nodeId: (Optional NodeID): The ID of the node on which the service is running.
- startTime: The start time of this service (UNIX timestamp).The value must be of one of the following types: null, int.
- status: (BridgeStatus): The current status of the remote cluster bridge.
- version: (string): The version of the running StorPool service.
- clients: A dict from ClientID to Client
- Key type: ClientID
- Value type: Client
- id: (ClientID): The ID of the service. Currently this is the same as the ID of the node.
- nodeId: (Optional NodeID): The ID of the node on which the service is running.
- startTime: The start time of this service (UNIX timestamp).The value must be of one of the following types: null, int.
- status: (ClientStatus): The current status of the client.
- version: (string): The version of the running StorPool service.
- clusterStatus: (ClusterStatus)
- iscsiTargets: A dict from iscsiTargetId to IscsiTarget
- Key type: iscsiTargetId
- Value type: IscsiTarget
- id: (iscsiTargetId): The ID of the service.
- nodeId: (Optional NodeID): The ID of the node on which the service is running.
- startTime: The start time of this service (UNIX timestamp).The value must be of one of the following types: null, int.
- status: (iscsiTargetStatus): The current status of the iSCSI target service.
- version: (string): The version of the running StorPool service.
- mgmt: A dict from MgmtID to Mgmt
- Key type: MgmtID
- Value type: Mgmt
- active: (bool): If the instance is currently active. For a given cluster one mgmt instance will be
- id: (MgmtID): The ID of the service.
- nodeId: (Optional NodeID): The ID of the node on which the service is running.
- prio: (Internal int)
- startTime: The start time of this service (UNIX timestamp).The value must be of one of the following types: null, int.
- status: (ClientStatus): The current status of the mgmt instance.
- version: (string): The version of the running StorPool service.
- servers: A dict from ServerID to Server
- startTime: The start time of this service (UNIX timestamp).The value must be of one of the following types: null, int.
- status: (ServerStatus)
- version: (string): The version of the running StorPool service.
- bridges: A dict from BridgeId to Bridge
- Example HTTP Response:
List all disks on a server (ServerDisksList)
Return detailed information about each disk on the given server.
- Request:
- Example HTTP Request:
GET /ctrl/1.0/ServerDisksList/{serverId} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/ServerDisksList/{serverId}
- Arguments:
- serverId - ServerID: integer, 1 <= value <= 32767
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "DiskID": Either({ "agAllocated": int /* Internal */, "agCount": int /* Internal */, "agFree": int /* Internal */, "agFreeing": int /* Internal */, "agFull": int /* Internal */, "agMaxSizeFull": int /* Internal */, "agMaxSizePartial": int /* Internal */, "agPartial": int /* Internal */, "aggregateScore": { "entries": int, "space": int, "total": int } /* Internal */, "description": DiskDescritpion, "device": string, "empty": bool, "entriesAllocated": int, "entriesCount": int, "entriesFree": int, "generationLeft": -1, "id": DiskID, "isWbc": bool, "journaled": bool, "lastScrubCompleted": int, "model": string, "noFlush": bool, "noFua": bool, "noTrim": bool, "objectsAllocated": int, "objectsCount": int, "objectsFree": int, "objectsOnDiskSize": int, "scrubbedBytes": int, "scrubbingBW": int, "scrubbingFinishAfter": int, "scrubbingPaused": bool, "scrubbingPausedFor": int, "scrubbingStartedBefore": int, "sectorsCount": int, "serial": string, "serverId": ServerID, "softEject": DiskSoftEjectStatus, "ssd": bool, "wbc": Either(null, { "maxPages": int, "pages": int, "pagesPending": int }) /* Internal */ }, { "description": DiskDescritpion, "generationLeft": int, "id": DiskID, "model": string, "serial": string, "serverId": ServerID, "softEject": DiskSoftEjectStatus, "ssd": bool }), ... } } - Response Data:
A dict from DiskID to Either(UpDiskSummary, DownDiskSummary)
- Key type: DiskID
- Value type: The value must be of one of the following types: UpDiskSummary, DownDiskSummary.
- Subtypes:
- UpDiskSummary
- agAllocated: (Internal int)
- agCount: (Internal int)
- agFree: (Internal int)
- agFreeing: (Internal int)
- agFull: (Internal int)
- agMaxSizeFull: (Internal int)
- agMaxSizePartial: (Internal int)
- agPartial: (Internal int)
- aggregateScore: (Internal DiskAggregateScores)
- description: (DiskDescritpion): A user-defined description of the disk for easier identification of the device.
- device: (string): The name of the physical disk device on the server.
- empty: (bool): True if no volumes or snapshots are on this disk.
- entriesAllocated: (int): Used entries of the disk.
- entriesCount: (int): The maximum amount of entries that can exists on the disk.
- entriesFree: (int): The remaining number of entries that can be stored on the disk.
- generationLeft: (-1): The last cluster generation when the disk was active on a running server, or -1
- id: (DiskID): The ID of this disk. It is set when the disk is formatted to work with StorPool.
- isWbc: (bool): Whether write-back cache is enabled for this device.
- journaled: (bool): Whether StorPool journaling is enabled for this device.
- lastScrubCompleted: (int): Unix time in seconds when last scrubbing job was completed.
- model: (string): The drive's model name.
- noFlush: (bool): Whether write-back cache flushing is disabled for this device.
- noFua: (bool): Whether to issue FUA writes to this device.
- noTrim: (bool): Whether trim-below is disabled for this device.
- objectsAllocated: (int): Used objects of the disk.
- objectsCount: (int): The maximum amount of object that can exists on the disk.
- objectsFree: (int): The remaining number of objects that can be stored on the disk.
- objectsOnDiskSize: (int): Total size occupied by objects.
- scrubbedBytes: (int): For current scrubbing job run.
- scrubbingBW: (int): Estimate of the disk bandwidth used for scrubbing B/s.
- scrubbingFinishAfter: (int): Estimate of when the scrubbing job is expected to finish based on
- scrubbingPaused: (bool): Is scrubbing currently paused
- scrubbingPausedFor: (int): How many seconds has the current scrubbing job been paused.
- scrubbingStartedBefore: (int): In seconds.
- sectorsCount: (int): The number of 512-byte sectors on the disk.
- serial: (string): The drive's serial number.
- serverId: (ServerID): The ID of the server this disk is currently on. In case the disk is currently down,
- softEject: (DiskSoftEjectStatus): The status of the soft-eject process.
- ssd: (bool): Whether the device is an SSD.
- wbc: (Internal Either(null, DiskWbcStats))
- DownDiskSummary
- description: (DiskDescritpion): A user-defined description of the disk for easier identification of the device.
- generationLeft: (int): The last cluster generation when the disk was active on a running server, or -1
- id: (DiskID): The ID of this disk. It is set when the disk is formatted to work with StorPool.
- model: (string): The drive's model name.
- serial: (string): The drive's serial number.
- serverId: (ServerID): The ID of the server this disk is currently on. In case the disk is currently down,
- softEject: (DiskSoftEjectStatus): The status of the soft-eject process.
- ssd: (bool): Whether the device is an SSD.
- UpDiskSummary
- Example HTTP Response:
Describe a disk on a server (ServerDiskDescribe)
Return detailed information about a disk on the given server and the objects on it.
- Request:
- Example HTTP Request:
GET /ctrl/1.0/ServerDiskDescribe/{serverId}/{diskId} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/ServerDiskDescribe/{serverId}/{diskId}
- Arguments:
- diskId - DiskID: integer, 0 <= value <= 4095
- serverId - ServerID: integer, 1 <= value <= 32767
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "agAllocated": int /* Internal */, "agCount": int /* Internal */, "agFree": int /* Internal */, "agFreeing": int /* Internal */, "agFull": int /* Internal */, "agMaxSizeFull": int /* Internal */, "agMaxSizePartial": int /* Internal */, "agPartial": int /* Internal */, "aggregateScore": { "entries": int, "space": int, "total": int } /* Internal */, "description": DiskDescritpion, "device": string, "empty": bool, "entriesAllocated": int, "entriesCount": int, "entriesFree": int, "generationLeft": -1, "id": DiskID, "isWbc": bool, "journaled": bool, "lastScrubCompleted": int, "model": string, "noFlush": bool, "noFua": bool, "noTrim": bool, "objects": { "int": { "generation": int, "objectId": int /* Internal */, "onDiskSize": int, "parentVolume": string, "state": ObjectState, "storedSize": int, "version": int, "volume": string, "volumeId": int /* Internal */ }, ... }, "objectsAllocated": int, "objectsCount": int, "objectsFree": int, "objectsOnDiskSize": int, "scrubbedBytes": int, "scrubbingBW": int, "scrubbingFinishAfter": int, "scrubbingPaused": bool, "scrubbingPausedFor": int, "scrubbingStartedBefore": int, "sectorsCount": int, "serial": string, "serverId": ServerID, "softEject": DiskSoftEjectStatus, "ssd": bool, "wbc": Either(null, { "maxPages": int, "pages": int, "pagesPending": int }) /* Internal */ } } - Response Data:
Disk
- agAllocated: (Internal int)
- agCount: (Internal int)
- agFree: (Internal int)
- agFreeing: (Internal int)
- agFull: (Internal int)
- agMaxSizeFull: (Internal int)
- agMaxSizePartial: (Internal int)
- agPartial: (Internal int)
- aggregateScore: (Internal DiskAggregateScores)
- description: (DiskDescritpion): A user-defined description of the disk for easier identification of the device.
- device: (string): The name of the physical disk device on the server.
- empty: (bool): True if no volumes or snapshots are on this disk.
- entriesAllocated: (int): Used entries of the disk.
- entriesCount: (int): The maximum amount of entries that can exists on the disk.
- entriesFree: (int): The remaining number of entries that can be stored on the disk.
- generationLeft: (-1): The last cluster generation when the disk was active on a running server, or -1
- id: (DiskID): The ID of this disk. It is set when the disk is formatted to work with StorPool.
- isWbc: (bool): Whether write-back cache is enabled for this device.
- journaled: (bool): Whether StorPool journaling is enabled for this device.
- lastScrubCompleted: (int): Unix time in seconds when last scrubbing job was completed.
- model: (string): The drive's model name.
- noFlush: (bool): Whether write-back cache flushing is disabled for this device.
- noFua: (bool): Whether to issue FUA writes to this device.
- noTrim: (bool): Whether trim-below is disabled for this device.
- objects: Detailed information about each object on the disk.A dict from int to DiskObject
- Key type: int
- Value type: DiskObject
- generation: (int): The generation when the last write to this object occurred.
- objectId: (Internal int)
- onDiskSize: (int): The space allocated on the disk for the object. This can go up to 32MB.
- parentVolume: (string): The name of the parent snapshot.
- state: (ObjectState)
- storedSize: (int): The size of the actual data in that object (<= onDiskSize).
- version: (int): With each write the version is increased.
- volume: (string): The name of the volume for which the object contains data.
- volumeId: (Internal int)
- objectsAllocated: (int): Used objects of the disk.
- objectsCount: (int): The maximum amount of object that can exists on the disk.
- objectsFree: (int): The remaining number of objects that can be stored on the disk.
- objectsOnDiskSize: (int): Total size occupied by objects.
- scrubbedBytes: (int): For current scrubbing job run.
- scrubbingBW: (int): Estimate of the disk bandwidth used for scrubbing B/s.
- scrubbingFinishAfter: (int): Estimate of when the scrubbing job is expected to finish based on
- scrubbingPaused: (bool): Is scrubbing currently paused
- scrubbingPausedFor: (int): How many seconds has the current scrubbing job been paused.
- scrubbingStartedBefore: (int): In seconds.
- sectorsCount: (int): The number of 512-byte sectors on the disk.
- serial: (string): The drive's serial number.
- serverId: (ServerID): The ID of the server this disk is currently on. In case the disk is currently down,
- softEject: (DiskSoftEjectStatus): The status of the soft-eject process.
- ssd: (bool): Whether the device is an SSD.
- wbc: (Internal Either(null, DiskWbcStats))
- Example HTTP Response:
Clients
Get the current status of all the clients (ClientsConfigDump)
Return the status of each client including its current generation and generation update status.
- Request:
- Example HTTP Request:
GET /ctrl/1.0/ClientsConfigDump HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/ClientsConfigDump
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": [{ "clientGeneration": int, "configStatus": client status, "delay": int, "generation": int, "id": ClientID }, ...] } - Response Data:
- Element type: ClientConfigStatus
- clientGeneration: (int): The generation of the specific client.
- configStatus: (client status): Whether there is an update of the configuration in progress.
- delay: (int): The time it took for the client generation to reach the cluster generation.
- generation: (int): The cluster generation based on the number of configuration changes since the
- id: (ClientID)
- Example HTTP Response:
Wait until a client updates to the current configuration (ClientConfigWait)
Return the same JSON as ClientsConfigDump but block until the client has updated its configuration information to the current generation at the time of the request.
- Request:
- Example HTTP Request:
GET /ctrl/1.0/ClientConfigWait/{clientId} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/ClientConfigWait/{clientId}
- Arguments:
- clientId - ClientID: integer, 1 <= value <= 4095
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": [{ "clientGeneration": int, "configStatus": client status, "delay": int, "generation": int, "id": ClientID }, ...] } - Response Data:
- Element type: ClientConfigStatus
- clientGeneration: (int): The generation of the specific client.
- configStatus: (client status): Whether there is an update of the configuration in progress.
- delay: (int): The time it took for the client generation to reach the cluster generation.
- generation: (int): The cluster generation based on the number of configuration changes since the
- id: (ClientID)
- Example HTTP Response:
List all the active requests on a client (ClientActiveRequests)
List detailed information about the requests being currently processed on the given client.
- Request:
- Example HTTP Request:
GET /ctrl/1.0/ClientActiveRequests/{clientId} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/ClientActiveRequests/{clientId}
- Arguments:
- clientId - ClientID: integer, 1 <= value <= 4095
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "clientId": ClientID, "requests": [{ "address": int, "drOp": string /* Internal */, "msecActive": int, "op": RequestOp, "prevState": string /* Internal */, "requestId": string, "requestIdx": int, "size": int, "state": string /* Internal */, "volume": Either(VolumeNameOrGlobalId, SnapshotNameOrGlobalId) }, ...] } } - Response Data:
ClientActiveRequests
- clientId: (ClientID)
- requests: A detailed listing of all the requests associated with the given client.
- Element type: ActiveRequestDesc
- address: (int): The offset in bytes within the logical volume.
- drOp: (Internal string): An internal attribute used only for debugging.
- msecActive: (int): Time in microseconds since the request was submitted.
- op: (RequestOp)
- prevState: (Internal string): An internal attribute used only for debugging.
- requestId: (string): A unique request ID that may be matched between clients and disks.
- requestIdx: (int): A temporary local request identifier for this request on this client or disk.
- size: (int): The size of the request in bytes.
- state: (Internal string): An internal attribute used only for debugging.
- volume: The value must be of one of the following types: VolumeNameOrGlobalId, SnapshotNameOrGlobalId.
- Subtypes:
- VolumeNameOrGlobalId
- SnapshotNameOrGlobalId
- Example HTTP Response:
Disks
List all disks (DisksList)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/DisksList HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/DisksList
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "DiskID": Either({ "agAllocated": int /* Internal */, "agCount": int /* Internal */, "agFree": int /* Internal */, "agFreeing": int /* Internal */, "agFull": int /* Internal */, "agMaxSizeFull": int /* Internal */, "agMaxSizePartial": int /* Internal */, "agPartial": int /* Internal */, "aggregateScore": { "entries": int, "space": int, "total": int } /* Internal */, "description": DiskDescritpion, "device": string, "empty": bool, "entriesAllocated": int, "entriesCount": int, "entriesFree": int, "generationLeft": -1, "id": DiskID, "isWbc": bool, "journaled": bool, "lastScrubCompleted": int, "model": string, "noFlush": bool, "noFua": bool, "noTrim": bool, "objectsAllocated": int, "objectsCount": int, "objectsFree": int, "objectsOnDiskSize": int, "scrubbedBytes": int, "scrubbingBW": int, "scrubbingFinishAfter": int, "scrubbingPaused": bool, "scrubbingPausedFor": int, "scrubbingStartedBefore": int, "sectorsCount": int, "serial": string, "serverId": ServerID, "softEject": DiskSoftEjectStatus, "ssd": bool, "wbc": Either(null, { "maxPages": int, "pages": int, "pagesPending": int }) /* Internal */ }, { "description": DiskDescritpion, "generationLeft": int, "id": DiskID, "model": string, "serial": string, "serverId": ServerID, "softEject": DiskSoftEjectStatus, "ssd": bool }), ... } } - Response Data:
A dict from DiskID to Either(UpDiskSummary, DownDiskSummary)
- Key type: DiskID
- Value type: The value must be of one of the following types: UpDiskSummary, DownDiskSummary.
- Subtypes:
- UpDiskSummary
- agAllocated: (Internal int)
- agCount: (Internal int)
- agFree: (Internal int)
- agFreeing: (Internal int)
- agFull: (Internal int)
- agMaxSizeFull: (Internal int)
- agMaxSizePartial: (Internal int)
- agPartial: (Internal int)
- aggregateScore: (Internal DiskAggregateScores)
- description: (DiskDescritpion): A user-defined description of the disk for easier identification of the device.
- device: (string): The name of the physical disk device on the server.
- empty: (bool): True if no volumes or snapshots are on this disk.
- entriesAllocated: (int): Used entries of the disk.
- entriesCount: (int): The maximum amount of entries that can exists on the disk.
- entriesFree: (int): The remaining number of entries that can be stored on the disk.
- generationLeft: (-1): The last cluster generation when the disk was active on a running server, or -1
- id: (DiskID): The ID of this disk. It is set when the disk is formatted to work with StorPool.
- isWbc: (bool): Whether write-back cache is enabled for this device.
- journaled: (bool): Whether StorPool journaling is enabled for this device.
- lastScrubCompleted: (int): Unix time in seconds when last scrubbing job was completed.
- model: (string): The drive's model name.
- noFlush: (bool): Whether write-back cache flushing is disabled for this device.
- noFua: (bool): Whether to issue FUA writes to this device.
- noTrim: (bool): Whether trim-below is disabled for this device.
- objectsAllocated: (int): Used objects of the disk.
- objectsCount: (int): The maximum amount of object that can exists on the disk.
- objectsFree: (int): The remaining number of objects that can be stored on the disk.
- objectsOnDiskSize: (int): Total size occupied by objects.
- scrubbedBytes: (int): For current scrubbing job run.
- scrubbingBW: (int): Estimate of the disk bandwidth used for scrubbing B/s.
- scrubbingFinishAfter: (int): Estimate of when the scrubbing job is expected to finish based on
- scrubbingPaused: (bool): Is scrubbing currently paused
- scrubbingPausedFor: (int): How many seconds has the current scrubbing job been paused.
- scrubbingStartedBefore: (int): In seconds.
- sectorsCount: (int): The number of 512-byte sectors on the disk.
- serial: (string): The drive's serial number.
- serverId: (ServerID): The ID of the server this disk is currently on. In case the disk is currently down,
- softEject: (DiskSoftEjectStatus): The status of the soft-eject process.
- ssd: (bool): Whether the device is an SSD.
- wbc: (Internal Either(null, DiskWbcStats))
- DownDiskSummary
- description: (DiskDescritpion): A user-defined description of the disk for easier identification of the device.
- generationLeft: (int): The last cluster generation when the disk was active on a running server, or -1
- id: (DiskID): The ID of this disk. It is set when the disk is formatted to work with StorPool.
- model: (string): The drive's model name.
- serial: (string): The drive's serial number.
- serverId: (ServerID): The ID of the server this disk is currently on. In case the disk is currently down,
- softEject: (DiskSoftEjectStatus): The status of the soft-eject process.
- ssd: (bool): Whether the device is an SSD.
- UpDiskSummary
- Example HTTP Response:
Describe a disk (DiskDescribe)
List all disks including detailed information about the objects on each disk.
- Request:
- Example HTTP Request:
GET /ctrl/1.0/DiskDescribe/{diskId} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/DiskDescribe/{diskId}
- Arguments:
- diskId - DiskID: integer, 0 <= value <= 4095
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "agAllocated": int /* Internal */, "agCount": int /* Internal */, "agFree": int /* Internal */, "agFreeing": int /* Internal */, "agFull": int /* Internal */, "agMaxSizeFull": int /* Internal */, "agMaxSizePartial": int /* Internal */, "agPartial": int /* Internal */, "aggregateScore": { "entries": int, "space": int, "total": int } /* Internal */, "description": DiskDescritpion, "device": string, "empty": bool, "entriesAllocated": int, "entriesCount": int, "entriesFree": int, "generationLeft": -1, "id": DiskID, "isWbc": bool, "journaled": bool, "lastScrubCompleted": int, "model": string, "noFlush": bool, "noFua": bool, "noTrim": bool, "objects": { "int": { "generation": int, "objectId": int /* Internal */, "onDiskSize": int, "parentVolume": string, "state": ObjectState, "storedSize": int, "version": int, "volume": string, "volumeId": int /* Internal */ }, ... }, "objectsAllocated": int, "objectsCount": int, "objectsFree": int, "objectsOnDiskSize": int, "scrubbedBytes": int, "scrubbingBW": int, "scrubbingFinishAfter": int, "scrubbingPaused": bool, "scrubbingPausedFor": int, "scrubbingStartedBefore": int, "sectorsCount": int, "serial": string, "serverId": ServerID, "softEject": DiskSoftEjectStatus, "ssd": bool, "wbc": Either(null, { "maxPages": int, "pages": int, "pagesPending": int }) /* Internal */ } } - Response Data:
Disk
- agAllocated: (Internal int)
- agCount: (Internal int)
- agFree: (Internal int)
- agFreeing: (Internal int)
- agFull: (Internal int)
- agMaxSizeFull: (Internal int)
- agMaxSizePartial: (Internal int)
- agPartial: (Internal int)
- aggregateScore: (Internal DiskAggregateScores)
- description: (DiskDescritpion): A user-defined description of the disk for easier identification of the device.
- device: (string): The name of the physical disk device on the server.
- empty: (bool): True if no volumes or snapshots are on this disk.
- entriesAllocated: (int): Used entries of the disk.
- entriesCount: (int): The maximum amount of entries that can exists on the disk.
- entriesFree: (int): The remaining number of entries that can be stored on the disk.
- generationLeft: (-1): The last cluster generation when the disk was active on a running server, or -1
- id: (DiskID): The ID of this disk. It is set when the disk is formatted to work with StorPool.
- isWbc: (bool): Whether write-back cache is enabled for this device.
- journaled: (bool): Whether StorPool journaling is enabled for this device.
- lastScrubCompleted: (int): Unix time in seconds when last scrubbing job was completed.
- model: (string): The drive's model name.
- noFlush: (bool): Whether write-back cache flushing is disabled for this device.
- noFua: (bool): Whether to issue FUA writes to this device.
- noTrim: (bool): Whether trim-below is disabled for this device.
- objects: Detailed information about each object on the disk.A dict from int to DiskObject
- Key type: int
- Value type: DiskObject
- generation: (int): The generation when the last write to this object occurred.
- objectId: (Internal int)
- onDiskSize: (int): The space allocated on the disk for the object. This can go up to 32MB.
- parentVolume: (string): The name of the parent snapshot.
- state: (ObjectState)
- storedSize: (int): The size of the actual data in that object (<= onDiskSize).
- version: (int): With each write the version is increased.
- volume: (string): The name of the volume for which the object contains data.
- volumeId: (Internal int)
- objectsAllocated: (int): Used objects of the disk.
- objectsCount: (int): The maximum amount of object that can exists on the disk.
- objectsFree: (int): The remaining number of objects that can be stored on the disk.
- objectsOnDiskSize: (int): Total size occupied by objects.
- scrubbedBytes: (int): For current scrubbing job run.
- scrubbingBW: (int): Estimate of the disk bandwidth used for scrubbing B/s.
- scrubbingFinishAfter: (int): Estimate of when the scrubbing job is expected to finish based on
- scrubbingPaused: (bool): Is scrubbing currently paused
- scrubbingPausedFor: (int): How many seconds has the current scrubbing job been paused.
- scrubbingStartedBefore: (int): In seconds.
- sectorsCount: (int): The number of 512-byte sectors on the disk.
- serial: (string): The drive's serial number.
- serverId: (ServerID): The ID of the server this disk is currently on. In case the disk is currently down,
- softEject: (DiskSoftEjectStatus): The status of the soft-eject process.
- ssd: (bool): Whether the device is an SSD.
- wbc: (Internal Either(null, DiskWbcStats))
- Example HTTP Response:
Eject a disk (DiskEject)
Stop operations on the given disk even if it is not empty.
- Request:
- Example HTTP Request:
POST /ctrl/1.0/DiskEject/{diskId} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: POST
- Path: /ctrl/1.0/DiskEject/{diskId}
- Arguments:
- diskId - DiskID: integer, 0 <= value <= 4095
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Forget a disk (DiskForget)
Remove the disk from any placement groups or volumes that it is used in.
- Request:
- Example HTTP Request:
POST /ctrl/1.0/DiskForget/{diskId} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: POST
- Path: /ctrl/1.0/DiskForget/{diskId}
- Arguments:
- diskId - DiskID: integer, 0 <= value <= 4095
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Ignore a disk (DiskIgnore)
Try to boot the cluster by ignoring this disk.
- Request:
- Example HTTP Request:
POST /ctrl/1.0/DiskIgnore/{diskId} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: POST
- Path: /ctrl/1.0/DiskIgnore/{diskId}
- Arguments:
- diskId - DiskID: integer, 0 <= value <= 4095
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Soft-eject a disk (DiskSoftEject)
Stop writes to the given disk and start relocating all the data stored on it to other disks.
- Request:
- Example HTTP Request:
POST /ctrl/1.0/DiskSoftEject/{diskId} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: POST
- Path: /ctrl/1.0/DiskSoftEject/{diskId}
- Arguments:
- diskId - DiskID: integer, 0 <= value <= 4095
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Pause a disk's soft-eject operation (DiskSoftEjectPause)
Temporarily pause the relocation tasks for the disk. This can be helpful in heavy load situations.
- Request:
- Example HTTP Request:
POST /ctrl/1.0/DiskSoftEjectPause/{diskId} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: POST
- Path: /ctrl/1.0/DiskSoftEjectPause/{diskId}
- Arguments:
- diskId - DiskID: integer, 0 <= value <= 4095
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Cancel a disk's soft-eject operation (DiskSoftEjectCancel)
Stop the relocation tasks for the disk and mark it as usable again. After this operation data will be moved back to the disk.
- Request:
- Example HTTP Request:
POST /ctrl/1.0/DiskSoftEjectCancel/{diskId} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: POST
- Path: /ctrl/1.0/DiskSoftEjectCancel/{diskId}
- Arguments:
- diskId - DiskID: integer, 0 <= value <= 4095
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Set a disk's description (DiskSetDescription)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/DiskSetDescription/{diskId} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "description": DiskDescritpion } - Method: POST
- Path: /ctrl/1.0/DiskSetDescription/{diskId}
- Arguments:
- diskId - DiskID: integer, 0 <= value <= 4095
- JSON: DiskDescUpdate
- description: (DiskDescritpion): A user-defined description of the disk for easier identification of the device.
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
List all the active requests on a disk (DiskActiveRequests)
List detailed information about the requests being currently processed on the given disk.
- Request:
- Example HTTP Request:
GET /ctrl/1.0/DiskActiveRequests/{diskId} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/DiskActiveRequests/{diskId}
- Arguments:
- diskId - DiskID: integer, 0 <= value <= 4095
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "diskId": DiskID, "requests": [{ "address": int, "drOp": string /* Internal */, "msecActive": int, "op": RequestOp, "prevState": string /* Internal */, "requestId": string, "requestIdx": int, "size": int, "state": string /* Internal */, "volume": Either(VolumeNameOrGlobalId, SnapshotNameOrGlobalId) }, ...] } } - Response Data:
DiskActiveRequests
- diskId: (DiskID)
- requests: A detailed listing of all the requests associated with the given disk.
- Element type: ActiveRequestDesc
- address: (int): The offset in bytes within the logical volume.
- drOp: (Internal string): An internal attribute used only for debugging.
- msecActive: (int): Time in microseconds since the request was submitted.
- op: (RequestOp)
- prevState: (Internal string): An internal attribute used only for debugging.
- requestId: (string): A unique request ID that may be matched between clients and disks.
- requestIdx: (int): A temporary local request identifier for this request on this client or disk.
- size: (int): The size of the request in bytes.
- state: (Internal string): An internal attribute used only for debugging.
- volume: The value must be of one of the following types: VolumeNameOrGlobalId, SnapshotNameOrGlobalId.
- Subtypes:
- VolumeNameOrGlobalId
- SnapshotNameOrGlobalId
- Example HTTP Response:
Start scrubbing process (DiskScrubStart)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/DiskScrubStart/{diskId} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: POST
- Path: /ctrl/1.0/DiskScrubStart/{diskId}
- Arguments:
- diskId - DiskID: integer, 0 <= value <= 4095
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Pause scrubbing process (DiskScrubPause)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/DiskScrubPause/{diskId} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: POST
- Path: /ctrl/1.0/DiskScrubPause/{diskId}
- Arguments:
- diskId - DiskID: integer, 0 <= value <= 4095
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Continue paused scrubbing process (DiskScrubContinue)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/DiskScrubContinue/{diskId} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: POST
- Path: /ctrl/1.0/DiskScrubContinue/{diskId}
- Arguments:
- diskId - DiskID: integer, 0 <= value <= 4095
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Retrim disk (DiskRetrim)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/DiskRetrim/{diskId} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: POST
- Path: /ctrl/1.0/DiskRetrim/{diskId}
- Arguments:
- diskId - DiskID: integer, 0 <= value <= 4095
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Volumes
List all volumes (VolumesList)
Return configuration information about all the volumes.
- Request:
- Example HTTP Request:
GET /ctrl/1.0/MultiCluster/VolumesList HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/MultiCluster/VolumesList
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": [{ "bw": Bandwidth, "clusterId": Global Location Id /* Optional */, "clusterName": ClusterName /* Optional */, "creationTimestamp": int, "firstNotParentObjectId": int /* Internal */, "flags": int /* Internal */, "globalId": Global Volume Id, "id": int /* Internal */, "iops": IOPS, "limitType": LimitType /* Optional */, "metadataVolume": bool /* Optional */, "name": VolumeNameOrGlobalId, "objectsCount": int, "originalParentVolumeId": int /* Internal */, "parentName": Either("", SnapshotNameOrGlobalId), "parentVolumeId": int /* Internal */, "placeAll": PlacementGroupName, "placeHead": PlacementGroupName, "placeTail": PlacementGroupName, "remote": bool /* Optional */, "replication": Replication, "reuseServer": bool /* Optional */, "size": Size, "tags": { "VolumeTagName": VolumeTagValue, ... } /* Optional */, "templateId": int /* Internal */, "templateName": Either("", VolumeTemplateName), "visibleVolumeId": int }, ...] } - Response Data:
- Element type: VolumeSummary
- bw: (Bandwidth): Bandwidth limit in KB.
- clusterId: (Optional Global Location Id): multicluster calls only - the id of the cluster volume currently resides in
- clusterName: (Optional ClusterName): multicluster calls only - the name of the cluster volume currently resides in
- creationTimestamp: (int): The volume's creation timestamp (UNIX timestamp)
- firstNotParentObjectId: (Internal int)
- flags: (Internal int)
- globalId: (Global Volume Id): The globally-unique identifier of the volume or snapshot.
- id: (Internal int)
- iops: (IOPS): iops limit.
- limitType: (Optional LimitType)
- metadataVolume: (Optional bool): flag for metadata volumes and snapshots
- name: (VolumeNameOrGlobalId): The name of this volume.
- objectsCount: (int): The number of objects that the volume/snapshot is comprised of.
- originalParentVolumeId: (Internal int)
- parentName: The volume/snapshot's parent snapshot.The value must be of one of the following types: "", SnapshotNameOrGlobalId.
- Subtypes:
- ""
- SnapshotNameOrGlobalId
- parentVolumeId: (Internal int): The ID of the parent snapshot.
- placeAll: (PlacementGroupName): The name of a placement group which describes the disks to be used for all but the
- placeHead: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- placeTail: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- remote: (Optional bool): Indicated whether this is a remote volume or not
- replication: (Replication): The number of copies/replicas kept.
- reuseServer: (Optional bool): is it allowed to place replicas on the same server
- size: (Size): The volume/snapshots's size in bytes.
- tags: (Optional {VolumeTagName: VolumeTagValue}): Arbitrary short name/value pairs stored with the volume.
- templateId: (Internal int)
- templateName: The template that the volume/snapshot's settings are inherited from.The value must be of one of the following types: "", VolumeTemplateName.
- Subtypes:
- ""
- VolumeTemplateName
- visibleVolumeId: (int): The ID by which the volume/snapshot was created.
- Example HTTP Response:
Get volume and snapshot status and stored size (VolumesGetStatus)
Return the status and stored size of each volume and snapshot.
- Request:
- Example HTTP Request:
GET /ctrl/1.0/MultiCluster/VolumesGetStatus HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/MultiCluster/VolumesGetStatus
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "Either(SnapshotNameOrGlobalId, VolumeNameOrGlobalId)": Either({ "autoName": bool, "backup": bool /* Optional */, "backupOfGlobalId": Global Volume Id /* Optional */, "backupOfVisibleVolumeId": int /* Optional */, "balancerBlocked": bool, "bound": bool, "bw": Bandwidth, "clusterId": Global Location Id /* Optional */, "clusterName": ClusterName /* Optional */, "createdFromGlobalId": Global Volume Id /* Internal */ /* Optional */, "createdFromVisibleVolumeId": int /* Internal */ /* Optional */, "creationTimestamp": int, "decreasedRedundancy": bool, "deleteBlocked": DeleteBlocked /* Internal */ /* Optional */, "deleted": bool, "dematerializationStatus": DematerializationStatus /* Internal */ /* Optional */, "destroyed": bool /* Internal */ /* Optional */, "downBytes": int, "downDrives": [DiskID, ...], "ecDeleted": bool /* Internal */ /* Optional */, "firstNotParentObjectId": int /* Internal */, "flags": int /* Internal */, "globalId": Global Volume Id, "id": int /* Internal */, "iops": IOPS, "limitType": LimitType /* Optional */, "mcState": MultiClusterState /* Internal */ /* Optional */, "mcStateVal": int /* Internal */ /* Optional */, "metadataVolume": bool /* Optional */, "migrating": bool, "missingDrives": [DiskID, ...], "missingTargetDrives": [DiskID, ...], "name": SnapshotNameOrGlobalId, "objectsCount": int, "onDiskSize": int, "onVolume": VolumeNameOrGlobalId, "originalParentVolumeId": int /* Internal */, "parentName": Either("", SnapshotNameOrGlobalId), "parentVolumeId": int /* Internal */, "placeAll": PlacementGroupName, "placeHead": PlacementGroupName, "placeTail": PlacementGroupName, "recoveringFromRemote": bool, "remote": bool /* Optional */, "replication": Replication, "reuseServer": bool /* Optional */, "size": Size, "snapshot": bool, "softEjectingDrives": [DiskID, ...], "status": VolumeCurrentStatus, "storedSize": int, "syncingDataBytes": int, "syncingMetaObjects": int, "tags": { "VolumeTagName": VolumeTagValue, ... } /* Optional */, "targetDeleteDate": int /* Optional */, "templateId": int /* Internal */, "templateName": Either("", VolumeTemplateName), "transient": bool, "upSoonChainsCount": int, "visibleVolumeId": int, "volumeMoveSource": bool /* Internal */ /* Optional */ }, { "balancerBlocked": bool, "bw": Bandwidth, "clusterId": Global Location Id /* Optional */, "clusterName": ClusterName /* Optional */, "creationTimestamp": int, "decreasedRedundancy": bool, "downBytes": int, "downDrives": [DiskID, ...], "firstNotParentObjectId": int /* Internal */, "flags": int /* Internal */, "globalId": Global Volume Id, "id": int /* Internal */, "iops": IOPS, "limitType": LimitType /* Optional */, "metadataVolume": bool /* Optional */, "migrating": bool, "missingDrives": [DiskID, ...], "missingTargetDrives": [DiskID, ...], "name": VolumeNameOrGlobalId, "objectsCount": int, "onDiskSize": int, "originalParentVolumeId": int /* Internal */, "parentName": Either("", SnapshotNameOrGlobalId), "parentVolumeId": int /* Internal */, "placeAll": PlacementGroupName, "placeHead": PlacementGroupName, "placeTail": PlacementGroupName, "remote": bool /* Optional */, "replication": Either(0, Replication), "reuseServer": bool /* Optional */, "size": Size, "snapshot": bool, "softEjectingDrives": [DiskID, ...], "status": VolumeCurrentStatus, "storedSize": int, "syncingDataBytes": int, "syncingMetaObjects": int, "tags": { "VolumeTagName": VolumeTagValue, ... } /* Optional */, "templateId": int /* Internal */, "templateName": Either("", VolumeTemplateName), "upSoonChainsCount": int, "visibleVolumeId": int }), ... } } - Response Data:
A dict from Either(SnapshotNameOrGlobalId, VolumeNameOrGlobalId) to Either(SnapshotStatus, VolumeStatus)
- Key type: The value must be of one of the following types: SnapshotNameOrGlobalId, VolumeNameOrGlobalId.
- Subtypes:
- SnapshotNameOrGlobalId
- VolumeNameOrGlobalId
- Value type: The value must be of one of the following types: SnapshotStatus, VolumeStatus.
- Subtypes:
- SnapshotStatus
- autoName: (bool): Is this snapshot anonymous.
- backup: (Optional bool): Is this snapshot a backup of a remote snapshot.
- backupOfGlobalId: (Optional Global Volume Id): The global ID of the volume that has been backed up to this snapshot.
- backupOfVisibleVolumeId: (Optional int): The numeric global ID of the snapshot that has been backed up to
- balancerBlocked: (bool): Can this volume be rebalanced, or is rebalancing impossible with the current
- bound: (bool): Is this a bound snapshot. Bound snapshots are garbage-collected as soon as they remain
- bw: (Bandwidth): Bandwidth limit in KB.
- clusterId: (Optional Global Location Id): multicluster calls only - the id of the cluster volume currently resides in
- clusterName: (Optional ClusterName): multicluster calls only - the name of the cluster volume currently resides in
- createdFromGlobalId: (Optional Internal)
- createdFromVisibleVolumeId: (Optional Internal)
- creationTimestamp: (int): The volume's creation timestamp (UNIX timestamp)
- decreasedRedundancy: (bool): True if any of the replicas of the volume are missing.
- deleteBlocked: (Optional Internal)
- deleted: (bool): Is this snapshot currently being deleted.
- dematerializationStatus: (Optional Internal)
- destroyed: (Optional Internal): Is this snapshot currently being destroyed.
- downBytes: (int): The number of bytes of the volume that are not accessible at the moment.
- downDrives: The IDs of the drives that are not accessible at the moment but needed by this
- Element type: DiskID
- ecDeleted: (Optional Internal)
- firstNotParentObjectId: (Internal int)
- flags: (Internal int)
- globalId: (Global Volume Id): The globally-unique identifier of the volume or snapshot.
- id: (Internal int)
- iops: (IOPS): iops limit.
- limitType: (Optional LimitType)
- mcState: (Optional Internal)
- mcStateVal: (Optional Internal)
- metadataVolume: (Optional bool): flag for metadata volumes and snapshots
- migrating: (bool): True if there are tasks for reallocation of the volume.
- missingDrives: The IDs of the drives that are not accessible at the moment. The volume has all
- Element type: DiskID
- SnapshotStatus
- missingTargetDrives:
- Element type: DiskID
- Key type: The value must be of one of the following types: SnapshotNameOrGlobalId, VolumeNameOrGlobalId.
- name: (SnapshotNameOrGlobalId): The name of this snapshot
- objectsCount: (int): The number of objects that the volume/snapshot is comprised of.
- onDiskSize: (int): The actual size that the objects of this volume occupy on the disks.
- onVolume: (VolumeNameOrGlobalId): The name of the volume that this is a parent of.
- originalParentVolumeId: (Internal int)
- parentName: The volume/snapshot's parent snapshot.The value must be of one of the following types: "", SnapshotNameOrGlobalId.
- Subtypes:
- ""
- SnapshotNameOrGlobalId
- parentVolumeId: (Internal int): The ID of the parent snapshot.
- placeAll: (PlacementGroupName): The name of a placement group which describes the disks to be used for all but the
- placeHead: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- placeTail: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- recoveringFromRemote: (bool): Is this snapshot's data currently being transferred from a remote location
- remote: (Optional bool): Indicated whether this is a remote volume or not
- replication: (Replication): The number of copies/replicas kept.
- reuseServer: (Optional bool): is it allowed to place replicas on the same server
- size: (Size): The volume/snapshots's size in bytes.
- snapshot: (bool): True if this response describes a snapshot instead of a volume.
- softEjectingDrives:
- Element type: DiskID
- Example HTTP Response:
- status: (VolumeCurrentStatus)
- storedSize: (int): The number of bytes of client data on the volume. This does not take into account
- syncingDataBytes: (int): The total number of bytes in objects currently being synchronized
- syncingMetaObjects: (int): The number of objects currently being synchronized
- tags: (Optional {VolumeTagName: VolumeTagValue}): Arbitrary short name/value pairs stored with the volume.
- targetDeleteDate: (Optional int): Scheduled date for the snapshot to be deleted. Unix timestamp
- templateId: (Internal int)
- templateName: The template that the volume/snapshot's settings are inherited from.The value must be of one of the following types: "", VolumeTemplateName.
- Subtypes:
- ""
- VolumeTemplateName
- transient: (bool): Is this a transient snapshot. Transient snapshots are internally created when
- upSoonChainsCount: (int): The number of objects that have to be transferred.
- visibleVolumeId: (int): The ID by which the volume/snapshot was created.
- volumeMoveSource: (Optional Internal)
- VolumeStatus
- balancerBlocked: (bool): Can this volume be rebalanced, or is rebalancing impossible with the current
- bw: (Bandwidth): Bandwidth limit in KB.
- clusterId: (Optional Global Location Id): multicluster calls only - the id of the cluster volume currently resides in
- clusterName: (Optional ClusterName): multicluster calls only - the name of the cluster volume currently resides in
- creationTimestamp: (int): The volume's creation timestamp (UNIX timestamp)
- decreasedRedundancy: (bool): True if any of the replicas of the volume are missing.
- downBytes: (int): The number of bytes of the volume that are not accessible at the moment.
- downDrives: The IDs of the drives that are not accessible at the moment but needed by this
- Element type: DiskID
- firstNotParentObjectId: (Internal int)
- flags: (Internal int)
- globalId: (Global Volume Id): The globally-unique identifier of the volume or snapshot.
- id: (Internal int)
- iops: (IOPS): iops limit.
- limitType: (Optional LimitType)
- metadataVolume: (Optional bool): flag for metadata volumes and snapshots
- migrating: (bool): True if there are tasks for reallocation of the volume.
- missingDrives: The IDs of the drives that are not accessible at the moment. The volume has all
- Element type: DiskID
- missingTargetDrives:
- Element type: DiskID
- name: (VolumeNameOrGlobalId): The name of this volume.
- objectsCount: (int): The number of objects that the volume/snapshot is comprised of.
- onDiskSize: (int): The actual size that the objects of this volume occupy on the disks.
- originalParentVolumeId: (Internal int)
- parentName: The volume/snapshot's parent snapshot.The value must be of one of the following types: "", SnapshotNameOrGlobalId.
- Subtypes:
- ""
- SnapshotNameOrGlobalId
- parentVolumeId: (Internal int): The ID of the parent snapshot.
- placeAll: (PlacementGroupName): The name of a placement group which describes the disks to be used for all but the
- placeHead: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- placeTail: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- remote: (Optional bool): Indicated whether this is a remote volume or not
- replication: The number of copies/replicas kept.The value must be of one of the following types: 0, Replication.
- Subtypes:
- 0
- Replication
- reuseServer: (Optional bool): is it allowed to place replicas on the same server
- size: (Size): The volume/snapshots's size in bytes.
- snapshot: (bool): True if this response describes a snapshot instead of a volume.
- softEjectingDrives:
- Element type: DiskID
- status: (VolumeCurrentStatus)
- storedSize: (int): The number of bytes of client data on the volume. This does not take into account
- syncingDataBytes: (int): The total number of bytes in objects currently being synchronized
- syncingMetaObjects: (int): The number of objects currently being synchronized
- tags: (Optional {VolumeTagName: VolumeTagValue}): Arbitrary short name/value pairs stored with the volume.
- templateId: (Internal int)
- templateName: The template that the volume/snapshot's settings are inherited from.The value must be of one of the following types: "", VolumeTemplateName.
- Subtypes:
- ""
- VolumeTemplateName
- upSoonChainsCount: (int): The number of objects that have to be transferred.
- visibleVolumeId: (int): The ID by which the volume/snapshot was created.
Get volume and snapshot status (VolumesGetStatusQuick)
Return the status of each volume and snapshot.
- Request:
- Example HTTP Request:
GET /ctrl/1.0/MultiCluster/VolumesGetStatusQuick HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/MultiCluster/VolumesGetStatusQuick
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "Either(SnapshotNameOrGlobalId, VolumeNameOrGlobalId)": Either({ "autoName": bool, "backup": bool /* Optional */, "backupOfGlobalId": Global Volume Id /* Optional */, "backupOfVisibleVolumeId": int /* Optional */, "balancerBlocked": bool, "bound": bool, "bw": Bandwidth, "clusterId": Global Location Id /* Optional */, "clusterName": ClusterName /* Optional */, "createdFromGlobalId": Global Volume Id /* Internal */ /* Optional */, "createdFromVisibleVolumeId": int /* Internal */ /* Optional */, "creationTimestamp": int, "decreasedRedundancy": bool, "deleteBlocked": DeleteBlocked /* Internal */ /* Optional */, "deleted": bool, "dematerializationStatus": DematerializationStatus /* Internal */ /* Optional */, "destroyed": bool /* Internal */ /* Optional */, "downBytes": int, "downDrives": [DiskID, ...], "ecDeleted": bool /* Internal */ /* Optional */, "firstNotParentObjectId": int /* Internal */, "flags": int /* Internal */, "globalId": Global Volume Id, "id": int /* Internal */, "iops": IOPS, "limitType": LimitType /* Optional */, "mcState": MultiClusterState /* Internal */ /* Optional */, "mcStateVal": int /* Internal */ /* Optional */, "metadataVolume": bool /* Optional */, "migrating": bool, "missingDrives": [DiskID, ...], "missingTargetDrives": [DiskID, ...], "name": SnapshotNameOrGlobalId, "objectsCount": int, "onVolume": VolumeNameOrGlobalId, "originalParentVolumeId": int /* Internal */, "parentName": Either("", SnapshotNameOrGlobalId), "parentVolumeId": int /* Internal */, "placeAll": PlacementGroupName, "placeHead": PlacementGroupName, "placeTail": PlacementGroupName, "recoveringFromRemote": bool, "remote": bool /* Optional */, "replication": Replication, "reuseServer": bool /* Optional */, "size": Size, "snapshot": bool, "softEjectingDrives": [DiskID, ...], "status": VolumeCurrentStatus, "syncingDataBytes": int, "syncingMetaObjects": int, "tags": { "VolumeTagName": VolumeTagValue, ... } /* Optional */, "targetDeleteDate": int /* Optional */, "templateId": int /* Internal */, "templateName": Either("", VolumeTemplateName), "transient": bool, "upSoonChainsCount": int, "visibleVolumeId": int, "volumeMoveSource": bool /* Internal */ /* Optional */ }, { "balancerBlocked": bool, "bw": Bandwidth, "clusterId": Global Location Id /* Optional */, "clusterName": ClusterName /* Optional */, "creationTimestamp": int, "decreasedRedundancy": bool, "downBytes": int, "downDrives": [DiskID, ...], "firstNotParentObjectId": int /* Internal */, "flags": int /* Internal */, "globalId": Global Volume Id, "id": int /* Internal */, "iops": IOPS, "limitType": LimitType /* Optional */, "metadataVolume": bool /* Optional */, "migrating": bool, "missingDrives": [DiskID, ...], "missingTargetDrives": [DiskID, ...], "name": VolumeNameOrGlobalId, "objectsCount": int, "originalParentVolumeId": int /* Internal */, "parentName": Either("", SnapshotNameOrGlobalId), "parentVolumeId": int /* Internal */, "placeAll": PlacementGroupName, "placeHead": PlacementGroupName, "placeTail": PlacementGroupName, "remote": bool /* Optional */, "replication": Either(0, Replication), "reuseServer": bool /* Optional */, "size": Size, "snapshot": bool, "softEjectingDrives": [DiskID, ...], "status": VolumeCurrentStatus, "syncingDataBytes": int, "syncingMetaObjects": int, "tags": { "VolumeTagName": VolumeTagValue, ... } /* Optional */, "templateId": int /* Internal */, "templateName": Either("", VolumeTemplateName), "upSoonChainsCount": int, "visibleVolumeId": int }), ... } } - Response Data:
A dict from Either(SnapshotNameOrGlobalId, VolumeNameOrGlobalId) to Either(SnapshotStatusQuick, VolumeStatusQuick)
- Key type: The value must be of one of the following types: SnapshotNameOrGlobalId, VolumeNameOrGlobalId.
- Subtypes:
- SnapshotNameOrGlobalId
- VolumeNameOrGlobalId
- Value type: The value must be of one of the following types: SnapshotStatusQuick, VolumeStatusQuick.
- Subtypes:
- SnapshotStatusQuick
- autoName: (bool): Is this snapshot anonymous.
- backup: (Optional bool): Is this snapshot a backup of a remote snapshot.
- backupOfGlobalId: (Optional Global Volume Id): The global ID of the volume that has been backed up to this snapshot.
- backupOfVisibleVolumeId: (Optional int): The numeric global ID of the snapshot that has been backed up to
- balancerBlocked: (bool): Can this volume be rebalanced, or is rebalancing impossible with the current
- bound: (bool): Is this a bound snapshot. Bound snapshots are garbage-collected as soon as they remain
- bw: (Bandwidth): Bandwidth limit in KB.
- clusterId: (Optional Global Location Id): multicluster calls only - the id of the cluster volume currently resides in
- clusterName: (Optional ClusterName): multicluster calls only - the name of the cluster volume currently resides in
- createdFromGlobalId: (Optional Internal)
- createdFromVisibleVolumeId: (Optional Internal)
- creationTimestamp: (int): The volume's creation timestamp (UNIX timestamp)
- decreasedRedundancy: (bool): True if any of the replicas of the volume are missing.
- deleteBlocked: (Optional Internal)
- deleted: (bool): Is this snapshot currently being deleted.
- dematerializationStatus: (Optional Internal)
- destroyed: (Optional Internal): Is this snapshot currently being destroyed.
- downBytes: (int): The number of bytes of the volume that are not accessible at the moment.
- downDrives: The IDs of the drives that are not accessible at the moment but needed by this
- Element type: DiskID
- ecDeleted: (Optional Internal)
- firstNotParentObjectId: (Internal int)
- flags: (Internal int)
- globalId: (Global Volume Id): The globally-unique identifier of the volume or snapshot.
- id: (Internal int)
- iops: (IOPS): iops limit.
- limitType: (Optional LimitType)
- mcState: (Optional Internal)
- mcStateVal: (Optional Internal)
- metadataVolume: (Optional bool): flag for metadata volumes and snapshots
- migrating: (bool): True if there are tasks for reallocation of the volume.
- missingDrives: The IDs of the drives that are not accessible at the moment. The volume has all
- Element type: DiskID
- SnapshotStatusQuick
- missingTargetDrives:
- Element type: DiskID
- Key type: The value must be of one of the following types: SnapshotNameOrGlobalId, VolumeNameOrGlobalId.
- name: (SnapshotNameOrGlobalId): The name of this snapshot
- objectsCount: (int): The number of objects that the volume/snapshot is comprised of.
- onVolume: (VolumeNameOrGlobalId): The name of the volume that this is a parent of.
- originalParentVolumeId: (Internal int)
- parentName: The volume/snapshot's parent snapshot.The value must be of one of the following types: "", SnapshotNameOrGlobalId.
- Subtypes:
- ""
- SnapshotNameOrGlobalId
- parentVolumeId: (Internal int): The ID of the parent snapshot.
- placeAll: (PlacementGroupName): The name of a placement group which describes the disks to be used for all but the
- placeHead: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- placeTail: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- recoveringFromRemote: (bool): Is this snapshot's data currently being transferred from a remote location
- remote: (Optional bool): Indicated whether this is a remote volume or not
- replication: (Replication): The number of copies/replicas kept.
- reuseServer: (Optional bool): is it allowed to place replicas on the same server
- size: (Size): The volume/snapshots's size in bytes.
- snapshot: (bool): True if this response describes a snapshot instead of a volume.
- softEjectingDrives:
- Element type: DiskID
- Example HTTP Response:
- status: (VolumeCurrentStatus)
- syncingDataBytes: (int): The total number of bytes in objects currently being synchronized
- syncingMetaObjects: (int): The number of objects currently being synchronized
- tags: (Optional {VolumeTagName: VolumeTagValue}): Arbitrary short name/value pairs stored with the volume.
- targetDeleteDate: (Optional int): Scheduled date for the snapshot to be deleted. Unix timestamp
- templateId: (Internal int)
- templateName: The template that the volume/snapshot's settings are inherited from.The value must be of one of the following types: "", VolumeTemplateName.
- Subtypes:
- ""
- VolumeTemplateName
- transient: (bool): Is this a transient snapshot. Transient snapshots are internally created when
- upSoonChainsCount: (int): The number of objects that have to be transferred.
- visibleVolumeId: (int): The ID by which the volume/snapshot was created.
- volumeMoveSource: (Optional Internal)
- VolumeStatusQuick
- balancerBlocked: (bool): Can this volume be rebalanced, or is rebalancing impossible with the current
- bw: (Bandwidth): Bandwidth limit in KB.
- clusterId: (Optional Global Location Id): multicluster calls only - the id of the cluster volume currently resides in
- clusterName: (Optional ClusterName): multicluster calls only - the name of the cluster volume currently resides in
- creationTimestamp: (int): The volume's creation timestamp (UNIX timestamp)
- decreasedRedundancy: (bool): True if any of the replicas of the volume are missing.
- downBytes: (int): The number of bytes of the volume that are not accessible at the moment.
- downDrives: The IDs of the drives that are not accessible at the moment but needed by this
- Element type: DiskID
- firstNotParentObjectId: (Internal int)
- flags: (Internal int)
- globalId: (Global Volume Id): The globally-unique identifier of the volume or snapshot.
- id: (Internal int)
- iops: (IOPS): iops limit.
- limitType: (Optional LimitType)
- metadataVolume: (Optional bool): flag for metadata volumes and snapshots
- migrating: (bool): True if there are tasks for reallocation of the volume.
- missingDrives: The IDs of the drives that are not accessible at the moment. The volume has all
- Element type: DiskID
- missingTargetDrives:
- Element type: DiskID
- name: (VolumeNameOrGlobalId): The name of this volume.
- objectsCount: (int): The number of objects that the volume/snapshot is comprised of.
- originalParentVolumeId: (Internal int)
- parentName: The volume/snapshot's parent snapshot.The value must be of one of the following types: "", SnapshotNameOrGlobalId.
- Subtypes:
- ""
- SnapshotNameOrGlobalId
- parentVolumeId: (Internal int): The ID of the parent snapshot.
- placeAll: (PlacementGroupName): The name of a placement group which describes the disks to be used for all but the
- placeHead: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- placeTail: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- remote: (Optional bool): Indicated whether this is a remote volume or not
- replication: The number of copies/replicas kept.The value must be of one of the following types: 0, Replication.
- Subtypes:
- 0
- Replication
- reuseServer: (Optional bool): is it allowed to place replicas on the same server
- size: (Size): The volume/snapshots's size in bytes.
- snapshot: (bool): True if this response describes a snapshot instead of a volume.
- softEjectingDrives:
- Element type: DiskID
- status: (VolumeCurrentStatus)
- syncingDataBytes: (int): The total number of bytes in objects currently being synchronized
- syncingMetaObjects: (int): The number of objects currently being synchronized
- tags: (Optional {VolumeTagName: VolumeTagValue}): Arbitrary short name/value pairs stored with the volume.
- templateId: (Internal int)
- templateName: The template that the volume/snapshot's settings are inherited from.The value must be of one of the following types: "", VolumeTemplateName.
- Subtypes:
- ""
- VolumeTemplateName
- upSoonChainsCount: (int): The number of objects that have to be transferred.
- visibleVolumeId: (int): The ID by which the volume/snapshot was created.
List total used space by each volume (VolumesSpace)
List estimated total virtual space used by each volume.
- Request:
- Example HTTP Request:
GET /ctrl/1.0/MultiCluster/VolumesSpace HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/MultiCluster/VolumesSpace
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": [{ "bw": Bandwidth, "clusterId": Global Location Id /* Optional */, "clusterName": ClusterName /* Optional */, "creationTimestamp": int, "firstNotParentObjectId": int /* Internal */, "flags": int /* Internal */, "globalId": Global Volume Id, "id": int /* Internal */, "iops": IOPS, "limitType": LimitType /* Optional */, "metadataVolume": bool /* Optional */, "name": VolumeNameOrGlobalId, "objectsCount": int, "originalParentVolumeId": int /* Internal */, "parentName": Either("", SnapshotNameOrGlobalId), "parentVolumeId": int /* Internal */, "placeAll": PlacementGroupName, "placeHead": PlacementGroupName, "placeTail": PlacementGroupName, "remote": bool /* Optional */, "replication": Replication, "reuseServer": bool /* Optional */, "size": Size, "spaceUsed": int, "storedSize": int, "tags": { "VolumeTagName": VolumeTagValue, ... } /* Optional */, "templateId": int /* Internal */, "templateName": Either("", VolumeTemplateName), "visibleVolumeId": int }, ...] } - Response Data:
- Element type: VolumeSpace
- bw: (Bandwidth): Bandwidth limit in KB.
- clusterId: (Optional Global Location Id): multicluster calls only - the id of the cluster volume currently resides in
- clusterName: (Optional ClusterName): multicluster calls only - the name of the cluster volume currently resides in
- creationTimestamp: (int): The volume's creation timestamp (UNIX timestamp)
- firstNotParentObjectId: (Internal int)
- flags: (Internal int)
- globalId: (Global Volume Id): The globally-unique identifier of the volume or snapshot.
- id: (Internal int)
- iops: (IOPS): iops limit.
- limitType: (Optional LimitType)
- metadataVolume: (Optional bool): flag for metadata volumes and snapshots
- name: (VolumeNameOrGlobalId): The name of this volume.
- objectsCount: (int): The number of objects that the volume/snapshot is comprised of.
- originalParentVolumeId: (Internal int)
- parentName: The volume/snapshot's parent snapshot.The value must be of one of the following types: "", SnapshotNameOrGlobalId.
- Subtypes:
- ""
- SnapshotNameOrGlobalId
- parentVolumeId: (Internal int): The ID of the parent snapshot.
- placeAll: (PlacementGroupName): The name of a placement group which describes the disks to be used for all but the
- placeHead: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- placeTail: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- remote: (Optional bool): Indicated whether this is a remote volume or not
- replication: (Replication): The number of copies/replicas kept.
- reuseServer: (Optional bool): is it allowed to place replicas on the same server
- size: (Size): The volume/snapshots's size in bytes.
- spaceUsed: (int): The total number of bytes of client data that on this volume. This includes data that
- storedSize: (int): The number of bytes of client data on this volume. This does not take into account
- tags: (Optional {VolumeTagName: VolumeTagValue}): Arbitrary short name/value pairs stored with the volume.
- templateId: (Internal int)
- templateName: The template that the volume/snapshot's settings are inherited from.The value must be of one of the following types: "", VolumeTemplateName.
- Subtypes:
- ""
- VolumeTemplateName
- visibleVolumeId: (int): The ID by which the volume/snapshot was created.
- Example HTTP Response:
List a single volume (Volume)
Same as VolumeList but only return information about a given volume.
- Request:
- Example HTTP Request:
GET /ctrl/1.0/MultiCluster/Volume/{volumeName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/MultiCluster/Volume/{volumeName}
- Arguments:
- volumeName - VolumeNameOrGlobalId: a string(200), matching ^\#?[A-Za-z0-9_\-.:]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": [{ "bw": Bandwidth, "clusterId": Global Location Id /* Optional */, "clusterName": ClusterName /* Optional */, "creationTimestamp": int, "firstNotParentObjectId": int /* Internal */, "flags": int /* Internal */, "globalId": Global Volume Id, "id": int /* Internal */, "iops": IOPS, "limitType": LimitType /* Optional */, "metadataVolume": bool /* Optional */, "name": VolumeNameOrGlobalId, "objectsCount": int, "originalParentVolumeId": int /* Internal */, "parentName": Either("", SnapshotNameOrGlobalId), "parentVolumeId": int /* Internal */, "placeAll": PlacementGroupName, "placeHead": PlacementGroupName, "placeTail": PlacementGroupName, "remote": bool /* Optional */, "replication": Replication, "reuseServer": bool /* Optional */, "size": Size, "tags": { "VolumeTagName": VolumeTagValue, ... } /* Optional */, "templateId": int /* Internal */, "templateName": Either("", VolumeTemplateName), "visibleVolumeId": int }, ...] } - Response Data:
- Element type: VolumeSummary
- bw: (Bandwidth): Bandwidth limit in KB.
- clusterId: (Optional Global Location Id): multicluster calls only - the id of the cluster volume currently resides in
- clusterName: (Optional ClusterName): multicluster calls only - the name of the cluster volume currently resides in
- creationTimestamp: (int): The volume's creation timestamp (UNIX timestamp)
- firstNotParentObjectId: (Internal int)
- flags: (Internal int)
- globalId: (Global Volume Id): The globally-unique identifier of the volume or snapshot.
- id: (Internal int)
- iops: (IOPS): iops limit.
- limitType: (Optional LimitType)
- metadataVolume: (Optional bool): flag for metadata volumes and snapshots
- name: (VolumeNameOrGlobalId): The name of this volume.
- objectsCount: (int): The number of objects that the volume/snapshot is comprised of.
- originalParentVolumeId: (Internal int)
- parentName: The volume/snapshot's parent snapshot.The value must be of one of the following types: "", SnapshotNameOrGlobalId.
- Subtypes:
- ""
- SnapshotNameOrGlobalId
- parentVolumeId: (Internal int): The ID of the parent snapshot.
- placeAll: (PlacementGroupName): The name of a placement group which describes the disks to be used for all but the
- placeHead: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- placeTail: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- remote: (Optional bool): Indicated whether this is a remote volume or not
- replication: (Replication): The number of copies/replicas kept.
- reuseServer: (Optional bool): is it allowed to place replicas on the same server
- size: (Size): The volume/snapshots's size in bytes.
- tags: (Optional {VolumeTagName: VolumeTagValue}): Arbitrary short name/value pairs stored with the volume.
- templateId: (Internal int)
- templateName: The template that the volume/snapshot's settings are inherited from.The value must be of one of the following types: "", VolumeTemplateName.
- Subtypes:
- ""
- VolumeTemplateName
- visibleVolumeId: (int): The ID by which the volume/snapshot was created.
- Example HTTP Response:
Describe a volume (VolumeDescribe)
Return detailed information about the distribution of the volume's data on the disks.
- Request:
- Example HTTP Request:
GET /ctrl/1.0/MultiCluster/VolumeDescribe/{volumeName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/MultiCluster/VolumeDescribe/{volumeName}
- Arguments:
- volumeName - VolumeNameOrGlobalId: a string(200), matching ^\#?[A-Za-z0-9_\-.:]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "bw": Bandwidth, "clusterId": Global Location Id /* Optional */, "clusterName": ClusterName /* Optional */, "creationTimestamp": int, "firstNotParentObjectId": int /* Internal */, "flags": int /* Internal */, "globalId": Global Volume Id, "id": int /* Internal */, "iops": IOPS, "limitType": LimitType /* Optional */, "metadataVolume": bool /* Optional */, "name": VolumeNameOrGlobalId, "objects": [[DiskID, ...], ...], "objectsCount": int, "originalParentVolumeId": int /* Internal */, "parentName": Either("", SnapshotNameOrGlobalId), "parentVolumeId": int /* Internal */, "placeAll": PlacementGroupName, "placeHead": PlacementGroupName, "placeTail": PlacementGroupName, "remote": bool /* Optional */, "replication": Replication, "reuseServer": bool /* Optional */, "size": Size, "tags": { "VolumeTagName": VolumeTagValue, ... } /* Optional */, "targetDiskSets": [[DiskID, ...], ...], "templateId": int /* Internal */, "templateName": Either("", VolumeTemplateName), "visibleVolumeId": int } } - Response Data:
Volume
- bw: (Bandwidth): Bandwidth limit in KB.
- clusterId: (Optional Global Location Id): multicluster calls only - the id of the cluster volume currently resides in
- clusterName: (Optional ClusterName): multicluster calls only - the name of the cluster volume currently resides in
- creationTimestamp: (int): The volume's creation timestamp (UNIX timestamp)
- firstNotParentObjectId: (Internal int)
- flags: (Internal int)
- globalId: (Global Volume Id): The globally-unique identifier of the volume or snapshot.
- id: (Internal int)
- iops: (IOPS): iops limit.
- limitType: (Optional LimitType)
- metadataVolume: (Optional bool): flag for metadata volumes and snapshots
- name: (VolumeNameOrGlobalId): The name of this volume.
- objects: Where each object is actually stored.
- Element type:
- Element type: DiskID
- Example HTTP Response:
- objectsCount: (int): The number of objects that the volume/snapshot is comprised of.
- originalParentVolumeId: (Internal int)
- parentName: The volume/snapshot's parent snapshot.The value must be of one of the following types: "", SnapshotNameOrGlobalId.
- Subtypes:
- ""
- SnapshotNameOrGlobalId
- parentVolumeId: (Internal int): The ID of the parent snapshot.
- placeAll: (PlacementGroupName): The name of a placement group which describes the disks to be used for all but the
- placeHead: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- placeTail: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- remote: (Optional bool): Indicated whether this is a remote volume or not
- replication: (Replication): The number of copies/replicas kept.
- reuseServer: (Optional bool): is it allowed to place replicas on the same server
- size: (Size): The volume/snapshots's size in bytes.
- tags: (Optional {VolumeTagName: VolumeTagValue}): Arbitrary short name/value pairs stored with the volume.
- targetDiskSets: Sets of disks that the volume's data should be stored on.
- Element type:
- Element type: DiskID
- templateId: (Internal int)
- templateName: The template that the volume/snapshot's settings are inherited from.The value must be of one of the following types: "", VolumeTemplateName.
- Subtypes:
- ""
- VolumeTemplateName
- visibleVolumeId: (int): The ID by which the volume/snapshot was created.
Get volume info (VolumeGetInfo)
Return general information about the distribution of the volume's data on the disks.
- Request:
- Example HTTP Request:
GET /ctrl/1.0/MultiCluster/VolumeGetInfo/{volumeName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/MultiCluster/VolumeGetInfo/{volumeName}
- Arguments:
- volumeName - VolumeNameOrGlobalId: a string(200), matching ^\#?[A-Za-z0-9_\-.:]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "bw": Bandwidth, "clusterId": Global Location Id /* Optional */, "clusterName": ClusterName /* Optional */, "creationTimestamp": int, "disksCount": int, "firstNotParentObjectId": int /* Internal */, "flags": int /* Internal */, "globalId": Global Volume Id, "id": int /* Internal */, "iops": IOPS, "limitType": LimitType /* Optional */, "metadataVolume": bool /* Optional */, "name": VolumeNameOrGlobalId, "objectsCount": int, "objectsPerChain": [{ "count": int, "disks": [DiskID, ...] }, ...], "objectsPerDisk": { "DiskID": int, ... }, "objectsPerDiskSet": [{ "count": int, "disks": [DiskID, ...] }, ...], "originalParentVolumeId": int /* Internal */, "parentName": Either("", SnapshotNameOrGlobalId), "parentVolumeId": int /* Internal */, "placeAll": PlacementGroupName, "placeHead": PlacementGroupName, "placeTail": PlacementGroupName, "remote": bool /* Optional */, "replication": Replication, "reuseServer": bool /* Optional */, "size": Size, "tags": { "VolumeTagName": VolumeTagValue, ... } /* Optional */, "templateId": int /* Internal */, "templateName": Either("", VolumeTemplateName), "visibleVolumeId": int } } - Response Data:
VolumeInfo
- bw: (Bandwidth): Bandwidth limit in KB.
- clusterId: (Optional Global Location Id): multicluster calls only - the id of the cluster volume currently resides in
- clusterName: (Optional ClusterName): multicluster calls only - the name of the cluster volume currently resides in
- creationTimestamp: (int): The volume's creation timestamp (UNIX timestamp)
- disksCount: (int)
- firstNotParentObjectId: (Internal int)
- flags: (Internal int)
- globalId: (Global Volume Id): The globally-unique identifier of the volume or snapshot.
- id: (Internal int)
- iops: (IOPS): iops limit.
- limitType: (Optional LimitType)
- metadataVolume: (Optional bool): flag for metadata volumes and snapshots
- name: (VolumeNameOrGlobalId): The name of this volume.
- objectsCount: (int): The number of objects that the volume/snapshot is comprised of.
- objectsPerChain:
- Example HTTP Response:
- objectsPerDisk: A dict from DiskID to int
- objectsPerDiskSet:
- originalParentVolumeId: (Internal int)
- parentName: The volume/snapshot's parent snapshot.The value must be of one of the following types: "", SnapshotNameOrGlobalId.
- Subtypes:
- ""
- SnapshotNameOrGlobalId
- parentVolumeId: (Internal int): The ID of the parent snapshot.
- placeAll: (PlacementGroupName): The name of a placement group which describes the disks to be used for all but the
- placeHead: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- placeTail: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- remote: (Optional bool): Indicated whether this is a remote volume or not
- replication: (Replication): The number of copies/replicas kept.
- reuseServer: (Optional bool): is it allowed to place replicas on the same server
- size: (Size): The volume/snapshots's size in bytes.
- tags: (Optional {VolumeTagName: VolumeTagValue}): Arbitrary short name/value pairs stored with the volume.
- templateId: (Internal int)
- templateName: The template that the volume/snapshot's settings are inherited from.The value must be of one of the following types: "", VolumeTemplateName.
- Subtypes:
- ""
- VolumeTemplateName
- visibleVolumeId: (int): The ID by which the volume/snapshot was created.
List the parent snapshots of a volume (VolumeListSnapshots)
List a volume's parent snapshots in the same format as VolumeList
- Request:
- Example HTTP Request:
GET /ctrl/1.0/VolumeListSnapshots/{volumeName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/VolumeListSnapshots/{volumeName}
- Arguments:
- volumeName - VolumeNameOrGlobalId: a string(200), matching ^\#?[A-Za-z0-9_\-.:]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": [{ "autoName": bool, "backup": bool /* Optional */, "backupOfGlobalId": Global Volume Id /* Optional */, "backupOfVisibleVolumeId": int /* Optional */, "bound": bool, "bw": Bandwidth, "clusterId": Global Location Id /* Optional */, "clusterName": ClusterName /* Optional */, "createdFromGlobalId": Global Volume Id /* Internal */ /* Optional */, "createdFromVisibleVolumeId": int /* Internal */ /* Optional */, "creationTimestamp": int, "deleteBlocked": DeleteBlocked /* Internal */ /* Optional */, "deleted": bool, "dematerializationStatus": DematerializationStatus /* Internal */ /* Optional */, "destroyed": bool /* Internal */ /* Optional */, "ecDeleted": bool /* Internal */ /* Optional */, "firstNotParentObjectId": int /* Internal */, "flags": int /* Internal */, "globalId": Global Volume Id, "id": int /* Internal */, "iops": IOPS, "limitType": LimitType /* Optional */, "mcState": MultiClusterState /* Internal */ /* Optional */, "mcStateVal": int /* Internal */ /* Optional */, "metadataVolume": bool /* Optional */, "name": SnapshotNameOrGlobalId, "objectsCount": int, "onVolume": VolumeNameOrGlobalId, "originalParentVolumeId": int /* Internal */, "parentName": Either("", SnapshotNameOrGlobalId), "parentVolumeId": int /* Internal */, "placeAll": PlacementGroupName, "placeHead": PlacementGroupName, "placeTail": PlacementGroupName, "recoveringFromRemote": bool, "remote": bool /* Optional */, "replication": Replication, "reuseServer": bool /* Optional */, "size": Size, "tags": { "VolumeTagName": VolumeTagValue, ... } /* Optional */, "targetDeleteDate": int /* Optional */, "templateId": int /* Internal */, "templateName": Either("", VolumeTemplateName), "transient": bool, "visibleVolumeId": int, "volumeMoveSource": bool /* Internal */ /* Optional */ }, ...] } - Response Data:
- Element type: SnapshotSummary
- autoName: (bool): Is this snapshot anonymous.
- backup: (Optional bool): Is this snapshot a backup of a remote snapshot.
- backupOfGlobalId: (Optional Global Volume Id): The global ID of the volume that has been backed up to this snapshot.
- backupOfVisibleVolumeId: (Optional int): The numeric global ID of the snapshot that has been backed up to
- bound: (bool): Is this a bound snapshot. Bound snapshots are garbage-collected as soon as they remain
- bw: (Bandwidth): Bandwidth limit in KB.
- clusterId: (Optional Global Location Id): multicluster calls only - the id of the cluster volume currently resides in
- clusterName: (Optional ClusterName): multicluster calls only - the name of the cluster volume currently resides in
- createdFromGlobalId: (Optional Internal)
- createdFromVisibleVolumeId: (Optional Internal)
- creationTimestamp: (int): The volume's creation timestamp (UNIX timestamp)
- deleteBlocked: (Optional Internal)
- deleted: (bool): Is this snapshot currently being deleted.
- dematerializationStatus: (Optional Internal)
- destroyed: (Optional Internal): Is this snapshot currently being destroyed.
- ecDeleted: (Optional Internal)
- firstNotParentObjectId: (Internal int)
- flags: (Internal int)
- globalId: (Global Volume Id): The globally-unique identifier of the volume or snapshot.
- id: (Internal int)
- iops: (IOPS): iops limit.
- limitType: (Optional LimitType)
- mcState: (Optional Internal)
- mcStateVal: (Optional Internal)
- metadataVolume: (Optional bool): flag for metadata volumes and snapshots
- name: (SnapshotNameOrGlobalId): The name of this snapshot
- objectsCount: (int): The number of objects that the volume/snapshot is comprised of.
- onVolume: (VolumeNameOrGlobalId): The name of the volume that this is a parent of.
- originalParentVolumeId: (Internal int)
- parentName: The volume/snapshot's parent snapshot.The value must be of one of the following types: "", SnapshotNameOrGlobalId.
- Subtypes:
- ""
- SnapshotNameOrGlobalId
- parentVolumeId: (Internal int): The ID of the parent snapshot.
- placeAll: (PlacementGroupName): The name of a placement group which describes the disks to be used for all but the
- placeHead: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- placeTail: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- recoveringFromRemote: (bool): Is this snapshot's data currently being transferred from a remote location
- remote: (Optional bool): Indicated whether this is a remote volume or not
- replication: (Replication): The number of copies/replicas kept.
- reuseServer: (Optional bool): is it allowed to place replicas on the same server
- size: (Size): The volume/snapshots's size in bytes.
- tags: (Optional {VolumeTagName: VolumeTagValue}): Arbitrary short name/value pairs stored with the volume.
- targetDeleteDate: (Optional int): Scheduled date for the snapshot to be deleted. Unix timestamp
- templateId: (Internal int)
- templateName: The template that the volume/snapshot's settings are inherited from.The value must be of one of the following types: "", VolumeTemplateName.
- Subtypes:
- ""
- VolumeTemplateName
- transient: (bool): Is this a transient snapshot. Transient snapshots are internally created when
- visibleVolumeId: (int): The ID by which the volume/snapshot was created.
- volumeMoveSource: (Optional Internal)
- Example HTTP Response:
Create a new volume (VolumeCreate)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/MultiCluster/VolumeCreate HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "baseOn": VolumeNameOrGlobalId /* Optional */, "bw": Bandwidth /* Optional */, "iops": IOPS /* Optional */, "metadata": bool /* Optional */, "name": Either("", VolumeName) /* Optional */, "parent": SnapshotNameOrGlobalId /* Optional */, "placeAll": PlacementGroupName /* Optional */, "placeHead": PlacementGroupName /* Optional */, "placeTail": PlacementGroupName /* Optional */, "replication": Replication /* Optional */, "reuseServer": bool /* Optional */, "size": Size /* Optional */, "tags": { "VolumeTagName": VolumeTagValue, ... } /* Optional */, "template": VolumeTemplateName /* Optional */ } - Method: POST
- Path: /ctrl/1.0/MultiCluster/VolumeCreate
- Arguments: No arguments
- JSON: VolumeCreateDesc
- baseOn: (Optional VolumeNameOrGlobalId): The name of an already existing volume that the new volume is to be a copy of.
- bw: (Optional Bandwidth): Bandwidth limit in KB.
- iops: (Optional IOPS): iops limit.
- metadata: (Optional bool): Flag for a metadata volume
- name: (Optional Either("", VolumeName)): The name of the volume to be created.
- parent: (Optional SnapshotNameOrGlobalId): The name of the snapshot that the new volume is based on.
- placeAll: (Optional PlacementGroupName): The name of a placement group which describes the disks to be used for all but the
- placeHead: (Optional PlacementGroupName): The name of a placement group which describes the disks to be used for the
- placeTail: (Optional PlacementGroupName): The name of a placement group which describes the disks to be used for the
- replication: (Optional Replication): The number of copies/replicas kept.
- reuseServer: (Optional bool): allow placement of replicas on same server.
- size: (Optional Size): The volume's size in bytes.
- tags: (Optional {VolumeTagName: VolumeTagValue}): Optional name=value tags.
- template: (Optional VolumeTemplateName): The name of the template that the settings of the new volume are based on.
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "autoName": SnapshotName /* Optional */, "generation": int, "globalId": Global Volume Id /* Optional */, "info": string /* Optional */, "name": VolumeNameOrGlobalId /* Optional */, "ok": true } } - Response Data:
ApiOkVolumeCreate
- autoName: (Optional SnapshotName): The name of the transient snapshot used during the creation of the volume.
- generation: (int): The cluster generation based on the number of configuration changes since the
- globalId: (Optional Global Volume Id): The globalId of the new volume
- info: (Optional string): May contain additional information about the request.
- name: (Optional VolumeNameOrGlobalId): The name of the newly-created volume if one was not provided in the VolumeCreate
- ok: (true): Always returns true. If something goes wrong, an ApiError is returned instead.
- Example HTTP Response:
Update a volume (VolumeUpdate)
Alter the configuration of an existing volume.
- Request:
- Example HTTP Request:
POST /ctrl/1.0/MultiCluster/VolumeUpdate/{volumeName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "bw": Bandwidth /* Optional */, "iops": IOPS /* Optional */, "placeAll": PlacementGroupName /* Optional */, "placeHead": PlacementGroupName /* Optional */, "placeTail": PlacementGroupName /* Optional */, "rename": Either("", VolumeName) /* Optional */, "replication": Replication /* Optional */, "reuseServer": bool /* Optional */, "shrinkOk": bool /* Optional */, "size": Size /* Optional */, "sizeAdd": SizeAdd /* Optional */, "tags": { "VolumeTagName": VolumeTagValue, ... } /* Optional */, "template": VolumeTemplateName /* Optional */ } - Method: POST
- Path: /ctrl/1.0/MultiCluster/VolumeUpdate/{volumeName}
- Arguments:
- volumeName - VolumeNameOrGlobalId: a string(200), matching ^\#?[A-Za-z0-9_\-.:]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: VolumeUpdateDesc
- bw: (Optional Bandwidth): Bandwidth limit in KB.
- iops: (Optional IOPS): iops limit.
- placeAll: (Optional PlacementGroupName): The name of a placement group which describes the disks to be used for all but the
- placeHead: (Optional PlacementGroupName): The name of a placement group which describes the disks to be used for the
- placeTail: (Optional PlacementGroupName): The name of a placement group which describes the disks to be used for the
- rename: (Optional Either("", VolumeName)): The new name to be set.
- replication: (Optional Replication): The number of copies/replicas kept.
- reuseServer: (Optional bool): allow placement of replicas on same server.
- shrinkOk: (Optional bool)
- size: (Optional Size): The new size in bytes.
- sizeAdd: (Optional SizeAdd): The number of bytes that the volume's size should be increased by.
- tags: (Optional {VolumeTagName: VolumeTagValue}): Optional name=value tags.
- template: (Optional VolumeTemplateName): The new template that the volume's settings should be based on.
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Freeze a volume (VolumeFreeze)
Convert the volume to a snapshot
- Request:
- Example HTTP Request:
POST /ctrl/1.0/MultiCluster/VolumeFreeze/{volumeName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "deleteAfter": int /* Optional */, "targetDeleteDate": int /* Optional */ } /* Optional */ - Method: POST
- Path: /ctrl/1.0/MultiCluster/VolumeFreeze/{volumeName}
- Arguments:
- volumeName - VolumeNameOrGlobalId: a string(200), matching ^\#?[A-Za-z0-9_\-.:]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: Optional VolumeFreezeDesc
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Rebase a volume (VolumeRebase)
Change the parent of the volume by choosing from the ones higher in the hierarchy or by rebasing it to no parent.
- Request:
- Example HTTP Request:
POST /ctrl/1.0/VolumeRebase/{volumeName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "parentName": SnapshotNameOrGlobalId /* Optional */ } - Method: POST
- Path: /ctrl/1.0/VolumeRebase/{volumeName}
- Arguments:
- volumeName - VolumeNameOrGlobalId: a string(200), matching ^\#?[A-Za-z0-9_\-.:]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: VolumeRebaseDesc
- parentName: (Optional SnapshotNameOrGlobalId): The name of one of the volume's parents on which to re-base.
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Abandon disk (VolumeAbandonDisk)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/VolumeAbandonDisk/{volumeName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "diskId": DiskID } - Method: POST
- Path: /ctrl/1.0/VolumeAbandonDisk/{volumeName}
- Arguments:
- volumeName - VolumeNameOrGlobalId: a string(200), matching ^\#?[A-Za-z0-9_\-.:]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: AbandonDiskDesc
- diskId: (DiskID): the disk to abandon.
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Delete a volume (VolumeDelete)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/MultiCluster/VolumeDelete/{volumeName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: POST
- Path: /ctrl/1.0/MultiCluster/VolumeDelete/{volumeName}
- Arguments:
- volumeName - VolumeNameOrGlobalId: a string(200), matching ^\#?[A-Za-z0-9_\-.:]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Backup a volume to a remote location (VolumeBackup)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/MultiCluster/VolumeBackup HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "location": RemoteLocationName, "tags": { "VolumeTagName": VolumeTagValue, ... } /* Optional */, "volume": VolumeNameOrGlobalId } - Method: POST
- Path: /ctrl/1.0/MultiCluster/VolumeBackup
- Arguments: No arguments
- JSON: VolumeBackupDesc
- location: (RemoteLocationName): The remote location to backup to.
- tags: (Optional {VolumeTagName: VolumeTagValue}): Arbitrary short name/value pairs stored with the volume.
- volume: (VolumeNameOrGlobalId): The name of the volume to backup.
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "autoName": SnapshotName /* Optional */, "generation": int, "globalId": Global Volume Id /* Optional */, "info": string /* Optional */, "name": VolumeNameOrGlobalId /* Optional */, "ok": true, "remoteId": Global Volume Id /* Optional */ } } - Response Data:
ApiOkVolumeBackup
- autoName: (Optional SnapshotName): The name of the transient snapshot used during the creation of the volume.
- generation: (int): The cluster generation based on the number of configuration changes since the
- globalId: (Optional Global Volume Id): The globalId of the new volume
- info: (Optional string): May contain additional information about the request.
- name: (Optional VolumeNameOrGlobalId): The name of the newly-created volume if one was not provided in the VolumeCreate
- ok: (true): Always returns true. If something goes wrong, an ApiError is returned instead.
- remoteId: (Optional Global Volume Id): The globally unique id of the backup
- Example HTTP Response:
Backup a group of volumes to a remote location (VolumesGroupBackup)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/MultiCluster/VolumesGroupBackup HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "location": RemoteLocationName, "tags": { "VolumeTagName": VolumeTagValue, ... } /* Optional */, "volumes": [VolumeNameOrGlobalId, ...] } - Method: POST
- Path: /ctrl/1.0/MultiCluster/VolumesGroupBackup
- Arguments: No arguments
- JSON: VolumesGroupBackupDesc
- location: (RemoteLocationName): The remote location to backup to.
- tags: (Optional {VolumeTagName: VolumeTagValue}): Arbitrary short name/value pairs stored with the volume.
- volumes: The names of the volumes to backup.
- Element type: VolumeNameOrGlobalId
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "backups": { "VolumeName": { "remoteId": Global Volume Id, "snapshotGlobalId": Global Volume Id }, ... }, "generation": int, "info": string /* Optional */, "ok": true } } - Response Data:
ApiOkVolumesGroupBackup
- backups: The mapping of volume names to backup id.A dict from VolumeName to VolumesGroupBackupSingle
- Key type: VolumeName
- Value type: VolumesGroupBackupSingle
- remoteId: (Global Volume Id): the globally-unique id of the backup.
- snapshotGlobalId: (Global Volume Id): the globally-unique id of the backup.
- generation: (int): The cluster generation based on the number of configuration changes since the
- info: (Optional string): May contain additional information about the request.
- ok: (true): Always returns true. If something goes wrong, an ApiError is returned instead.
- backups: The mapping of volume names to backup id.A dict from VolumeName to VolumesGroupBackupSingle
- Example HTTP Response:
Move a volume from the local cluster to a remote cluster (VolumeMoveToRemote)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/VolumeMoveToRemote/{volumeName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "cluster": ClusterName /* Optional */, "clusterId": Global Location Id /* Optional */, "onAttached": OnAttached /* Optional */ } - Method: POST
- Path: /ctrl/1.0/VolumeMoveToRemote/{volumeName}
- Arguments:
- volumeName - VolumeNameOrGlobalId: a string(200), matching ^\#?[A-Za-z0-9_\-.:]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: VolumeMoveToRemoteDesc
- cluster: (Optional ClusterName): The name of the target cluster, use this or clusterId
- clusterId: (Optional Global Location Id): The id of the target cluster, use this or cluster
- onAttached: (Optional OnAttached): What to do if volume is attached. "fail" if not specified
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Export a volume to another cluster, so it can be attached when allowRemoteExports is true (VolumeExport)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/VolumeExport/{volumeName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "cluster": ClusterName /* Optional */, "clusterId": Global Location Id /* Optional */ } - Method: POST
- Path: /ctrl/1.0/VolumeExport/{volumeName}
- Arguments:
- volumeName - VolumeNameOrGlobalId: a string(200), matching ^\#?[A-Za-z0-9_\-.:]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: VolumeExportDesc
- cluster: (Optional ClusterName): The name of the target cluster, use this or clusterId
- clusterId: (Optional Global Location Id): The id of the target cluster, use this or cluster
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Move the volume from its current remote cluster to the local one. Noop if already here. Multicluster only call (VolumeAcquire)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/MultiCluster/VolumeAcquire/{volumeName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "onRemoteAttached": OnAttached /* Optional */ } - Method: POST
- Path: /ctrl/1.0/MultiCluster/VolumeAcquire/{volumeName}
- Arguments:
- volumeName - VolumeNameOrGlobalId: a string(200), matching ^\#?[A-Za-z0-9_\-.:]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: VolumeAcquireDesc
- onRemoteAttached: (Optional OnAttached): What to do if volume is attached. "fail" if not specified
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Create a volume from a snapshot from a remote location (VolumeFromRemote)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/VolumeFromRemote HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "export": bool /* Optional */, "name": Either("", VolumeName), "placeAll": PlacementGroupName /* Optional */, "placeHead": PlacementGroupName /* Optional */, "placeTail": PlacementGroupName /* Optional */, "remoteId": Global Volume Id, "remoteLocation": RemoteLocationName, "replication": Replication /* Optional */, "tags": { "VolumeTagName": VolumeTagValue, ... } /* Optional */, "template": VolumeTemplateName /* Optional */ } - Method: POST
- Path: /ctrl/1.0/VolumeFromRemote
- Arguments: No arguments
- JSON: VolumeFromRemoteDesc
- export: (Optional bool): Auto-export the volume after creating it. e.g. for backup.
- name: The name of the new volume.The value must be of one of the following types: "", VolumeName.
- Subtypes:
- ""
- VolumeName
- placeAll: (Optional PlacementGroupName): The name of a placement group which describes the disks to be used for all but the
- placeHead: (Optional PlacementGroupName): The name of a placement group which describes the disks to be used for the
- placeTail: (Optional PlacementGroupName): The name of a placement group which describes the disks to be used for the
- remoteId: (Global Volume Id): The global snapshot identifier.
- remoteLocation: (RemoteLocationName): The name of the remote location to fetch the snapshot from.
- replication: (Optional Replication): The number of copies/replicas kept.
- tags: (Optional {VolumeTagName: VolumeTagValue}): Arbitrary short name/value pairs stored with the volume.
- template: (Optional VolumeTemplateName): The name of the template that the settings of the new volume are based on.
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Revert a volume to a snapshot discarding all its current data. (VolumeRevert)
Revert volume to a snapshot discarding all its current data. If the volume is attached, after the revert it will get 2 links in /dev/storpool-byid/ - the original autogenerated name (a.k.a. StorPool globalId that the volume was initially created with) and the actual current globalId of the volume (after the revert).
- Request:
- Example HTTP Request:
POST /ctrl/1.0/MultiCluster/VolumeRevert/{volumeName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "revertSize": bool /* Optional */, "toSnapshot": SnapshotNameOrGlobalId } - Method: POST
- Path: /ctrl/1.0/MultiCluster/VolumeRevert/{volumeName}
- Arguments:
- volumeName - VolumeNameOrGlobalId: a string(200), matching ^\#?[A-Za-z0-9_\-.:]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: VolumeRevertDesc
- revertSize: (Optional bool): set the volume size to the exact size of the snapshot.
- toSnapshot: (SnapshotNameOrGlobalId): name of the snapshot to revert to
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Revert a group of volumes to snapshots discarding all of theirs current data. (VolumesGroupRevert)
Revert a group of volumes to snapshots discarding all of theirs current data.
- Request:
- Example HTTP Request:
POST /ctrl/1.0/MultiCluster/VolumesGroupRevert HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "revertSize": bool /* Optional */, "volumes": [{ "toSnapshot": SnapshotNameOrGlobalId, "volume": VolumeNameOrGlobalId }, ...] } - Method: POST
- Path: /ctrl/1.0/MultiCluster/VolumesGroupRevert
- Arguments: No arguments
- JSON: VolumesGroupRevertDesc
- revertSize: (Optional bool): set the volume size to the exact size of the snapshot.
- volumes: description of volumes to be reverted
- Element type: GroupVolumeRevertDesc
- toSnapshot: (SnapshotNameOrGlobalId): name or globalId of the snapshot to revert to
- volume: (VolumeNameOrGlobalId): name or globalId of the volume to be reverted
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Snapshots
Snapshots in their essence are very similar to volumes in the sense that many operations supported by volumes are also supported by snapshots (all except write-related operations). They can not be modified and play an essential role in copy-on-write scenarios.
List all snapshots (SnapshotsList)
List all the snapshots in the cluster in the same format as VolumeList.
- Request:
- Example HTTP Request:
GET /ctrl/1.0/MultiCluster/SnapshotsList HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/MultiCluster/SnapshotsList
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": [{ "autoName": bool, "backup": bool /* Optional */, "backupOfGlobalId": Global Volume Id /* Optional */, "backupOfVisibleVolumeId": int /* Optional */, "bound": bool, "bw": Bandwidth, "clusterId": Global Location Id /* Optional */, "clusterName": ClusterName /* Optional */, "createdFromGlobalId": Global Volume Id /* Internal */ /* Optional */, "createdFromVisibleVolumeId": int /* Internal */ /* Optional */, "creationTimestamp": int, "deleteBlocked": DeleteBlocked /* Internal */ /* Optional */, "deleted": bool, "dematerializationStatus": DematerializationStatus /* Internal */ /* Optional */, "destroyed": bool /* Internal */ /* Optional */, "ecDeleted": bool /* Internal */ /* Optional */, "firstNotParentObjectId": int /* Internal */, "flags": int /* Internal */, "globalId": Global Volume Id, "id": int /* Internal */, "iops": IOPS, "limitType": LimitType /* Optional */, "mcState": MultiClusterState /* Internal */ /* Optional */, "mcStateVal": int /* Internal */ /* Optional */, "metadataVolume": bool /* Optional */, "name": SnapshotNameOrGlobalId, "objectsCount": int, "onVolume": VolumeNameOrGlobalId, "originalParentVolumeId": int /* Internal */, "parentName": Either("", SnapshotNameOrGlobalId), "parentVolumeId": int /* Internal */, "placeAll": PlacementGroupName, "placeHead": PlacementGroupName, "placeTail": PlacementGroupName, "recoveringFromRemote": bool, "remote": bool /* Optional */, "replication": Replication, "reuseServer": bool /* Optional */, "size": Size, "tags": { "VolumeTagName": VolumeTagValue, ... } /* Optional */, "targetDeleteDate": int /* Optional */, "templateId": int /* Internal */, "templateName": Either("", VolumeTemplateName), "transient": bool, "visibleVolumeId": int, "volumeMoveSource": bool /* Internal */ /* Optional */ }, ...] } - Response Data:
- Element type: SnapshotSummary
- autoName: (bool): Is this snapshot anonymous.
- backup: (Optional bool): Is this snapshot a backup of a remote snapshot.
- backupOfGlobalId: (Optional Global Volume Id): The global ID of the volume that has been backed up to this snapshot.
- backupOfVisibleVolumeId: (Optional int): The numeric global ID of the snapshot that has been backed up to
- bound: (bool): Is this a bound snapshot. Bound snapshots are garbage-collected as soon as they remain
- bw: (Bandwidth): Bandwidth limit in KB.
- clusterId: (Optional Global Location Id): multicluster calls only - the id of the cluster volume currently resides in
- clusterName: (Optional ClusterName): multicluster calls only - the name of the cluster volume currently resides in
- createdFromGlobalId: (Optional Internal)
- createdFromVisibleVolumeId: (Optional Internal)
- creationTimestamp: (int): The volume's creation timestamp (UNIX timestamp)
- deleteBlocked: (Optional Internal)
- deleted: (bool): Is this snapshot currently being deleted.
- dematerializationStatus: (Optional Internal)
- destroyed: (Optional Internal): Is this snapshot currently being destroyed.
- ecDeleted: (Optional Internal)
- firstNotParentObjectId: (Internal int)
- flags: (Internal int)
- globalId: (Global Volume Id): The globally-unique identifier of the volume or snapshot.
- id: (Internal int)
- iops: (IOPS): iops limit.
- limitType: (Optional LimitType)
- mcState: (Optional Internal)
- mcStateVal: (Optional Internal)
- metadataVolume: (Optional bool): flag for metadata volumes and snapshots
- name: (SnapshotNameOrGlobalId): The name of this snapshot
- objectsCount: (int): The number of objects that the volume/snapshot is comprised of.
- onVolume: (VolumeNameOrGlobalId): The name of the volume that this is a parent of.
- originalParentVolumeId: (Internal int)
- parentName: The volume/snapshot's parent snapshot.The value must be of one of the following types: "", SnapshotNameOrGlobalId.
- Subtypes:
- ""
- SnapshotNameOrGlobalId
- parentVolumeId: (Internal int): The ID of the parent snapshot.
- placeAll: (PlacementGroupName): The name of a placement group which describes the disks to be used for all but the
- placeHead: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- placeTail: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- recoveringFromRemote: (bool): Is this snapshot's data currently being transferred from a remote location
- remote: (Optional bool): Indicated whether this is a remote volume or not
- replication: (Replication): The number of copies/replicas kept.
- reuseServer: (Optional bool): is it allowed to place replicas on the same server
- size: (Size): The volume/snapshots's size in bytes.
- tags: (Optional {VolumeTagName: VolumeTagValue}): Arbitrary short name/value pairs stored with the volume.
- targetDeleteDate: (Optional int): Scheduled date for the snapshot to be deleted. Unix timestamp
- templateId: (Internal int)
- templateName: The template that the volume/snapshot's settings are inherited from.The value must be of one of the following types: "", VolumeTemplateName.
- Subtypes:
- ""
- VolumeTemplateName
- transient: (bool): Is this a transient snapshot. Transient snapshots are internally created when
- visibleVolumeId: (int): The ID by which the volume/snapshot was created.
- volumeMoveSource: (Optional Internal)
- Example HTTP Response:
List snapshots space estimations (SnapshotsSpace)
List estimated virtual space used by each snapshot.
- Request:
- Example HTTP Request:
GET /ctrl/1.0/MultiCluster/SnapshotsSpace HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/MultiCluster/SnapshotsSpace
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": [{ "autoName": bool, "backup": bool /* Optional */, "backupOfGlobalId": Global Volume Id /* Optional */, "backupOfVisibleVolumeId": int /* Optional */, "bound": bool, "bw": Bandwidth, "clusterId": Global Location Id /* Optional */, "clusterName": ClusterName /* Optional */, "createdFromGlobalId": Global Volume Id /* Internal */ /* Optional */, "createdFromVisibleVolumeId": int /* Internal */ /* Optional */, "creationTimestamp": int, "deleteBlocked": DeleteBlocked /* Internal */ /* Optional */, "deleted": bool, "dematerializationStatus": DematerializationStatus /* Internal */ /* Optional */, "destroyed": bool /* Internal */ /* Optional */, "ecDeleted": bool /* Internal */ /* Optional */, "firstNotParentObjectId": int /* Internal */, "flags": int /* Internal */, "globalId": Global Volume Id, "id": int /* Internal */, "iops": IOPS, "limitType": LimitType /* Optional */, "mcState": MultiClusterState /* Internal */ /* Optional */, "mcStateVal": int /* Internal */ /* Optional */, "metadataVolume": bool /* Optional */, "name": SnapshotNameOrGlobalId, "objectsCount": int, "onVolume": VolumeNameOrGlobalId, "originalParentVolumeId": int /* Internal */, "parentName": Either("", SnapshotNameOrGlobalId), "parentVolumeId": int /* Internal */, "placeAll": PlacementGroupName, "placeHead": PlacementGroupName, "placeTail": PlacementGroupName, "recoveringFromRemote": bool, "remote": bool /* Optional */, "replication": Replication, "reuseServer": bool /* Optional */, "size": Size, "spaceUsed": int, "storedSize": int, "tags": { "VolumeTagName": VolumeTagValue, ... } /* Optional */, "targetDeleteDate": int /* Optional */, "templateId": int /* Internal */, "templateName": Either("", VolumeTemplateName), "transient": bool, "visibleVolumeId": int, "volumeMoveSource": bool /* Internal */ /* Optional */ }, ...] } - Response Data:
- Element type: SnapshotSpace
- autoName: (bool): Is this snapshot anonymous.
- backup: (Optional bool): Is this snapshot a backup of a remote snapshot.
- backupOfGlobalId: (Optional Global Volume Id): The global ID of the volume that has been backed up to this snapshot.
- backupOfVisibleVolumeId: (Optional int): The numeric global ID of the snapshot that has been backed up to
- bound: (bool): Is this a bound snapshot. Bound snapshots are garbage-collected as soon as they remain
- bw: (Bandwidth): Bandwidth limit in KB.
- clusterId: (Optional Global Location Id): multicluster calls only - the id of the cluster volume currently resides in
- clusterName: (Optional ClusterName): multicluster calls only - the name of the cluster volume currently resides in
- createdFromGlobalId: (Optional Internal)
- createdFromVisibleVolumeId: (Optional Internal)
- creationTimestamp: (int): The volume's creation timestamp (UNIX timestamp)
- deleteBlocked: (Optional Internal)
- deleted: (bool): Is this snapshot currently being deleted.
- dematerializationStatus: (Optional Internal)
- destroyed: (Optional Internal): Is this snapshot currently being destroyed.
- ecDeleted: (Optional Internal)
- firstNotParentObjectId: (Internal int)
- flags: (Internal int)
- globalId: (Global Volume Id): The globally-unique identifier of the volume or snapshot.
- id: (Internal int)
- iops: (IOPS): iops limit.
- limitType: (Optional LimitType)
- mcState: (Optional Internal)
- mcStateVal: (Optional Internal)
- metadataVolume: (Optional bool): flag for metadata volumes and snapshots
- name: (SnapshotNameOrGlobalId): The name of this snapshot
- objectsCount: (int): The number of objects that the volume/snapshot is comprised of.
- onVolume: (VolumeNameOrGlobalId): The name of the volume that this is a parent of.
- originalParentVolumeId: (Internal int)
- parentName: The volume/snapshot's parent snapshot.The value must be of one of the following types: "", SnapshotNameOrGlobalId.
- Subtypes:
- ""
- SnapshotNameOrGlobalId
- parentVolumeId: (Internal int): The ID of the parent snapshot.
- placeAll: (PlacementGroupName): The name of a placement group which describes the disks to be used for all but the
- placeHead: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- placeTail: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- recoveringFromRemote: (bool): Is this snapshot's data currently being transferred from a remote location
- remote: (Optional bool): Indicated whether this is a remote volume or not
- replication: (Replication): The number of copies/replicas kept.
- reuseServer: (Optional bool): is it allowed to place replicas on the same server
- size: (Size): The volume/snapshots's size in bytes.
- spaceUsed: (int): The number of bytes of client data that will be freed if this snapshot is deleted.
- storedSize: (int): The number of bytes of client data on this snapshot. This does not take into account
- tags: (Optional {VolumeTagName: VolumeTagValue}): Arbitrary short name/value pairs stored with the volume.
- targetDeleteDate: (Optional int): Scheduled date for the snapshot to be deleted. Unix timestamp
- templateId: (Internal int)
- templateName: The template that the volume/snapshot's settings are inherited from.The value must be of one of the following types: "", VolumeTemplateName.
- Subtypes:
- ""
- VolumeTemplateName
- transient: (bool): Is this a transient snapshot. Transient snapshots are internally created when
- visibleVolumeId: (int): The ID by which the volume/snapshot was created.
- volumeMoveSource: (Optional Internal)
- Example HTTP Response:
List a single snapshot (Snapshot)
Same as SnapshotList but only return information about a given snapshot.
- Request:
- Example HTTP Request:
GET /ctrl/1.0/MultiCluster/Snapshot/{snapshotName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/MultiCluster/Snapshot/{snapshotName}
- Arguments:
- snapshotName - SnapshotNameOrGlobalId: a string(200), matching ^\*?[A-Za-z0-9_\-.:@]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": [{ "autoName": bool, "backup": bool /* Optional */, "backupOfGlobalId": Global Volume Id /* Optional */, "backupOfVisibleVolumeId": int /* Optional */, "bound": bool, "bw": Bandwidth, "clusterId": Global Location Id /* Optional */, "clusterName": ClusterName /* Optional */, "createdFromGlobalId": Global Volume Id /* Internal */ /* Optional */, "createdFromVisibleVolumeId": int /* Internal */ /* Optional */, "creationTimestamp": int, "deleteBlocked": DeleteBlocked /* Internal */ /* Optional */, "deleted": bool, "dematerializationStatus": DematerializationStatus /* Internal */ /* Optional */, "destroyed": bool /* Internal */ /* Optional */, "ecDeleted": bool /* Internal */ /* Optional */, "firstNotParentObjectId": int /* Internal */, "flags": int /* Internal */, "globalId": Global Volume Id, "id": int /* Internal */, "iops": IOPS, "limitType": LimitType /* Optional */, "mcState": MultiClusterState /* Internal */ /* Optional */, "mcStateVal": int /* Internal */ /* Optional */, "metadataVolume": bool /* Optional */, "name": SnapshotNameOrGlobalId, "objectsCount": int, "onVolume": VolumeNameOrGlobalId, "originalParentVolumeId": int /* Internal */, "parentName": Either("", SnapshotNameOrGlobalId), "parentVolumeId": int /* Internal */, "placeAll": PlacementGroupName, "placeHead": PlacementGroupName, "placeTail": PlacementGroupName, "recoveringFromRemote": bool, "remote": bool /* Optional */, "replication": Replication, "reuseServer": bool /* Optional */, "size": Size, "tags": { "VolumeTagName": VolumeTagValue, ... } /* Optional */, "targetDeleteDate": int /* Optional */, "templateId": int /* Internal */, "templateName": Either("", VolumeTemplateName), "transient": bool, "visibleVolumeId": int, "volumeMoveSource": bool /* Internal */ /* Optional */ }, ...] } - Response Data:
- Element type: SnapshotSummary
- autoName: (bool): Is this snapshot anonymous.
- backup: (Optional bool): Is this snapshot a backup of a remote snapshot.
- backupOfGlobalId: (Optional Global Volume Id): The global ID of the volume that has been backed up to this snapshot.
- backupOfVisibleVolumeId: (Optional int): The numeric global ID of the snapshot that has been backed up to
- bound: (bool): Is this a bound snapshot. Bound snapshots are garbage-collected as soon as they remain
- bw: (Bandwidth): Bandwidth limit in KB.
- clusterId: (Optional Global Location Id): multicluster calls only - the id of the cluster volume currently resides in
- clusterName: (Optional ClusterName): multicluster calls only - the name of the cluster volume currently resides in
- createdFromGlobalId: (Optional Internal)
- createdFromVisibleVolumeId: (Optional Internal)
- creationTimestamp: (int): The volume's creation timestamp (UNIX timestamp)
- deleteBlocked: (Optional Internal)
- deleted: (bool): Is this snapshot currently being deleted.
- dematerializationStatus: (Optional Internal)
- destroyed: (Optional Internal): Is this snapshot currently being destroyed.
- ecDeleted: (Optional Internal)
- firstNotParentObjectId: (Internal int)
- flags: (Internal int)
- globalId: (Global Volume Id): The globally-unique identifier of the volume or snapshot.
- id: (Internal int)
- iops: (IOPS): iops limit.
- limitType: (Optional LimitType)
- mcState: (Optional Internal)
- mcStateVal: (Optional Internal)
- metadataVolume: (Optional bool): flag for metadata volumes and snapshots
- name: (SnapshotNameOrGlobalId): The name of this snapshot
- objectsCount: (int): The number of objects that the volume/snapshot is comprised of.
- onVolume: (VolumeNameOrGlobalId): The name of the volume that this is a parent of.
- originalParentVolumeId: (Internal int)
- parentName: The volume/snapshot's parent snapshot.The value must be of one of the following types: "", SnapshotNameOrGlobalId.
- Subtypes:
- ""
- SnapshotNameOrGlobalId
- parentVolumeId: (Internal int): The ID of the parent snapshot.
- placeAll: (PlacementGroupName): The name of a placement group which describes the disks to be used for all but the
- placeHead: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- placeTail: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- recoveringFromRemote: (bool): Is this snapshot's data currently being transferred from a remote location
- remote: (Optional bool): Indicated whether this is a remote volume or not
- replication: (Replication): The number of copies/replicas kept.
- reuseServer: (Optional bool): is it allowed to place replicas on the same server
- size: (Size): The volume/snapshots's size in bytes.
- tags: (Optional {VolumeTagName: VolumeTagValue}): Arbitrary short name/value pairs stored with the volume.
- targetDeleteDate: (Optional int): Scheduled date for the snapshot to be deleted. Unix timestamp
- templateId: (Internal int)
- templateName: The template that the volume/snapshot's settings are inherited from.The value must be of one of the following types: "", VolumeTemplateName.
- Subtypes:
- ""
- VolumeTemplateName
- transient: (bool): Is this a transient snapshot. Transient snapshots are internally created when
- visibleVolumeId: (int): The ID by which the volume/snapshot was created.
- volumeMoveSource: (Optional Internal)
- Example HTTP Response:
Describe a snapshot (SnapshotDescribe)
Return detailed information about the distribution of the snapshot's data on the disks.
- Request:
- Example HTTP Request:
GET /ctrl/1.0/MultiCluster/SnapshotDescribe/{snapshotName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/MultiCluster/SnapshotDescribe/{snapshotName}
- Arguments:
- snapshotName - SnapshotNameOrGlobalId: a string(200), matching ^\*?[A-Za-z0-9_\-.:@]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "autoName": bool, "backup": bool /* Optional */, "backupOfGlobalId": Global Volume Id /* Optional */, "backupOfVisibleVolumeId": int /* Optional */, "bound": bool, "bw": Bandwidth, "clusterId": Global Location Id /* Optional */, "clusterName": ClusterName /* Optional */, "createdFromGlobalId": Global Volume Id /* Internal */ /* Optional */, "createdFromVisibleVolumeId": int /* Internal */ /* Optional */, "creationTimestamp": int, "deleteBlocked": DeleteBlocked /* Internal */ /* Optional */, "deleted": bool, "dematerializationStatus": DematerializationStatus /* Internal */ /* Optional */, "destroyed": bool /* Internal */ /* Optional */, "ecDeleted": bool /* Internal */ /* Optional */, "firstNotParentObjectId": int /* Internal */, "flags": int /* Internal */, "globalId": Global Volume Id, "id": int /* Internal */, "iops": IOPS, "limitType": LimitType /* Optional */, "mcState": MultiClusterState /* Internal */ /* Optional */, "mcStateVal": int /* Internal */ /* Optional */, "metadataVolume": bool /* Optional */, "name": SnapshotNameOrGlobalId, "objects": [[DiskID, ...], ...], "objectsCount": int, "onVolume": VolumeNameOrGlobalId, "originalParentVolumeId": int /* Internal */, "parentName": Either("", SnapshotNameOrGlobalId), "parentVolumeId": int /* Internal */, "placeAll": PlacementGroupName, "placeHead": PlacementGroupName, "placeTail": PlacementGroupName, "recoveringFromRemote": bool, "remote": bool /* Optional */, "replication": Replication, "reuseServer": bool /* Optional */, "size": Size, "tags": { "VolumeTagName": VolumeTagValue, ... } /* Optional */, "targetDeleteDate": int /* Optional */, "targetDiskSets": [[DiskID, ...], ...], "templateId": int /* Internal */, "templateName": Either("", VolumeTemplateName), "transient": bool, "visibleVolumeId": int, "volumeMoveSource": bool /* Internal */ /* Optional */ } } - Response Data:
Snapshot
- autoName: (bool): Is this snapshot anonymous.
- backup: (Optional bool): Is this snapshot a backup of a remote snapshot.
- backupOfGlobalId: (Optional Global Volume Id): The global ID of the volume that has been backed up to this snapshot.
- backupOfVisibleVolumeId: (Optional int): The numeric global ID of the snapshot that has been backed up to
- bound: (bool): Is this a bound snapshot. Bound snapshots are garbage-collected as soon as they remain
- bw: (Bandwidth): Bandwidth limit in KB.
- clusterId: (Optional Global Location Id): multicluster calls only - the id of the cluster volume currently resides in
- clusterName: (Optional ClusterName): multicluster calls only - the name of the cluster volume currently resides in
- createdFromGlobalId: (Optional Internal)
- createdFromVisibleVolumeId: (Optional Internal)
- creationTimestamp: (int): The volume's creation timestamp (UNIX timestamp)
- deleteBlocked: (Optional Internal)
- deleted: (bool): Is this snapshot currently being deleted.
- dematerializationStatus: (Optional Internal)
- destroyed: (Optional Internal): Is this snapshot currently being destroyed.
- ecDeleted: (Optional Internal)
- firstNotParentObjectId: (Internal int)
- flags: (Internal int)
- globalId: (Global Volume Id): The globally-unique identifier of the volume or snapshot.
- id: (Internal int)
- iops: (IOPS): iops limit.
- limitType: (Optional LimitType)
- mcState: (Optional Internal)
- mcStateVal: (Optional Internal)
- metadataVolume: (Optional bool): flag for metadata volumes and snapshots
- name: (SnapshotNameOrGlobalId): The name of this snapshot
- objects: Where each object is actually stored.
- Element type:
- Element type: DiskID
- Example HTTP Response:
- objectsCount: (int): The number of objects that the volume/snapshot is comprised of.
- onVolume: (VolumeNameOrGlobalId): The name of the volume that this is a parent of.
- originalParentVolumeId: (Internal int)
- parentName: The volume/snapshot's parent snapshot.The value must be of one of the following types: "", SnapshotNameOrGlobalId.
- Subtypes:
- ""
- SnapshotNameOrGlobalId
- parentVolumeId: (Internal int): The ID of the parent snapshot.
- placeAll: (PlacementGroupName): The name of a placement group which describes the disks to be used for all but the
- placeHead: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- placeTail: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- recoveringFromRemote: (bool): Is this snapshot's data currently being transferred from a remote location
- remote: (Optional bool): Indicated whether this is a remote volume or not
- replication: (Replication): The number of copies/replicas kept.
- reuseServer: (Optional bool): is it allowed to place replicas on the same server
- size: (Size): The volume/snapshots's size in bytes.
- tags: (Optional {VolumeTagName: VolumeTagValue}): Arbitrary short name/value pairs stored with the volume.
- targetDeleteDate: (Optional int): Scheduled date for the snapshot to be deleted. Unix timestamp
- targetDiskSets: Sets of disks that the volume's data should be stored on.
- Element type:
- Element type: DiskID
- templateId: (Internal int)
- templateName: The template that the volume/snapshot's settings are inherited from.The value must be of one of the following types: "", VolumeTemplateName.
- Subtypes:
- ""
- VolumeTemplateName
- transient: (bool): Is this a transient snapshot. Transient snapshots are internally created when
- visibleVolumeId: (int): The ID by which the volume/snapshot was created.
- volumeMoveSource: (Optional Internal)
Get snapshot info (SnapshotGetInfo)
Return general information about the distribution of the snapshot's data on the disks.
- Request:
- Example HTTP Request:
GET /ctrl/1.0/MultiCluster/SnapshotGetInfo/{snapshotName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/MultiCluster/SnapshotGetInfo/{snapshotName}
- Arguments:
- snapshotName - SnapshotNameOrGlobalId: a string(200), matching ^\*?[A-Za-z0-9_\-.:@]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "autoName": bool, "backup": bool /* Optional */, "backupOfGlobalId": Global Volume Id /* Optional */, "backupOfVisibleVolumeId": int /* Optional */, "bound": bool, "bw": Bandwidth, "clusterId": Global Location Id /* Optional */, "clusterName": ClusterName /* Optional */, "createdFromGlobalId": Global Volume Id /* Internal */ /* Optional */, "createdFromVisibleVolumeId": int /* Internal */ /* Optional */, "creationTimestamp": int, "deleteBlocked": DeleteBlocked /* Internal */ /* Optional */, "deleted": bool, "dematerializationStatus": DematerializationStatus /* Internal */ /* Optional */, "destroyed": bool /* Internal */ /* Optional */, "disksCount": int, "ecDeleted": bool /* Internal */ /* Optional */, "firstNotParentObjectId": int /* Internal */, "flags": int /* Internal */, "globalId": Global Volume Id, "id": int /* Internal */, "iops": IOPS, "limitType": LimitType /* Optional */, "mcState": MultiClusterState /* Internal */ /* Optional */, "mcStateVal": int /* Internal */ /* Optional */, "metadataVolume": bool /* Optional */, "name": SnapshotNameOrGlobalId, "objectsCount": int, "objectsPerChain": [{ "count": int, "disks": [DiskID, ...] }, ...], "objectsPerDisk": { "DiskID": int, ... }, "objectsPerDiskSet": [{ "count": int, "disks": [DiskID, ...] }, ...], "onVolume": VolumeNameOrGlobalId, "originalParentVolumeId": int /* Internal */, "parentName": Either("", SnapshotNameOrGlobalId), "parentVolumeId": int /* Internal */, "placeAll": PlacementGroupName, "placeHead": PlacementGroupName, "placeTail": PlacementGroupName, "recoveringFromRemote": bool, "remote": bool /* Optional */, "replication": Replication, "reuseServer": bool /* Optional */, "size": Size, "tags": { "VolumeTagName": VolumeTagValue, ... } /* Optional */, "targetDeleteDate": int /* Optional */, "templateId": int /* Internal */, "templateName": Either("", VolumeTemplateName), "transient": bool, "visibleVolumeId": int, "volumeMoveSource": bool /* Internal */ /* Optional */ } } - Response Data:
SnapshotInfo
- autoName: (bool): Is this snapshot anonymous.
- backup: (Optional bool): Is this snapshot a backup of a remote snapshot.
- backupOfGlobalId: (Optional Global Volume Id): The global ID of the volume that has been backed up to this snapshot.
- backupOfVisibleVolumeId: (Optional int): The numeric global ID of the snapshot that has been backed up to
- bound: (bool): Is this a bound snapshot. Bound snapshots are garbage-collected as soon as they remain
- bw: (Bandwidth): Bandwidth limit in KB.
- clusterId: (Optional Global Location Id): multicluster calls only - the id of the cluster volume currently resides in
- clusterName: (Optional ClusterName): multicluster calls only - the name of the cluster volume currently resides in
- createdFromGlobalId: (Optional Internal)
- createdFromVisibleVolumeId: (Optional Internal)
- creationTimestamp: (int): The volume's creation timestamp (UNIX timestamp)
- deleteBlocked: (Optional Internal)
- deleted: (bool): Is this snapshot currently being deleted.
- dematerializationStatus: (Optional Internal)
- destroyed: (Optional Internal): Is this snapshot currently being destroyed.
- disksCount: (int)
- ecDeleted: (Optional Internal)
- firstNotParentObjectId: (Internal int)
- flags: (Internal int)
- globalId: (Global Volume Id): The globally-unique identifier of the volume or snapshot.
- id: (Internal int)
- iops: (IOPS): iops limit.
- limitType: (Optional LimitType)
- mcState: (Optional Internal)
- mcStateVal: (Optional Internal)
- metadataVolume: (Optional bool): flag for metadata volumes and snapshots
- name: (SnapshotNameOrGlobalId): The name of this snapshot
- objectsCount: (int): The number of objects that the volume/snapshot is comprised of.
- objectsPerChain:
- Example HTTP Response:
- objectsPerDisk: A dict from DiskID to int
- objectsPerDiskSet:
- onVolume: (VolumeNameOrGlobalId): The name of the volume that this is a parent of.
- originalParentVolumeId: (Internal int)
- parentName: The volume/snapshot's parent snapshot.The value must be of one of the following types: "", SnapshotNameOrGlobalId.
- Subtypes:
- ""
- SnapshotNameOrGlobalId
- parentVolumeId: (Internal int): The ID of the parent snapshot.
- placeAll: (PlacementGroupName): The name of a placement group which describes the disks to be used for all but the
- placeHead: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- placeTail: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- recoveringFromRemote: (bool): Is this snapshot's data currently being transferred from a remote location
- remote: (Optional bool): Indicated whether this is a remote volume or not
- replication: (Replication): The number of copies/replicas kept.
- reuseServer: (Optional bool): is it allowed to place replicas on the same server
- size: (Size): The volume/snapshots's size in bytes.
- tags: (Optional {VolumeTagName: VolumeTagValue}): Arbitrary short name/value pairs stored with the volume.
- targetDeleteDate: (Optional int): Scheduled date for the snapshot to be deleted. Unix timestamp
- templateId: (Internal int)
- templateName: The template that the volume/snapshot's settings are inherited from.The value must be of one of the following types: "", VolumeTemplateName.
- Subtypes:
- ""
- VolumeTemplateName
- transient: (bool): Is this a transient snapshot. Transient snapshots are internally created when
- visibleVolumeId: (int): The ID by which the volume/snapshot was created.
- volumeMoveSource: (Optional Internal)
Snapshot a volume (VolumeSnapshot)
Create a snapshot of the given volume; the snapshot becomes the parent of the volume.
- Request:
- Example HTTP Request:
POST /ctrl/1.0/MultiCluster/VolumeSnapshot/{volumeName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "bind": bool /* Optional */, "deleteAfter": int /* Optional */, "name": Either("", VolumeName) /* Optional */, "tags": { "VolumeTagName": VolumeTagValue, ... } /* Optional */, "targetDeleteDate": int /* Optional */ } - Method: POST
- Path: /ctrl/1.0/MultiCluster/VolumeSnapshot/{volumeName}
- Arguments:
- volumeName - VolumeNameOrGlobalId: a string(200), matching ^\#?[A-Za-z0-9_\-.:]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: VolumeSnapshotDesc
- bind: (Optional bool): If true, the lifetime of the newly created snapshot will be bound to the lifetime of
- deleteAfter: (Optional int): If not 0 set targetDeleteDate relative to the current time on the mgmt node.
- name: (Optional Either("", VolumeName)): The name of the newly created snapshot. If not specified, a name will be auto-generated
- tags: (Optional {VolumeTagName: VolumeTagValue}): Arbitrary short name/value pairs stored with the snapshot.
- targetDeleteDate: (Optional int): If not 0 set absolute targetDeleteDate for the new snapshot. Unix timestamp.
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "autoName": SnapshotName /* Optional */, "generation": int, "info": string /* Optional */, "ok": true, "snapshotGlobalId": Global Volume Id /* Optional */, "snapshotVisibleVolumeId": int /* Optional */ } } - Response Data:
ApiOkSnapshotCreate
- autoName: (Optional SnapshotName): The name of the transient snapshot used during the creation of the volume.
- generation: (int): The cluster generation based on the number of configuration changes since the
- info: (Optional string): May contain additional information about the request.
- ok: (true): Always returns true. If something goes wrong, an ApiError is returned instead.
- snapshotGlobalId: (Optional Global Volume Id): The global snapshot identifier.
- snapshotVisibleVolumeId: (Optional int): The ID by which the volume/snapshot was created.
- Example HTTP Response:
Update a snapshot (SnapshotUpdate)
Alter the configuration of an existing snapshot.
- Request:
- Example HTTP Request:
POST /ctrl/1.0/MultiCluster/SnapshotUpdate/{snapshotName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "bind": bool /* Optional */, "bw": Bandwidth /* Optional */, "deleteAfter": int /* Optional */, "iops": IOPS /* Optional */, "placeAll": PlacementGroupName /* Optional */, "placeHead": PlacementGroupName /* Optional */, "placeTail": PlacementGroupName /* Optional */, "rename": Either("", VolumeName) /* Optional */, "replication": Replication /* Optional */, "reuseServer": bool /* Optional */, "tags": { "VolumeTagName": VolumeTagValue, ... } /* Optional */, "targetDeleteDate": int /* Optional */, "template": VolumeTemplateName /* Optional */ } - Method: POST
- Path: /ctrl/1.0/MultiCluster/SnapshotUpdate/{snapshotName}
- Arguments:
- snapshotName - SnapshotNameOrGlobalId: a string(200), matching ^\*?[A-Za-z0-9_\-.:@]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: SnapshotUpdateDesc
- bind: (Optional bool): When true bind this snapshot, when false - unbind it. If not set or missing - no change.
- bw: (Optional Bandwidth): Bandwidth limit in KB.
- deleteAfter: (Optional int): set targetDeleteDate relative to the current time on the mgmt node. If not 0,
- iops: (Optional IOPS): iops limit.
- placeAll: (Optional PlacementGroupName): The name of a placement group which describes the disks to be used for all but the
- placeHead: (Optional PlacementGroupName): The name of a placement group which describes the disks to be used for the
- placeTail: (Optional PlacementGroupName): The name of a placement group which describes the disks to be used for the
- rename: (Optional Either("", VolumeName)): The new name to be set.
- replication: (Optional Replication): The number of copies/replicas kept.
- reuseServer: (Optional bool): allow placement of replicas on same server.
- tags: (Optional {VolumeTagName: VolumeTagValue}): Arbitrary short name/value pairs stored with the snapshot.
- targetDeleteDate: (Optional int): set absolute targetDeleteDate, or 0 to disable automatic deleting.
- template: (Optional VolumeTemplateName): The new template that the snapshot's settings should be based on.
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Rebase a snapshot (SnapshotRebase)
Change the parent of the snapshot by choosing from the ones higher in the hierarchy or by rebasing it to no parent.
- Request:
- Example HTTP Request:
POST /ctrl/1.0/SnapshotRebase/{snapshotName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "parentName": SnapshotNameOrGlobalId /* Optional */ } - Method: POST
- Path: /ctrl/1.0/SnapshotRebase/{snapshotName}
- Arguments:
- snapshotName - SnapshotNameOrGlobalId: a string(200), matching ^\*?[A-Za-z0-9_\-.:@]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: VolumeRebaseDesc
- parentName: (Optional SnapshotNameOrGlobalId): The name of one of the volume's parents on which to re-base.
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Abandon disk (VolumeAbandonDisk)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/VolumeAbandonDisk/{snapshotName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "diskId": DiskID } - Method: POST
- Path: /ctrl/1.0/VolumeAbandonDisk/{snapshotName}
- Arguments:
- snapshotName - SnapshotNameOrGlobalId: a string(200), matching ^\*?[A-Za-z0-9_\-.:@]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: AbandonDiskDesc
- diskId: (DiskID): the disk to abandon.
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Delete a snapshot (SnapshotDelete)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/MultiCluster/SnapshotDelete/{snapshotName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: POST
- Path: /ctrl/1.0/MultiCluster/SnapshotDelete/{snapshotName}
- Arguments:
- snapshotName - SnapshotNameOrGlobalId: a string(200), matching ^\*?[A-Za-z0-9_\-.:@]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Delete multiple snapshot (SnapshotsGroupDelete)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/SnapshotsGroupDelete HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "remoteUnexports": [{ "deleteAfter": int /* Optional */, "globalSnapshotId": Global Volume Id, "location": RemoteLocationName /* Optional */, "remote": Either(RemoteClusterName, RemoteLocationName) /* Optional */, "targetDeleteDate": int /* Optional */ }, ...] /* Optional */, "snapshots": [{ "name": SnapshotNameOrGlobalId, "unexport": { "all": bool, "force": bool /* Optional */ } /* Optional */ }, ...] } - Method: POST
- Path: /ctrl/1.0/SnapshotsGroupDelete
- Arguments: No arguments
- JSON: GroupSnapshotsDeleteSpec
- remoteUnexports: (Optional [SnapshotRemoteUnexportDesc])
- snapshots: snasphots description for deletion
- Element type: SnapshotDeleteSpec
- name: (SnapshotNameOrGlobalId): the name or globalId of the snapshot
- unexport: (Optional SnapshotDeleteUnexportDesc): unexport flags for the deletion
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Delete a snapshot by global id (SnapshotDeleteById)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/SnapshotDeleteById/{globalVolumeId} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: POST
- Path: /ctrl/1.0/SnapshotDeleteById/{globalVolumeId}
- Arguments:
- globalVolumeId - Global Volume Id: string, regex [a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Create consistent snapshots of a group of volumes (VolumesGroupSnapshot)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/MultiCluster/VolumesGroupSnapshot HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "tags": { "VolumeTagName": VolumeTagValue, ... } /* Optional */, "volumes": [{ "export": RemoteLocationName /* Optional */, "name": Either("", SnapshotName) /* Optional */, "tags": { "VolumeTagName": VolumeTagValue, ... } /* Optional */, "volume": VolumeNameOrGlobalId }, ...] } - Method: POST
- Path: /ctrl/1.0/MultiCluster/VolumesGroupSnapshot
- Arguments: No arguments
- JSON: GroupSnapshotsSpec
- tags: (Optional {VolumeTagName: VolumeTagValue})
- volumes: The volumes to create snapshots of.
- Element type: GroupSnapshotSpec
- export: (Optional RemoteLocationName): Location to export the newly created snapshots to
- name: (Optional Either("", SnapshotName)): The name of the snapshot to create.
- tags: (Optional {VolumeTagName: VolumeTagValue}): Arbitrary short name/value pairs to be stored with the snapshot.
- volume: (VolumeNameOrGlobalId): The name of the volume to create a snapshot of.
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "snapshots": [{ "remoteId": Global Volume Id, "snapshot": SnapshotNameOrGlobalId /* Optional */, "snapshotGlobalId": Global Volume Id, "volume": VolumeNameOrGlobalId, "volumeGlobalId": Global Volume Id }, ...] } } - Response Data:
GroupSnapshotsResult
- snapshots: The volumes to create snapshots of.
- Element type: GroupSnapshotResult
- remoteId: (Global Volume Id): The globally-unique id of the created snapshot.
- snapshot: (Optional SnapshotNameOrGlobalId): The name of the created snapshot.
- snapshotGlobalId: (Global Volume Id): The globally-unique id of the created snapshot.
- volume: (VolumeNameOrGlobalId): The name of the source volume.
- volumeGlobalId: (Global Volume Id): The globally-unique id of the volume.
- snapshots: The volumes to create snapshots of.
- Example HTTP Response:
Copy a snapshot from a remote location (SnapshotFromRemote)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/SnapshotFromRemote HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "export": bool /* Optional */, "name": Either("", VolumeName) /* Optional */, "placeAll": PlacementGroupName /* Optional */, "placeHead": PlacementGroupName /* Optional */, "placeTail": PlacementGroupName /* Optional */, "remoteId": Global Volume Id, "remoteLocation": RemoteLocationName, "replication": Replication /* Optional */, "tags": { "VolumeTagName": VolumeTagValue, ... } /* Optional */, "template": VolumeTemplateName /* Optional */ } - Method: POST
- Path: /ctrl/1.0/SnapshotFromRemote
- Arguments: No arguments
- JSON: SnapshotFromRemoteDesc
- export: (Optional bool): Auto-export the snapshot after creating it. e.g. for backup.
- name: (Optional Either("", VolumeName)): The name of the new snapshot.
- placeAll: (Optional PlacementGroupName): The name of a placement group which describes the disks to be used for all but the
- placeHead: (Optional PlacementGroupName): The name of a placement group which describes the disks to be used for the
- placeTail: (Optional PlacementGroupName): The name of a placement group which describes the disks to be used for the
- remoteId: (Global Volume Id): The global snapshot identifier.
- remoteLocation: (RemoteLocationName): The name of the remote location to fetch the snapshot from.
- replication: (Optional Replication): The number of copies/replicas kept.
- tags: (Optional {VolumeTagName: VolumeTagValue}): Arbitrary short name/value pairs stored with the snapshot.
- template: (Optional VolumeTemplateName): The name of the template that the settings of the new volume are based on.
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Move a snapshot from the local cluster to a remote cluster (SnapshotMoveToRemote)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/SnapshotMoveToRemote/{snapshotName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "cluster": ClusterName /* Optional */, "clusterId": Global Location Id /* Optional */, "onAttached": OnAttached /* Optional */ } - Method: POST
- Path: /ctrl/1.0/SnapshotMoveToRemote/{snapshotName}
- Arguments:
- snapshotName - SnapshotNameOrGlobalId: a string(200), matching ^\*?[A-Za-z0-9_\-.:@]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: SnapshotMoveToRemoteDesc
- cluster: (Optional ClusterName): The name of the target cluster, use this or clusterId
- clusterId: (Optional Global Location Id): The id of the target cluster, use this or cluster
- onAttached: (Optional OnAttached): What to do if volume is attached. "fail" if not specified
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Allow a remote location to access a local snapshot (SnapshotExport)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/SnapshotExport HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "location": RemoteLocationName, "snapshot": SnapshotNameOrGlobalId } - Method: POST
- Path: /ctrl/1.0/SnapshotExport
- Arguments: No arguments
- JSON: SnapshotExportDesc
- location: (RemoteLocationName): The name of the remote location to grant access to.
- snapshot: (SnapshotNameOrGlobalId): The name of the snapshot.
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Revoke a remote location's access to a local snapshot (SnapshotUnexport)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/SnapshotUnexport HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "all": bool /* Optional */, "force": bool /* Optional */, "location": RemoteLocationName /* Optional */, "snapshot": SnapshotNameOrGlobalId } - Method: POST
- Path: /ctrl/1.0/SnapshotUnexport
- Arguments: No arguments
- JSON: SnapshotUnexportDesc
- all: (Optional bool): Revoke access from all locations.
- force: (Optional bool): Don't check if the snapshot is still recovering in the remote location.
- location: (Optional RemoteLocationName): The name of the remote location to revoke access from.
- snapshot: (SnapshotNameOrGlobalId): The name of the snapshot.
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
List exported snapshots (ExportsList)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/ExportsList HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/ExportsList
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "str, default="exports"": [{ "backingUp": bool /* Optional */, "globalId": Global Volume Id, "location": RemoteLocationName, "snapshot": SnapshotNameOrGlobalId, "visibleVolumeId": int /* Internal */, "volumeId": int /* Internal */ }, ...], ... } } - Response Data:
A dict from str, default="exports" to [Export]
- Key type: str, default="exports"
- Value type:
- Element type: Export
- backingUp: (Optional bool): Is this a backup in making
- globalId: (Global Volume Id): The global snapshot identifier.
- location: (RemoteLocationName): Name of the location the snapshot is exported to
- snapshot: (SnapshotNameOrGlobalId): The name of the snapshot.
- visibleVolumeId: (Internal int)
- volumeId: (Internal int)
- Example HTTP Response:
List exported volumes (VolumeExportsList)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/VolumeExportsList HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/VolumeExportsList
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "str, default="exports"": [{ "backingUp": bool /* Optional */, "globalId": Global Volume Id, "location": RemoteLocationName, "snapshot": SnapshotNameOrGlobalId, "visibleVolumeId": int /* Internal */, "volumeId": int /* Internal */ }, ...], ... } } - Response Data:
A dict from str, default="exports" to [Export]
- Key type: str, default="exports"
- Value type:
- Element type: Export
- backingUp: (Optional bool): Is this a backup in making
- globalId: (Global Volume Id): The global snapshot identifier.
- location: (RemoteLocationName): Name of the location the snapshot is exported to
- snapshot: (SnapshotNameOrGlobalId): The name of the snapshot.
- visibleVolumeId: (Internal int)
- volumeId: (Internal int)
- Example HTTP Response:
List the available remote snapshots (SnapshotsRemoteList)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/SnapshotsRemoteList HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/SnapshotsRemoteList
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "str, default="snapshots"": [{ "createdFromGlobalId": Global Volume Id /* Internal */, "createdFromVisibleVolumeId": int /* Internal */, "creationTimestamp": int, "localSnapshot": SnapshotNameOrGlobalId /* Optional */, "location": RemoteLocationName, "metadataVolume": bool /* Optional */, "name": VolumeNameOrGlobalId, "onVolume": VolumeNameOrGlobalId /* Optional */, "remoteId": Global Volume Id, "size": Size, "tags": { "VolumeTagName": VolumeTagValue, ... } /* Optional */, "type": mc /* Optional */ }, ...], ... } } - Response Data:
A dict from str, default="snapshots" to [RemoteSnapshot]
- Key type: str, default="snapshots"
- Value type:
- Element type: RemoteSnapshot
- createdFromGlobalId: (Internal Global Volume Id)
- createdFromVisibleVolumeId: (Internal int)
- creationTimestamp: (int): The snapshot's creation timestamp (UNIX timestamp).
- localSnapshot: (Optional SnapshotNameOrGlobalId): The name of the local snapshot (if any) which is a copy of the remote snapshot.
- location: (RemoteLocationName): Where the snapshot is located.
- metadataVolume: (Optional bool): flag for metadata volumes and snapshots
- name: (VolumeNameOrGlobalId): The name of the snapshot.
- onVolume: (Optional VolumeNameOrGlobalId): The name of the local volume (if any) on which the snapshot was created.
- remoteId: (Global Volume Id): The global snapshot identifier.
- size: (Size): The snapshots's size in bytes.
- tags: (Optional {VolumeTagName: VolumeTagValue}): Arbitrary short name/value pairs stored with the snapshot.
- type: (Optional mc): creation type of the export
- Example HTTP Response:
List the available remote volumes (VolumesRemoteList)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/VolumesRemoteList HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/VolumesRemoteList
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "str, default="volumes"": [{ "createdFromGlobalId": Global Volume Id /* Internal */, "createdFromVisibleVolumeId": int /* Internal */, "creationTimestamp": int, "localSnapshot": SnapshotNameOrGlobalId /* Optional */, "location": RemoteLocationName, "metadataVolume": bool /* Optional */, "name": VolumeNameOrGlobalId, "onVolume": VolumeNameOrGlobalId /* Optional */, "remoteId": Global Volume Id, "size": Size, "tags": { "VolumeTagName": VolumeTagValue, ... } /* Optional */, "type": mc /* Optional */ }, ...], ... } } - Response Data:
A dict from str, default="volumes" to [RemoteSnapshot]
- Key type: str, default="volumes"
- Value type:
- Element type: RemoteSnapshot
- createdFromGlobalId: (Internal Global Volume Id)
- createdFromVisibleVolumeId: (Internal int)
- creationTimestamp: (int): The snapshot's creation timestamp (UNIX timestamp).
- localSnapshot: (Optional SnapshotNameOrGlobalId): The name of the local snapshot (if any) which is a copy of the remote snapshot.
- location: (RemoteLocationName): Where the snapshot is located.
- metadataVolume: (Optional bool): flag for metadata volumes and snapshots
- name: (VolumeNameOrGlobalId): The name of the snapshot.
- onVolume: (Optional VolumeNameOrGlobalId): The name of the local volume (if any) on which the snapshot was created.
- remoteId: (Global Volume Id): The global snapshot identifier.
- size: (Size): The snapshots's size in bytes.
- tags: (Optional {VolumeTagName: VolumeTagValue}): Arbitrary short name/value pairs stored with the snapshot.
- type: (Optional mc): creation type of the export
- Example HTTP Response:
Instruct the remote location that we will no longer use those snapshots (SnapshotsRemoteUnexport)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/SnapshotsRemoteUnexport HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "remoteSnapshots": [{ "deleteAfter": int /* Optional */, "globalSnapshotId": Global Volume Id, "location": RemoteLocationName /* Optional */, "remote": Either(RemoteClusterName, RemoteLocationName) /* Optional */, "targetDeleteDate": int /* Optional */ }, ...] } - Method: POST
- Path: /ctrl/1.0/SnapshotsRemoteUnexport
- Arguments: No arguments
- JSON: SnapshotsRemoteUnexport
- remoteSnapshots: list of SnapshotRemoteUnexportDesc
- Element type: SnapshotRemoteUnexportDesc
- deleteAfter: (Optional int): same as targetDeleteDate, but time in secs relative to the current time on the
- globalSnapshotId: (Global Volume Id): the id of the snapshot to be unexported
- location: (Optional RemoteLocationName): name of the location to unexport from
- remote: (Optional Either(RemoteClusterName, RemoteLocationName)): name of the cluster to unexport from
- targetDeleteDate: (Optional int): if not 0 instruct the remote location to delete the snapshot at the specified
- remoteSnapshots: list of SnapshotRemoteUnexportDesc
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Attachments
List all attachments (AttachmentsList)
List the volumes and snapshots currently attached to clients along with the read/write rights of each attachment.
- Request:
- Example HTTP Request:
GET /ctrl/1.0/MultiCluster/AttachmentsList HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/MultiCluster/AttachmentsList
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": [{ "client": ClientID, "cluster": RemoteLocationName /* Optional */, "clusterId": Global Location Id /* Optional */, "globalId": Global Volume Id /* Optional */, "pos": AttachmentPos, "rights": AttachmentRights, "snapshot": bool, "tags": { "VolumeTagName": VolumeTagValue, ... } /* Optional */, "volume": VolumeNameOrGlobalId }, ...] } - Response Data:
- Element type: AttachmentDesc
- client: (ClientID): The ID of the client on which the volume or snapshot is attached.
- cluster: (Optional RemoteLocationName): The local name of the cluster of this attachement for the multicluster call
- clusterId: (Optional Global Location Id): The clusterId of the cluster of this attachement for the multicluster call
- globalId: (Optional Global Volume Id): The globally-unique identifier of the volume or snapshot.
- pos: (AttachmentPos): The attachment position on the client; used by the StorPool client to form the name of the
- rights: (AttachmentRights): Whether the volume is attached as read only or read/write; always ro for snapshots.
- snapshot: (bool): Whether this is a snapshot or a volume.
- tags: (Optional {VolumeTagName: VolumeTagValue}): Arbitrary short name/value pairs stored with the volume.
- volume: (VolumeNameOrGlobalId): The name of the attached volume.
- Example HTTP Response:
Reassign volumes and/or snapshots (VolumesReassign)
Perform bulk attach/detach and attachment rights modification.
- Request:
- Example HTTP Request:
POST /ctrl/1.0/MultiCluster/VolumesReassign HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH [Either({ "allowRemoteExported": bool /* Optional */, "detach": Either("all", [ClientID, ...]) /* Optional */, "force": bool, default=false, "mcMode": move /* Optional */, "onRemoteAttached": OnAttached /* Optional */, "ro": [ClientID, ...] /* Optional */, "rw": [ClientID, ...] /* Optional */, "volume": VolumeNameOrGlobalId }, { "detach": Either("all", [ClientID, ...]) /* Optional */, "force": bool, default=false, "ro": [ClientID, ...] /* Optional */, "snapshot": SnapshotNameOrGlobalId }), ...] - Method: POST
- Path: /ctrl/1.0/MultiCluster/VolumesReassign
- Arguments: No arguments
- JSON:
- Element type: The value must be of one of the following types: VolumeReassignDesc, SnapshotReassignDesc.
- VolumeReassignDesc
- allowRemoteExported: (Optional bool): if true allow attaching a remote exported volume
- detach: (Optional Either("all", [ClientID])): The clients from which to detach the given volume.
- force: (bool, default=false): Whether to force detaching of open volumes.
- mcMode: (Optional move): multicluster only. Whether to move the the volume to the local cluster if remote
- onRemoteAttached: (Optional OnAttached): mutlicluster only. What to do if volume is attached in the remote cluster.
- ro: (Optional [ClientID]): The clients on which to attach the volume as read only.
- rw: (Optional [ClientID]): The clients on which to attach the volume as read/write.
- volume: (VolumeNameOrGlobalId): The name of the volume to be reassigned.
- SnapshotReassignDesc
- detach: (Optional Either("all", [ClientID])): The clients from which to detach the given snapshot.
- force: (bool, default=false): Whether to force detaching of open snapshots.
- ro: (Optional [ClientID]): The clients on which to attach the snapshot.
- snapshot: (SnapshotNameOrGlobalId): The name of the snapshot which should be reassigned.
- Subtypes:
- VolumeReassignDesc
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Reassign volumes and/or snapshots with confirmation from the clients (VolumesReassignWait)
Perform bulk attach/detach and attachment rights modification and waits for the clients to catch up.
- Request:
- Example HTTP Request:
POST /ctrl/1.0/MultiCluster/VolumesReassignWait HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "attachTimeout": int /* Optional */, "reassign": [Either({ "allowRemoteExported": bool /* Optional */, "detach": Either("all", [ClientID, ...]) /* Optional */, "force": bool, default=false, "mcMode": move /* Optional */, "onRemoteAttached": OnAttached /* Optional */, "ro": [ClientID, ...] /* Optional */, "rw": [ClientID, ...] /* Optional */, "volume": VolumeNameOrGlobalId }, { "detach": Either("all", [ClientID, ...]) /* Optional */, "force": bool, default=false, "ro": [ClientID, ...] /* Optional */, "snapshot": SnapshotNameOrGlobalId }), ...] } - Method: POST
- Path: /ctrl/1.0/MultiCluster/VolumesReassignWait
- Arguments: No arguments
- JSON: VolumesReassignWaitDesc
- attachTimeout: (Optional int): The number of seconds to wait for missing clients to appear when attaching to
- reassign: The list of volumes and snapshots to modify the attachment settings for.
- Element type: The value must be of one of the following types: VolumeReassignDesc, SnapshotReassignDesc.
- VolumeReassignDesc
- allowRemoteExported: (Optional bool): if true allow attaching a remote exported volume
- detach: (Optional Either("all", [ClientID])): The clients from which to detach the given volume.
- force: (bool, default=false): Whether to force detaching of open volumes.
- mcMode: (Optional move): multicluster only. Whether to move the the volume to the local cluster if remote
- onRemoteAttached: (Optional OnAttached): mutlicluster only. What to do if volume is attached in the remote cluster.
- ro: (Optional [ClientID]): The clients on which to attach the volume as read only.
- rw: (Optional [ClientID]): The clients on which to attach the volume as read/write.
- volume: (VolumeNameOrGlobalId): The name of the volume to be reassigned.
- SnapshotReassignDesc
- detach: (Optional Either("all", [ClientID])): The clients from which to detach the given snapshot.
- force: (bool, default=false): Whether to force detaching of open snapshots.
- ro: (Optional [ClientID]): The clients on which to attach the snapshot.
- snapshot: (SnapshotNameOrGlobalId): The name of the snapshot which should be reassigned.
- Subtypes:
- VolumeReassignDesc
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Placement Groups
Placement groups provide a way to specify the disks on which a volume's data should be stored.
List all placement groups (PlacementGroupsList)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/PlacementGroupsList HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/PlacementGroupsList
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "PlacementGroupName": { "disks": [DiskID, ...], "id": int /* Internal */, "name": PlacementGroupName }, ... } } - Response Data:
A dict from PlacementGroupName to PlacementGroup
- Key type: PlacementGroupName
- Value type: PlacementGroup
- disks: IDs of the participating disks.
- Element type: DiskID
- disks: IDs of the participating disks.
- id: (Internal int)
- name: (PlacementGroupName)
- Example HTTP Response:
Describe a single placement group (PlacementGroupDescribe)
Same as PlacementGroupsList but only return information about a given group.
- Request:
- Example HTTP Request:
GET /ctrl/1.0/PlacementGroupDescribe/{placementGroupName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/PlacementGroupDescribe/{placementGroupName}
- Arguments:
- placementGroupName - PlacementGroupName: a string(128), matching ^[A-Za-z0-9_\-]+$, except {list}
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "disks": [DiskID, ...], "id": int /* Internal */, "name": PlacementGroupName } } - Response Data:
PlacementGroup
- disks: IDs of the participating disks.
- Element type: DiskID
- disks: IDs of the participating disks.
- id: (Internal int)
- name: (PlacementGroupName)
- Example HTTP Response:
Create and/or update a placement group (PlacementGroupUpdate)
If a group by the specified name does not exist, it will be created.
- Request:
- Example HTTP Request:
POST /ctrl/1.0/PlacementGroupUpdate/{placementGroupName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "addDisks": [DiskID, ...], "rename": PlacementGroupName /* Optional */, "rmDisks": [DiskID, ...] } - Method: POST
- Path: /ctrl/1.0/PlacementGroupUpdate/{placementGroupName}
- Arguments:
- placementGroupName - PlacementGroupName: a string(128), matching ^[A-Za-z0-9_\-]+$, except {list}
- JSON: PlacementGroupUpdateDesc
- addDisks: IDs of the disks to add to this group.
- Element type: DiskID
- addDisks: IDs of the disks to add to this group.
- rename: (Optional PlacementGroupName): The new name of the placement group.
- rmDisks: IDs of the disks to be removed from this group.
- Element type: DiskID
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Delete a placement group (PlacementGroupDelete)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/PlacementGroupDelete/{placementGroupName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: POST
- Path: /ctrl/1.0/PlacementGroupDelete/{placementGroupName}
- Arguments:
- placementGroupName - PlacementGroupName: a string(128), matching ^[A-Za-z0-9_\-]+$, except {list}
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
List all fault sets (FaultSetsList)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/FaultSetsList HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/FaultSetsList
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "PlacementGroupName": { "name": PlacementGroupName, "servers": [ServerID, ...] }, ... } } - Response Data:
A dict from PlacementGroupName to FaultSet
- Key type: PlacementGroupName
- Value type: FaultSet
- name: (PlacementGroupName)
- servers: List of servers in one fault set
- Element type: ServerID
- Example HTTP Response:
List the properties of a volume allocation group (VagList)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/VagList/{vagName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/VagList/{vagName}
- Arguments:
- vagName - VagId: integer, 1 <= value <= 18446744073709551616
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "chains": [[DiskID, ...], ...], "diskSetsConstraintsViolated": bool, "name": VagId, "overrides": { "OverrideId": [DiskID, ...], ... }, "parentVagId": int /* Internal */, "placeAll": PlacementGroupName, "placeHead": PlacementGroupName, "placeTail": PlacementGroupName, "replication": Replication, "reuseServer": bool /* Optional */, "targetDiskSets": [[DiskID, ...], ...], "templateId": int /* Internal */, "templateName": Either("", VolumeTemplateName), "vagId": int /* Internal */ } } - Response Data:
Vag
- chains: The list of disks where the chains are stored.
- Element type:
- Element type: DiskID
- chains: The list of disks where the chains are stored.
- Example HTTP Response:
- diskSetsConstraintsViolated: (bool): Whether any constraint violations have been detected for this VAG
- name: (VagId)
- overrides: The disk set overrides for this VAG.A dict from OverrideId to [DiskID]
- Key type: OverrideId
- Value type:
- Element type: DiskID
- parentVagId: (Internal int): The ID of the parent volume allocation group.
- placeAll: (PlacementGroupName): The name of a placement group which describes the disks to be used for all but the
- placeHead: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- placeTail: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- replication: (Replication): The number of copies/replicas kept.
- reuseServer: (Optional bool): is it allowed to place replicas on the same server
- targetDiskSets: The sets of disks that the volume's data should be stored on.
- Element type:
- Element type: DiskID
- templateId: (Internal int)
- templateName: The template that the volume/snapshot's settings are taken from.The value must be of one of the following types: "", VolumeTemplateName.
- Subtypes:
- ""
- VolumeTemplateName
- vagId: (Internal int): The ID of this volume allocation group
Update the allocation group of a volume (VolumeUpdateVag)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/VolumeUpdateVag/{volumeName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "vagId": Either("parent", VagId) } - Method: POST
- Path: /ctrl/1.0/VolumeUpdateVag/{volumeName}
- Arguments:
- volumeName - VolumeNameOrGlobalId: a string(200), matching ^\#?[A-Za-z0-9_\-.:]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: VolumeUpdateVagDesc
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Update the allocation group of a snapshot (SnapshotUpdateVag)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/SnapshotUpdateVag/{snapshotName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "vagId": Either("parent", VagId) } - Method: POST
- Path: /ctrl/1.0/SnapshotUpdateVag/{snapshotName}
- Arguments:
- snapshotName - SnapshotNameOrGlobalId: a string(200), matching ^\*?[A-Za-z0-9_\-.:@]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: SnapshotUpdateVagDesc
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Update the targets of a volume allocation group (VagUpdate)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/VagUpdate HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "targetsCount": TargetsCount, "vagId": string } - Method: POST
- Path: /ctrl/1.0/VagUpdate
- Arguments: No arguments
- JSON: VagUpdateDesc
- targetsCount: (TargetsCount)
- vagId: (string): volume allocation group ID
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Volume Templates
Templates are a set of rules used for creating many similar volumes.
List all volume templates (VolumeTemplatesList)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/VolumeTemplatesList HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/VolumeTemplatesList
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": [{ "bw": Bandwidth, "id": int /* Internal */, "iops": IOPS, "limitType": LimitType /* Optional */, "name": VolumeTemplateName, "parentName": Either("", SnapshotName), "placeAll": PlacementGroupName, "placeHead": PlacementGroupName, "placeTail": PlacementGroupName, "replication": Either("-", Replication), "reuseServer": bool /* Optional */, "size": Either("-", Size) }, ...] } - Response Data:
- Element type: VolumeTemplateDesc
- bw: (Bandwidth): Bandwidth limit in KB.
- id: (Internal int)
- iops: (IOPS): iops limit.
- limitType: (Optional LimitType)
- name: (VolumeTemplateName): The name of the template.
- parentName: The name of the snapshot on which volumes will be based.The value must be of one of the following types: "", SnapshotName.
- Subtypes:
- ""
- SnapshotName
- placeAll: (PlacementGroupName): The name of a placement group which describes the disks to be used for all but the
- placeHead: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- placeTail: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- replication: A default number of copies to be kept by StorPool.The value must be of one of the following types: "-", Replication.
- Subtypes:
- "-"
- Replication
- reuseServer: (Optional bool): allow placement of replicas on same server.
- size: A default size for the volumes (in bytes).The value must be of one of the following types: "-", Size.
- Example HTTP Response:
List the status of all volume templates (VolumeTemplatesStatus)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/VolumeTemplatesStatus HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/VolumeTemplatesStatus
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": [{ "availablePlaceAll": int, "availablePlaceHead": int, "availablePlaceTail": int, "capacityPlaceAll": int, "capacityPlaceHead": int, "capacityPlaceTail": int, "id": int /* Internal */, "name": VolumeTemplateName, "onDiskSize": int, "placeAll": PlacementGroupName, "placeHead": PlacementGroupName, "placeTail": PlacementGroupName, "removingSnapshotsCount": int, "replication": Either("-", Replication), "size": Either(0, Size), "snapshotsCount": int, "snapshotsWithChildrenSize": Either(0, Size) /* Optional */, "snapshotsWithoutChildrenSize": Either(0, Size) /* Optional */, "stored": { "capacity": int, "free": int, "internal": { "u1": int, "u2": int, "u3": int } /* Internal */, "placeAll": { "capacity": int, "free": int, "internal": { "u1": int, "u2": int, "u3": int } /* Internal */ }, "placeHead": { "capacity": int, "free": int, "internal": { "u1": int, "u2": int, "u3": int } /* Internal */ }, "placeTail": { "capacity": int, "free": int, "internal": { "u1": int, "u2": int, "u3": int } /* Internal */ } }, "storedSize": int, "totalSize": Either(0, Size), "volumesCount": int, "volumesSize": Either(0, Size) /* Optional */ }, ...] } - Response Data:
- Element type: VolumeTemplateStatusDesc
- availablePlaceAll: (int): An estimate of the available space on all the disks in this template's
- availablePlaceHead: (int): An estimate of the available space on all the disks in this template's
- availablePlaceTail: (int): An estimate of the available space on all the disks in this template's
- capacityPlaceAll: (int): An estimate of the total physical space on all the disks in this template's
- capacityPlaceHead: (int): An estimate of the total physical space on all the disks in this template's
- capacityPlaceTail: (int): An estimate of the total physical space on all the disks in this template's
- id: (Internal int)
- name: (VolumeTemplateName): The name of the template.
- onDiskSize: (int): The actual on-disk number of bytes occupied by all the volumes based on this
- placeAll: (PlacementGroupName): The name of a placement group which describes the disks to be used for all but the
- placeHead: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- placeTail: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- removingSnapshotsCount: (int): The number of snapshots based on this template currently being deleted.
- replication: The number of copies to be kept by StorPool if defined for this template,The value must be of one of the following types: "-", Replication.
- Subtypes:
- "-"
- Replication
- size: The number of bytes of all volumes based on this template, not counting the StorPoolThe value must be of one of the following types: 0, Size.
- snapshotsCount: (int): The number of snapshots based on this template
- snapshotsWithChildrenSize: (Optional Either(0, Size)): The number of bytes provisioned for all snapshots in this template
- snapshotsWithoutChildrenSize: (Optional Either(0, Size)): The number of bytes provisioned for all snapshots in this template
- stored: Estimated client data capacity and free space.
- capacity: (int): Estimated total client data capacity.
- free: (int): Estimated free space remaining.
- internal: (Internal VolumeTemplateSpaceEstInternal)
- placeAll: placeAll placement group estimations.
- capacity: (int): Estimated total client data capacity.
- free: (int): Estimated free space remaining.
- internal: (Internal VolumeTemplateSpaceEstInternal)
- placeHead: placeHead placement group estimations.
- capacity: (int): Estimated total client data capacity.
- free: (int): Estimated free space remaining.
- internal: (Internal VolumeTemplateSpaceEstInternal)
- placeTail: placeTail placement group estimations.
- capacity: (int): Estimated total client data capacity.
- free: (int): Estimated free space remaining.
- internal: (Internal VolumeTemplateSpaceEstInternal)
- storedSize: (int): The number of bytes of client data on all the volumes based on this template.
- totalSize: The number of bytes of all volumes based on this template, including the StorPoolThe value must be of one of the following types: 0, Size.
- volumesCount: (int): The number of volumes based on this template.
- volumesSize: (Optional Either(0, Size)): The number of bytes provisioned for all volumes in this template.
- Example HTTP Response:
Describe a single volume template (VolumeTemplateDescribe)
Same as VolumeTemplatesList but only return information about a given template.
- Request:
- Example HTTP Request:
GET /ctrl/1.0/VolumeTemplateDescribe/{templateName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/VolumeTemplateDescribe/{templateName}
- Arguments:
- templateName - VolumeTemplateName: a string(200), matching ^[A-Za-z0-9_\-]+$, except {list}
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "bw": Bandwidth, "id": int /* Internal */, "iops": IOPS, "limitType": LimitType /* Optional */, "name": VolumeTemplateName, "parentName": Either("", SnapshotName), "placeAll": PlacementGroupName, "placeHead": PlacementGroupName, "placeTail": PlacementGroupName, "replication": Either("-", Replication), "reuseServer": bool /* Optional */, "size": Either("-", Size) } } - Response Data:
VolumeTemplateDesc
- bw: (Bandwidth): Bandwidth limit in KB.
- id: (Internal int)
- iops: (IOPS): iops limit.
- limitType: (Optional LimitType)
- name: (VolumeTemplateName): The name of the template.
- parentName: The name of the snapshot on which volumes will be based.The value must be of one of the following types: "", SnapshotName.
- Subtypes:
- ""
- SnapshotName
- placeAll: (PlacementGroupName): The name of a placement group which describes the disks to be used for all but the
- placeHead: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- placeTail: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- replication: A default number of copies to be kept by StorPool.The value must be of one of the following types: "-", Replication.
- Subtypes:
- "-"
- Replication
- reuseServer: (Optional bool): allow placement of replicas on same server.
- size: A default size for the volumes (in bytes).The value must be of one of the following types: "-", Size.
- Example HTTP Response:
Create a volume template (VolumeTemplateCreate)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/VolumeTemplateCreate HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "bw": Bandwidth /* Optional */, "iops": IOPS /* Optional */, "name": VolumeTemplateName, "parent": SnapshotName /* Optional */, "placeAll": PlacementGroupName /* Optional */, "placeHead": PlacementGroupName /* Optional */, "placeTail": PlacementGroupName /* Optional */, "replication": Replication /* Optional */, "reuseServer": bool /* Optional */, "size": Size /* Optional */, "tags": { "VolumeTagName": VolumeTagValue, ... } /* Optional */ } - Method: POST
- Path: /ctrl/1.0/VolumeTemplateCreate
- Arguments: No arguments
- JSON: VolumeTemplateCreateDesc
- bw: (Optional Bandwidth): Bandwidth limit in KB.
- iops: (Optional IOPS): iops limit.
- name: (VolumeTemplateName): The name of the new template.
- parent: (Optional SnapshotName): The name of the snapshot on which to base volumes created by this template.
- placeAll: (Optional PlacementGroupName): The name of a placement group which describes the disks to be used for all but the
- placeHead: (Optional PlacementGroupName): The name of a placement group which describes the disks to be used for the
- placeTail: (Optional PlacementGroupName): The name of a placement group which describes the disks to be used for the
- replication: (Optional Replication): The number of copies/replicas kept.
- reuseServer: (Optional bool): allow placement of replicas on same server.
- size: (Optional Size): A default size for the volumes (in bytes).
- tags: (Optional {VolumeTagName: VolumeTagValue}): Optional name=value tags.
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Update a volume template (VolumeTemplateUpdate)
Alter the configuration of an existing volume template.
- Request:
- Example HTTP Request:
POST /ctrl/1.0/VolumeTemplateUpdate/{templateName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "bw": Bandwidth /* Optional */, "iops": IOPS /* Optional */, "parent": SnapshotName /* Optional */, "placeAll": PlacementGroupName /* Optional */, "placeHead": PlacementGroupName /* Optional */, "placeTail": PlacementGroupName /* Optional */, "propagate": bool /* Optional */, "rename": VolumeTemplateName /* Optional */, "replication": Replication /* Optional */, "reuseServer": bool /* Optional */, "size": Size /* Optional */, "tags": { "VolumeTagName": VolumeTagValue, ... } /* Optional */ } - Method: POST
- Path: /ctrl/1.0/VolumeTemplateUpdate/{templateName}
- Arguments:
- templateName - VolumeTemplateName: a string(200), matching ^[A-Za-z0-9_\-]+$, except {list}
- JSON: VolumeTemplateUpdateDesc
- bw: (Optional Bandwidth): Bandwidth limit in KB.
- iops: (Optional IOPS): iops limit.
- parent: (Optional SnapshotName): The name of the snapshot on which to base volumes created by this template.
- placeAll: (Optional PlacementGroupName): The name of a placement group which describes the disks to be used for all but the
- placeHead: (Optional PlacementGroupName): The name of a placement group which describes the disks to be used for the
- placeTail: (Optional PlacementGroupName): The name of a placement group which describes the disks to be used for the
- propagate: (Optional bool): Whether to propagate this change to all the volumes and snapshots using this template
- rename: (Optional VolumeTemplateName): The new name of the template.
- replication: (Optional Replication): The number of copies/replicas kept.
- reuseServer: (Optional bool): allow placement of replicas on same server.
- size: (Optional Size): A default size for the volumes (in bytes).
- tags: (Optional {VolumeTagName: VolumeTagValue}): Optional name=value tags.
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Delete a volume template (VolumeTemplateDelete)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/VolumeTemplateDelete/{templateName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: POST
- Path: /ctrl/1.0/VolumeTemplateDelete/{templateName}
- Arguments:
- templateName - VolumeTemplateName: a string(200), matching ^[A-Za-z0-9_\-]+$, except {list}
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Volume Relocator
This is a service that moves data when needed, e.g. when removing or adding disks.
Get the relocator's status (VolumeRelocatorStatus)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/VolumeRelocatorStatus HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/VolumeRelocatorStatus
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "recoveringFromRemote": int /* Optional */, "status": RelocatorStatus, "volumesToRelocate": int } } - Response Data:
VolumeRelocatorStatus
- recoveringFromRemote: (Optional int): Number of volumes currently being recovered from a remote location.
- status: (RelocatorStatus)
- volumesToRelocate: (int): Number of volumes currently being relocated.
- Example HTTP Response:
List total per disk relocation estimates (VolumeRelocatorDisksList)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/VolumeRelocatorDisksList HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/VolumeRelocatorDisksList
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "DiskID": Either({ "generationLeft": -1, "id": DiskID, "objectsAllocated": { "current": int, "delta": int, "target": int, "toRecover": int }, "objectsCount": int, "onDiskSize": { "current": int, "delta": int, "target": int, "toRecover": int }, "serverId": ServerID, "storedSize": { "current": int, "delta": int, "target": int, "toRecover": int } }, { "generationLeft": int, "id": DiskID, "serverId": ServerID }), ... } } - Response Data:
A dict from DiskID to Either(UpDiskTarget, DownDiskTarget)
- Key type: DiskID
- Value type: The value must be of one of the following types: UpDiskTarget, DownDiskTarget.
- Subtypes:
- UpDiskTarget
- generationLeft: (-1): The last cluster generation when the disk was active on a running server.
- id: (DiskID): The ID of this disk.
- objectsAllocated: Statistics about the amount of objects to be allocated on this disk.
- objectsCount: (int): The maximum amount of object that can exists on the disk.
- onDiskSize: Statistics about the total amount of space occupied by the objects on this disk.
- serverId: (ServerID): The ID of the server this disk was last on.
- storedSize: Statistics about the amount of cilent data to be stored on this disk.
- DownDiskTarget
- UpDiskTarget
- Example HTTP Response:
List per disk relocation estimates for a given volume (VolumeRelocatorVolumeDisks)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/VolumeRelocatorVolumeDisks/{volumeName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/VolumeRelocatorVolumeDisks/{volumeName}
- Arguments:
- volumeName - VolumeNameOrGlobalId: a string(200), matching ^\#?[A-Za-z0-9_\-.:]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "DiskID": Either({ "generationLeft": -1, "id": DiskID, "objectsAllocated": { "current": int, "delta": int, "target": int, "toRecover": int }, "objectsCount": int, "onDiskSize": { "current": int, "delta": int, "target": int, "toRecover": int }, "serverId": ServerID, "storedSize": { "current": int, "delta": int, "target": int, "toRecover": int } }, { "generationLeft": int, "id": DiskID, "serverId": ServerID }), ... } } - Response Data:
A dict from DiskID to Either(UpDiskTarget, DownDiskTarget)
- Key type: DiskID
- Value type: The value must be of one of the following types: UpDiskTarget, DownDiskTarget.
- Subtypes:
- UpDiskTarget
- generationLeft: (-1): The last cluster generation when the disk was active on a running server.
- id: (DiskID): The ID of this disk.
- objectsAllocated: Statistics about the amount of objects to be allocated on this disk.
- objectsCount: (int): The maximum amount of object that can exists on the disk.
- onDiskSize: Statistics about the total amount of space occupied by the objects on this disk.
- serverId: (ServerID): The ID of the server this disk was last on.
- storedSize: Statistics about the amount of cilent data to be stored on this disk.
- DownDiskTarget
- UpDiskTarget
- Example HTTP Response:
List per disk relocation estimates for a given snapshot (VolumeRelocatorSnapshotDisks)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/VolumeRelocatorSnapshotDisks/{snapshotName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/VolumeRelocatorSnapshotDisks/{snapshotName}
- Arguments:
- snapshotName - SnapshotNameOrGlobalId: a string(200), matching ^\*?[A-Za-z0-9_\-.:@]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "DiskID": Either({ "generationLeft": -1, "id": DiskID, "objectsAllocated": { "current": int, "delta": int, "target": int, "toRecover": int }, "objectsCount": int, "onDiskSize": { "current": int, "delta": int, "target": int, "toRecover": int }, "serverId": ServerID, "storedSize": { "current": int, "delta": int, "target": int, "toRecover": int } }, { "generationLeft": int, "id": DiskID, "serverId": ServerID }), ... } } - Response Data:
A dict from DiskID to Either(UpDiskTarget, DownDiskTarget)
- Key type: DiskID
- Value type: The value must be of one of the following types: UpDiskTarget, DownDiskTarget.
- Subtypes:
- UpDiskTarget
- generationLeft: (-1): The last cluster generation when the disk was active on a running server.
- id: (DiskID): The ID of this disk.
- objectsAllocated: Statistics about the amount of objects to be allocated on this disk.
- objectsCount: (int): The maximum amount of object that can exists on the disk.
- onDiskSize: Statistics about the total amount of space occupied by the objects on this disk.
- serverId: (ServerID): The ID of the server this disk was last on.
- storedSize: Statistics about the amount of cilent data to be stored on this disk.
- DownDiskTarget
- UpDiskTarget
- Example HTTP Response:
Balancer
This is a service that decides when it is a good time to move data.
Get the balancer's status (VolumeBalancerStatus)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/VolumeBalancerStatus HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/VolumeBalancerStatus
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "auto": bool, "status": BalancerStatus } } - Response Data:
VolumeBalancerStatus
- auto: (bool): Is balancer running in automatic mode.
- status: (BalancerStatus): The current balancer status.
- Example HTTP Response:
Set the balancer's status (VolumeBalancerStatus)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/VolumeBalancerStatus HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "cmd": BalancerCommand } - Method: POST
- Path: /ctrl/1.0/VolumeBalancerStatus
- Arguments: No arguments
- JSON: VolumeBalancerCommand
- cmd: (BalancerCommand): The command for the balancer to execute.
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
List balancer volume and snapshot status (VolumeBalancerVolumesStatus)
Show which volumes and snapshots will be reallocated by the current balancer run.
- Request:
- Example HTTP Request:
GET /ctrl/1.0/VolumeBalancerVolumesStatus HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/VolumeBalancerVolumesStatus
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": [{ "blocked": bool, "name": Either(VolumeNameOrGlobalId, SnapshotNameOrGlobalId), "objectsCount": int, "placeAll": PlacementGroupName, "placeHead": PlacementGroupName, "placeTail": PlacementGroupName, "reallocated": bool, "replication": Replication, "size": int, "snapshot": bool }, ...] } - Response Data:
- Element type: VolumeBalancerVolumeStatus
- blocked: (bool): Can this volume be rebalanced, or is rebalancing impossible with the current placement
- name: The volume's name.The value must be of one of the following types: VolumeNameOrGlobalId, SnapshotNameOrGlobalId.
- Subtypes:
- VolumeNameOrGlobalId
- SnapshotNameOrGlobalId
- objectsCount: (int): The number of objects that the volume/snapshot is comprised of.
- placeAll: (PlacementGroupName): The name of a placement group which describes the disks to be used for all but the
- placeHead: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- placeTail: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- reallocated: (bool): is this volume/snapshot going to reallocated by the balancing procedure.
- replication: (Replication): The number of copies/replicas kept.
- size: (int): The volume's size in bytes.
- snapshot: (bool): True if this response describes a snapshot instead of a volume.
- Example HTTP Response:
List total per disk rebalancing estimates (VolumeBalancerDisksList)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/VolumeBalancerDisksList HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/VolumeBalancerDisksList
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "DiskID": Either({ "generationLeft": -1, "id": DiskID, "objectsAllocated": { "current": int, "delta": int, "target": int, "toRecover": int }, "objectsCount": int, "onDiskSize": { "current": int, "delta": int, "target": int, "toRecover": int }, "serverId": ServerID, "storedSize": { "current": int, "delta": int, "target": int, "toRecover": int } }, { "generationLeft": int, "id": DiskID, "serverId": ServerID }), ... } } - Response Data:
A dict from DiskID to Either(UpDiskTarget, DownDiskTarget)
- Key type: DiskID
- Value type: The value must be of one of the following types: UpDiskTarget, DownDiskTarget.
- Subtypes:
- UpDiskTarget
- generationLeft: (-1): The last cluster generation when the disk was active on a running server.
- id: (DiskID): The ID of this disk.
- objectsAllocated: Statistics about the amount of objects to be allocated on this disk.
- objectsCount: (int): The maximum amount of object that can exists on the disk.
- onDiskSize: Statistics about the total amount of space occupied by the objects on this disk.
- serverId: (ServerID): The ID of the server this disk was last on.
- storedSize: Statistics about the amount of cilent data to be stored on this disk.
- DownDiskTarget
- UpDiskTarget
- Example HTTP Response:
List per disk rebalancing estimated for a given volume (VolumeBalancerVolumeDisks)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/VolumeBalancerVolumeDisks/{volumeName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/VolumeBalancerVolumeDisks/{volumeName}
- Arguments:
- volumeName - VolumeNameOrGlobalId: a string(200), matching ^\#?[A-Za-z0-9_\-.:]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "DiskID": Either({ "generationLeft": -1, "id": DiskID, "objectsAllocated": { "current": int, "delta": int, "target": int, "toRecover": int }, "objectsCount": int, "onDiskSize": { "current": int, "delta": int, "target": int, "toRecover": int }, "serverId": ServerID, "storedSize": { "current": int, "delta": int, "target": int, "toRecover": int } }, { "generationLeft": int, "id": DiskID, "serverId": ServerID }), ... } } - Response Data:
A dict from DiskID to Either(UpDiskTarget, DownDiskTarget)
- Key type: DiskID
- Value type: The value must be of one of the following types: UpDiskTarget, DownDiskTarget.
- Subtypes:
- UpDiskTarget
- generationLeft: (-1): The last cluster generation when the disk was active on a running server.
- id: (DiskID): The ID of this disk.
- objectsAllocated: Statistics about the amount of objects to be allocated on this disk.
- objectsCount: (int): The maximum amount of object that can exists on the disk.
- onDiskSize: Statistics about the total amount of space occupied by the objects on this disk.
- serverId: (ServerID): The ID of the server this disk was last on.
- storedSize: Statistics about the amount of cilent data to be stored on this disk.
- DownDiskTarget
- UpDiskTarget
- Example HTTP Response:
List per disk rebalancing estimates for a given snapshot (VolumeBalancerSnapshotDisks)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/VolumeBalancerSnapshotDisks/{snapshotName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/VolumeBalancerSnapshotDisks/{snapshotName}
- Arguments:
- snapshotName - SnapshotNameOrGlobalId: a string(200), matching ^\*?[A-Za-z0-9_\-.:@]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "DiskID": Either({ "generationLeft": -1, "id": DiskID, "objectsAllocated": { "current": int, "delta": int, "target": int, "toRecover": int }, "objectsCount": int, "onDiskSize": { "current": int, "delta": int, "target": int, "toRecover": int }, "serverId": ServerID, "storedSize": { "current": int, "delta": int, "target": int, "toRecover": int } }, { "generationLeft": int, "id": DiskID, "serverId": ServerID }), ... } } - Response Data:
A dict from DiskID to Either(UpDiskTarget, DownDiskTarget)
- Key type: DiskID
- Value type: The value must be of one of the following types: UpDiskTarget, DownDiskTarget.
- Subtypes:
- UpDiskTarget
- generationLeft: (-1): The last cluster generation when the disk was active on a running server.
- id: (DiskID): The ID of this disk.
- objectsAllocated: Statistics about the amount of objects to be allocated on this disk.
- objectsCount: (int): The maximum amount of object that can exists on the disk.
- onDiskSize: Statistics about the total amount of space occupied by the objects on this disk.
- serverId: (ServerID): The ID of the server this disk was last on.
- storedSize: Statistics about the amount of cilent data to be stored on this disk.
- DownDiskTarget
- UpDiskTarget
- Example HTTP Response:
Get the disk sets computed by the balancer for a given volume (VolumeBalancerVolumeDiskSets)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/VolumeBalancerVolumeDiskSets/{volumeName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/VolumeBalancerVolumeDiskSets/{volumeName}
- Arguments:
- volumeName - VolumeNameOrGlobalId: a string(200), matching ^\#?[A-Za-z0-9_\-.:]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "balancerDiskSets": [[DiskID, ...], ...], "blocked": bool, "currentDiskSets": [[DiskID, ...], ...], "name": Either(VolumeNameOrGlobalId, SnapshotNameOrGlobalId), "objectsCount": int, "placeAll": PlacementGroupName, "placeHead": PlacementGroupName, "placeTail": PlacementGroupName, "reallocated": bool, "replication": Replication, "size": int, "snapshot": bool } } - Response Data:
VolumeBalancerVolumeDiskSets
- balancerDiskSets: The new sets of disks that the volume's data should be stored on according to
- Element type:
- Element type: DiskID
- balancerDiskSets: The new sets of disks that the volume's data should be stored on according to
- Example HTTP Response:
- blocked: (bool): Can this volume be rebalanced, or is rebalancing impossible with the current placement
- currentDiskSets: The current sets of disks that the volume's data should be stored on.
- Element type:
- Element type: DiskID
- name: The volume's name.The value must be of one of the following types: VolumeNameOrGlobalId, SnapshotNameOrGlobalId.
- Subtypes:
- VolumeNameOrGlobalId
- SnapshotNameOrGlobalId
- objectsCount: (int): The number of objects that the volume/snapshot is comprised of.
- placeAll: (PlacementGroupName): The name of a placement group which describes the disks to be used for all but the
- placeHead: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- placeTail: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- reallocated: (bool): is this volume/snapshot going to reallocated by the balancing procedure.
- replication: (Replication): The number of copies/replicas kept.
- size: (int): The volume's size in bytes.
- snapshot: (bool): True if this response describes a snapshot instead of a volume.
Get the disk sets computed by the balancer for a given snapshot (VolumeBalancerSnapshotDiskSets)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/VolumeBalancerSnapshotDiskSets/{snapshotName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/VolumeBalancerSnapshotDiskSets/{snapshotName}
- Arguments:
- snapshotName - SnapshotNameOrGlobalId: a string(200), matching ^\*?[A-Za-z0-9_\-.:@]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "balancerDiskSets": [[DiskID, ...], ...], "blocked": bool, "currentDiskSets": [[DiskID, ...], ...], "name": Either(VolumeNameOrGlobalId, SnapshotNameOrGlobalId), "objectsCount": int, "placeAll": PlacementGroupName, "placeHead": PlacementGroupName, "placeTail": PlacementGroupName, "reallocated": bool, "replication": Replication, "size": int, "snapshot": bool } } - Response Data:
VolumeBalancerVolumeDiskSets
- balancerDiskSets: The new sets of disks that the volume's data should be stored on according to
- Element type:
- Element type: DiskID
- balancerDiskSets: The new sets of disks that the volume's data should be stored on according to
- Example HTTP Response:
- blocked: (bool): Can this volume be rebalanced, or is rebalancing impossible with the current placement
- currentDiskSets: The current sets of disks that the volume's data should be stored on.
- Element type:
- Element type: DiskID
- name: The volume's name.The value must be of one of the following types: VolumeNameOrGlobalId, SnapshotNameOrGlobalId.
- Subtypes:
- VolumeNameOrGlobalId
- SnapshotNameOrGlobalId
- objectsCount: (int): The number of objects that the volume/snapshot is comprised of.
- placeAll: (PlacementGroupName): The name of a placement group which describes the disks to be used for all but the
- placeHead: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- placeTail: (PlacementGroupName): The name of a placement group which describes the disks to be used for the
- reallocated: (bool): is this volume/snapshot going to reallocated by the balancing procedure.
- replication: (Replication): The number of copies/replicas kept.
- size: (int): The volume's size in bytes.
- snapshot: (bool): True if this response describes a snapshot instead of a volume.
iSCSI
Get the StorPool iSCSI configuration (iSCSIConfig)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/iSCSIConfig HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/iSCSIConfig
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "iscsi": { "baseName": iSCSI Name, "initiators": { "ISCSIId": { "exports": [{ "portalGroup": iSCSI Portal Group Name, "target": iSCSI Name }, ...], "name": iSCSI Name, "nets": [string, ...], "secret": string, "username": string }, ... }, "portalGroups": { "int": { "name": iSCSI Portal Group Name, "networks": [{ "address": string, "prefix": int }, ...], "portals": [{ "controller": ISCSIId, "ip": string, "port": string }, ...] }, ... }, "targets": { "int": { "currentControllerId": int, "name": iSCSI Name, "volume": VolumeName }, ... } } } } - Response Data:
ISCSIConfig
- iscsi: The actual configuration data
- baseName: (iSCSI Name): The StorPool cluster's iSCSI base name.
- initiators: The iSCSI initiators allowed to access the cluster.A dict from ISCSIId to ISCSIInitiator
- Key type: ISCSIId
- Value type: ISCSIInitiator
- exports:
- Element type: ISCSIExport
- portalGroup: (iSCSI Portal Group Name): The portal group exporting this volume.
- target: (iSCSI Name): The target exporting this volume.
- exports:
- name: (iSCSI Name): The iSCSI initiator's IQN.
- nets: The networks this initiator will contact the iSCSI cluster on.
- Element type: string
- secret: (string): The password to authenticate the initiator with.
- username: (string)
- iscsi: The actual configuration data
- portalGroups: The iSCSI portal groups defined for the cluster.A dict from int to ISCSIPortalGroup
- Key type: int
- Value type: ISCSIPortalGroup
- name: (iSCSI Portal Group Name): The iSCSI portal group name.
- networks: The networks this portal group is accessible on.
- portals: The list of portals defined in this group.
- Example HTTP Response:
- targets: A dict from int to ISCSITarget
- Key type: int
- Value type: ISCSITarget
- currentControllerId: (int): the StorPool iSCSI target service handling this target.
- name: (iSCSI Name): The iSCSI name that the target is exposed as.
- volume: (VolumeName): The name of the StorPool volume being exposed.
Modify the StorPool iSCSI configuration (iSCSIConfig)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/iSCSIConfig HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "commands": [{ "createInitiator": { "name": iSCSI Name, "secret": string, "username": string } /* Optional */, "createPortal": { "controller": ISCSIId, "ip": string, "port": int /* Optional */, "portalGroup": iSCSI Portal Group Name } /* Optional */, "createPortalGroup": { "name": iSCSI Portal Group Name } /* Optional */, "createTarget": { "volumeName": VolumeName } /* Optional */, "deleteInitiator": { "name": iSCSI Name } /* Optional */, "deletePortal": { "ip": string, "port": int /* Optional */ } /* Optional */, "deletePortalGroup": { "name": iSCSI Portal Group Name } /* Optional */, "deleteTarget": { "volumeName": VolumeName } /* Optional */, "export": { "initiator": iSCSI Name, "portalGroup": iSCSI Portal Group Name, "volumeName": VolumeName } /* Optional */, "exportDelete": { "initiator": iSCSI Name, "portalGroup": iSCSI Portal Group Name, "volumeName": VolumeName } /* Optional */, "initiatorAddNetwork": { "initiator": iSCSI Name, "net": string } /* Optional */, "portalGroupAddNetwork": { "net": string, "portalGroup": iSCSI Portal Group Name } /* Optional */, "setBaseName": { "name": iSCSI Name } /* Optional */ }, ...] } - Method: POST
- Path: /ctrl/1.0/iSCSIConfig
- Arguments: No arguments
- JSON: ISCSIConfigChange
- commands: The actual iSCSI configuration commands.
- Element type: ISCSIConfigCommand
- createInitiator: (Optional ISCSICommandCreateInitiator): Define an iSCSI initiator that will connect to the cluster.
- createPortal: (Optional ISCSICommandCreatePortal): Create an iSCSI portal.
- createPortalGroup: (Optional ISCSICommandCreatePortalGroup): Create an iSCSI portal group.
- createTarget: (Optional ISCSICommandCreateTarget): Create an iSCSI target for a StorPool volume.
- deleteInitiator: (Optional ISCSICommandDeleteInitiator): Delete an iSCSI initiator definition.
- deletePortal: (Optional ISCSICommandDeletePortal): Delete a previously created iSCSI portal.
- deletePortalGroup: (Optional ISCSICommandDeletePortalGroup): Delete a previously created iSCSI portal group.
- deleteTarget: (Optional ISCSICommandDeleteTarget): Delete the iSCSI target for a StorPool volume.
- export: (Optional ISCSICommandExport): Export a StorPool volume (with an already created target) via iSCSI.
- exportDelete: (Optional ISCSICommandExportDelete): Stop exporting a StorPool volume via iSCSI.
- initiatorAddNetwork: (Optional ISCSICommandInitiatorAddNetwork): Define a network that an iSCSI initiator will connect to the cluster on.
- portalGroupAddNetwork: (Optional ISCSICommandPortalGroupAddNetwork): Add a CIDR network specification to a portal group.
- setBaseName: (Optional ISCSICommandSetBaseName): Set the StorPool cluster's iSCSI base name.
- commands: The actual iSCSI configuration commands.
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Query iSCSI controllers for active sessions (iSCSISessionsInfo)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/iSCSISessionsInfo HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "controllerIds": [ISCSIId, ...] /* Optional */, "msecsTimeout": int /* Optional */ } /* Optional */ - Method: GET
- Path: /ctrl/1.0/iSCSISessionsInfo
- Arguments: No arguments
- JSON: Optional ISCSIControllersQuery
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "sessions": [{ "ISID": string /* Optional */, "connectionId": int /* Optional */, "controllerId": ISCSIId, "initiator": string /* Optional */, "stats": { "dataIn": int, "dataOut": int, "login": int, "loginRsp": int, "logout": int, "logoutRsp": int, "nopIn": int, "nopOut": int, "r2t": int, "reject": int, "scsi": int, "scsiRsp": int, "snack": int, "task": int, "taskRsp": int, "text": int, "textRsp": int } /* Optional */, "status": string, "target": string /* Optional */, "tasks": { "aborted": int, "dataOut": int, "dataResp": int, "inFreeList": int, "processing": int, "queued": int } /* Optional */, "tcp": { "hwPort": int, "initiatorIP": string, "initiatorPort": int, "localMSS": int, "portalIP": string, "portalPort": int, "remoteMSS": int, "remoteWindowSize": int, "stats": { "dataHoles": int, "discardedBytes": int, "discardedPackets": int, "newBytesIn": int, "newBytesOut": int, "newPacketsIn": int, "newPacketsOut": int, "retransmitsAcks": int, "retransmitsAcks2": int, "retransmitsTimeout": int, "retransmittedBytes": int, "retransmittedPackets": int, "totalBytesIn": int, "totalBytesOut": int, "totalPacketsIn": int, "totalPacketsOut": int }, "wscale": int } /* Optional */, "timeCreated": int /* Optional */ }, ...] } } - Response Data:
ISCSISessionsInfo
- sessions: list of sessions
- Element type: ISCSISessionInfo
- ISID: (Optional string): session ISID
- connectionId: (Optional int)
- controllerId: (ISCSIId): controller id
- initiator: (Optional string): iSCSI name of the initiator
- stats: (Optional ISCSISessionStats): session stats
- status: (string): ok or other
- target: (Optional string)
- tasks: (Optional ISCSISessionTasks): currently active tasks count by state
- tcp: (Optional ISCSISessionTcp): session TCP info
- timeCreated: (Optional int): unix timestamp when session was established
- sessions: list of sessions
- Example HTTP Response:
Query iSCSI controllers for interfaces state (iSCSInterfacesInfo)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/iSCSInterfacesInfo HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "controllerIds": [ISCSIId, ...] /* Optional */, "msecsTimeout": int /* Optional */ } /* Optional */ - Method: GET
- Path: /ctrl/1.0/iSCSInterfacesInfo
- Arguments: No arguments
- JSON: Optional ISCSIControllersQuery
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "controllers": [{ "controllerId": ISCSIId, "interfaces": [{ "MAC": string, "interfaceName": string, "port": int, "resolveInterfaceName": string, "state": string }, ...] /* Optional */, "status": string }, ...] } } - Response Data:
ISCSIControllersIntefacesInfo
- controllers:
- Element type: ISCSIControllerIntefacesInfo
- controllerId: (ISCSIId)
- interfaces: (Optional [ISCSIControllerInterfaceInfo])
- status: (string)
- controllers:
- Example HTTP Response:
Remote
List the registered remote locations (LocationsList)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/LocationsList HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/LocationsList
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "str, default="locations"": [{ "id": Global Location Id, "name": RemoteLocationName, "recvBufferSize": int, "sendBufferSize": int }, ...], ... } } - Response Data:
A dict from str, default="locations" to [RemoteLocation]
- Key type: str, default="locations"
- Value type:
- Element type: RemoteLocation
- id: (Global Location Id): A StorPool-provided unique location id.
- name: (RemoteLocationName): The human-readable location name.
- recvBufferSize: (int): the size of the TCP receive buffer for the location
- sendBufferSize: (int): the size of the TCP send buffer for the location
- Example HTTP Response:
Register a new remote location (LocationAdd)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/LocationAdd HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "id": Global Location Id, "name": RemoteLocationName } - Method: POST
- Path: /ctrl/1.0/LocationAdd
- Arguments: No arguments
- JSON: RemoteLocationBase
- id: (Global Location Id): A StorPool-provided unique location id.
- name: (RemoteLocationName): The human-readable location name.
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Remove a remote location (LocationRemove)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/LocationRemove HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "str, default="location"": RemoteLocationName, ... } - Method: POST
- Path: /ctrl/1.0/LocationRemove
- Arguments: No arguments
- JSON: A dict from str, default="location" to RemoteLocationName
- Key type: str, default="location"
- Value type: RemoteLocationName
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Update a remote location (LocationUpdate)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/LocationUpdate HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "location": RemoteLocationName, "recvBufferSize": int /* Optional */, "sendBufferSize": int /* Optional */ } - Method: POST
- Path: /ctrl/1.0/LocationUpdate
- Arguments: No arguments
- JSON: RemoteLocationUpdateDesc
- location: (RemoteLocationName): The human-readable location name.
- recvBufferSize: (Optional int): the size of the TCP receive buffer for the location
- sendBufferSize: (Optional int): the size of the TCP send buffer for the location
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Rename a remote location (LocationRename)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/LocationRename HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "location": RemoteLocationName, "name": RemoteLocationName } - Method: POST
- Path: /ctrl/1.0/LocationRename
- Arguments: No arguments
- JSON: RemoteLocationRenameDesc
- location: (RemoteLocationName): The human-readable location name.
- name: (RemoteLocationName): The new human-readable location name.
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
List the registered remote clusters (ClustersList)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/ClustersList HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/ClustersList
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "str, default="clusters"": [{ "id": Subcluster Id, "location": RemoteLocationName, "name": RemoteClusterName }, ...], ... } } - Response Data:
A dict from str, default="clusters" to [RemoteCluster]
- Key type: str, default="clusters"
- Value type:
- Element type: RemoteCluster
- id: (Subcluster Id): A StorPool-provided unique cluster subid
- location: (RemoteLocationName): the cluster's location name
- name: (RemoteClusterName): The human-readable cluster name
- Example HTTP Response:
Register a new remote cluster (ClusterAdd)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/ClusterAdd HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "id": Subcluster Id, "location": RemoteLocationName, "name": RemoteClusterName /* Optional */ } - Method: POST
- Path: /ctrl/1.0/ClusterAdd
- Arguments: No arguments
- JSON: RemoteClusterAddDesc
- id: (Subcluster Id): A StorPool-provided unique cluster subid
- location: (RemoteLocationName): the cluster's location name
- name: (Optional RemoteClusterName): The human-readable cluster name
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Remove a remote cluster (ClusterRemove)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/ClusterRemove HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "clusterWillNotBeComingBack": bool /* Optional */, "id": Subcluster Id /* Optional */, "location": RemoteLocationName /* Optional */, "name": RemoteClusterName /* Optional */ } - Method: POST
- Path: /ctrl/1.0/ClusterRemove
- Arguments: No arguments
- JSON: RemoteClusterRemoveDesc
- clusterWillNotBeComingBack: (Optional bool): Set this flag if the remote cluster will not be registered again
- id: (Optional Subcluster Id): A StorPool-provided unique cluster subid
- location: (Optional RemoteLocationName): the cluster's location name
- name: (Optional RemoteClusterName): The human-readable cluster name.
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Rename a remote cluster (ClusterRename)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/ClusterRename HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "cluster": RemoteClusterName, "name": RemoteClusterName } - Method: POST
- Path: /ctrl/1.0/ClusterRename
- Arguments: No arguments
- JSON: RemoteClusterRenameDesc
- cluster: (RemoteClusterName): The human-readable cluster name.
- name: (RemoteClusterName): The new human-readable cluster name.
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
List the registered remote bridges (RemoteBridgesList)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/RemoteBridgesList HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/RemoteBridgesList
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "str, default="remoteBridges"": [{ "cluster": RemoteClusterName /* Optional */, "ip": string, "location": RemoteLocationName, "minimumDeleteDelay": int /* Optional */, "noCrypto": bool /* Optional */, "publicKey": string, "remote": Either(RemoteClusterName, RemoteLocationName) }, ...], ... } } - Response Data:
A dict from str, default="remoteBridges" to [RemoteBridge]
- Key type: str, default="remoteBridges"
- Value type:
- Element type: RemoteBridge
- cluster: (Optional RemoteClusterName): the cluster of the remote bridge
- ip: (string): the ip address of the remote bridge
- location: (RemoteLocationName): the location of the remote bridge
- minimumDeleteDelay: (Optional int): minimum value for the deferred deletion
- noCrypto: (Optional bool): Set this flag if the connection with the remote bridge should not be encrypted
- publicKey: (string): the public key of the remote bridge
- remote: the cluster or the location of the remote bridgeThe value must be of one of the following types: RemoteClusterName, RemoteLocationName.
- Subtypes:
- RemoteClusterName
- RemoteLocationName
- Example HTTP Response:
Register a new remote bridge (RemoteBridgeAdd)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/RemoteBridgeAdd HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH Either({ "ip": string, "location": RemoteLocationName, "minimumDeleteDelay": int /* Optional */, "noCrypto": bool /* Optional */, "publicKey": string }, { "ip": string, "minimumDeleteDelay": int /* Optional */, "noCrypto": bool /* Optional */, "publicKey": string, "remote": RemoteClusterName }) - Method: POST
- Path: /ctrl/1.0/RemoteBridgeAdd
- Arguments: No arguments
- JSON: The value must be of one of the following types: RemoteBridgeAddLocationDesc, RemoteBridgeAddClusterDesc.
- Subtypes:
- RemoteBridgeAddLocationDesc
- ip: (string): the ip address of the remote bridge
- location: (RemoteLocationName): the location of the remote bridge
- minimumDeleteDelay: (Optional int): minimum value for the deferred deletion
- noCrypto: (Optional bool): Set this flag if the connection with the remote bridge should not be encrypted
- publicKey: (string): the public key of the remote bridge
- RemoteBridgeAddClusterDesc
- ip: (string): the ip address of the remote bridge
- minimumDeleteDelay: (Optional int): minimum value for the deferred deletion
- noCrypto: (Optional bool): Set this flag if the connection with the remote bridge should not be encrypted
- publicKey: (string): the public key of the remote bridge
- remote: (RemoteClusterName): the cluster of the remote bridge
- RemoteBridgeAddLocationDesc
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Deregister a remote bridge (RemoteBridgeRemove)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/RemoteBridgeRemove HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "ip": string } - Method: POST
- Path: /ctrl/1.0/RemoteBridgeRemove
- Arguments: No arguments
- JSON: RemoteBridgeRemoveDesc
- ip: (string): the ip address of the remote bridge
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Nodes in maintenance
List the nodes in maintenance (MaintenanceList)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/MaintenanceList HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/MaintenanceList
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "nodes": [{ "description": string, "duration": int, "nodeId": int, "overrun": bool, "remaining": int /* Optional */, "started": int }, ...] } } - Response Data:
MaintenanceNodesList
- nodes:
- Element type: MaintenanceNodeDesc
- nodes:
- Example HTTP Response:
Set node in maintenance (MaintenanceSet)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/MaintenanceSet HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "description": string, "duration": int, "maxNodesInMaintenance": int /* Optional */, "maxReplicationDecrease": int /* Optional */, "minOkReplicas": int /* Optional */, "nodeId": int, "votingSafetyMargin": int /* Optional */ } - Method: POST
- Path: /ctrl/1.0/MaintenanceSet
- Arguments: No arguments
- JSON: MaintenanceSetDesc
- description: (string): human-readable information
- duration: (int): Period of time after which the maintenance will expire automatically.
- maxNodesInMaintenance: (Optional int): maximum number of nodes simultaneously in maintenance
- maxReplicationDecrease: (Optional int): same as minOkReplicas = volume.replication - maxReplicationDecrease
- minOkReplicas: (Optional int): the minimum ok copies of all data that has a copy on the node that must remain
- nodeId: (int): The id of the node which will be set in maintenance.
- votingSafetyMargin: (Optional int): number of voting nodes that must be alive above the 1/2 + 1 minimum
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Complete node's maintenance. (MaintenanceComplete)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/MaintenanceComplete HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "nodeId": int } - Method: POST
- Path: /ctrl/1.0/MaintenanceComplete
- Arguments: No arguments
- JSON: MaintenanceCompleteDesc
- nodeId: (int): The id of the node to unset maintenance mode for
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Key Value Store
List all created key value buckets (KV)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/KV HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/KV
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "buckets": { "KvsName": int, ... } } } - Response Data: KeyValueBucketsList
- Example HTTP Response:
List a complete key value bucket (KV)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/KV/List/{bucketName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/KV/List/{bucketName}
- Arguments:
- bucketName - KvsName: a string(1023), matching ^\#?[A-Za-z0-9_\-.:]+$, except {}
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "name": KvsName, "pairs": { "KvsKeyName": string, ... } /* Optional */, "version": int } } - Response Data:
KeyValueBucket
- name: (KvsName): name of the bucket
- pairs: (Optional {KvsKeyName: str})
- version: (int): change version of the bucket, increments with each change
- Example HTTP Response:
List a specific key-value pair from a specific bucket (KV)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/KV/Get/{bucketName}/{keyName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/KV/Get/{bucketName}/{keyName}
- Arguments:
- bucketName - KvsName: a string(1023), matching ^\#?[A-Za-z0-9_\-.:]+$, except {}
- keyName - KvsKeyName: a string with a max length of 1023
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "name": KvsName, "pairs": { "KvsKeyName": string, ... } /* Optional */, "version": int } } - Response Data:
KeyValueBucket
- name: (KvsName): name of the bucket
- pairs: (Optional {KvsKeyName: str})
- version: (int): change version of the bucket, increments with each change
- Example HTTP Response:
Create a new bucket (KV)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/KV/Create/{bucketName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: POST
- Path: /ctrl/1.0/KV/Create/{bucketName}
- Arguments:
- bucketName - KvsName: a string(1023), matching ^\#?[A-Za-z0-9_\-.:]+$, except {}
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Delete a bucket (KV)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/KV/Delete/{bucketName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: POST
- Path: /ctrl/1.0/KV/Delete/{bucketName}
- Arguments:
- bucketName - KvsName: a string(1023), matching ^\#?[A-Za-z0-9_\-.:]+$, except {}
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Update a bucket (KV)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/KV/Set/{bucketName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH { "runIfVersionIs": int /* Optional */, "set": { "KvsKeyName": string, ... } } - Method: POST
- Path: /ctrl/1.0/KV/Set/{bucketName}
- Arguments:
- bucketName - KvsName: a string(1023), matching ^\#?[A-Za-z0-9_\-.:]+$, except {}
- JSON: KeyValueBucketSetDesc
- runIfVersionIs: (Optional int): if versions don't match, don't execute the command
- set: list of key-value pairs to set / update / delete (empty value = deletion)A dict from KvsKeyName to str
- Key type: KvsKeyName
- Value type: string
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
Metadata volumes
Read the data from a metadata volume (MetadataVolumeRead)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/MetadataVolumeRead/{volumeName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/MetadataVolumeRead/{volumeName}
- Arguments:
- volumeName - VolumeNameOrGlobalId: a string(200), matching ^\#?[A-Za-z0-9_\-.:]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": bytes } - Response Data: bytes
- Example HTTP Response:
Read the data from a metadata snapshot (MetadataSnapshotRead)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/MetadataSnapshotRead/{snapshotName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/MetadataSnapshotRead/{snapshotName}
- Arguments:
- snapshotName - SnapshotNameOrGlobalId: a string(200), matching ^\*?[A-Za-z0-9_\-.:@]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": bytes } - Response Data: bytes
- Example HTTP Response:
Write the data to a metadata volume. (MetadataVolumeWrite)
- Request:
- Example HTTP Request:
POST /ctrl/1.0/MetadataVolumeWrite/{volumeName} HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH bytes - Method: POST
- Path: /ctrl/1.0/MetadataVolumeWrite/{volumeName}
- Arguments:
- volumeName - VolumeNameOrGlobalId: a string(200), matching ^\#?[A-Za-z0-9_\-.:]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status}
- JSON: bytes
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "generation": int, "info": string /* Optional */, "ok": true } } - Response Data: ApiOk
- Example HTTP Response:
StorPool Features
Show information about StorPool features (Features)
- Request:
- Example HTTP Request:
GET /ctrl/1.0/Features HTTP/1.0 Host: SP_API_HOST:SP_API_PORT Authorization: Storpool v1:SP_AUTH_TOKEN Content-Length: LENGTH - Method: GET
- Path: /ctrl/1.0/Features
- Arguments: No arguments
- JSON: Either no JSON or {}
- Example HTTP Request:
- Response:
- Example HTTP Response:
HTTP/1.0 200 OK Connection: close Content-Type: application/json Cache-control: private Content-Length: LENGTH { "generation": generation, "data": { "features": [{ "canBeEnabled": bool /* Optional */, "enableBlockedBy": bool /* Optional */, "enabled": bool, "name": string, "upgradeCompleted": bool /* Optional */ }, ...] } } - Response Data:
FeaturesList
- features: List of all the features and information about them
- Element type: Feature
- canBeEnabled: (Optional bool): only shows if the feature is disabled, indicates if it can be enabled
- enableBlockedBy: (Optional bool): indicates the reason the feature cannot be enabled
- enabled: (bool): shows if the feature is enabled or not
- name: (string): name of the feature
- upgradeCompleted: (Optional bool)
- features: List of all the features and information about them
- Example HTTP Response:
Data Types
| "": | The constant value "". |
| "-": | The constant value "-". |
| "all": | The constant value "all". |
| "diskExpected": | The constant value "diskExpected". |
| "diskState": | The constant value "diskState". |
| "parent": | The constant value "parent". |
| "request": | The constant value "request". |
| -1: | The constant value -1. |
| 0: | The constant value 0. |
| 4294967294: | The constant value 4294967294. |
| AttachmentPos: | integer, 0 <= value <= 1023 |
| AttachmentRights: | One of {"rw", "ro"} |
| BalancerCommand: | One of {"start", "stop", "commit"} |
| BalancerStatus: | One of {"nothing to do", "blocked", "waiting", "working", "ready", "committing"} |
| Bandwidth: | a positive integer or '-' for unlimited |
| BeaconClusterStatus: | One of {"CNODE_DOWN", "CNODE_DAMPING", "CNODE_UP"} |
| BeaconNodeStatus: | One of {"NODE_DOWN", "NODE_UP"} |
| BridgeId: | integer, 1 <= value <= 4095 |
| BridgeStatus: | One of {"running", "joining", "down"} |
| ClientID: | integer, 1 <= value <= 4095 |
| ClientStatus: | One of {"running", "down"} |
| ClusterName: | a string(64), matching ^\#?[A-Za-z0-9_\-.:]+$, except {} |
| ClusterStatus: | One of {"running", "waiting", "down"} |
| DeleteBlocked: | One of {"not blocked", "pending", "rebasing", "flushing", "volume not found", "generation mismatch", "disk down", "multiple children", "peer down", "write not completed", "recovering from remote", "parent recovering from remote", "moving to remote", "unknown", "ec snapshot"} |
| DematerializationStatus: | One of {"pending", "allObjectsUsed", "complete", "blockedRelocate", "blockedParentRelocate", "blockedParentRemoving", "blockedParentDifferentVag", "destroyed", "rebased"} |
| DiskDescritpion: | string, regex ^[A-Za-z0-9_\- ]{,30}$ |
| DiskID: | integer, 0 <= value <= 4095 |
| DiskSoftEjectStatus: | One of {"on", "off", "paused"} |
| DiskState: | One of {"DISK_NONE", "DISK_UNKNOWN", "DISK_DATA_INITIALIZING", "DISK_DATA_PENDING_INSERT", "DISK_DATA", "DISK_DATA_STOPPING", "DISK_DATA_FLUSH_WBC", "DISK_DATA_STOPPED", "DISK_STOPPING", "DISK_EJECTED", "DISK_JOURNAL", "DISK_JOURNAL_PENDING"} |
| GUID: | string, regex ^0x[0-9a-fA-F]{2,16}$ |
| Global Location Id: | string, regex [a-z0-9]+$ |
| Global Volume Id: | string, regex [a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$ |
| IOPS: | a positive integer or '-' for unlimited |
| ISCSIId: | integer, 0 <= value <= 4095 |
| Id: | One of {"bridge", "server", "iSCSI", "client", "unknown"} |
| KvsKeyName: | a string with a max length of 1023 |
| KvsName: | a string(1023), matching ^\#?[A-Za-z0-9_\-.:]+$, except {} |
| LastState: | One of {"up", "down"} |
| LimitType: | One of {"total", "perGiB"} |
| MAC Address: | string, regex ^([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}$ |
| MgmtID: | integer, 1 <= value <= 4095 |
| MultiClusterState: | One of {"owner", "ownerExported", "slaveCopy", "clusterLocal", "clusterLocalExported", "clusterLocalAutoReconcile", "clusterLocalAutoReconcileExported"} |
| NetID: | integer, 0 <= value <= 3 |
| NodeID: | integer, 0 <= value <= 63 |
| ObjectState: | ObjectState, enumeration from 0 to 9 |
| OnAttached: | One of {"fail", "detach", "detachForce", "export"} |
| OverrideId: | a positive integer or '-' for unlimited |
| PeerID: | integer, 0 <= value <= 65535 |
| PeerStatus: | One of {"up", "down"} |
| PlacementGroupName: | a string(128), matching ^[A-Za-z0-9_\-]+$, except {list} |
| RdmaState: | One of {"Idle", "GidReceived", "Connecting", "Connected", "pendingError", "Error"} |
| RelocatorStatus: | One of {"on", "off", "blocked"} |
| RemoteClusterName: | a string(64), matching ^\#?[A-Za-z0-9_\-.:]+$, except {list} |
| RemoteLocationName: | a string(64), matching ^\#?[A-Za-z0-9_\-.:]+$, except {list} |
| Replication: | integer, 1 <= value <= 3 |
| RequestOp: | One of {"read", "write", "merge", "system", "entries flush", "#bad_state", "#bad_drOp", "idle", "error recovery", "transaction", "data recovery"} |
| ServerID: | integer, 1 <= value <= 32767 |
| ServerStatus: | One of {"running", "waiting", "booting", "down"} |
| Size: | a positive integer divisible by 512 |
| SizeAdd: | a positive integer divisible by 512 |
| SnapshotName: | a string(200), matching ^\*?[A-Za-z0-9_\-.:@]+$, except {list, status} |
| SnapshotNameOrGlobalId: | a string(200), matching ^\*?[A-Za-z0-9_\-.:@]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status} |
| Status: | One of {"peer_down", "peerDone", "timeout", "streamNotConnected", "streamOverfilled", "invalidResponse"} |
| Subcluster Id: | string, regex [a-z0-9]+$ |
| TargetsCount: | One of {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768} |
| VagId: | integer, 1 <= value <= 18446744073709551616 |
| VolumeCurrentStatus: | One of {"up", "up soon", "data lost", "down"} |
| VolumeName: | a string(200), matching ^\#?[A-Za-z0-9_\-.:]+$, except {list, status} |
| VolumeNameOrGlobalId: | a string(200), matching ^\#?[A-Za-z0-9_\-.:]+$|^~[a-z0-9]+\.[a-z0-9]+\.[a-z0-9]+$, except {list, status} |
| VolumeTagName: | a string(200), matching ^[A-Za-z0-9_\-.:]+$, except {} |
| VolumeTagValue: | a string(200), matching ^[A-Za-z0-9_\-.:]*$, except {} |
| VolumeTemplateName: | a string(200), matching ^[A-Za-z0-9_\-]+$, except {list} |
| bool: | true or false. |
| bool, default=false: | A value of type bool. Default value = False. |
| bytes: | Bytes sequence. |
| client status: | One of {"ok", "updating", "down"} |
| float: | A floating point number. |
| iSCSI Name: | string, regex ^[a-z0-9\-.:]+$ |
| iSCSI Portal Group Name: | string, regex ^[A-Za-z0-9_\-.:]+$ |
| int: | An integer value. |
| iscsiTargetId: | integer, 1 <= value <= 4095 |
| iscsiTargetStatus: | One of {"running", "joining", "down"} |
| mc: | One of {"backup", "user"} |
| move: | One of {"export"} |
| null: | The constant value null. |
| str, default="clusters": | A value of type str. Default value = clusters. |
| str, default="exports": | A value of type str. Default value = exports. |
| str, default="location": | A value of type str. Default value = location. |
| str, default="locations": | A value of type str. Default value = locations. |
| str, default="remoteBridges": | A value of type str. Default value = remoteBridges. |
| str, default="snapshots": | A value of type str. Default value = snapshots. |
| str, default="volumes": | A value of type str. Default value = volumes. |
| string: | A string value. |
| true: | The constant value true. |