StorPool API Reference
Copyright (c) 2014 - 2023 StorPool. All rights reserved.
This reference document describes the StorPool API version 21.0 and
the supported API calls.
- General
- Peers
- List the network peers
- Tasks
- List tasks
- Services
- List all StorPool services
- List all blocked StorPool servers
- Active requests
- Query all peers for their status and active requests
- Servers
- List all Storpool servers
- List all disks on a server
- Describe a disk on a server
- Clients
- Get the current status of all the clients
- Wait until a client updates to the current configuration
- List all the active requests on a client
- 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
- 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.
- 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 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
- List all attachments
- Reassign volumes and/or snapshots
- Reassign volumes and/or snapshots with confirmation from the clients
- 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
- Volume Templates
- List all volume templates
- List the status of all volume templates
- Describe a single volume template
- Create a volume template
- Update a volume template
- Delete a volume template
- Volume Relocator
- Get the relocator's status
- List total per disk relocation estimates
- List per disk relocation estimates for a given volume
- List per disk relocation estimates for a given snapshot
- 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
- iSCSI
- Get the StorPool iSCSI configuration
- Modify the StorPool iSCSI configuration
- Query iSCSI controllers for active sessions
- Query iSCSI controllers for interfaces state
- Remote
- 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
- Nodes in maintenance
- List the nodes in maintenance
- Set node in maintenance
- Complete node's maintenance.
- Key Value Store
- List all created key value buckets
- List a complete key value bucket
- List a specific key-value pair from a specific bucket
- Create a new bucket
- Delete a bucket
- Update a bucket
- StorPool Features
- Show information about 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:
- 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
- Key type: NetID
- Value type: RdmaDesc
- guid: (GUID): global unique id
- state: (RdmaState): state of the RDMA module
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:
- 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)
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:
- 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
- Key type: ServerID
- Value type: Server
- id: (ServerID): The ID of the service. Currently this is the same as the ID of the node.
- missingDisks: The cluster will remain down until these disks are seen again.
- nodeId: (Optional NodeID): The ID of the node on which the service is running.
- pendingDisks: Similar to missingDisks, these are the disks that are ready and waiting for the
- 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.
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:
- 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
- Key type: ServerID
- Value type: Server
- id: (ServerID): The ID of the service. Currently this is the same as the ID of the node.
- missingDisks: The cluster will remain down until these disks are seen again.
- nodeId: (Optional NodeID): The ID of the node on which the service is running.
- pendingDisks: Similar to missingDisks, these are the disks that are ready and waiting for the
- 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.
Active requests
Query all peers for their status and active requests (AllPeersActiveRequests)
- 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.
Subtypes:
- AllPeersActiveRequestsDiskExpected
- diskId: (DiskID): disk id
- lastState: (LastState): last known state of the disk
- peerId: (PeerID): peer id
- service: identification json for the service
- id: (string): identificator for the service of the given type
- type: (Id): type of the service
- status: ("diskExpected"): "diskExpected"
- 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
- id: (string): identificator for the service of the given type
- type: (Id): type of 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.
- 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.
- peerId: (PeerID): peer id
- service: (Optional AllPeersActiveRequestsServiceDesc): identification json for the service
- 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
- id: (string): identificator for the service of the given type
- type: (Id): type of 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
- AllPeersActiveRequestsSimpleStats
- peerId: (PeerID): peer id
- service: identification json for the service
- id: (string): identificator for the service of the given type
- type: (Id): type of the service
- status: (Status): status of the request to the service
Servers
List all Storpool servers (ServersList)
Returns the the same output as ServicesList but ommits clients. Returns
an error if the whole cluster is not operational.
- 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
- Key type: ServerID
- Value type: Server
- id: (ServerID): The ID of the service. Currently this is the same as the ID of the node.
- missingDisks: The cluster will remain down until these disks are seen again.
- nodeId: (Optional NodeID): The ID of the node on which the service is running.
- pendingDisks: Similar to missingDisks, these are the disks that are ready and waiting for the
- 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.
List all disks on a server (ServerDisksList)
Return detailed information about each disk on the given server.
- 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): Extimate 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.
Describe a disk on a server (ServerDiskDescribe)
Return detailed information about a disk on the given server and the
objects on it.
- 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): Extimate 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))
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:
- 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)
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:
- 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)
List all the active requests on a client (ClientActiveRequests)
List detailed information about the requests being currently processed on
the given client.
- 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.
Disks
List all disks (DisksList)
- 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): Extimate 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.
Describe a disk (DiskDescribe)
List all disks including detailed information about the objects on each disk.
- 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): Extimate 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))
Eject a disk (DiskEject)
Stop operations on the given disk even if it is not empty.
- 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
- 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.
Forget a disk (DiskForget)
Remove the disk from any placement groups or volumes that it is used in.
- 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
- 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.
Ignore a disk (DiskIgnore)
Try to boot the cluster by ignoring this disk.
- 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
- 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.
Soft-eject a disk (DiskSoftEject)
Stop writes to the given disk and start relocating all the data stored on it to other disks.
- 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
- 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.
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:
- 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
- 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.
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:
- 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
- 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.
Set a disk's description (DiskSetDescription)
- 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
- 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.
List all the active requests on a disk (DiskActiveRequests)
List detailed information about the requests being currently processed
on the given disk.
- 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.
Start scrubbing process (DiskScrubStart)
- 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
- 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.
Pause scrubbing process (DiskScrubPause)
- 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
- 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.
Continue paused scrubbing process (DiskScrubContinue)
- 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
- 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.
Retrim disk (DiskRetrim)
- 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
- 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.
Volumes
List all volumes (VolumesList)
Return configuration information about all the volumes.
- 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 */,
"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)
- 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.
- 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.
- visibleVolumeId: (int): The ID by which the volume/snapshot was created.
Get volume and snapshot status and stored size (VolumesGetStatus)
Return the status and stored size of each volume and snapshot.
- 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 */,
"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 */,
"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.
- 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
- 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)
- 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
- missingTargetDrives:
- 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.
- 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:
- 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.
- 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
- 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)
- 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
- missingTargetDrives:
- 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.
- 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.
- 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:
- 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.
- 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:
- 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 */,
"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 */,
"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.
- 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
- 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)
- 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
- missingTargetDrives:
- 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.
- 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:
- 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.
- 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
- 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)
- 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
- missingTargetDrives:
- 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.
- 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.
- 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:
- 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.
- 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:
- 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 */,
"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)
- 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.
- 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.
- visibleVolumeId: (int): The ID by which the volume/snapshot was created.
List a single volume (Volume)
Same as VolumeList but only return information about a given volume.
- 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 */,
"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)
- 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.
- 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.
- visibleVolumeId: (int): The ID by which the volume/snapshot was created.
Describe a volume (VolumeDescribe)
Return detailed information about the distribution of the volume's data on
the disks.
- 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 */,
"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)
- name: (VolumeNameOrGlobalId): The name of this volume.
- objects: Where each object is actually stored.
- 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.
- 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.
- 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.
- 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:
- 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 */,
"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)
- name: (VolumeNameOrGlobalId): The name of this volume.
- objectsCount: (int): The number of objects that the volume/snapshot is comprised of.
- objectsPerChain:
Element type: VolumeChainStat
- count: (int): The number of objects on the disks.
- disks: IDs of the disks.
- objectsPerDisk: A dict from DiskID to int
- objectsPerDiskSet:
Element type: VolumeChainStat
- count: (int): The number of objects on the disks.
- disks: IDs of the disks.
- originalParentVolumeId: (Internal int)
- parentName: The volume/snapshot's parent snapshot.The value must be of one of the following types: "", 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.
- 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:
- 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 */,
"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)
- 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.
- 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.
- 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)
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 */,
"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.
- 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.
- 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.
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.
- 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
- 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.
Freeze a volume (VolumeFreeze)
Convert the volume to a snapshot
- 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
- 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.
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:
- 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
- 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.
Abandon disk (VolumeAbandonDisk)
- 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
- 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.
Delete a volume (VolumeDelete)
- 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
- 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.
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
- 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
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
- 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
- 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.
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
- 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
- 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.
Export a volume to another cluster, so it can be attached when allowRemoteExports is true (VolumeExport)
- 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
- 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.
Move the volume from its current remote cluster to the local one. Noop if already here. Multicluster only call (VolumeAcquire)
- 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
- 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.
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.
- 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.
- 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
- 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.
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:
- 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
- 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.
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:
- 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 */,
"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)
- 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.
- 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.
- 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)
List snapshots space estimations (SnapshotsSpace)
List estimated virtual space used by each snapshot.
- 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 */,
"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)
- 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.
- 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.
- 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)
List a single snapshot (Snapshot)
Same as SnapshotList but only return information about a given snapshot.
- 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 */,
"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)
- 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.
- 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.
- 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)
Describe a snapshot (SnapshotDescribe)
Return detailed information about the distribution of the snapshot's data on the
disks.
- 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 */,
"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)
- name: (SnapshotNameOrGlobalId): The name of this snapshot
- objects: Where each object is actually stored.
- 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.
- 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.
- 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.
- 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:
- 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 */,
"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)
- name: (SnapshotNameOrGlobalId): The name of this snapshot
- objectsCount: (int): The number of objects that the volume/snapshot is comprised of.
- objectsPerChain:
Element type: VolumeChainStat
- count: (int): The number of objects on the disks.
- disks: IDs of the disks.
- objectsPerDisk: A dict from DiskID to int
- objectsPerDiskSet:
Element type: VolumeChainStat
- count: (int): The number of objects on the disks.
- disks: IDs of 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.
- 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.
- 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.
- 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.
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.
- 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
- 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.
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:
- 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
- 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.
Abandon disk (VolumeAbandonDisk)
- 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
- 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.
Delete a snapshot (SnapshotDelete)
- 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
- 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.
Delete a snapshot by global id (SnapshotDeleteById)
- 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
- 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.
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": [{
"name": Either("", SnapshotName) /* Optional */,
"tags": {
"VolumeTagName": VolumeTagValue, ...
} /* Optional */,
"volume": VolumeNameOrGlobalId
}, ...]
}
- Method: POST
- Path: /ctrl/1.0/MultiCluster/VolumesGroupSnapshot
- Arguments: No arguments
- JSON: GroupSnapshotsSpec
- 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
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.
- 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
- 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.
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
- 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
- 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.
Allow a remote location to access a local snapshot (SnapshotExport)
- 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
- 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.
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.
- 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
- 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.
List exported snapshots (ExportsList)
- 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]
List exported volumes (VolumeExportsList)
- 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]
List the available remote snapshots (SnapshotsRemoteList)
- 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,
"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]
List the available remote volumes (VolumesRemoteList)
- 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,
"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]
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,
"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: (RemoteLocationName): name of the location to unexport from
- targetDeleteDate: (Optional int): if not 0 instruct the remote location to delete the snapshot at the specified
- 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
- 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.
Attachments
List all attachments (AttachmentsList)
List the volumes and snapshots currently attached to clients along with
the read/write rights of each attachment.
- 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.
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.
Subtypes:
- 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
- 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
- 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.
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.
Subtypes:
- 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
- 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
- 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.
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:
- 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
Describe a single placement group (PlacementGroupDescribe)
Same as PlacementGroupsList but only return information about a given group.
- 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.
- id: (Internal int)
- name: (PlacementGroupName)
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.
- rename: (Optional PlacementGroupName): The new name of the placement group.
- rmDisks: IDs of the disks to be removed from this group.
- 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
- 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.
Delete a placement group (PlacementGroupDelete)
- 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
- 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.
List all fault sets (FaultSetsList)
- 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
List the properties of a volume allocation group (VagList)
- 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.
- 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]
- 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.
- 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.
- vagId: (Internal int): The ID of this volume allocation group
Update the allocation group of a volume (VolumeUpdateVag)
- 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
- 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.
Update the allocation group of a snapshot (SnapshotUpdateVag)
- 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
- 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.
Update the targets of a volume allocation group (VagUpdate)
- 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
- 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.
Volume Templates
Templates are a set of rules used for creating many similar volumes.
List all volume templates (VolumeTemplatesList)
- 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.
- 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.
- 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.
List the status of all volume templates (VolumeTemplatesStatus)
- 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.
- 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.
- placeHead: placeHead placement group estimations.
- placeTail: placeTail placement group estimations.
- 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.
Describe a single volume template (VolumeTemplateDescribe)
Same as VolumeTemplatesList but only return information about a given template.
- 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.
- 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.
- 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.
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.
- 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
- 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.
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.
- 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
- 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.
Delete a volume template (VolumeTemplateDelete)
- 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
- 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.
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:
- 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.
List total per disk relocation estimates (VolumeRelocatorDisksList)
- 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.
- current: (int): The current value.
- delta: (int): The difference between the target and current values.
- target: (int): The target value.
- toRecover: (int): The amount that will have to be recovered to get from the current to the target state
- 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.
- current: (int): The current value.
- delta: (int): The difference between the target and current values.
- target: (int): The target value.
- toRecover: (int): The amount that will have to be recovered to get from the current to the target state
- 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.
- current: (int): The current value.
- delta: (int): The difference between the target and current values.
- target: (int): The target value.
- toRecover: (int): The amount that will have to be recovered to get from the current to the target state
- DownDiskTarget
- generationLeft: (int): The last cluster generation when the disk was active on a running server.
- id: (DiskID): The ID of this disk.
- serverId: (ServerID): The ID of the server this disk was last on.
List per disk relocation estimates for a given volume (VolumeRelocatorVolumeDisks)
- 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.
- current: (int): The current value.
- delta: (int): The difference between the target and current values.
- target: (int): The target value.
- toRecover: (int): The amount that will have to be recovered to get from the current to the target state
- 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.
- current: (int): The current value.
- delta: (int): The difference between the target and current values.
- target: (int): The target value.
- toRecover: (int): The amount that will have to be recovered to get from the current to the target state
- 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.
- current: (int): The current value.
- delta: (int): The difference between the target and current values.
- target: (int): The target value.
- toRecover: (int): The amount that will have to be recovered to get from the current to the target state
- DownDiskTarget
- generationLeft: (int): The last cluster generation when the disk was active on a running server.
- id: (DiskID): The ID of this disk.
- serverId: (ServerID): The ID of the server this disk was last on.
List per disk relocation estimates for a given snapshot (VolumeRelocatorSnapshotDisks)
- 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.
- current: (int): The current value.
- delta: (int): The difference between the target and current values.
- target: (int): The target value.
- toRecover: (int): The amount that will have to be recovered to get from the current to the target state
- 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.
- current: (int): The current value.
- delta: (int): The difference between the target and current values.
- target: (int): The target value.
- toRecover: (int): The amount that will have to be recovered to get from the current to the target state
- 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.
- current: (int): The current value.
- delta: (int): The difference between the target and current values.
- target: (int): The target value.
- toRecover: (int): The amount that will have to be recovered to get from the current to the target state
- DownDiskTarget
- generationLeft: (int): The last cluster generation when the disk was active on a running server.
- id: (DiskID): The ID of this disk.
- serverId: (ServerID): The ID of the server this disk was last on.
Balancer
This is a service that decides when it is a good time to move data.
Get the balancer's status (VolumeBalancerStatus)
- Request:
- Response:
Set the balancer's status (VolumeBalancerStatus)
- 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
- 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.
List balancer volume and snapshot status (VolumeBalancerVolumesStatus)
Show which volumes and snapshots will be reallocated by the
current balancer run.
- 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.
- 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.
List total per disk rebalancing estimates (VolumeBalancerDisksList)
- 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.
- current: (int): The current value.
- delta: (int): The difference between the target and current values.
- target: (int): The target value.
- toRecover: (int): The amount that will have to be recovered to get from the current to the target state
- 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.
- current: (int): The current value.
- delta: (int): The difference between the target and current values.
- target: (int): The target value.
- toRecover: (int): The amount that will have to be recovered to get from the current to the target state
- 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.
- current: (int): The current value.
- delta: (int): The difference between the target and current values.
- target: (int): The target value.
- toRecover: (int): The amount that will have to be recovered to get from the current to the target state
- DownDiskTarget
- generationLeft: (int): The last cluster generation when the disk was active on a running server.
- id: (DiskID): The ID of this disk.
- serverId: (ServerID): The ID of the server this disk was last on.
List per disk rebalancing estimated for a given volume (VolumeBalancerVolumeDisks)
- 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.
- current: (int): The current value.
- delta: (int): The difference between the target and current values.
- target: (int): The target value.
- toRecover: (int): The amount that will have to be recovered to get from the current to the target state
- 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.
- current: (int): The current value.
- delta: (int): The difference between the target and current values.
- target: (int): The target value.
- toRecover: (int): The amount that will have to be recovered to get from the current to the target state
- 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.
- current: (int): The current value.
- delta: (int): The difference between the target and current values.
- target: (int): The target value.
- toRecover: (int): The amount that will have to be recovered to get from the current to the target state
- DownDiskTarget
- generationLeft: (int): The last cluster generation when the disk was active on a running server.
- id: (DiskID): The ID of this disk.
- serverId: (ServerID): The ID of the server this disk was last on.
List per disk rebalancing estimates for a given snapshot (VolumeBalancerSnapshotDisks)
- 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.
- current: (int): The current value.
- delta: (int): The difference between the target and current values.
- target: (int): The target value.
- toRecover: (int): The amount that will have to be recovered to get from the current to the target state
- 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.
- current: (int): The current value.
- delta: (int): The difference between the target and current values.
- target: (int): The target value.
- toRecover: (int): The amount that will have to be recovered to get from the current to the target state
- 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.
- current: (int): The current value.
- delta: (int): The difference between the target and current values.
- target: (int): The target value.
- toRecover: (int): The amount that will have to be recovered to get from the current to the target state
- DownDiskTarget
- generationLeft: (int): The last cluster generation when the disk was active on a running server.
- id: (DiskID): The ID of this disk.
- serverId: (ServerID): The ID of the server this disk was last on.
Get the disk sets computed by the balancer for a given volume (VolumeBalancerVolumeDiskSets)
- 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
- 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.
- name: The volume's name.The value must be of one of the following types: 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:
- 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
- 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.
- name: The volume's name.The value must be of one of the following types: 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:
- 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
- name: (iSCSI Name): The iSCSI initiator's IQN.
- nets: The networks this initiator will contact the iSCSI cluster on.
- secret: (string): The password to authenticate the initiator with.
- username: (string)
- 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.
Element type: ISCSIPGNetwork
- address: (string): The dotted-quad network address.
- prefix: (int): The network's CIDR prefix length.
- portals: The list of portals defined in this group.
Element type: ISCSIPortal
- controller: (ISCSIId): The StorPool iSCSI target service handling this portal.
- ip: (string): The IP address for the portal.
- port: (string): The TCP port for the portal.
- 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
- 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
- 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.
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
- 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
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
- 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
Remote
List the registered remote locations (LocationsList)
- 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 recieve buffer for the location
- sendBufferSize: (int): the size of the TCP send buffer for the location
Register a new remote location (LocationAdd)
- 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
- 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.
Remove a remote location (LocationRemove)
- 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
- 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.
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 recieve buffer for the location
- sendBufferSize: (Optional int): the size of the TCP send buffer for the location
- 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
- 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.
Rename a remote location (LocationRename)
- 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
- 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.
List the registered remote clusters (ClustersList)
- 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]
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
- 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
- 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.
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.
- 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
- 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.
Rename a remote cluster (ClusterRename)
- 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
- 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.
List the registered remote bridges (RemoteBridgesList)
- 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.
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
- 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
- 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.
Deregister a remote bridge (RemoteBridgeRemove)
- 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
- 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.
Nodes in maintenance
List the nodes in maintenance (MaintenanceList)
- 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
- description: (string): human-readable information
- duration: (int): planned duration of the maintenance
- nodeId: (int): The id of the node in maintenance,
- overrun: (bool): true if the duration has passed
- remaining: (Optional int)
- started: (int): unix timestamp the maintenance was started
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
- 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
- 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.
Complete node's maintenance. (MaintenanceComplete)
- 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
- 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.
Key Value Store
List all created key value buckets (KV)
- Request:
- Response:
List a complete key value bucket (KV)
- 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
List a specific key-value pair from a specific bucket (KV)
- 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
Create a new bucket (KV)
- 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
- 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.
Delete a bucket (KV)
- 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
- 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.
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
- 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
- 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.
StorPool Features
Show information about StorPool features (Features)
- 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)
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. |
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. |