Table Of Contents
- Blockbridge REST API
- Status Test
- Curl
- Authentication
- Schema
- Methods
- Parameters
- Request Status
- Account
- User Profile
- OAuth 2 Access Token
- Authorization
- Node
- Site
- Network Interface
- Operating System Device
- System Datastore
- System Datastore Device
- Product
- Virtual Storage Service
- Virtual Disk
- Attributes
- Virtual Disk Info
- Virtual Disk List
- Virtual Disk Create
- Virtual Disk Remove
- Virtual Disk Update
- Virtual Disk Quota Update
- Virtual Disk Add Replication Master
- Virtual Disk Remove Replication Master
- Virtual Disk Add Replication Slave
- Virtual Disk Update Replication Slave
- Virtual Disk Remove Replication Slave
- Virtual Disk Attach Replication Peers
- Virtual Disk Detach Replication Peers
- Virtual Disk Rebuild Replication Slave
- Virtual Disk Resize
- Virtual Disk Thicken
- Virtual Disk Compress
- Virtual Disk Reclaim
- Virtual Disk Rollback
- Virtual Disk Lock
- Virtual Disk Unlock
- Virtual Disk Load Media
- Virtual Disk Load Cloned Media
- Virtual Disk Eject Media
- Virtual Disk Backup
- Virtual Disk Barrier Create
- Virtual Disk Barrier Remove
- iSCSI Initiator Profile
- iSCSI Target
- Snapshot
- Object Store
- Events
- Statistics
- Extensible Metadata Record
- CA Certificate
Blockbridge REST API
Document last updated 2024-11-27T08:55:15
This document describes the Blockbridge REST API.
The Blockbridge REST API allows you to incorporate secure storage provisioning directly into your services. You can use the API to provision storage of a certain media type like SSD or 10k SAS, reliability (RAID-6, SATA, etc.), or from a certain availability zone, even a certain rack. With the API, you can take snapshots, make thin clones, and initiate backups to an object store like Amazon S3 or OpenStack Swift.
This document begins with a brief overview of concepts and terminology, how to authenticate to the API, and how to manage application authorizations. This is followed by detailed documentation of the API resources.
Status Test
Before you begin, let's ensure that your REST API endpoint is operational. Use curl
to connect to the Blockbridge REST API of your management node using HTTPS. Request the resource /api/status
.
$ curl -ik https://mgmt-node/api/status
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 29
Server: Goliath
Date: Mon, 21 Sep 2015 21:57:56 GMT
{"status":200,"message":"ok"}
Curl
This document contains numerous examples that use the curl
command to talk to the API. Replace 'mgmt-node' in the examples with your own Blockbridge management node hostname. These example commands may also lack authentication information that you'll need to make your experimentation work. You can use HTTP basic authentication, as describe below, with the -u
command-line option to get going as quickly as possible.
Authentication
Nearly every Blockbridge API call must be executed as an authenticated user. There are a few ways to authenticate to the Blockbridge API.
Basic Authentication
You can use HTTP basic authentication, supplying the username and password with each request.
$ curl -iku user:pass https://mgmt-node/api/status/authorization
HTTP/1.1 200 OK
...
{"type":"basic_creds","serial":"USR1B6B194C40626410", ... }
OAuth 2 Token Generation
Obtain a reusable, time-limited secure access token. By default, the token expires in one hour.
POST /api/oauth2/token
The username and password are supplied as arguments.
$ curl -ik -X POST -H 'Content-Type: application/json' -d '{"grant_type":"password", "username":"user", "password":pass"}' https://mgmt-node/api/oauth2/token
HTTP/1.1 201 Created
{
"access_token": "0/wsu/1OR2g5cSjDWC4Kxx5LcrRhB21Hav74XAaRtdXKLSyr/U5HaAhw",
"token_type": "Bearer",
"expires_in": 3599,
"user": {
"account": {
"serial": "ACT076BD94C40626440",
"name": "system",
"id": "account:1:3"
},
"id": "session:17:3",
"user": {
"serial": "USR1B6B894C40626440",
"name": "system",
"id": "user_profile:1:3"
}
}
}
In the response JSON, pull the token from the access_token
field.
OAuth 2 Token Submission
Submit the access token in the HTTP header of each request, as Authorization:
Bearer <token>
.
$ curl -ik -H "Authorization: Bearer 1/wSijaLxU7sLhOeSDnAluOFRFdQ51rv9yX2s6/aGJksGBKKNovFTtgw" https://mgmt-node/api/status/authorization/
HTTP/1.1 200 OK
...
{
"account": {
"serial": "ACT076BD94C40626460",
"name": "user"
},
"created_at": "2015-09-22T11:11:26.000-04:00",
...
}
Generate a Persistent Access Token
For long-term use, create a persistent access token that never expires. These long-lived tokens are managed using the authorization
resource. A user may have more than one, and they may be individually revoked.
$ curl -iku user:pass -d '' https://mgmt-node/api/authorization
HTTP/1.1 201 Created
...
{
"app_id": null,
"access_type": "online",
"restrict": "auth",
"lifetime": null,
"serial": "ATH476B094C40626410",
"id": "authz:4:3",
"user_id": "user_profile:4:3",
"access_token_digest": "DXglP+STaihfPyNC2Mo5g2bfVzsXEryOLSv97MvmX9o",
"expires_in": null,
"access_token": "1/wSijaLxU7sLhOeSDnAluOFRFdQ51rv9yX2s6/aGJksGBKKNovFTtgw",
"created_at": "2015-09-22T11:11:26.744-04:00",
}
Two-Factor Authentication
Each user account has individual control over its two-factor authentication parameters. When enabled, a basic authentication request will fail with 401 Unauthorized
and X-Blockbridge-OTP: required
.
$ curl -iku user:pass https://mgmt-node/api/status/authorization/
HTTP/1.1 401 Unauthorized
X-Blockbridge-OTP: required
To continue submitting requests for this user, you must generate a time-limited OAuth2 token, supplying the username and password inside the JSON body of the request, along with the appropriate OTP in the request header:
$ curl -ik -X POST -H 'X-Blockbridge-OTP: 609179' -H 'Content-Type: application/json' -d '{"grant_type":"password", "username":"user", "password":"pass"}' https://mgmt-node/api/oauth2/token
HTTP/1.1 201 Created
...
Schema
The Blockbridge API is described by a machine-readable JSON schema. Retrieve the schema directly from your management node with the following command line:
curl https://mgmt-node/schema/
Methods
The API uses a standard set of HTTP verbs for RESTful services.
Method | Usage |
---|---|
GET | Using the GET method, a client is able to retrieve detailed information about any object in the system. Clients can enumerate objects of each resource type. And, they can obtain sets of user events and statistics for each object. |
DELETE | Removes an object from the system. DELETE is idempotent, and multiple attempts to remove an object will receive the same result. |
PATCH | Updates an objects configuration. Blockbridge typically uses PATCH to effect partial updates, as there are very few cases where an object is replaced wholesale. |
POST | Creates a new object. |
PUT | Replaces an object's configuration. These few cases are called out in the documentation to follow. |
Parameters
Submit JSON-encoded parameters in the request body. Actions may have both required and optional parameters, as defined by the schema. Some GET requests have URL-encoded parameters.
Request Status
The HTTP status in the response indicates whether a request succeeded or failed. Successful requests receive a JSON-formatted document in response, as described by the schema.
Success
Status | Description |
---|---|
200 OK | request succeeded |
201 Created | resource created |
204 No Content | request succeeded, but no response body returned |
Error Responses
When a request fails, the HTTP status code indicates the reason for the failure. Where applicable, JSON-encoded data in the response body offers additional clarification. There are two classes of errors. Client errors result from malformed requests and should be addressed by the client. Blockbridge errors result from problems on the server side.
Client Errors
Status | Description |
---|---|
400 Bad Request | invalid request format |
401 Unauthorized | authentication required |
403 Forbidden | access denied to specified resource |
404 Not Found | resource not found |
405 Method Not Allowed | method not supported by resource |
410 Resource Deleted | resource has been deleted |
Blockbridge Errors
Status | Description |
---|---|
500 Internal Server Error | unexpected server failure, internal error |
503 Service Unavailable | server busy, try again later |
Validation Failure
A request that fails with HTTP status 400 (Bad Request) is likely due to a validation failure. The response body contains detailed information on one or more fields that are in error.
Name | Type | Description | Example |
---|---|---|---|
message | string | human-readable error message | parameter validation failure |
type | string | error type | validation |
errors | array | list of fields and corresponding errors | |
status | integer | HTTP status code | 400 |
Each element in the errors
array has the schema shown below
Validation Failure Error
Name | Type | Description | Example |
---|---|---|---|
type | string | failure type | missing |
field | string | JSON field name | /capacity |
msg | string | human-readable error message | must be present |
Example
Attempt to create a virtual disk, but neglect to include its capacity. The request fails with HTTP status 400, and the response indicates that the /capacity
field is missing.
$ curl -iku system:system -X POST -H 'Content-Type: application/json' -d '{"vss_id":"VSS186B994C40626440"}' https://mgmt-node/api/vdisk/
HTTP/1.1 400 Bad Request
{
"status": 400,
"message": "parameter validation failure",
"errors": [
{
"msg": "must be present",
"field": "/capacity",
"type": "missing"
}
],
"type": "validation"
}
Account
Blockbridge is a secure multi-tenant storage system. Each tenant has an Account which is isolated from every other tenant Account. All of the tenant's storage, configuration data, credentials, audit history, and statistics - anything that could be considered private data - is inaccessible to other Accounts.
Accounts have one or more Users, who are each assigned a set of permissions that control the actions they may perform. One user may be simply an observer: able to query state, but unable to change anything. Another user may be able to provision services, but not remove any existing ones. Another is permitted to manage crypto keys.
Lastly, the Account object contains contact information for the primary account holder.
Attributes
Name | Type | Description |
---|---|---|
id | string | object id |
uuid | uuid | object uuid |
ctime | integer | account create time Range: 0 <= value |
mtime | integer | account last modified time Range: 0 <= value |
idp:id | string | no documentation |
idp:label | string | no documentation |
idp:type | string | identity provider type one of: "internal" or "openstack" |
serial | string | serial number |
usage_id | string | account_usage id |
disabled | boolean | account is disabled |
name | string | account name |
primary_contact:first_name | string | First Name default: "" Length: 0..255 |
primary_contact:last_name | string | Last Name default: "" Length: 0..255 |
primary_contact:company | string | company name Length: 0..255 |
primary_contact:address:addr | array | physical address lines |
primary_contact:address:city | string | city |
primary_contact:address:state | string | state |
primary_contact:address:zip | string | zip code |
primary_contact:address:country | string | country default: "US" |
primary_contact:phone:number | string | Phone number Length: 0..24 |
primary_contact:phone:valid | boolean | phone number has been verified for SMS |
primary_contact:phone:token | string | SMS verification token |
primary_contact:email:addr | string | email address Length: 0..255 |
primary_contact:email:valid | boolean | address has been verified |
primary_contact:email:token | string | address verification token |
billing_contact | nullable object | billing contact information |
billing_contact:first_name | string | First Name default: "" Length: 0..255 |
billing_contact:last_name | string | Last Name default: "" Length: 0..255 |
billing_contact:company | string | company name Length: 0..255 |
billing_contact:address:addr | array | physical address lines |
billing_contact:address:city | string | city |
billing_contact:address:state | string | state |
billing_contact:address:zip | string | zip code |
billing_contact:address:country | string | country default: "US" |
billing_contact:phone:number | string | Phone number Length: 0..24 |
billing_contact:phone:valid | boolean | phone number has been verified for SMS |
billing_contact:phone:token | string | SMS verification token |
billing_contact:email:addr | string | email address Length: 0..255 |
billing_contact:email:valid | boolean | address has been verified |
billing_contact:email:token | string | address verification token |
admin_profile_id | string | account administrative user |
limits:vss_num | nullable integer | number of virtual storage services |
limits:size_reserve_total | nullable integer | maximum size of storage |
provisioning:size_reserve_max | nullable integer | maximum size reserve of a single virtual storage service |
provisioning:iops_reserve_max | nullable integer | maximum iops reserve of a single virtual storage service |
provisioning:tags_include | array | tags included default: [] |
provisioning:tags_exclude | array | tags excluded default: [] |
provisioning:tags_permit | nullable array | tags permitted |
provisioning:tags_permit | nullable array | tags permitted |
Account Info
Retrieve an existing account.
GET /account/{account_id_or_serial}
Curl Example
$ curl https://mgmt-node/api/account/account:10:10 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:55 GMT
Server: Goliath
ETag: "b79489b7c6d35e1095871de7ebd93436"
Content-Type: application/json
Content-Length: 649
{
"id": "account:10:10",
"uuid": "c432e1f5-074d-4ecb-9078-7a5b50574fc0",
"serial": "ACT0762194C406264FE",
"evt_qry": "serial=ACT0762194C406264FE",
"ctime": 1507570012941,
"mtime": 1507570013202,
"seq": 1507570013297,
"status": null,
"ec": {
"status": "retrieving",
"table": null,
"seq": 1507570012954
},
"rec_status": null,
"usage_id": "account_usage:10:10",
"name": "account42",
"primary_contact": {
"first_name": "",
"last_name": ""
},
"billing_contact": null,
"admin_profile_id": "user_profile:15:10",
"disabled": false,
"limits": {
"vss_num": 32,
"size_reserve_total": null
},
"provisioning": {
"size_reserve_max": null,
"iops_reserve_max": null,
"tags_include": [
],
"tags_exclude": [
],
"tags_permit": null
}
}
Account List
Enumerate accounts.
GET /account
Curl Example
$ curl https://mgmt-node/api/account \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:53 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 1504
[
{
"id": "account:1:10",
"uuid": "1fb3cea1-0778-4090-a288-d9f7a456f31b",
"serial": "ACT0762194C40626445",
"evt_qry": "serial=ACT0762194C40626445",
"ctime": 1507562835275,
"mtime": 1507569805914,
"seq": 1507570010663,
"status": null,
"ec": {
"status": "current",
"table": {
"time": 1507570010000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
192,
226,
226,
226
],
"v": "dbg"
},
{
"d": [
118,
145,
145,
145
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
9,
10,
10,
10
],
"v": "err"
}
]
},
"seq": 1507570010663
},
"rec_status": null,
"usage_id": "account_usage:1:10",
"name": "system",
"primary_contact": {
"first_name": "System user",
"last_name": ""
},
"billing_contact": null,
"admin_profile_id": "user_profile:1:10",
"disabled": false,
"limits": {
"vss_num": null,
"size_reserve_total": null
},
"provisioning": {
"size_reserve_max": null,
"iops_reserve_max": null,
"tags_include": [
],
"tags_exclude": [
],
"tags_permit": null
}
},
{
"id": "account:10:10",
"uuid": "c432e1f5-074d-4ecb-9078-7a5b50574fc0",
"serial": "ACT0762194C406264FE",
"evt_qry": "serial=ACT0762194C406264FE",
"ctime": 1507570012941,
"mtime": 1507570013202,
"seq": 1507570013297,
"status": null,
"ec": {
"status": "retrieving",
"table": null,
"seq": 1507570012954
},
"rec_status": null,
"usage_id": "account_usage:10:10",
"name": "account42",
"primary_contact": {
"first_name": "",
"last_name": ""
},
"billing_contact": null,
"admin_profile_id": "user_profile:15:10",
"disabled": false,
"limits": {
"vss_num": 32,
"size_reserve_total": null
},
"provisioning": {
"size_reserve_max": null,
"iops_reserve_max": null,
"tags_include": [
],
"tags_exclude": [
],
"tags_permit": null
}
}
]
Account Create
Create a new account.
POST /account
Required Parameters
Name | Type | Description |
---|---|---|
name | string | account name Length: 1..64 |
Optional Parameters
Name | Type | Description |
---|---|---|
password | string | password to set in primary user profile Length: 3..∞ |
permissions:realm:rights:can_switch_user | boolean | can SU to lower level user |
permissions:realm:rights:manage_node_membership | boolean | accept or delete nodes from the management network |
permissions:realm:rights:manage_accounts | boolean | can create or delete other accounts, users and their settings |
permissions:realm:rights:view_logs | boolean | view administrative logs |
permissions:realm:rights:run_admin_tasks | boolean | run realm administrative tasks |
permissions:realm:rights:run_tests | boolean | run realm administrative tests |
permissions:node:all_realm_scope | boolean | apply to all nodes in the realm default: true |
permissions:node:nodes | array | scope permissions to specific nodes |
permissions:node:rights:manage_storage | boolean | configure OS devices, iSCSI devices, and system datastores |
permissions:node:rights:manage_networks | boolean | configure networks |
permissions:node:rights:provision_vss | boolean | manually provision virtual storage services |
permissions:node:rights:remove_vss | boolean | remove virtual storage services |
permissions:vss:all_account_scope | boolean | apply to all virtual storage services in the account default: true |
permissions:vss:vsses | array | limit scope to specified vsses |
permissions:vss:rights:dismiss_tasks | boolean | dismiss tasks |
permissions:vss:rights:update_vss | boolean | update vss configuration |
permissions:vss:rights:remove_vss | boolean | remove vss |
permissions:vss:rights:set_vss_quota | boolean | set vss quota |
permissions:vss:rights:manage_internal_disks | boolean | manage internal disks |
permissions:vss:rights:manage_external_disks | boolean | manage external disks |
permissions:vss:rights:manage_removable_disks | boolean | manage removable disks |
permissions:vss:rights:manage_disk_cryptography | boolean | manage disk cryptography |
permissions:vss:rights:remove_locked_disks | boolean | remove locked disks |
permissions:vss:rights:validate_data_integrity | boolean | validate data integrity |
permissions:vss:rights:manage_targets | boolean | manage targets |
permissions:vss:rights:manage_profiles | boolean | manage profiles |
permissions:vss:rights:manage_secure_access_tokens | boolean | manage secure access tokens |
permissions:vss:rights:manage_rules | boolean | manage rules |
permissions:vss:rights:replicate_disks | boolean | replicate disks |
permissions:vss:rights:synchronize_disks | boolean | synchronize disks |
permissions:vss:rights:format_disks | boolean | format disks |
permissions:vss:rights:resize_disks | boolean | resize disks |
permissions:vss:rights:manage_snapshots | boolean | manage snapshots |
permissions:vss:rights:backup_disks | boolean | backup disks |
permissions:vss:rights:replicate_and_synchronize_disks | boolean | replicate and synchronize disks (DEPRECATED) |
permissions:vss:rights:compress_disks | boolean | compress disks |
permissions:vss:rights:manage_disk_compression | boolean | manage disk |
permissions:user:rights:manage_users | boolean | create or delete users in an account |
permissions:user:rights:modify_user_contact_settings | boolean | modify user contact info |
permissions:user:rights:reset_user_password | boolean | reset user password |
permissions:user:rights:reset_user_two_factor | boolean | reset two factor authentication |
permissions:user:rights:manage_authorizations | boolean | create or delete persistent authorizations |
permissions:account:rights:modify_contact_settings | boolean | modify account contact settings |
permissions:account:rights:view_events | boolean | view events |
permissions:account:rights:view_statistics | boolean | view statistics |
permissions:account:rights:manage_global_profiles | boolean | manage global profiles |
permissions:account:rights:manage_global_secure_access_tokens | boolean | manage global secure access tokens |
permissions:account:rights:query_catalog | boolean | query product catalog |
permissions:account:rights:provision_vss | boolean | provision vss from catalog |
permissions:account:rights:manage_obj_stores | boolean | manage obj stores |
permissions:account:rights:read_object_storage | boolean | read from object storage |
permissions:account:rights:write_object_storage | boolean | write to object storage |
permissions:account:rights:delete_object_storage | boolean | delete from object storage |
level | integer | privilege level |
access:web | boolean | web access permitted default: true |
access:api | boolean | api access permitted |
activated | boolean | user profile activated |
primary_contact:first_name | string | First Name default: "" Length: 0..255 |
primary_contact:last_name | string | Last Name default: "" Length: 0..255 |
primary_contact:company | string | company name Length: 0..255 |
primary_contact:address:addr | array | physical address lines |
primary_contact:address:city | string | city |
primary_contact:address:state | string | state |
primary_contact:address:zip | string | zip code |
primary_contact:address:country | string | country default: "US" |
primary_contact:phone | string | phone number Length: 0..24 |
primary_contact:email | email address Length: 0..128 | |
billing_contact:first_name | string | First Name default: "" Length: 0..255 |
billing_contact:last_name | string | Last Name default: "" Length: 0..255 |
billing_contact:company | string | company name Length: 0..255 |
billing_contact:address:addr | array | physical address lines |
billing_contact:address:city | string | city |
billing_contact:address:state | string | state |
billing_contact:address:zip | string | zip code |
billing_contact:address:country | string | country default: "US" |
billing_contact:phone | string | phone number Length: 0..24 |
billing_contact:email | email address Length: 0..128 | |
limits:vss_num | nullable integer | number of virtual storage services |
limits:size_reserve_total | nullable integer | maximum size of storage |
provisioning:size_reserve_max | nullable integer | maximum size reserve of a single virtual storage service |
provisioning:iops_reserve_max | nullable integer | maximum iops reserve of a single virtual storage service |
provisioning:tags_include | array | tags included default: [] |
provisioning:tags_exclude | array | tags excluded default: [] |
provisioning:tags_permit | nullable array | tags permitted |
provisioning:tags_permit | nullable array | tags permitted |
uuid | uuid | account UUID |
user_uuid | uuid | user profile UUID |
template | string | accounte template |
Curl Example
$ curl -X POST https://mgmt-node/api/account \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"name": "account42"
}'
Response Example
201 Created
Date: Mon, 09 Oct 2017 17:26:52 GMT
Server: Goliath
ETag: "52c9ce267e5b151a1d7e1e6bd8af120d"
Content-Type: application/json
Content-Length: 651
{
"id": "account:10:10",
"uuid": "c432e1f5-074d-4ecb-9078-7a5b50574fc0",
"serial": "ACT0762194C406264FE",
"evt_qry": "serial=ACT0762194C406264FE",
"ctime": 1507570012941,
"mtime": 1507570012942,
"seq": 1507570012954,
"status": null,
"ec": {
"status": "retrieving",
"table": null,
"seq": 1507570012954
},
"rec_status": null,
"usage_id": "account_usage:10:10",
"name": "account42",
"primary_contact": {
"first_name": "",
"last_name": ""
},
"billing_contact": null,
"admin_profile_id": "user_profile:15:10",
"disabled": false,
"limits": {
"vss_num": null,
"size_reserve_total": null
},
"provisioning": {
"size_reserve_max": null,
"iops_reserve_max": null,
"tags_include": [
],
"tags_exclude": [
],
"tags_permit": null
}
}
Account Remove
Remove an existing account.
DELETE /account/{account_id_or_serial}
Curl Example
$ curl -X DELETE https://mgmt-node/api/account/account:10:10 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
204 No Content
Date: Mon, 09 Oct 2017 17:27:38 GMT
Server: Goliath
Account Update
Change the configuration of an existing account.
PATCH /account/{account_id_or_serial}
Optional Parameters
Name | Type | Description |
---|---|---|
host | string | server hostname originating request (for url) |
primary_contact:first_name | string | First Name Length: 0..255 |
primary_contact:last_name | string | Last Name Length: 0..255 |
primary_contact:company | string | company name Length: 0..255 |
primary_contact:address:addr | array | physical address lines |
primary_contact:address:city | string | city |
primary_contact:address:state | string | state |
primary_contact:address:zip | string | zip code |
primary_contact:address:country | string | country |
primary_contact:phone | string | phone number Length: 0..24 |
primary_contact:email | email address Length: 0..128 | |
billing_contact:first_name | string | First Name Length: 0..255 |
billing_contact:last_name | string | Last Name Length: 0..255 |
billing_contact:company | string | company name Length: 0..255 |
billing_contact:address:addr | array | physical address lines |
billing_contact:address:city | string | city |
billing_contact:address:state | string | state |
billing_contact:address:zip | string | zip code |
billing_contact:address:country | string | country |
billing_contact:phone | string | phone number Length: 0..24 |
billing_contact:email | email address Length: 0..128 | |
password | string | password of primary user profile Length: 3..∞ |
limits:vss_num | nullable integer | number of virtual storage services |
limits:size_reserve_total | nullable integer | maximum size of storage |
provisioning:size_reserve_max | nullable integer | maximum size reserve of a single virtual storage service |
provisioning:iops_reserve_max | nullable integer | maximum iops reserve of a single virtual storage service |
provisioning:tags_include | array | tags included |
provisioning:tags_exclude | array | tags excluded |
provisioning:tags_permit | nullable array | tags permitted |
provisioning:tags_permit | nullable array | tags permitted |
Curl Example
$ curl -X PATCH https://mgmt-node/api/account/account:10:10 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"limits": {
"vss_num": 32
}
}'
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:53 GMT
Server: Goliath
ETag: "b79489b7c6d35e1095871de7ebd93436"
Content-Type: application/json
Content-Length: 649
{
"id": "account:10:10",
"uuid": "c432e1f5-074d-4ecb-9078-7a5b50574fc0",
"serial": "ACT0762194C406264FE",
"evt_qry": "serial=ACT0762194C406264FE",
"ctime": 1507570012941,
"mtime": 1507570013202,
"seq": 1507570013297,
"status": null,
"ec": {
"status": "retrieving",
"table": null,
"seq": 1507570012954
},
"rec_status": null,
"usage_id": "account_usage:10:10",
"name": "account42",
"primary_contact": {
"first_name": "",
"last_name": ""
},
"billing_contact": null,
"admin_profile_id": "user_profile:15:10",
"disabled": false,
"limits": {
"vss_num": 32,
"size_reserve_total": null
},
"provisioning": {
"size_reserve_max": null,
"iops_reserve_max": null,
"tags_include": [
],
"tags_exclude": [
],
"tags_permit": null
}
}
Account Usage
Display usage for an existing account.
GET /account/{account_id_or_serial}/usage
Curl Example
$ curl https://mgmt-node/api/account/account:10:10/usage \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:53 GMT
Server: Goliath
ETag: "13f732476b4b2e858afe17d3f88a9350"
Content-Type: application/json
Content-Length: 150
{
"size_reserve": 0,
"iops_reserve": 0,
"vss_num": 0,
"vdisk_num": 0,
"clones_num": 0,
"repl_num": 0,
"snapshot_num": 0,
"target_num": 0,
"profile_num": 0,
"user_num": 1
}
User Profile
An Account has one or more Users, who are permitted to administer and consume storage according to various defined roles. Each User has a profile object that has the User's name, email address, password and two-factor authentication information for the API and web application.
Attributes
Name | Type | Description |
---|---|---|
id | string | object id |
uuid | uuid | object uuid |
ctime | integer | user profile create time Range: 0 <= value |
mtime | integer | user profile last modified time Range: 0 <= value |
email_notify | boolean | email notifications enabled |
nullable email | email address Length: 0..128 | |
email_verified | boolean | email address has been verified |
sms_notify | boolean | SMS notifications enabled |
sms | nullable object | notification number for SMS |
sms:number | string | Phone number Length: 0..24 |
sms:valid | boolean | phone number has been verified for SMS |
sms:token | string | SMS verification token |
login | string | username |
password_set | boolean | is password non-null? |
allow_su | boolean | admin allowed to SU to this user |
level | integer | user privilege level |
timezone | string | timezone one of: "local" |
activated | boolean | user profile activated |
idp:id | string | no documentation |
idp:label | string | no documentation |
idp:type | string | identity provider type one of: "internal" or "openstack" |
account_admin | boolean | user has account-wide administrative control |
two_factor:auth | string | two-factor authentication type one of: "none" or "yubikey" or "google" |
two_factor:yubikey_id | string | yubikey OTP for binding unique yubikey to profile |
two_factor:security_email | nullable object | security email address |
two_factor:security_email:addr | security email address Length: 0..128 | |
two_factor:security_email:verified | boolean | security email address has been verified |
two_factor:security_email:bounce | boolean | email is bouncing to security_email_addr |
permissions:realm:rights:can_switch_user | boolean | can SU to lower level user |
permissions:realm:rights:manage_node_membership | boolean | accept or delete nodes from the management network |
permissions:realm:rights:manage_accounts | boolean | can create or delete other accounts, users and their settings |
permissions:realm:rights:view_logs | boolean | view administrative logs |
permissions:realm:rights:run_admin_tasks | boolean | run realm administrative tasks |
permissions:realm:rights:run_tests | boolean | run realm administrative tests |
permissions:node:all_realm_scope | boolean | apply to all nodes in the realm |
permissions:node:nodes | array | scope permissions to specific nodes |
permissions:node:rights:manage_storage | boolean | configure OS devices, iSCSI devices, and system datastores |
permissions:node:rights:manage_networks | boolean | configure networks |
permissions:node:rights:provision_vss | boolean | manually provision virtual storage services |
permissions:node:rights:remove_vss | boolean | remove virtual storage services |
permissions:vss:all_account_scope | boolean | apply to all virtual storage services in the account |
permissions:vss:vsses | array | limit scope to specified vsses |
permissions:vss:rights:dismiss_tasks | boolean | dismiss tasks |
permissions:vss:rights:update_vss | boolean | update vss configuration |
permissions:vss:rights:remove_vss | boolean | remove vss |
permissions:vss:rights:set_vss_quota | boolean | set vss quota |
permissions:vss:rights:manage_internal_disks | boolean | manage internal disks |
permissions:vss:rights:manage_external_disks | boolean | manage external disks |
permissions:vss:rights:manage_removable_disks | boolean | manage removable disks |
permissions:vss:rights:manage_disk_cryptography | boolean | manage disk cryptography |
permissions:vss:rights:remove_locked_disks | boolean | remove locked disks |
permissions:vss:rights:validate_data_integrity | boolean | validate data integrity |
permissions:vss:rights:manage_targets | boolean | manage targets |
permissions:vss:rights:manage_profiles | boolean | manage profiles |
permissions:vss:rights:manage_secure_access_tokens | boolean | manage secure access tokens |
permissions:vss:rights:manage_rules | boolean | manage rules |
permissions:vss:rights:replicate_disks | boolean | replicate disks |
permissions:vss:rights:synchronize_disks | boolean | synchronize disks |
permissions:vss:rights:format_disks | boolean | format disks |
permissions:vss:rights:resize_disks | boolean | resize disks |
permissions:vss:rights:manage_snapshots | boolean | manage snapshots |
permissions:vss:rights:backup_disks | boolean | backup disks |
permissions:vss:rights:replicate_and_synchronize_disks | boolean | replicate and synchronize disks (DEPRECATED) |
permissions:vss:rights:compress_disks | boolean | compress disks |
permissions:vss:rights:manage_disk_compression | boolean | manage disk |
permissions:user:rights:manage_users | boolean | create or delete users in an account |
permissions:user:rights:modify_user_contact_settings | boolean | modify user contact info |
permissions:user:rights:reset_user_password | boolean | reset user password |
permissions:user:rights:reset_user_two_factor | boolean | reset two factor authentication |
permissions:user:rights:manage_authorizations | boolean | create or delete persistent authorizations |
permissions:account:rights:modify_contact_settings | boolean | modify account contact settings |
permissions:account:rights:view_events | boolean | view events |
permissions:account:rights:view_statistics | boolean | view statistics |
permissions:account:rights:manage_global_profiles | boolean | manage global profiles |
permissions:account:rights:manage_global_secure_access_tokens | boolean | manage global secure access tokens |
permissions:account:rights:query_catalog | boolean | query product catalog |
permissions:account:rights:provision_vss | boolean | provision vss from catalog |
permissions:account:rights:manage_obj_stores | boolean | manage obj stores |
permissions:account:rights:read_object_storage | boolean | read from object storage |
permissions:account:rights:write_object_storage | boolean | write to object storage |
permissions:account:rights:delete_object_storage | boolean | delete from object storage |
access:web | boolean | web access permitted |
access:api | boolean | API access permitted |
app_default | string | default web-ui application one of: "storage" or "infrastructure" or "account" or "securedrive" |
account_id | string | account ref |
serial | string | user profile serial number |
xmd_refs | array | array of extensible metadata reference keys |
xref | string | arbitrary string reference Length: 1..256 |
sessions/serial | string | session serial number |
sessions/id | string | session id |
sessions/created_ms | integer | creation time, in milliseconds since epoch Range: 0 <= value |
sessions/last_ms | integer | time of last activity on session Range: 0 <= value |
sessions/addr | nullable string | source IP of last request on session |
xmd/id | string | no documentation |
xmd/ref | string | arbitrary string reference key Length: 1..256 |
xmd/mtime | integer | last modified time of xmd Range: 0 <= value |
xmd/tags | array | object tags |
xmd/self | boolean | no documentation |
xmd/data | nullable string | no documentation |
User Profile Info
Retrieve an existing user profile.
GET /user-profile/{user_profile_id_or_serial}
Curl Example
$ curl https://mgmt-node/api/user-profile/user_profile:16:10 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:54 GMT
Server: Goliath
ETag: "14ea1ef48b481c651dfac513537e09a5"
Content-Type: application/json
Content-Length: 2070
{
"id": "user_profile:16:10",
"uuid": "11bccdde-f3b6-4b65-a28f-25d0463b1564",
"serial": "USR1B62194C4062655E",
"evt_qry": "serial=USR1B62194C4062655E",
"account_id": "account:10:10",
"ctime": 1507570014375,
"mtime": 1507570014709,
"seq": 1507570014716,
"label": null,
"status": null,
"ec": {
"table": null,
"status": "retrieving",
"seq": 1507570014382
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"login": "account421@account42",
"activated": false,
"app_default": "storage",
"access": {
"web": true,
"api": true
},
"permissions": {
"node": {
"all_realm_scope": false,
"nodes": [
],
"rights": {
"manage_storage": false,
"manage_networks": false,
"provision_vss": false,
"remove_vss": false
}
},
"vss": {
"all_account_scope": true,
"rights": {
"dismiss_tasks": true,
"update_vss": true,
"remove_vss": true,
"set_vss_quota": true,
"manage_internal_disks": true,
"manage_external_disks": true,
"manage_removable_disks": true,
"manage_disk_cryptography": true,
"remove_locked_disks": true,
"replicate_disks": true,
"synchronize_disks": true,
"format_disks": true,
"resize_disks": true,
"backup_disks": true,
"validate_data_integrity": true,
"manage_snapshots": true,
"manage_targets": true,
"manage_profiles": true,
"manage_secure_access_tokens": true,
"manage_rules": true
}
},
"realm": {
"rights": {
"can_switch_user": false,
"manage_node_membership": false,
"manage_accounts": false,
"view_logs": false,
"run_admin_tasks": false,
"run_tests": false
}
},
"user": {
"rights": {
"manage_users": true,
"modify_user_contact_settings": true,
"reset_user_password": true,
"reset_user_two_factor": true,
"manage_authorizations": true
}
},
"account": {
"rights": {
"modify_contact_settings": true,
"manage_global_profiles": true,
"manage_global_secure_access_tokens": true,
"view_events": true,
"view_statistics": true,
"query_catalog": true,
"provision_vss": true,
"manage_obj_stores": true,
"read_object_storage": true,
"write_object_storage": true,
"delete_object_storage": true
}
}
},
"account_admin": false,
"allow_su": false,
"level": 0,
"timezone": "local",
"two_factor": {
"auth": "none"
},
"email": null,
"email_notify": false,
"email_verified": false,
"sms": {
"number": "XXX-XXX-XXXX",
"valid": false
},
"sms_notify": false,
"password_set": true,
"sessions": [
]
}
User Profile List
Enumerate user profiles.
GET /user-profile
Curl Example
$ curl https://mgmt-node/api/user-profile \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:54 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 7744
[
{
"id": "user_profile:16:10",
"uuid": "11bccdde-f3b6-4b65-a28f-25d0463b1564",
"serial": "USR1B62194C4062655E",
"evt_qry": "serial=USR1B62194C4062655E",
"account_id": "account:10:10",
"ctime": 1507570014375,
"mtime": 1507570014375,
"seq": 1507570014382,
"label": null,
"status": null,
"ec": {
"table": null,
"status": "retrieving",
"seq": 1507570014382
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"login": "account421@account42",
"activated": true,
"app_default": "storage",
"access": {
"web": true,
"api": true
},
"permissions": {
"node": {
"all_realm_scope": false,
"nodes": [
],
"rights": {
"manage_storage": false,
"manage_networks": false,
"provision_vss": false,
"remove_vss": false
}
},
"vss": {
"all_account_scope": true,
"rights": {
"dismiss_tasks": true,
"update_vss": true,
"remove_vss": true,
"set_vss_quota": true,
"manage_internal_disks": true,
"manage_external_disks": true,
"manage_removable_disks": true,
"manage_disk_cryptography": true,
"remove_locked_disks": true,
"replicate_disks": true,
"synchronize_disks": true,
"format_disks": true,
"resize_disks": true,
"backup_disks": true,
"validate_data_integrity": true,
"manage_snapshots": true,
"manage_targets": true,
"manage_profiles": true,
"manage_secure_access_tokens": true,
"manage_rules": true
}
},
"realm": {
"rights": {
"can_switch_user": false,
"manage_node_membership": false,
"manage_accounts": false,
"view_logs": false,
"run_admin_tasks": false,
"run_tests": false
}
},
"user": {
"rights": {
"manage_users": true,
"modify_user_contact_settings": true,
"reset_user_password": true,
"reset_user_two_factor": true,
"manage_authorizations": true
}
},
"account": {
"rights": {
"modify_contact_settings": true,
"manage_global_profiles": true,
"manage_global_secure_access_tokens": true,
"view_events": true,
"view_statistics": true,
"query_catalog": true,
"provision_vss": true,
"manage_obj_stores": true,
"read_object_storage": true,
"write_object_storage": true,
"delete_object_storage": true
}
}
},
"account_admin": false,
"allow_su": false,
"level": 0,
"timezone": "local",
"two_factor": {
"auth": "none"
},
"email": null,
"email_notify": false,
"email_verified": false,
"sms": {
"number": "XXX-XXX-XXXX",
"valid": false
},
"sms_notify": false,
"password_set": true,
"sessions": [
]
},
{
"id": "user_profile:1:10",
"uuid": "f687e09f-85b4-4cad-8e6a-6b8622fb6f8d",
"serial": "USR1B62194C40626440",
"evt_qry": "serial=USR1B62194C40626440",
"account_id": "account:1:10",
"ctime": 1507562835275,
"mtime": 1507562839801,
"seq": 1507570013664,
"label": null,
"status": null,
"ec": {
"table": {
"time": 1507570013000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
196,
230,
230,
230
],
"v": "dbg"
},
{
"d": [
120,
146,
146,
146
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
9,
10,
10,
10
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507570013664
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"login": "system",
"activated": true,
"app_default": "infrastructure",
"access": {
"web": true,
"api": true
},
"permissions": {
"node": {
"all_realm_scope": true,
"rights": {
"manage_storage": true,
"manage_networks": true,
"provision_vss": true,
"remove_vss": true
}
},
"vss": {
"all_account_scope": true,
"rights": {
"dismiss_tasks": true,
"update_vss": true,
"remove_vss": true,
"set_vss_quota": true,
"manage_internal_disks": true,
"manage_external_disks": true,
"manage_removable_disks": true,
"manage_disk_cryptography": true,
"remove_locked_disks": true,
"replicate_disks": true,
"synchronize_disks": true,
"format_disks": true,
"resize_disks": true,
"backup_disks": true,
"validate_data_integrity": true,
"manage_snapshots": true,
"manage_targets": true,
"manage_profiles": true,
"manage_secure_access_tokens": true,
"manage_rules": true
}
},
"realm": {
"rights": {
"can_switch_user": true,
"manage_node_membership": true,
"manage_accounts": true,
"view_logs": true,
"run_admin_tasks": true,
"run_tests": true
}
},
"user": {
"rights": {
"manage_users": true,
"modify_user_contact_settings": true,
"reset_user_password": true,
"reset_user_two_factor": true,
"manage_authorizations": true
}
},
"account": {
"rights": {
"modify_contact_settings": true,
"manage_global_profiles": true,
"manage_global_secure_access_tokens": true,
"view_events": true,
"view_statistics": true,
"query_catalog": true,
"provision_vss": true,
"manage_obj_stores": true,
"read_object_storage": true,
"write_object_storage": true,
"delete_object_storage": true
}
}
},
"account_admin": true,
"allow_su": true,
"level": 0,
"timezone": "local",
"two_factor": {
"auth": "none"
},
"email": null,
"email_notify": false,
"email_verified": false,
"sms": {
"number": "XXX-XXX-XXXX",
"valid": false
},
"sms_notify": false,
"password_set": true,
"sessions": [
{
"serial": "SES1662194C40626432",
"id": "session:6:10",
"created_ms": 1507566844334,
"last_ms": 1507566844334,
"addr": "172.16.5.200"
},
{
"serial": "SES1662194C4062642A",
"id": "session:7:10",
"created_ms": 1507567736453,
"last_ms": 1507569935236,
"addr": "172.16.9.2"
},
{
"serial": "SES1662194C406264D0",
"id": "session:8:10",
"created_ms": 1507567897105,
"last_ms": 1507567897105,
"addr": "172.16.5.200"
},
{
"serial": "SES1662194C406264C8",
"id": "session:9:10",
"created_ms": 1507567914713,
"last_ms": 1507567914713,
"addr": "172.16.5.200"
},
{
"serial": "SES1662194C406264F0",
"id": "session:10:10",
"created_ms": 1507567940495,
"last_ms": 1507568149181,
"addr": "172.16.5.200"
},
{
"serial": "SES1662194C406264E8",
"id": "session:11:10",
"created_ms": 1507568228790,
"last_ms": 1507569437816,
"addr": "172.16.5.200"
},
{
"serial": "SES1662194C40626491",
"id": "session:12:10",
"created_ms": 1507568321420,
"last_ms": 1507568321420,
"addr": "::1"
},
{
"serial": "SES1662194C40626489",
"id": "session:13:10",
"created_ms": 1507568758214,
"last_ms": 1507569935630,
"addr": "172.16.5.237"
},
{
"serial": "SES1662194C406264B1",
"id": "session:14:10",
"created_ms": 1507569793599,
"last_ms": 1507569793599,
"addr": "172.16.5.200"
},
{
"serial": "SES1662194C406264A9",
"id": "session:15:10",
"created_ms": 1507569963874,
"last_ms": 1507569963874,
"addr": "172.16.5.200"
},
{
"serial": "SES1662194C40626555",
"id": "session:16:10",
"created_ms": 1507570010499,
"last_ms": 1507570010499,
"addr": "172.16.5.200"
}
]
},
{
"id": "user_profile:15:10",
"uuid": "9af5fd5e-f4b0-411d-9cf8-6f376640d445",
"serial": "USR1B62194C406264A2",
"evt_qry": "serial=USR1B62194C406264A2",
"account_id": "account:10:10",
"ctime": 1507570012942,
"mtime": 1507570012942,
"seq": 1507570012954,
"label": null,
"status": null,
"ec": {
"table": null,
"status": "retrieving",
"seq": 1507570012954
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"login": "account42",
"activated": true,
"app_default": "storage",
"access": {
"web": true,
"api": false
},
"permissions": {
"node": {
"all_realm_scope": false,
"nodes": [
],
"rights": {
"manage_storage": false,
"manage_networks": false,
"provision_vss": false,
"remove_vss": false
}
},
"vss": {
"all_account_scope": true,
"rights": {
"dismiss_tasks": true,
"update_vss": true,
"remove_vss": true,
"set_vss_quota": true,
"manage_internal_disks": true,
"manage_external_disks": true,
"manage_removable_disks": true,
"manage_disk_cryptography": true,
"remove_locked_disks": true,
"replicate_disks": true,
"synchronize_disks": true,
"format_disks": true,
"resize_disks": true,
"backup_disks": true,
"validate_data_integrity": true,
"manage_snapshots": true,
"manage_targets": true,
"manage_profiles": true,
"manage_secure_access_tokens": true,
"manage_rules": true
}
},
"realm": {
"rights": {
"can_switch_user": false,
"manage_node_membership": false,
"manage_accounts": false,
"view_logs": false,
"run_admin_tasks": false,
"run_tests": false
}
},
"user": {
"rights": {
"manage_users": true,
"modify_user_contact_settings": true,
"reset_user_password": true,
"reset_user_two_factor": true,
"manage_authorizations": true
}
},
"account": {
"rights": {
"modify_contact_settings": true,
"manage_global_profiles": true,
"manage_global_secure_access_tokens": true,
"view_events": true,
"view_statistics": true,
"query_catalog": true,
"provision_vss": true,
"manage_obj_stores": true,
"read_object_storage": true,
"write_object_storage": true,
"delete_object_storage": true
}
}
},
"account_admin": true,
"allow_su": true,
"level": 0,
"timezone": "local",
"two_factor": {
"auth": "none"
},
"email": null,
"email_notify": false,
"email_verified": false,
"sms": {
"number": "XXX-XXX-XXXX",
"valid": false
},
"sms_notify": false,
"password_set": false,
"sessions": [
]
}
]
User Profile Create
Create a new user profile.
POST /user-profile
Required Parameters
Name | Type | Description |
---|---|---|
username | string | user-assigned portion of username (username@account) Length: 1..64 |
Optional Parameters
Name | Type | Description |
---|---|---|
xmd_refs | array | array of extensible metadata reference keys |
xref | nullable string | arbitrary string reference Length: 1..256 |
host | string | server hostname originating request (for url) |
password | nullable string | user-assigned password Length: 1..64 |
two_factor:auth | string | two-factor authentication type default: "none" one of: "none" or "yubikey" or "google" |
two_factor:otp | string | one-time-password from authentication device Length: 1..∞ |
two_factor:secret | string | shared AES secret pattern: ^[a-fA-F0-9]*$ Length: 1..∞ |
two_factor:private_id | string | yubikey private ID pattern: ^[a-fA-F0-9]*$ Length: 1..∞ |
two_factor:security_email | security email for lost authenticator recovery Length: 0..128 | |
permissions:realm:rights:can_switch_user | boolean | can SU to lower level user |
permissions:realm:rights:manage_node_membership | boolean | accept or delete nodes from the management network |
permissions:realm:rights:manage_accounts | boolean | can create or delete other accounts, users and their settings |
permissions:realm:rights:view_logs | boolean | view administrative logs |
permissions:realm:rights:run_admin_tasks | boolean | run realm administrative tasks |
permissions:realm:rights:run_tests | boolean | run realm administrative tests |
permissions:node:all_realm_scope | boolean | apply to all nodes in the realm default: true |
permissions:node:nodes | array | scope permissions to specific nodes |
permissions:node:rights:manage_storage | boolean | configure OS devices, iSCSI devices, and system datastores |
permissions:node:rights:manage_networks | boolean | configure networks |
permissions:node:rights:provision_vss | boolean | manually provision virtual storage services |
permissions:node:rights:remove_vss | boolean | remove virtual storage services |
permissions:vss:all_account_scope | boolean | apply to all virtual storage services in the account default: true |
permissions:vss:vsses | array | limit scope to specified vsses |
permissions:vss:rights:dismiss_tasks | boolean | dismiss tasks |
permissions:vss:rights:update_vss | boolean | update vss configuration |
permissions:vss:rights:remove_vss | boolean | remove vss |
permissions:vss:rights:set_vss_quota | boolean | set vss quota |
permissions:vss:rights:manage_internal_disks | boolean | manage internal disks |
permissions:vss:rights:manage_external_disks | boolean | manage external disks |
permissions:vss:rights:manage_removable_disks | boolean | manage removable disks |
permissions:vss:rights:manage_disk_cryptography | boolean | manage disk cryptography |
permissions:vss:rights:remove_locked_disks | boolean | remove locked disks |
permissions:vss:rights:validate_data_integrity | boolean | validate data integrity |
permissions:vss:rights:manage_targets | boolean | manage targets |
permissions:vss:rights:manage_profiles | boolean | manage profiles |
permissions:vss:rights:manage_secure_access_tokens | boolean | manage secure access tokens |
permissions:vss:rights:manage_rules | boolean | manage rules |
permissions:vss:rights:replicate_disks | boolean | replicate disks |
permissions:vss:rights:synchronize_disks | boolean | synchronize disks |
permissions:vss:rights:format_disks | boolean | format disks |
permissions:vss:rights:resize_disks | boolean | resize disks |
permissions:vss:rights:manage_snapshots | boolean | manage snapshots |
permissions:vss:rights:backup_disks | boolean | backup disks |
permissions:vss:rights:replicate_and_synchronize_disks | boolean | replicate and synchronize disks (DEPRECATED) |
permissions:vss:rights:compress_disks | boolean | compress disks |
permissions:vss:rights:manage_disk_compression | boolean | manage disk |
permissions:user:rights:manage_users | boolean | create or delete users in an account |
permissions:user:rights:modify_user_contact_settings | boolean | modify user contact info |
permissions:user:rights:reset_user_password | boolean | reset user password |
permissions:user:rights:reset_user_two_factor | boolean | reset two factor authentication |
permissions:user:rights:manage_authorizations | boolean | create or delete persistent authorizations |
permissions:account:rights:modify_contact_settings | boolean | modify account contact settings |
permissions:account:rights:view_events | boolean | view events |
permissions:account:rights:view_statistics | boolean | view statistics |
permissions:account:rights:manage_global_profiles | boolean | manage global profiles |
permissions:account:rights:manage_global_secure_access_tokens | boolean | manage global secure access tokens |
permissions:account:rights:query_catalog | boolean | query product catalog |
permissions:account:rights:provision_vss | boolean | provision vss from catalog |
permissions:account:rights:manage_obj_stores | boolean | manage obj stores |
permissions:account:rights:read_object_storage | boolean | read from object storage |
permissions:account:rights:write_object_storage | boolean | write to object storage |
permissions:account:rights:delete_object_storage | boolean | delete from object storage |
access:web | boolean | web access permitted default: true |
access:api | boolean | API access permitted default: true |
allow_su | boolean | admin allowed to SU to user |
email_notify | boolean | email notifications enabled |
nullable email | email address Length: 0..128 | |
email_verify | boolean | require email address verification |
sms_notify | boolean | SMS notifications enabled |
sms | string | notification number for SMS messages |
sms_verify | boolean | require SMS number verification |
app_default | string | default web-ui application default: "storage" one of: "storage" or "infrastructure" or "account" or "securedrive" |
account_id | string | account id |
level | integer | user privilege level |
uuid | uuid | object UUID |
Curl Example
$ curl -X POST https://mgmt-node/api/user-profile \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"username": "account421",
"password": "password421",
"account_id": "account:10:10"
}'
Response Example
201 Created
Date: Mon, 09 Oct 2017 17:26:54 GMT
Server: Goliath
ETag: "1f8aac360f9ceb42a4143aa83f8c152b"
Content-Type: application/json
Content-Length: 2069
{
"id": "user_profile:16:10",
"uuid": "11bccdde-f3b6-4b65-a28f-25d0463b1564",
"serial": "USR1B62194C4062655E",
"evt_qry": "serial=USR1B62194C4062655E",
"account_id": "account:10:10",
"ctime": 1507570014375,
"mtime": 1507570014375,
"seq": 1507570014382,
"label": null,
"status": null,
"ec": {
"table": null,
"status": "retrieving",
"seq": 1507570014382
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"login": "account421@account42",
"activated": true,
"app_default": "storage",
"access": {
"web": true,
"api": true
},
"permissions": {
"node": {
"all_realm_scope": false,
"nodes": [
],
"rights": {
"manage_storage": false,
"manage_networks": false,
"provision_vss": false,
"remove_vss": false
}
},
"vss": {
"all_account_scope": true,
"rights": {
"dismiss_tasks": true,
"update_vss": true,
"remove_vss": true,
"set_vss_quota": true,
"manage_internal_disks": true,
"manage_external_disks": true,
"manage_removable_disks": true,
"manage_disk_cryptography": true,
"remove_locked_disks": true,
"replicate_disks": true,
"synchronize_disks": true,
"format_disks": true,
"resize_disks": true,
"backup_disks": true,
"validate_data_integrity": true,
"manage_snapshots": true,
"manage_targets": true,
"manage_profiles": true,
"manage_secure_access_tokens": true,
"manage_rules": true
}
},
"realm": {
"rights": {
"can_switch_user": false,
"manage_node_membership": false,
"manage_accounts": false,
"view_logs": false,
"run_admin_tasks": false,
"run_tests": false
}
},
"user": {
"rights": {
"manage_users": true,
"modify_user_contact_settings": true,
"reset_user_password": true,
"reset_user_two_factor": true,
"manage_authorizations": true
}
},
"account": {
"rights": {
"modify_contact_settings": true,
"manage_global_profiles": true,
"manage_global_secure_access_tokens": true,
"view_events": true,
"view_statistics": true,
"query_catalog": true,
"provision_vss": true,
"manage_obj_stores": true,
"read_object_storage": true,
"write_object_storage": true,
"delete_object_storage": true
}
}
},
"account_admin": false,
"allow_su": false,
"level": 0,
"timezone": "local",
"two_factor": {
"auth": "none"
},
"email": null,
"email_notify": false,
"email_verified": false,
"sms": {
"number": "XXX-XXX-XXXX",
"valid": false
},
"sms_notify": false,
"password_set": true,
"sessions": [
]
}
User Profile Remove
Remove an existing user profile.
DELETE /user-profile/{user_profile_id_or_serial}
Optional Parameters
Name | Type | Description |
---|---|---|
account_id | string | account id |
Curl Example
$ curl -X DELETE https://mgmt-node/api/user-profile/user_profile:16:10 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
204 No Content
Date: Mon, 09 Oct 2017 17:26:55 GMT
Server: Goliath
User Profile Update
Change the configuration of an existing user profile.
PATCH /user-profile/{user_profile_id_or_serial}
Optional Parameters
Name | Type | Description |
---|---|---|
xmd_refs | array | array of extensible metadata reference keys |
host | string | server hostname originating request (for url) |
new_password | nullable string | new password |
auth_password | string | current password; required when changing password for non-admin users |
two_factor:auth | string | two-factor authentication type one of: "none" or "yubikey" or "google" |
two_factor:otp | string | one-time-password from authentication device Length: 1..∞ |
two_factor:secret | string | shared AES secret pattern: ^[a-fA-F0-9]*$ Length: 1..∞ |
two_factor:private_id | string | yubikey private ID pattern: ^[a-fA-F0-9]*$ Length: 1..∞ |
two_factor:security_email | security email for lost authenticator recovery Length: 0..128 | |
two_factor:state | string | enable or disable two-factor authentication one of: "enable" or "disable" |
email_notify | boolean | email notifications are enabled |
nullable email | notification email address Length: 0..128 | |
email_verify | boolean | require email address verification |
sms_notify | boolean | SMS notifications enabled |
sms | string | notification number for SMS messages |
sms_verify | boolean | require SMS number verification |
app_default | string | default web-ui application one of: "storage" or "infrastructure" or "account" or "securedrive" |
activated | boolean | user profile activated |
ext_auth:key | nullable string | no documentation |
ext_auth:scope | nullable string | name of external authentication scope |
ext_auth:login | nullable string | mapped external login |
ext_auth:domain | nullable string | mapped external domain |
ext_auth:domain_function | nullable string | mapped external domain function |
permissions:realm:rights:can_switch_user | boolean | can SU to lower level user |
permissions:realm:rights:manage_node_membership | boolean | accept or delete nodes from the management network |
permissions:realm:rights:manage_accounts | boolean | can create or delete other accounts, users and their settings |
permissions:realm:rights:view_logs | boolean | view administrative logs |
permissions:realm:rights:run_admin_tasks | boolean | run realm administrative tasks |
permissions:realm:rights:run_tests | boolean | run realm administrative tests |
permissions:node:all_realm_scope | boolean | apply to all nodes in the realm default: true |
permissions:node:nodes | array | scope permissions to specific nodes |
permissions:node:rights:manage_storage | boolean | configure OS devices, iSCSI devices, and system datastores |
permissions:node:rights:manage_networks | boolean | configure networks |
permissions:node:rights:provision_vss | boolean | manually provision virtual storage services |
permissions:node:rights:remove_vss | boolean | remove virtual storage services |
permissions:vss:all_account_scope | boolean | apply to all virtual storage services in the account default: true |
permissions:vss:vsses | array | limit scope to specified vsses |
permissions:vss:rights:dismiss_tasks | boolean | dismiss tasks |
permissions:vss:rights:update_vss | boolean | update vss configuration |
permissions:vss:rights:remove_vss | boolean | remove vss |
permissions:vss:rights:set_vss_quota | boolean | set vss quota |
permissions:vss:rights:manage_internal_disks | boolean | manage internal disks |
permissions:vss:rights:manage_external_disks | boolean | manage external disks |
permissions:vss:rights:manage_removable_disks | boolean | manage removable disks |
permissions:vss:rights:manage_disk_cryptography | boolean | manage disk cryptography |
permissions:vss:rights:remove_locked_disks | boolean | remove locked disks |
permissions:vss:rights:validate_data_integrity | boolean | validate data integrity |
permissions:vss:rights:manage_targets | boolean | manage targets |
permissions:vss:rights:manage_profiles | boolean | manage profiles |
permissions:vss:rights:manage_secure_access_tokens | boolean | manage secure access tokens |
permissions:vss:rights:manage_rules | boolean | manage rules |
permissions:vss:rights:replicate_disks | boolean | replicate disks |
permissions:vss:rights:synchronize_disks | boolean | synchronize disks |
permissions:vss:rights:format_disks | boolean | format disks |
permissions:vss:rights:resize_disks | boolean | resize disks |
permissions:vss:rights:manage_snapshots | boolean | manage snapshots |
permissions:vss:rights:backup_disks | boolean | backup disks |
permissions:vss:rights:replicate_and_synchronize_disks | boolean | replicate and synchronize disks (DEPRECATED) |
permissions:vss:rights:compress_disks | boolean | compress disks |
permissions:vss:rights:manage_disk_compression | boolean | manage disk |
permissions:user:rights:manage_users | boolean | create or delete users in an account |
permissions:user:rights:modify_user_contact_settings | boolean | modify user contact info |
permissions:user:rights:reset_user_password | boolean | reset user password |
permissions:user:rights:reset_user_two_factor | boolean | reset two factor authentication |
permissions:user:rights:manage_authorizations | boolean | create or delete persistent authorizations |
permissions:account:rights:modify_contact_settings | boolean | modify account contact settings |
permissions:account:rights:view_events | boolean | view events |
permissions:account:rights:view_statistics | boolean | view statistics |
permissions:account:rights:manage_global_profiles | boolean | manage global profiles |
permissions:account:rights:manage_global_secure_access_tokens | boolean | manage global secure access tokens |
permissions:account:rights:query_catalog | boolean | query product catalog |
permissions:account:rights:provision_vss | boolean | provision vss from catalog |
permissions:account:rights:manage_obj_stores | boolean | manage obj stores |
permissions:account:rights:read_object_storage | boolean | read from object storage |
permissions:account:rights:write_object_storage | boolean | write to object storage |
permissions:account:rights:delete_object_storage | boolean | delete from object storage |
permissions_update_mode | string | user permissions update mode default: "merge" one of: "replace" or "merge" |
allow_su | boolean | admin allowed to SU to user |
account_id | string | account id |
Curl Example
$ curl -X PATCH https://mgmt-node/api/user-profile/user_profile:16:10 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"activated": false
}'
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:54 GMT
Server: Goliath
ETag: "14ea1ef48b481c651dfac513537e09a5"
Content-Type: application/json
Content-Length: 2070
{
"id": "user_profile:16:10",
"uuid": "11bccdde-f3b6-4b65-a28f-25d0463b1564",
"serial": "USR1B62194C4062655E",
"evt_qry": "serial=USR1B62194C4062655E",
"account_id": "account:10:10",
"ctime": 1507570014375,
"mtime": 1507570014709,
"seq": 1507570014716,
"label": null,
"status": null,
"ec": {
"table": null,
"status": "retrieving",
"seq": 1507570014382
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"login": "account421@account42",
"activated": false,
"app_default": "storage",
"access": {
"web": true,
"api": true
},
"permissions": {
"node": {
"all_realm_scope": false,
"nodes": [
],
"rights": {
"manage_storage": false,
"manage_networks": false,
"provision_vss": false,
"remove_vss": false
}
},
"vss": {
"all_account_scope": true,
"rights": {
"dismiss_tasks": true,
"update_vss": true,
"remove_vss": true,
"set_vss_quota": true,
"manage_internal_disks": true,
"manage_external_disks": true,
"manage_removable_disks": true,
"manage_disk_cryptography": true,
"remove_locked_disks": true,
"replicate_disks": true,
"synchronize_disks": true,
"format_disks": true,
"resize_disks": true,
"backup_disks": true,
"validate_data_integrity": true,
"manage_snapshots": true,
"manage_targets": true,
"manage_profiles": true,
"manage_secure_access_tokens": true,
"manage_rules": true
}
},
"realm": {
"rights": {
"can_switch_user": false,
"manage_node_membership": false,
"manage_accounts": false,
"view_logs": false,
"run_admin_tasks": false,
"run_tests": false
}
},
"user": {
"rights": {
"manage_users": true,
"modify_user_contact_settings": true,
"reset_user_password": true,
"reset_user_two_factor": true,
"manage_authorizations": true
}
},
"account": {
"rights": {
"modify_contact_settings": true,
"manage_global_profiles": true,
"manage_global_secure_access_tokens": true,
"view_events": true,
"view_statistics": true,
"query_catalog": true,
"provision_vss": true,
"manage_obj_stores": true,
"read_object_storage": true,
"write_object_storage": true,
"delete_object_storage": true
}
}
},
"account_admin": false,
"allow_su": false,
"level": 0,
"timezone": "local",
"two_factor": {
"auth": "none"
},
"email": null,
"email_notify": false,
"email_verified": false,
"sms": {
"number": "XXX-XXX-XXXX",
"valid": false
},
"sms_notify": false,
"password_set": true,
"sessions": [
]
}
User Profile Permissions
Enumerate the permissions of an existing user profile.
GET /user-profile/permissions
Curl Example
$ curl https://mgmt-node/api/user-profile/permissions \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:54 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 3052
{
"node": {
"all_realm_scope": "apply permissions to all nodes",
"rights": {
"manage_storage": "node permission to manage storage",
"manage_networks": "node permission to manage networks",
"provision_vss": "node permission to provision vss",
"remove_vss": "node permission to remove vss"
}
},
"vss": {
"all_account_scope": "apply permissions to all virtual storage services",
"rights": {
"dismiss_tasks": "vss permission to dismiss tasks",
"update_vss": "vss permission to update vss configuration",
"remove_vss": "vss permission to remove vss",
"set_vss_quota": "vss permission to set vss quota",
"manage_internal_disks": "vss permission to manage internal disks",
"manage_external_disks": "vss permission to manage external disks",
"manage_removable_disks": "vss permission to manage removable disks",
"manage_disk_cryptography": "vss permission to manage disk cryptography",
"remove_locked_disks": "vss permission to remove locked disks",
"replicate_disks": "vss permission to configure replication",
"synchronize_disks": "vss permission to synchronize disk contents",
"format_disks": "vss permission to format disks",
"resize_disks": "vss permission to resize disks",
"backup_disks": "vss permission to backup disks",
"validate_data_integrity": "vss permission to validate data integrity",
"manage_snapshots": "vss permission to create, update and remove snapshots",
"manage_targets": "vss permission to manage targets",
"manage_profiles": "vss permission to manage profiles",
"manage_secure_access_tokens": "vss permission to manage secure access tokens",
"manage_rules": "vss permission to manage rules"
}
},
"realm": {
"rights": {
"can_switch_user": "realm permission to switch users",
"manage_node_membership": "realm permission to manage node membership",
"manage_accounts": "realm permission to manage accounts",
"view_logs": "realm permission to view logs",
"run_admin_tasks": "realm permission to run administrator tasks",
"run_tests": "realm permission to run tests"
}
},
"user": {
"rights": {
"manage_users": "user permission to manage users",
"modify_user_contact_settings": "user permission to modify user contact settings",
"reset_user_password": "user permission to reset user password",
"reset_user_two_factor": "user permission to reset user two-factor authentication",
"manage_authorizations": "user permission to manage persistent authorizations"
}
},
"account": {
"rights": {
"modify_contact_settings": "account permission to modify contact settings",
"manage_global_profiles": "account permission to manage global profiles",
"manage_global_secure_access_tokens": "account permission to manage global secure access tokens",
"view_events": "account permission to view events",
"view_statistics": "account permission to view statistics",
"query_catalog": "account permission to query the catalog",
"provision_vss": "account permission to provision from the catalog",
"manage_obj_stores": "account permission to manage obj stores",
"read_object_storage": "account permission to read from object storage",
"write_object_storage": "account permission to write to object storage",
"delete_object_storage": "account permission to delete from object storage"
}
}
}
OAuth 2 Access Token
Submit a username and password to create a time-limited OAuth 2 API access token. Include this token in the Authorization
HTTP header in subsequent requests. For example,:
Authorization: Bearer 0/EYZPk2DHOQ+ep8NyFerJake9NCG+M3WSbsoj5cfn6L5xh0+TYMc6Hw
OAuth 2 Access Token Create
Exchange authorization of some sort for an access token.
POST /oauth2/token
Required Parameters
Name | Type | Description |
---|---|---|
grant_type | string | type of grant request |
Optional Parameters
Name | Type | Description |
---|---|---|
client_id | string | (optional) client id of request |
client_secret | string | (optional) client supplied secret |
code | string | (optional) code |
redirect_url | string | (optional) redirect url |
username | string | username to request token for |
password | string | password for username |
method | string | (optional) method of authorization |
expires_in | integer | when access token will expire (in seconds) |
Curl Example
$ curl -X POST https://mgmt-node/api/oauth2/token \
-H "Content-Type: application/json" \
-d \
'{
"grant_type": "password",
"username": "system",
"password": "system"
}'
Response Example
201 Created
Date: Mon, 09 Oct 2017 17:26:50 GMT
Server: Goliath
Cache-Control: no-store
Pragma: no-cache
Content-Type: application/json
Content-Length: 305
{
"access_token": "0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg",
"token_type": "Bearer",
"expires_in": 3599,
"user": {
"id": "session:16:10",
"user": {
"name": "system",
"id": "user_profile:1:10",
"serial": "USR1B62194C40626440"
},
"account": {
"name": "system",
"id": "account:1:10",
"serial": "ACT0762194C40626445"
}
}
}
Authorization
Manage secure application access to the API using revokable authorization tokens. A user may have many authorization tokens, in support of many different applications. Each token may be independently revoked with a DELETE
request.
Attributes
Name | Type | Description |
---|---|---|
id | string | object id |
uuid | uuid | object uuid |
ctime | integer | authorization create time Range: 0 <= value |
mtime | integer | authorization last modified time Range: 0 <= value |
serial | string | authorization serial number |
xref | string | arbitrary string reference Length: 1..256 |
notes | nullable string | user assigned notes Length: 0..256 |
account_id | string | no documentation |
user_id | string | no documentation |
fingerprint | nullable string | client-side differentiator to permit multiple authorizations per application/user |
enabled | boolean | authorization is enabled default: true |
app_id | nullable string | associated client application (null = no/unspecified application) |
scope | nullable string | authorization scope (null maps to referenced user permissions) |
access_type | string | authorization access type (offline access includes a refresh token) default: "online" one of: "online" or "offline" |
lifetime | nullable integer | access token lifetime, in seconds since created_at (null = eternal) |
restrict | string | how to restrict user-profile permissions when calculating effective perms one of: "none" or "auth" |
enforce_two_factor | boolean | enforce user two-factor auth (if configured) |
created_at | string | authorization create time |
updated_at | string | authorization last updated time |
expires_in | nullable integer | authorization time remaining |
access_token_digest | string | base64-encoded SHA256 digest of access token |
access_token_suffix | string | access token suffix |
access_token_type | string | no documentation one of: "Bearer" |
refresh_token_digest | nullable string | base64-encoded SHA256 digest of refresh token (for offline token refresh) |
permissions | nullable object | user permissions |
permissions:realm:rights:can_switch_user | boolean | can SU to lower level user |
permissions:realm:rights:manage_node_membership | boolean | accept or delete nodes from the management network |
permissions:realm:rights:manage_accounts | boolean | can create or delete other accounts, users and their settings |
permissions:realm:rights:view_logs | boolean | view administrative logs |
permissions:realm:rights:run_admin_tasks | boolean | run realm administrative tasks |
permissions:realm:rights:run_tests | boolean | run realm administrative tests |
permissions:node:all_realm_scope | boolean | apply to all nodes in the realm default: true |
permissions:node:nodes | array | scope permissions to specific nodes |
permissions:node:rights:manage_storage | boolean | configure OS devices, iSCSI devices, and system datastores |
permissions:node:rights:manage_networks | boolean | configure networks |
permissions:node:rights:provision_vss | boolean | manually provision virtual storage services |
permissions:node:rights:remove_vss | boolean | remove virtual storage services |
permissions:vss:all_account_scope | boolean | apply to all virtual storage services in the account default: true |
permissions:vss:vsses | array | limit scope to specified vsses |
permissions:vss:rights:dismiss_tasks | boolean | dismiss tasks |
permissions:vss:rights:update_vss | boolean | update vss configuration |
permissions:vss:rights:remove_vss | boolean | remove vss |
permissions:vss:rights:set_vss_quota | boolean | set vss quota |
permissions:vss:rights:manage_internal_disks | boolean | manage internal disks |
permissions:vss:rights:manage_external_disks | boolean | manage external disks |
permissions:vss:rights:manage_removable_disks | boolean | manage removable disks |
permissions:vss:rights:manage_disk_cryptography | boolean | manage disk cryptography |
permissions:vss:rights:remove_locked_disks | boolean | remove locked disks |
permissions:vss:rights:validate_data_integrity | boolean | validate data integrity |
permissions:vss:rights:manage_targets | boolean | manage targets |
permissions:vss:rights:manage_profiles | boolean | manage profiles |
permissions:vss:rights:manage_secure_access_tokens | boolean | manage secure access tokens |
permissions:vss:rights:manage_rules | boolean | manage rules |
permissions:vss:rights:replicate_disks | boolean | replicate disks |
permissions:vss:rights:synchronize_disks | boolean | synchronize disks |
permissions:vss:rights:format_disks | boolean | format disks |
permissions:vss:rights:resize_disks | boolean | resize disks |
permissions:vss:rights:manage_snapshots | boolean | manage snapshots |
permissions:vss:rights:backup_disks | boolean | backup disks |
permissions:vss:rights:replicate_and_synchronize_disks | boolean | replicate and synchronize disks (DEPRECATED) |
permissions:vss:rights:compress_disks | boolean | compress disks |
permissions:vss:rights:manage_disk_compression | boolean | manage disk |
permissions:user:rights:manage_users | boolean | create or delete users in an account |
permissions:user:rights:modify_user_contact_settings | boolean | modify user contact info |
permissions:user:rights:reset_user_password | boolean | reset user password |
permissions:user:rights:reset_user_two_factor | boolean | reset two factor authentication |
permissions:user:rights:manage_authorizations | boolean | create or delete persistent authorizations |
permissions:account:rights:modify_contact_settings | boolean | modify account contact settings |
permissions:account:rights:view_events | boolean | view events |
permissions:account:rights:view_statistics | boolean | view statistics |
permissions:account:rights:manage_global_profiles | boolean | manage global profiles |
permissions:account:rights:manage_global_secure_access_tokens | boolean | manage global secure access tokens |
permissions:account:rights:query_catalog | boolean | query product catalog |
permissions:account:rights:provision_vss | boolean | provision vss from catalog |
permissions:account:rights:manage_obj_stores | boolean | manage obj stores |
permissions:account:rights:read_object_storage | boolean | read from object storage |
permissions:account:rights:write_object_storage | boolean | write to object storage |
permissions:account:rights:delete_object_storage | boolean | delete from object storage |
effective_scope | nullable string | authorization effective scope |
Authorization Info
Retrieve existing authorizations.
GET /authorization/{authz_id_or_serial}
Curl Example
$ curl https://mgmt-node/api/authorization/authz:8:10 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:55 GMT
Server: Goliath
ETag: "15063787638d004d7fa22789908788fa"
Content-Type: application/json
Content-Length: 2577
{
"id": "authz:8:10",
"serial": "ATH4762194C406264DA",
"account_id": "account:1:10",
"user_id": "user_profile:1:10",
"xref": null,
"notes": null,
"fingerprint": null,
"enabled": true,
"app_id": null,
"scope": null,
"access_type": "online",
"lifetime": null,
"restrict": "auth",
"enforce_two_factor": false,
"created_at": "2017-10-09T17:26:55.195+00:00",
"updated_at": "2017-10-09T17:26:55.195+00:00",
"expires_in": null,
"access_token_digest": "+rQjeekqAsn2Dpc+SswdGSG8Dj1MpKPzbsGoYP00onc",
"access_token_suffix": "ZM3mJpCA",
"refresh_token_digest": null,
"effective_scope": "r:r=can_switch_user r:r=manage_node_membership r:r=manage_accounts r:r=view_logs r:r=run_admin_tasks r:r=run_tests a:r=modify_contact_settings a:r=view_events a:r=view_statistics a:r=manage_global_profiles a:r=manage_global_secure_access_tokens a:r=query_catalog a:r=provision_vss a:r=manage_obj_stores a:r=read_object_storage a:r=write_object_storage a:r=delete_object_storage n:r=manage_storage n:r=manage_networks n:r=provision_vss n:r=remove_vss v:r=dismiss_tasks v:r=update_vss v:r=remove_vss v:r=set_vss_quota v:r=manage_internal_disks v:r=manage_external_disks v:r=manage_removable_disks v:r=manage_disk_cryptography v:r=remove_locked_disks v:r=replicate_disks v:r=synchronize_disks v:r=format_disks v:r=resize_disks v:r=backup_disks v:r=validate_data_integrity v:r=manage_snapshots v:r=manage_targets v:r=manage_profiles v:r=manage_secure_access_tokens v:r=manage_rules n:o=all v:o=all",
"permissions": {
"realm": {
"rights": {
"can_switch_user": true,
"manage_node_membership": true,
"manage_accounts": true,
"view_logs": true,
"run_admin_tasks": true,
"run_tests": true
}
},
"node": {
"all_realm_scope": true,
"rights": {
"manage_storage": true,
"manage_networks": true,
"provision_vss": true,
"remove_vss": true
}
},
"vss": {
"all_account_scope": true,
"rights": {
"dismiss_tasks": true,
"update_vss": true,
"remove_vss": true,
"set_vss_quota": true,
"manage_internal_disks": true,
"manage_external_disks": true,
"manage_removable_disks": true,
"manage_disk_cryptography": true,
"remove_locked_disks": true,
"replicate_disks": true,
"synchronize_disks": true,
"format_disks": true,
"resize_disks": true,
"backup_disks": true,
"validate_data_integrity": true,
"manage_snapshots": true,
"manage_targets": true,
"manage_profiles": true,
"manage_secure_access_tokens": true,
"manage_rules": true
}
},
"account": {
"rights": {
"modify_contact_settings": true,
"view_events": true,
"view_statistics": true,
"manage_global_profiles": true,
"manage_global_secure_access_tokens": true,
"query_catalog": true,
"provision_vss": true,
"manage_obj_stores": true,
"read_object_storage": true,
"write_object_storage": true,
"delete_object_storage": true
}
}
}
}
Authorization List
Enumerate authorizations.
GET /authorization
Curl Example
$ curl https://mgmt-node/api/authorization \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:55 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 18469
[
{
"id": "authz:4:10",
"serial": "ATH4762194C40626418",
"account_id": "account:1:10",
"user_id": "user_profile:1:10",
"xref": null,
"notes": "authz updated to be disabled",
"fingerprint": null,
"enabled": false,
"app_id": null,
"scope": null,
"access_type": "online",
"lifetime": null,
"restrict": "auth",
"enforce_two_factor": false,
"created_at": "2017-10-09T16:52:24.826+00:00",
"updated_at": "2017-10-09T16:52:25.211+00:00",
"expires_in": null,
"access_token_digest": "3wKrRNRjjMNRG/J9AN3aNdv6sAC/uAWsv2KYzW71g2c",
"access_token_suffix": "7tASp9eg",
"refresh_token_digest": null,
"effective_scope": "r:r=can_switch_user r:r=manage_node_membership r:r=manage_accounts r:r=view_logs r:r=run_admin_tasks r:r=run_tests a:r=modify_contact_settings a:r=view_events a:r=view_statistics a:r=manage_global_profiles a:r=manage_global_secure_access_tokens a:r=query_catalog a:r=provision_vss a:r=manage_obj_stores a:r=read_object_storage a:r=write_object_storage a:r=delete_object_storage n:r=manage_storage n:r=manage_networks n:r=provision_vss n:r=remove_vss v:r=dismiss_tasks v:r=update_vss v:r=remove_vss v:r=set_vss_quota v:r=manage_internal_disks v:r=manage_external_disks v:r=manage_removable_disks v:r=manage_disk_cryptography v:r=remove_locked_disks v:r=replicate_disks v:r=synchronize_disks v:r=format_disks v:r=resize_disks v:r=backup_disks v:r=validate_data_integrity v:r=manage_snapshots v:r=manage_targets v:r=manage_profiles v:r=manage_secure_access_tokens v:r=manage_rules n:o=all v:o=all",
"permissions": {
"realm": {
"rights": {
"can_switch_user": true,
"manage_node_membership": true,
"manage_accounts": true,
"view_logs": true,
"run_admin_tasks": true,
"run_tests": true
}
},
"node": {
"all_realm_scope": true,
"rights": {
"manage_storage": true,
"manage_networks": true,
"provision_vss": true,
"remove_vss": true
}
},
"vss": {
"all_account_scope": true,
"rights": {
"dismiss_tasks": true,
"update_vss": true,
"remove_vss": true,
"set_vss_quota": true,
"manage_internal_disks": true,
"manage_external_disks": true,
"manage_removable_disks": true,
"manage_disk_cryptography": true,
"remove_locked_disks": true,
"replicate_disks": true,
"synchronize_disks": true,
"format_disks": true,
"resize_disks": true,
"backup_disks": true,
"validate_data_integrity": true,
"manage_snapshots": true,
"manage_targets": true,
"manage_profiles": true,
"manage_secure_access_tokens": true,
"manage_rules": true
}
},
"account": {
"rights": {
"modify_contact_settings": true,
"view_events": true,
"view_statistics": true,
"manage_global_profiles": true,
"manage_global_secure_access_tokens": true,
"query_catalog": true,
"provision_vss": true,
"manage_obj_stores": true,
"read_object_storage": true,
"write_object_storage": true,
"delete_object_storage": true
}
}
}
},
{
"id": "authz:8:10",
"serial": "ATH4762194C406264DA",
"account_id": "account:1:10",
"user_id": "user_profile:1:10",
"xref": null,
"notes": null,
"fingerprint": null,
"enabled": true,
"app_id": null,
"scope": null,
"access_type": "online",
"lifetime": null,
"restrict": "auth",
"enforce_two_factor": false,
"created_at": "2017-10-09T17:26:55.195+00:00",
"updated_at": "2017-10-09T17:26:55.195+00:00",
"expires_in": null,
"access_token_digest": "+rQjeekqAsn2Dpc+SswdGSG8Dj1MpKPzbsGoYP00onc",
"access_token_suffix": "ZM3mJpCA",
"refresh_token_digest": null,
"effective_scope": "r:r=can_switch_user r:r=manage_node_membership r:r=manage_accounts r:r=view_logs r:r=run_admin_tasks r:r=run_tests a:r=modify_contact_settings a:r=view_events a:r=view_statistics a:r=manage_global_profiles a:r=manage_global_secure_access_tokens a:r=query_catalog a:r=provision_vss a:r=manage_obj_stores a:r=read_object_storage a:r=write_object_storage a:r=delete_object_storage n:r=manage_storage n:r=manage_networks n:r=provision_vss n:r=remove_vss v:r=dismiss_tasks v:r=update_vss v:r=remove_vss v:r=set_vss_quota v:r=manage_internal_disks v:r=manage_external_disks v:r=manage_removable_disks v:r=manage_disk_cryptography v:r=remove_locked_disks v:r=replicate_disks v:r=synchronize_disks v:r=format_disks v:r=resize_disks v:r=backup_disks v:r=validate_data_integrity v:r=manage_snapshots v:r=manage_targets v:r=manage_profiles v:r=manage_secure_access_tokens v:r=manage_rules n:o=all v:o=all",
"permissions": {
"realm": {
"rights": {
"can_switch_user": true,
"manage_node_membership": true,
"manage_accounts": true,
"view_logs": true,
"run_admin_tasks": true,
"run_tests": true
}
},
"node": {
"all_realm_scope": true,
"rights": {
"manage_storage": true,
"manage_networks": true,
"provision_vss": true,
"remove_vss": true
}
},
"vss": {
"all_account_scope": true,
"rights": {
"dismiss_tasks": true,
"update_vss": true,
"remove_vss": true,
"set_vss_quota": true,
"manage_internal_disks": true,
"manage_external_disks": true,
"manage_removable_disks": true,
"manage_disk_cryptography": true,
"remove_locked_disks": true,
"replicate_disks": true,
"synchronize_disks": true,
"format_disks": true,
"resize_disks": true,
"backup_disks": true,
"validate_data_integrity": true,
"manage_snapshots": true,
"manage_targets": true,
"manage_profiles": true,
"manage_secure_access_tokens": true,
"manage_rules": true
}
},
"account": {
"rights": {
"modify_contact_settings": true,
"view_events": true,
"view_statistics": true,
"manage_global_profiles": true,
"manage_global_secure_access_tokens": true,
"query_catalog": true,
"provision_vss": true,
"manage_obj_stores": true,
"read_object_storage": true,
"write_object_storage": true,
"delete_object_storage": true
}
}
}
},
{
"id": "authz:5:10",
"serial": "ATH4762194C40626400",
"account_id": "account:1:10",
"user_id": "user_profile:1:10",
"xref": null,
"notes": "authz updated to be disabled",
"fingerprint": null,
"enabled": false,
"app_id": null,
"scope": null,
"access_type": "online",
"lifetime": null,
"restrict": "auth",
"enforce_two_factor": false,
"created_at": "2017-10-09T16:57:13.342+00:00",
"updated_at": "2017-10-09T16:57:13.740+00:00",
"expires_in": null,
"access_token_digest": "zKVffwlpVKIxvE3BqRMJOmK4EKwbSrewJVRhEdLqOQA",
"access_token_suffix": "USFxtvCQ",
"refresh_token_digest": null,
"effective_scope": "r:r=can_switch_user r:r=manage_node_membership r:r=manage_accounts r:r=view_logs r:r=run_admin_tasks r:r=run_tests a:r=modify_contact_settings a:r=view_events a:r=view_statistics a:r=manage_global_profiles a:r=manage_global_secure_access_tokens a:r=query_catalog a:r=provision_vss a:r=manage_obj_stores a:r=read_object_storage a:r=write_object_storage a:r=delete_object_storage n:r=manage_storage n:r=manage_networks n:r=provision_vss n:r=remove_vss v:r=dismiss_tasks v:r=update_vss v:r=remove_vss v:r=set_vss_quota v:r=manage_internal_disks v:r=manage_external_disks v:r=manage_removable_disks v:r=manage_disk_cryptography v:r=remove_locked_disks v:r=replicate_disks v:r=synchronize_disks v:r=format_disks v:r=resize_disks v:r=backup_disks v:r=validate_data_integrity v:r=manage_snapshots v:r=manage_targets v:r=manage_profiles v:r=manage_secure_access_tokens v:r=manage_rules n:o=all v:o=all",
"permissions": {
"realm": {
"rights": {
"can_switch_user": true,
"manage_node_membership": true,
"manage_accounts": true,
"view_logs": true,
"run_admin_tasks": true,
"run_tests": true
}
},
"node": {
"all_realm_scope": true,
"rights": {
"manage_storage": true,
"manage_networks": true,
"provision_vss": true,
"remove_vss": true
}
},
"vss": {
"all_account_scope": true,
"rights": {
"dismiss_tasks": true,
"update_vss": true,
"remove_vss": true,
"set_vss_quota": true,
"manage_internal_disks": true,
"manage_external_disks": true,
"manage_removable_disks": true,
"manage_disk_cryptography": true,
"remove_locked_disks": true,
"replicate_disks": true,
"synchronize_disks": true,
"format_disks": true,
"resize_disks": true,
"backup_disks": true,
"validate_data_integrity": true,
"manage_snapshots": true,
"manage_targets": true,
"manage_profiles": true,
"manage_secure_access_tokens": true,
"manage_rules": true
}
},
"account": {
"rights": {
"modify_contact_settings": true,
"view_events": true,
"view_statistics": true,
"manage_global_profiles": true,
"manage_global_secure_access_tokens": true,
"query_catalog": true,
"provision_vss": true,
"manage_obj_stores": true,
"read_object_storage": true,
"write_object_storage": true,
"delete_object_storage": true
}
}
}
},
{
"id": "authz:1:10",
"serial": "ATH4762194C40626441",
"account_id": "account:1:10",
"user_id": "user_profile:1:10",
"xref": null,
"notes": null,
"fingerprint": null,
"enabled": true,
"app_id": null,
"scope": null,
"access_type": "online",
"lifetime": null,
"restrict": "none",
"enforce_two_factor": false,
"created_at": "2017-10-09T15:27:15.198+00:00",
"updated_at": "2017-10-09T15:27:15.198+00:00",
"expires_in": null,
"access_token_digest": "ZR1XPlVBm4h2aouqN0q/Ark46/iw7lu4xV7zfd8Elho",
"access_token_suffix": "5jYFny4w",
"refresh_token_digest": null,
"effective_scope": "r:r=can_switch_user r:r=manage_node_membership r:r=manage_accounts r:r=view_logs r:r=run_admin_tasks r:r=run_tests a:r=modify_contact_settings a:r=view_events a:r=view_statistics a:r=manage_global_profiles a:r=manage_global_secure_access_tokens a:r=query_catalog a:r=provision_vss a:r=manage_obj_stores a:r=read_object_storage a:r=write_object_storage a:r=delete_object_storage u:r=manage_users u:r=modify_user_contact_settings u:r=reset_user_password u:r=reset_user_two_factor u:r=manage_authorizations n:r=manage_storage n:r=manage_networks n:r=provision_vss n:r=remove_vss v:r=dismiss_tasks v:r=update_vss v:r=remove_vss v:r=set_vss_quota v:r=manage_internal_disks v:r=manage_external_disks v:r=manage_removable_disks v:r=manage_disk_cryptography v:r=remove_locked_disks v:r=replicate_disks v:r=synchronize_disks v:r=format_disks v:r=resize_disks v:r=backup_disks v:r=validate_data_integrity v:r=manage_snapshots v:r=manage_targets v:r=manage_profiles v:r=manage_secure_access_tokens v:r=manage_rules n:o=all v:o=all",
"permissions": {
"realm": {
"rights": {
"can_switch_user": true,
"manage_node_membership": true,
"manage_accounts": true,
"view_logs": true,
"run_admin_tasks": true,
"run_tests": true
}
},
"node": {
"all_realm_scope": true,
"rights": {
"manage_storage": true,
"manage_networks": true,
"provision_vss": true,
"remove_vss": true
}
},
"vss": {
"all_account_scope": true,
"rights": {
"dismiss_tasks": true,
"update_vss": true,
"remove_vss": true,
"set_vss_quota": true,
"manage_internal_disks": true,
"manage_external_disks": true,
"manage_removable_disks": true,
"manage_disk_cryptography": true,
"remove_locked_disks": true,
"replicate_disks": true,
"synchronize_disks": true,
"format_disks": true,
"resize_disks": true,
"backup_disks": true,
"validate_data_integrity": true,
"manage_snapshots": true,
"manage_targets": true,
"manage_profiles": true,
"manage_secure_access_tokens": true,
"manage_rules": true
}
},
"user": {
"rights": {
"manage_users": true,
"modify_user_contact_settings": true,
"reset_user_password": true,
"reset_user_two_factor": true,
"manage_authorizations": true
}
},
"account": {
"rights": {
"modify_contact_settings": true,
"view_events": true,
"view_statistics": true,
"manage_global_profiles": true,
"manage_global_secure_access_tokens": true,
"query_catalog": true,
"provision_vss": true,
"manage_obj_stores": true,
"read_object_storage": true,
"write_object_storage": true,
"delete_object_storage": true
}
}
}
},
{
"id": "authz:6:10",
"serial": "ATH4762194C40626438",
"account_id": "account:1:10",
"user_id": "user_profile:1:10",
"xref": null,
"notes": "authz updated to be disabled",
"fingerprint": null,
"enabled": false,
"app_id": null,
"scope": null,
"access_type": "online",
"lifetime": null,
"restrict": "auth",
"enforce_two_factor": false,
"created_at": "2017-10-09T17:23:18.287+00:00",
"updated_at": "2017-10-09T17:23:18.687+00:00",
"expires_in": null,
"access_token_digest": "2xjPfMNO8Vsee3cF9Nf7Pc0Hvh4tIg6dSKmTLLOhUqc",
"access_token_suffix": "cb7BffIQ",
"refresh_token_digest": null,
"effective_scope": "r:r=can_switch_user r:r=manage_node_membership r:r=manage_accounts r:r=view_logs r:r=run_admin_tasks r:r=run_tests a:r=modify_contact_settings a:r=view_events a:r=view_statistics a:r=manage_global_profiles a:r=manage_global_secure_access_tokens a:r=query_catalog a:r=provision_vss a:r=manage_obj_stores a:r=read_object_storage a:r=write_object_storage a:r=delete_object_storage n:r=manage_storage n:r=manage_networks n:r=provision_vss n:r=remove_vss v:r=dismiss_tasks v:r=update_vss v:r=remove_vss v:r=set_vss_quota v:r=manage_internal_disks v:r=manage_external_disks v:r=manage_removable_disks v:r=manage_disk_cryptography v:r=remove_locked_disks v:r=replicate_disks v:r=synchronize_disks v:r=format_disks v:r=resize_disks v:r=backup_disks v:r=validate_data_integrity v:r=manage_snapshots v:r=manage_targets v:r=manage_profiles v:r=manage_secure_access_tokens v:r=manage_rules n:o=all v:o=all",
"permissions": {
"realm": {
"rights": {
"can_switch_user": true,
"manage_node_membership": true,
"manage_accounts": true,
"view_logs": true,
"run_admin_tasks": true,
"run_tests": true
}
},
"node": {
"all_realm_scope": true,
"rights": {
"manage_storage": true,
"manage_networks": true,
"provision_vss": true,
"remove_vss": true
}
},
"vss": {
"all_account_scope": true,
"rights": {
"dismiss_tasks": true,
"update_vss": true,
"remove_vss": true,
"set_vss_quota": true,
"manage_internal_disks": true,
"manage_external_disks": true,
"manage_removable_disks": true,
"manage_disk_cryptography": true,
"remove_locked_disks": true,
"replicate_disks": true,
"synchronize_disks": true,
"format_disks": true,
"resize_disks": true,
"backup_disks": true,
"validate_data_integrity": true,
"manage_snapshots": true,
"manage_targets": true,
"manage_profiles": true,
"manage_secure_access_tokens": true,
"manage_rules": true
}
},
"account": {
"rights": {
"modify_contact_settings": true,
"view_events": true,
"view_statistics": true,
"manage_global_profiles": true,
"manage_global_secure_access_tokens": true,
"query_catalog": true,
"provision_vss": true,
"manage_obj_stores": true,
"read_object_storage": true,
"write_object_storage": true,
"delete_object_storage": true
}
}
}
},
{
"id": "authz:7:10",
"serial": "ATH4762194C40626420",
"account_id": "account:1:10",
"user_id": "user_profile:1:10",
"xref": null,
"notes": "authz updated to be disabled",
"fingerprint": null,
"enabled": false,
"app_id": null,
"scope": null,
"access_type": "online",
"lifetime": null,
"restrict": "auth",
"enforce_two_factor": false,
"created_at": "2017-10-09T17:26:08.527+00:00",
"updated_at": "2017-10-09T17:26:08.944+00:00",
"expires_in": null,
"access_token_digest": "c+9quISbNsmFNpUMqZVdXip4YBN/SRCfWJI9/c+hj8c",
"access_token_suffix": "41uymTyw",
"refresh_token_digest": null,
"effective_scope": "r:r=can_switch_user r:r=manage_node_membership r:r=manage_accounts r:r=view_logs r:r=run_admin_tasks r:r=run_tests a:r=modify_contact_settings a:r=view_events a:r=view_statistics a:r=manage_global_profiles a:r=manage_global_secure_access_tokens a:r=query_catalog a:r=provision_vss a:r=manage_obj_stores a:r=read_object_storage a:r=write_object_storage a:r=delete_object_storage n:r=manage_storage n:r=manage_networks n:r=provision_vss n:r=remove_vss v:r=dismiss_tasks v:r=update_vss v:r=remove_vss v:r=set_vss_quota v:r=manage_internal_disks v:r=manage_external_disks v:r=manage_removable_disks v:r=manage_disk_cryptography v:r=remove_locked_disks v:r=replicate_disks v:r=synchronize_disks v:r=format_disks v:r=resize_disks v:r=backup_disks v:r=validate_data_integrity v:r=manage_snapshots v:r=manage_targets v:r=manage_profiles v:r=manage_secure_access_tokens v:r=manage_rules n:o=all v:o=all",
"permissions": {
"realm": {
"rights": {
"can_switch_user": true,
"manage_node_membership": true,
"manage_accounts": true,
"view_logs": true,
"run_admin_tasks": true,
"run_tests": true
}
},
"node": {
"all_realm_scope": true,
"rights": {
"manage_storage": true,
"manage_networks": true,
"provision_vss": true,
"remove_vss": true
}
},
"vss": {
"all_account_scope": true,
"rights": {
"dismiss_tasks": true,
"update_vss": true,
"remove_vss": true,
"set_vss_quota": true,
"manage_internal_disks": true,
"manage_external_disks": true,
"manage_removable_disks": true,
"manage_disk_cryptography": true,
"remove_locked_disks": true,
"replicate_disks": true,
"synchronize_disks": true,
"format_disks": true,
"resize_disks": true,
"backup_disks": true,
"validate_data_integrity": true,
"manage_snapshots": true,
"manage_targets": true,
"manage_profiles": true,
"manage_secure_access_tokens": true,
"manage_rules": true
}
},
"account": {
"rights": {
"modify_contact_settings": true,
"view_events": true,
"view_statistics": true,
"manage_global_profiles": true,
"manage_global_secure_access_tokens": true,
"query_catalog": true,
"provision_vss": true,
"manage_obj_stores": true,
"read_object_storage": true,
"write_object_storage": true,
"delete_object_storage": true
}
}
}
},
{
"id": "authz:3:10",
"serial": "ATH4762194C40626461",
"account_id": "account:1:10",
"user_id": "user_profile:1:10",
"xref": null,
"notes": "authz updated to be disabled",
"fingerprint": null,
"enabled": false,
"app_id": null,
"scope": null,
"access_type": "online",
"lifetime": null,
"restrict": "auth",
"enforce_two_factor": false,
"created_at": "2017-10-09T15:38:47.532+00:00",
"updated_at": "2017-10-09T15:38:47.907+00:00",
"expires_in": null,
"access_token_digest": "C4nYZuzLrQPzugNyjRREMwXP9QBXhCDNzYYoYBD25p0",
"access_token_suffix": "QR4Wo+nQ",
"refresh_token_digest": null,
"effective_scope": "r:r=can_switch_user r:r=manage_node_membership r:r=manage_accounts r:r=view_logs r:r=run_admin_tasks r:r=run_tests a:r=modify_contact_settings a:r=view_events a:r=view_statistics a:r=manage_global_profiles a:r=manage_global_secure_access_tokens a:r=query_catalog a:r=provision_vss a:r=manage_obj_stores a:r=read_object_storage a:r=write_object_storage a:r=delete_object_storage n:r=manage_storage n:r=manage_networks n:r=provision_vss n:r=remove_vss v:r=dismiss_tasks v:r=update_vss v:r=remove_vss v:r=set_vss_quota v:r=manage_internal_disks v:r=manage_external_disks v:r=manage_removable_disks v:r=manage_disk_cryptography v:r=remove_locked_disks v:r=replicate_disks v:r=synchronize_disks v:r=format_disks v:r=resize_disks v:r=backup_disks v:r=validate_data_integrity v:r=manage_snapshots v:r=manage_targets v:r=manage_profiles v:r=manage_secure_access_tokens v:r=manage_rules n:o=all v:o=all",
"permissions": {
"realm": {
"rights": {
"can_switch_user": true,
"manage_node_membership": true,
"manage_accounts": true,
"view_logs": true,
"run_admin_tasks": true,
"run_tests": true
}
},
"node": {
"all_realm_scope": true,
"rights": {
"manage_storage": true,
"manage_networks": true,
"provision_vss": true,
"remove_vss": true
}
},
"vss": {
"all_account_scope": true,
"rights": {
"dismiss_tasks": true,
"update_vss": true,
"remove_vss": true,
"set_vss_quota": true,
"manage_internal_disks": true,
"manage_external_disks": true,
"manage_removable_disks": true,
"manage_disk_cryptography": true,
"remove_locked_disks": true,
"replicate_disks": true,
"synchronize_disks": true,
"format_disks": true,
"resize_disks": true,
"backup_disks": true,
"validate_data_integrity": true,
"manage_snapshots": true,
"manage_targets": true,
"manage_profiles": true,
"manage_secure_access_tokens": true,
"manage_rules": true
}
},
"account": {
"rights": {
"modify_contact_settings": true,
"view_events": true,
"view_statistics": true,
"manage_global_profiles": true,
"manage_global_secure_access_tokens": true,
"query_catalog": true,
"provision_vss": true,
"manage_obj_stores": true,
"read_object_storage": true,
"write_object_storage": true,
"delete_object_storage": true
}
}
}
}
]
Authorization Create
Create a persistent API authorization token.
POST /authorization
Optional Parameters
Name | Type | Description |
---|---|---|
fingerprint | nullable string | client-side differentiator to permit multiple authorizations per application/user |
app_id | nullable string | associated client application (null = no/unspecified application) |
notes | nullable string | user assigned notes Length: 0..256 |
scope | nullable string | authorization scope (null maps to referenced user permissions) |
enabled | boolean | authorization is enabled default: true |
access_type | string | authorization access type (offline access includes a refresh token) default: "online" one of: "online" or "offline" |
restrict | string | specify how the user permissions are mapped/filtered default: "auth" one of: "none" or "auth" |
permissions:realm:rights:can_switch_user | boolean | can SU to lower level user |
permissions:realm:rights:manage_node_membership | boolean | accept or delete nodes from the management network |
permissions:realm:rights:manage_accounts | boolean | can create or delete other accounts, users and their settings |
permissions:realm:rights:view_logs | boolean | view administrative logs |
permissions:realm:rights:run_admin_tasks | boolean | run realm administrative tasks |
permissions:realm:rights:run_tests | boolean | run realm administrative tests |
permissions:node:all_realm_scope | boolean | apply to all nodes in the realm default: true |
permissions:node:nodes | array | scope permissions to specific nodes |
permissions:node:rights:manage_storage | boolean | configure OS devices, iSCSI devices, and system datastores |
permissions:node:rights:manage_networks | boolean | configure networks |
permissions:node:rights:provision_vss | boolean | manually provision virtual storage services |
permissions:node:rights:remove_vss | boolean | remove virtual storage services |
permissions:vss:all_account_scope | boolean | apply to all virtual storage services in the account default: true |
permissions:vss:vsses | array | limit scope to specified vsses |
permissions:vss:rights:dismiss_tasks | boolean | dismiss tasks |
permissions:vss:rights:update_vss | boolean | update vss configuration |
permissions:vss:rights:remove_vss | boolean | remove vss |
permissions:vss:rights:set_vss_quota | boolean | set vss quota |
permissions:vss:rights:manage_internal_disks | boolean | manage internal disks |
permissions:vss:rights:manage_external_disks | boolean | manage external disks |
permissions:vss:rights:manage_removable_disks | boolean | manage removable disks |
permissions:vss:rights:manage_disk_cryptography | boolean | manage disk cryptography |
permissions:vss:rights:remove_locked_disks | boolean | remove locked disks |
permissions:vss:rights:validate_data_integrity | boolean | validate data integrity |
permissions:vss:rights:manage_targets | boolean | manage targets |
permissions:vss:rights:manage_profiles | boolean | manage profiles |
permissions:vss:rights:manage_secure_access_tokens | boolean | manage secure access tokens |
permissions:vss:rights:manage_rules | boolean | manage rules |
permissions:vss:rights:replicate_disks | boolean | replicate disks |
permissions:vss:rights:synchronize_disks | boolean | synchronize disks |
permissions:vss:rights:format_disks | boolean | format disks |
permissions:vss:rights:resize_disks | boolean | resize disks |
permissions:vss:rights:manage_snapshots | boolean | manage snapshots |
permissions:vss:rights:backup_disks | boolean | backup disks |
permissions:vss:rights:replicate_and_synchronize_disks | boolean | replicate and synchronize disks (DEPRECATED) |
permissions:vss:rights:compress_disks | boolean | compress disks |
permissions:vss:rights:manage_disk_compression | boolean | manage disk |
permissions:user:rights:manage_users | boolean | create or delete users in an account |
permissions:user:rights:modify_user_contact_settings | boolean | modify user contact info |
permissions:user:rights:reset_user_password | boolean | reset user password |
permissions:user:rights:reset_user_two_factor | boolean | reset two factor authentication |
permissions:user:rights:manage_authorizations | boolean | create or delete persistent authorizations |
permissions:account:rights:modify_contact_settings | boolean | modify account contact settings |
permissions:account:rights:view_events | boolean | view events |
permissions:account:rights:view_statistics | boolean | view statistics |
permissions:account:rights:manage_global_profiles | boolean | manage global profiles |
permissions:account:rights:manage_global_secure_access_tokens | boolean | manage global secure access tokens |
permissions:account:rights:query_catalog | boolean | query product catalog |
permissions:account:rights:provision_vss | boolean | provision vss from catalog |
permissions:account:rights:manage_obj_stores | boolean | manage obj stores |
permissions:account:rights:read_object_storage | boolean | read from object storage |
permissions:account:rights:write_object_storage | boolean | write to object storage |
permissions:account:rights:delete_object_storage | boolean | delete from object storage |
uuid | uuid | object UUID |
xref | string | arbitrary string reference Length: 1..256 |
enforce_two_factor | boolean | enforce user two-factor auth (if configured) |
user_id | string | user profile id |
Curl Example
$ curl -X POST https://mgmt-node/api/authorization \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
201 Created
Date: Mon, 09 Oct 2017 17:26:55 GMT
Server: Goliath
Cache-Control: no-store
Pragma: no-cache
Content-Type: application/json
Content-Length: 2672
{
"id": "authz:8:10",
"serial": "ATH4762194C406264DA",
"account_id": "account:1:10",
"user_id": "user_profile:1:10",
"xref": null,
"notes": null,
"fingerprint": null,
"enabled": true,
"app_id": null,
"scope": null,
"access_type": "online",
"lifetime": null,
"restrict": "auth",
"enforce_two_factor": false,
"created_at": "2017-10-09T17:26:55.195+00:00",
"updated_at": "2017-10-09T17:26:55.195+00:00",
"expires_in": null,
"access_token_digest": "+rQjeekqAsn2Dpc+SswdGSG8Dj1MpKPzbsGoYP00onc",
"access_token_suffix": "ZM3mJpCA",
"refresh_token_digest": null,
"effective_scope": "r:r=can_switch_user r:r=manage_node_membership r:r=manage_accounts r:r=view_logs r:r=run_admin_tasks r:r=run_tests a:r=modify_contact_settings a:r=view_events a:r=view_statistics a:r=manage_global_profiles a:r=manage_global_secure_access_tokens a:r=query_catalog a:r=provision_vss a:r=manage_obj_stores a:r=read_object_storage a:r=write_object_storage a:r=delete_object_storage n:r=manage_storage n:r=manage_networks n:r=provision_vss n:r=remove_vss v:r=dismiss_tasks v:r=update_vss v:r=remove_vss v:r=set_vss_quota v:r=manage_internal_disks v:r=manage_external_disks v:r=manage_removable_disks v:r=manage_disk_cryptography v:r=remove_locked_disks v:r=replicate_disks v:r=synchronize_disks v:r=format_disks v:r=resize_disks v:r=backup_disks v:r=validate_data_integrity v:r=manage_snapshots v:r=manage_targets v:r=manage_profiles v:r=manage_secure_access_tokens v:r=manage_rules n:o=all v:o=all",
"permissions": {
"realm": {
"rights": {
"can_switch_user": true,
"manage_node_membership": true,
"manage_accounts": true,
"view_logs": true,
"run_admin_tasks": true,
"run_tests": true
}
},
"node": {
"all_realm_scope": true,
"rights": {
"manage_storage": true,
"manage_networks": true,
"provision_vss": true,
"remove_vss": true
}
},
"vss": {
"all_account_scope": true,
"rights": {
"dismiss_tasks": true,
"update_vss": true,
"remove_vss": true,
"set_vss_quota": true,
"manage_internal_disks": true,
"manage_external_disks": true,
"manage_removable_disks": true,
"manage_disk_cryptography": true,
"remove_locked_disks": true,
"replicate_disks": true,
"synchronize_disks": true,
"format_disks": true,
"resize_disks": true,
"backup_disks": true,
"validate_data_integrity": true,
"manage_snapshots": true,
"manage_targets": true,
"manage_profiles": true,
"manage_secure_access_tokens": true,
"manage_rules": true
}
},
"account": {
"rights": {
"modify_contact_settings": true,
"view_events": true,
"view_statistics": true,
"manage_global_profiles": true,
"manage_global_secure_access_tokens": true,
"query_catalog": true,
"provision_vss": true,
"manage_obj_stores": true,
"read_object_storage": true,
"write_object_storage": true,
"delete_object_storage": true
}
}
},
"access_token": "1/Yw7mTN5iY0ncIb3auY/1fl25VQsNWAx2xrIn5A4tseDjDuZM3mJpCA",
"refresh_token": null
}
Authorization Remove
Remove a persistent API authorization token.
DELETE /authorization/{authz_id_or_serial}
Curl Example
$ curl -X DELETE https://mgmt-node/api/authorization/authz:8:10 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
204 No Content
Date: Mon, 09 Oct 2017 17:27:38 GMT
Server: Goliath
Authorization Update
Change a persistent API authorization token.
PATCH /authorization/{authz_id_or_serial}
Optional Parameters
Name | Type | Description |
---|---|---|
enabled | boolean | authorization is enabled default: true |
notes | nullable string | user assigned notes Length: 0..256 |
scope | nullable string | authorization scope (null maps to referenced user permissions) |
permissions:realm:rights:can_switch_user | boolean | can SU to lower level user |
permissions:realm:rights:manage_node_membership | boolean | accept or delete nodes from the management network |
permissions:realm:rights:manage_accounts | boolean | can create or delete other accounts, users and their settings |
permissions:realm:rights:view_logs | boolean | view administrative logs |
permissions:realm:rights:run_admin_tasks | boolean | run realm administrative tasks |
permissions:realm:rights:run_tests | boolean | run realm administrative tests |
permissions:node:all_realm_scope | boolean | apply to all nodes in the realm default: true |
permissions:node:nodes | array | scope permissions to specific nodes |
permissions:node:rights:manage_storage | boolean | configure OS devices, iSCSI devices, and system datastores |
permissions:node:rights:manage_networks | boolean | configure networks |
permissions:node:rights:provision_vss | boolean | manually provision virtual storage services |
permissions:node:rights:remove_vss | boolean | remove virtual storage services |
permissions:vss:all_account_scope | boolean | apply to all virtual storage services in the account default: true |
permissions:vss:vsses | array | limit scope to specified vsses |
permissions:vss:rights:dismiss_tasks | boolean | dismiss tasks |
permissions:vss:rights:update_vss | boolean | update vss configuration |
permissions:vss:rights:remove_vss | boolean | remove vss |
permissions:vss:rights:set_vss_quota | boolean | set vss quota |
permissions:vss:rights:manage_internal_disks | boolean | manage internal disks |
permissions:vss:rights:manage_external_disks | boolean | manage external disks |
permissions:vss:rights:manage_removable_disks | boolean | manage removable disks |
permissions:vss:rights:manage_disk_cryptography | boolean | manage disk cryptography |
permissions:vss:rights:remove_locked_disks | boolean | remove locked disks |
permissions:vss:rights:validate_data_integrity | boolean | validate data integrity |
permissions:vss:rights:manage_targets | boolean | manage targets |
permissions:vss:rights:manage_profiles | boolean | manage profiles |
permissions:vss:rights:manage_secure_access_tokens | boolean | manage secure access tokens |
permissions:vss:rights:manage_rules | boolean | manage rules |
permissions:vss:rights:replicate_disks | boolean | replicate disks |
permissions:vss:rights:synchronize_disks | boolean | synchronize disks |
permissions:vss:rights:format_disks | boolean | format disks |
permissions:vss:rights:resize_disks | boolean | resize disks |
permissions:vss:rights:manage_snapshots | boolean | manage snapshots |
permissions:vss:rights:backup_disks | boolean | backup disks |
permissions:vss:rights:replicate_and_synchronize_disks | boolean | replicate and synchronize disks (DEPRECATED) |
permissions:vss:rights:compress_disks | boolean | compress disks |
permissions:vss:rights:manage_disk_compression | boolean | manage disk |
permissions:user:rights:manage_users | boolean | create or delete users in an account |
permissions:user:rights:modify_user_contact_settings | boolean | modify user contact info |
permissions:user:rights:reset_user_password | boolean | reset user password |
permissions:user:rights:reset_user_two_factor | boolean | reset two factor authentication |
permissions:user:rights:manage_authorizations | boolean | create or delete persistent authorizations |
permissions:account:rights:modify_contact_settings | boolean | modify account contact settings |
permissions:account:rights:view_events | boolean | view events |
permissions:account:rights:view_statistics | boolean | view statistics |
permissions:account:rights:manage_global_profiles | boolean | manage global profiles |
permissions:account:rights:manage_global_secure_access_tokens | boolean | manage global secure access tokens |
permissions:account:rights:query_catalog | boolean | query product catalog |
permissions:account:rights:provision_vss | boolean | provision vss from catalog |
permissions:account:rights:manage_obj_stores | boolean | manage obj stores |
permissions:account:rights:read_object_storage | boolean | read from object storage |
permissions:account:rights:write_object_storage | boolean | write to object storage |
permissions:account:rights:delete_object_storage | boolean | delete from object storage |
enforce_two_factor | boolean | enforce user two-factor auth (if configured) |
Curl Example
$ curl -X PATCH https://mgmt-node/api/authorization/authz:8:10 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"enabled": false,
"notes": "authz updated to be disabled"
}'
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:55 GMT
Server: Goliath
ETag: "919bea09732c41cb208b03cd10885a81"
Content-Type: application/json
Content-Length: 2604
{
"id": "authz:8:10",
"serial": "ATH4762194C406264DA",
"account_id": "account:1:10",
"user_id": "user_profile:1:10",
"xref": null,
"notes": "authz updated to be disabled",
"fingerprint": null,
"enabled": false,
"app_id": null,
"scope": null,
"access_type": "online",
"lifetime": null,
"restrict": "auth",
"enforce_two_factor": false,
"created_at": "2017-10-09T17:26:55.195+00:00",
"updated_at": "2017-10-09T17:26:55.603+00:00",
"expires_in": null,
"access_token_digest": "+rQjeekqAsn2Dpc+SswdGSG8Dj1MpKPzbsGoYP00onc",
"access_token_suffix": "ZM3mJpCA",
"refresh_token_digest": null,
"effective_scope": "r:r=can_switch_user r:r=manage_node_membership r:r=manage_accounts r:r=view_logs r:r=run_admin_tasks r:r=run_tests a:r=modify_contact_settings a:r=view_events a:r=view_statistics a:r=manage_global_profiles a:r=manage_global_secure_access_tokens a:r=query_catalog a:r=provision_vss a:r=manage_obj_stores a:r=read_object_storage a:r=write_object_storage a:r=delete_object_storage n:r=manage_storage n:r=manage_networks n:r=provision_vss n:r=remove_vss v:r=dismiss_tasks v:r=update_vss v:r=remove_vss v:r=set_vss_quota v:r=manage_internal_disks v:r=manage_external_disks v:r=manage_removable_disks v:r=manage_disk_cryptography v:r=remove_locked_disks v:r=replicate_disks v:r=synchronize_disks v:r=format_disks v:r=resize_disks v:r=backup_disks v:r=validate_data_integrity v:r=manage_snapshots v:r=manage_targets v:r=manage_profiles v:r=manage_secure_access_tokens v:r=manage_rules n:o=all v:o=all",
"permissions": {
"realm": {
"rights": {
"can_switch_user": true,
"manage_node_membership": true,
"manage_accounts": true,
"view_logs": true,
"run_admin_tasks": true,
"run_tests": true
}
},
"node": {
"all_realm_scope": true,
"rights": {
"manage_storage": true,
"manage_networks": true,
"provision_vss": true,
"remove_vss": true
}
},
"vss": {
"all_account_scope": true,
"rights": {
"dismiss_tasks": true,
"update_vss": true,
"remove_vss": true,
"set_vss_quota": true,
"manage_internal_disks": true,
"manage_external_disks": true,
"manage_removable_disks": true,
"manage_disk_cryptography": true,
"remove_locked_disks": true,
"replicate_disks": true,
"synchronize_disks": true,
"format_disks": true,
"resize_disks": true,
"backup_disks": true,
"validate_data_integrity": true,
"manage_snapshots": true,
"manage_targets": true,
"manage_profiles": true,
"manage_secure_access_tokens": true,
"manage_rules": true
}
},
"account": {
"rights": {
"modify_contact_settings": true,
"view_events": true,
"view_statistics": true,
"manage_global_profiles": true,
"manage_global_secure_access_tokens": true,
"query_catalog": true,
"provision_vss": true,
"manage_obj_stores": true,
"read_object_storage": true,
"write_object_storage": true,
"delete_object_storage": true
}
}
}
}
Node
A Blockbridge Node is an instance of Blockbridge node software running on physical or virtual hardware. It can be a management node, a storage node, or a converged node.
- A management node provides configuration, monitoring, and other administrative capabilities. The management web application and API clients are terminated at the management node.
- A storage node delivers secure storage services using direct-attached and iSCSI storage. Client iSCSI connections are terminated at a storage node.
- A converged node contains both a management node and a storage node in one system. For most management purposes (including in the management web application) converged nodes are treated as a distinct management node and storage node.
Attributes
Name | Type | Description |
---|---|---|
id | string | object id |
uuid | uuid | object uuid |
label | string | user assigned label Length: 1..64 |
serial | string | node serial number |
install_token | string | generated installation token |
install_mode | string | installation mode |
activation_code | string | generated activation code |
activation_state | string | activation state |
license:type | string | license type one of: "none" or "development" or "evaluation" or "production" or "subscription" |
license:minutes_remaining | integer | license minutes remaining |
license:token | string | license token |
eula:accepted | boolean | end user license accepted |
eula:accepted_at | nullable integer | end user license accepted at (time) Range: 0 <= value |
registration:allow | boolean | allow registrations for this node |
notes | nullable string | user assigned notes Length: 0..256 |
ctime | integer | node create time Range: 0 <= value |
mtime | integer | node last modified time Range: 0 <= value |
site_id | string | site node is located in |
type | string | node type one of: "management" or "storage" or "disk" |
ip | nullable object | node ip address for management |
ip:pub_addr | ipv4 | public address of service target interface |
ip:pub_desc | string | public address description |
ip:prv_addr | ipv4 | private address of system interface |
ip:prv_desc | string | private address description |
ip:pub_addr_user_set | boolean | public address set by user |
ip:prv_addr_user_set | boolean | private address set by user |
management:ca | string | no documentation one of: "none" or "embedded" |
management:hostname | string | no documentation Length: 1..∞ |
enabled | boolean | node enabled for use |
openstack_idp:id | nullable string | no documentation |
openstack_idp:uuid | nullable uuid | no documentation |
openstack_idp:label | string | no documentation Length: 1..∞ |
openstack_idp:type | string | identity provider type one of: "internal" or "openstack" |
openstack_idp:enabled | boolean | identity provider enabled |
openstack_idp:url | nullable string | idP API endpoint |
openstack_idp:auth:user:id | nullable string | look up user by idp-specific index |
openstack_idp:auth:user:name | nullable string | look up user by name/login |
openstack_idp:auth:user:password | nullable string | authenticate using supplied password |
openstack_idp:auth:project:id | nullable string | look up project by idp-specific index |
openstack_idp:auth:project:name | nullable string | look up project by name |
openstack_idp:auth:domain:id | nullable string | look up domain by idp-specific index |
openstack_idp:auth:domain:name | nullable string | look up domain by name |
openstack_idp:auto_create_account | boolean | automatically create mapped accounts |
openstack_idp:auto_create_user | boolean | automatically create mapped users |
openstack_idp:accepted_roles | array | accepted roles |
openstack_idp:recheck_interval | nullable integer | time after which a token must be re-validated (in seconds) |
openstack_portal_filter | nullable object | IP filter rule |
openstack_portal_filter:ip | ipv4 | IP address |
openstack_portal_filter:mask | ipv4 | netmask |
tags | array | object tags |
visibility_ctl | string | object visibility control one of: "default" or "show" or "hide" |
restricted | boolean | node present but restricted from use |
converged_sn_id | string | id of converged storage node |
converged_mn_id | string | id of converged management node |
disk_nodes | array | object tags |
params:scheduling_algorithms/type | string | scheduling algorithm type one of: "ideal_usage" |
params:scheduling_algorithms/label | nullable string | no documentation |
params:scheduling_algorithms/ideal_usage_pct | nullable string | no documentation |
params:scheduling_algorithms/min_usage_pct | nullable string | no documentation |
params:scheduling_algorithms/capacity_weight_pct | nullable string | no documentation |
params:scheduling_algorithms/iops_weight_pct | nullable string | no documentation |
params:scheduling_algorithms/default | nullable string | no documentation |
params:service_templates/type | string | service type name Length: 1..32 |
params:service_templates/description | string | service type description Length: 1..256 |
params:service_templates/default | boolean | default template |
params:service_templates/tags:include | array | include array |
params:service_templates/tags:exclude | array | exclude array |
params:service_templates/size:reserve_min | nullable integer | minimum size reserve |
params:service_templates/size:reserve_max | nullable integer | maximum size reserve |
params:service_templates/size:limit_percent | nullable integer | Set the hard limit on storage consumption to a percentage of the size reserved. Must be at least 100% of the reserved size. If null, it's unlimited. Range: 100 <= value |
params:service_templates/iops:ratio | nullable integer | baseline IOPS ratio, specified as a ratio of IOPS to reserved size (in IOPS/GiB) |
params:service_templates/iops:burst | nullable integer | IOPS burst limit (in IOPS) |
params:service_templates/iops:burst_credit | nullable integer | maximum burst credits (in IOPS credits); not supported with provisioned IOPS |
params:service_templates/iops:min | nullable integer | minimum IOPS |
params:service_templates/iops:max | nullable integer | maximum IOPS |
params:service_templates/iops:type | string | how limited IOPS are specified one of: "disabled" or "capacity-scaled" |
params:service_templates/iops:burst_type | string | how burst IOPS are specified one of: "disabled" or "admin-fixed" or "capacity-scaled" |
params:service_templates/iops:burst_ratio | nullable integer | baseline burst IOPS ratio, specified as a ratio of burst IOPS to reserved size (in IOPS/GiB) |
params:service_templates/piops:type | string | how provisioned IOPS are specified one of: "disabled" or "admin-fixed" or "capacity-scaled" or "user-specified" |
params:service_templates/piops:value | nullable integer | fixed IOPS value Range: 1 <= value |
params:service_templates/piops:ratio | nullable integer | baseline provisioned IOPS ratio, specified as a ratio of IOPS to reserved size (in IOPS/GiB) |
params:service_templates/piops:min | nullable integer | minimum provisioned IOPS |
params:service_templates/piops:max | nullable integer | maximum provisioned IOPS |
params:account_templates/provisioning:size_reserve_max | nullable integer | maximum size reserve of a single virtual storage service |
params:account_templates/provisioning:iops_reserve_max | nullable integer | maximum iops reserve of a single virtual storage service |
params:account_templates/provisioning:tags_include | array | tags included |
params:account_templates/provisioning:tags_exclude | array | tags excluded |
params:account_templates/provisioning:tags_permit | nullable array | tags permitted |
params:account_templates/provisioning:tags_permit | nullable array | tags permitted |
params:account_templates/limits:vss_num | nullable integer | number of virtual storage services |
params:account_templates/limits:size_reserve_total | nullable integer | maximum size of storage |
params:account_templates/permissions:realm:rights:can_switch_user | boolean | can SU to lower level user |
params:account_templates/permissions:realm:rights:manage_node_membership | boolean | accept or delete nodes from the management network |
params:account_templates/permissions:realm:rights:manage_accounts | boolean | can create or delete other accounts, users and their settings |
params:account_templates/permissions:realm:rights:view_logs | boolean | view administrative logs |
params:account_templates/permissions:realm:rights:run_admin_tasks | boolean | run realm administrative tasks |
params:account_templates/permissions:realm:rights:run_tests | boolean | run realm administrative tests |
params:account_templates/permissions:node:all_realm_scope | boolean | apply to all nodes in the realm |
params:account_templates/permissions:node:nodes | array | scope permissions to specific nodes |
params:account_templates/permissions:node:rights:manage_storage | boolean | configure OS devices, iSCSI devices, and system datastores |
params:account_templates/permissions:node:rights:manage_networks | boolean | configure networks |
params:account_templates/permissions:node:rights:provision_vss | boolean | manually provision virtual storage services |
params:account_templates/permissions:node:rights:remove_vss | boolean | remove virtual storage services |
params:account_templates/permissions:vss:all_account_scope | boolean | apply to all virtual storage services in the account |
params:account_templates/permissions:vss:vsses | array | limit scope to specified vsses |
params:account_templates/permissions:vss:rights:dismiss_tasks | boolean | dismiss tasks |
params:account_templates/permissions:vss:rights:update_vss | boolean | update vss configuration |
params:account_templates/permissions:vss:rights:remove_vss | boolean | remove vss |
params:account_templates/permissions:vss:rights:set_vss_quota | boolean | set vss quota |
params:account_templates/permissions:vss:rights:manage_internal_disks | boolean | manage internal disks |
params:account_templates/permissions:vss:rights:manage_external_disks | boolean | manage external disks |
params:account_templates/permissions:vss:rights:manage_removable_disks | boolean | manage removable disks |
params:account_templates/permissions:vss:rights:manage_disk_cryptography | boolean | manage disk cryptography |
params:account_templates/permissions:vss:rights:remove_locked_disks | boolean | remove locked disks |
params:account_templates/permissions:vss:rights:replicate_and_synchronize_disks | boolean | replicate and synchronize disks |
params:account_templates/permissions:vss:rights:validate_data_integrity | boolean | validate data integrity |
params:account_templates/permissions:vss:rights:manage_targets | boolean | manage targets |
params:account_templates/permissions:vss:rights:manage_profiles | boolean | manage profiles |
params:account_templates/permissions:vss:rights:manage_secure_access_tokens | boolean | manage secure access tokens |
params:account_templates/permissions:vss:rights:manage_rules | boolean | manage rules |
params:account_templates/permissions:vss:rights:replicate_disks | boolean | replicate disks |
params:account_templates/permissions:vss:rights:synchronize_disks | boolean | synchronize disks |
params:account_templates/permissions:vss:rights:format_disks | boolean | format disks |
params:account_templates/permissions:vss:rights:resize_disks | boolean | resize disks |
params:account_templates/permissions:vss:rights:backup_disks | boolean | backup disks |
params:account_templates/permissions:vss:rights:manage_snapshots | boolean | manage snapshots |
params:account_templates/permissions:vss:rights:compress_disks | boolean | compress disks |
params:account_templates/permissions:vss:rights:manage_disk_compression | boolean | manage disk |
params:account_templates/permissions:user:rights:manage_users | boolean | create or delete users in an account |
params:account_templates/permissions:user:rights:modify_user_contact_settings | boolean | modify user contact info |
params:account_templates/permissions:user:rights:reset_user_password | boolean | reset user password |
params:account_templates/permissions:user:rights:reset_user_two_factor | boolean | reset two factor authentication |
params:account_templates/permissions:user:rights:manage_authorizations | boolean | create or delete persistent authorizations |
params:account_templates/permissions:account:rights:modify_contact_settings | boolean | modify account contact settings |
params:account_templates/permissions:account:rights:view_events | boolean | view events |
params:account_templates/permissions:account:rights:view_statistics | boolean | view statistics |
params:account_templates/permissions:account:rights:manage_global_profiles | boolean | manage global profiles |
params:account_templates/permissions:account:rights:manage_global_secure_access_tokens | boolean | manage global secure access tokens |
params:account_templates/permissions:account:rights:query_catalog | boolean | query product catalog |
params:account_templates/permissions:account:rights:provision_vss | boolean | provision vss from catalog |
params:account_templates/permissions:account:rights:manage_obj_stores | boolean | manage object stores |
params:account_templates/permissions:account:rights:read_object_storage | boolean | read from object storage |
params:account_templates/permissions:account:rights:write_object_storage | boolean | write to object storage |
params:account_templates/permissions:account:rights:delete_object_storage | boolean | delete from object storage |
params:account_templates/type | string | account template name Length: 1..32 |
params:account_templates/description | string | account template description Length: 1..256 |
params:account_templates/default | boolean | default template |
params:scheduling_workloads/workload | string | workload one of: "lower_iops" or "normal_iops" or "higher_iops" |
params:scheduling_workloads/iops | integer | workload IOPS |
status:indicator | string | status indicator one of: "online" or "degraded" or "offline" or "na" |
status:value | string | status value one of: "online" or "degraded" or "offline" or "pending" or "payment" |
status:detail | nullable string | status detail |
default_visibility | string | object visibility default one of: "show" or "hide" |
visibility | string | object visibility status one of: "show" or "hide" |
isotime | nullable date-time | local time on node |
humantime | nullable string | human-readable time on node |
build_version | nullable string | version of software running on node |
build_time | nullable string | time and date that node software was built |
version | nullable object | build version |
version:hash | string | build hash |
version:minor | integer | build minor version |
version:major | integer | build major version |
version:timestamp | integer | build timestamp |
version:patch | integer | build patch version |
version:tag | string | build tag |
version:release | string | build release |
cpu_processors | nullable integer | number of processors on node |
cpu_model | nullable string | vendor and model of first CPU on node |
mem_total | nullable integer | system memory on node |
kernel_version | nullable string | kernel version on node |
enclosures | nullable string | enclosure data |
sn:usage:vdisk_int | nullable integer | internal virtual disks on node |
sn:usage:rules | nullable integer | rules on node |
sn:usage:vss | nullable integer | virtual storage services on node |
sn:usage:targets | nullable integer | targets on node |
sn:usage:removable | nullable integer | removable virtual disks on node |
sn:usage:sds | nullable integer | datastores on node |
sn:usage:clones | nullable integer | cloned disks on node |
sn:usage:iscsi_dev | nullable integer | iSCSI devices on node |
sn:usage:snapshots | nullable integer | snapshots on node |
sn:usage:repl_slaves | nullable integer | replication slave virtual disks on node |
sn:usage:vdisk_int_cap_mb | nullable integer | sum of internal virtual disk capacities in megabytes |
sn:usage:conn_secure | nullable integer | secure iSCSI session connections to node targets |
sn:usage:conn_insecure | nullable integer | insecure iSCSI session connections to node targets |
sn:usage:vdisk_ext | nullable integer | external virtual disks on node |
sn:usage:os_dev | nullable integer | OS devices on node |
sn:usage:sessions | nullable integer | iSCSI sessions connected to node targets |
sn:usage:accounts | nullable integer | accounts on node |
sn:usage:profiles | nullable integer | initiator profiles on node |
sn:usage:repl_masters | nullable integer | replication master virtual disks on node |
sn:usage:vss_max | nullable integer | maximum number of virtual storage services on the node |
sn:usage:session_max | nullable integer | maximum number of iSCSI sessions on the node |
sn:usage:target_max | nullable integer | maximum number of iSCSI targets on the node |
sn:usage:vdisk_max | nullable integer | maximum number of virtual disks on the node |
sn:usage:os_dev_max | nullable integer | maximum number of configurable os devices on the node |
sn:usage:profile_max | nullable integer | maximum number of initiator profiles on the node |
sn:usage:rule_max | nullable integer | maximum number of rules on the node |
sn:usage:dev | nullable integer | iSCSI and OS devices on node |
sn:usage:vdisk | nullable integer | virtual disks on node |
sn:usage:conn | nullable integer | iSCSI session connections to node targets |
sn:usage:nvme_qps | nullable integer | NVMe queue pairs, including admin queues |
sn:usage:sessions_nvme | nullable integer | NVMe sessions (associations) connected to node targets |
sn:usage:sessions_iscsi | nullable integer | iSCSI sessions connected to node targets |
sn:cplx_num | nullable integer | number of processor complexes |
sn:cplx/id | string | processor complex id |
sn:cplx/status:indicator | string | status indicator one of: "online" or "degraded" or "offline" or "na" |
sn:cplx/status:value | string | status value one of: "online" or "degraded" or "offline" or "pending" or "payment" |
sn:cplx/status:detail | nullable string | status detail |
sn:cplx/data_cache_size | nullable integer | size of processor complex data cache |
sn:cplx/meta_cache_size_limit | nullable integer | limit on total memory that may be reserved for metadata caching |
sn:cplx/max_data_log_size | nullable integer | maximum data log size that may be created |
sn:cplx/max_meta_cache_size | nullable integer | maximum metadata cache size that may be specified |
sn:cplx/available | boolean | available for datastore placement |
sn:cplx/label | string | customer-friendly textual label |
restore:start_time | nullable integer | node restore start time Range: 0 <= value |
restore:end_time | nullable integer | node restore end time (success or failure) Range: 0 <= value |
restore:state | nullable string | node restore job state one of: "starting" or "running" or "success" or "failed" |
restore:errors | nullable integer | count of errors during node restore, see event log for details |
restore:phase | nullable string | description of current node restore phase Length: 0..80 |
restore:failure | nullable string | on node restore failure, description of reason Length: 0..80 |
cluster:reports/id | string | name of cluster member that generated this report |
cluster:reports/members/active | nullable boolean | cluster member is actively hosting services |
cluster:reports/members/cluster_ip | nullable ipv4 | cluster network address of member |
cluster:reports/members/role | nullable string | cluster member role one of: "active" or "passive" or "vote" |
cluster:reports/members/failover | nullable boolean | this cluster member is passive and ready for accept failover |
cluster:reports/members/status:indicator | string | status indicator one of: "online" or "degraded" or "offline" or "na" |
cluster:reports/members/status:value | string | status value one of: "online" or "degraded" or "offline" or "pending" or "payment" |
cluster:reports/members/status:detail | nullable string | status detail |
cluster:reports/members/status_ip | nullable ipv4 | address of cluster member from which it reports status |
cluster:reports/members/id | string | cluster member name |
cluster:reports/members/state | nullable string | cluster member state one of: "dirty" or "standby" or "maintenance" or "clean" or "offline" |
cluster:reports/members/online | nullable boolean | cluster member is online |
cluster:reports/failover | nullable string | cluster member failover capability one of: "available" or "unavailable" |
cluster:reports/status:indicator | string | status indicator one of: "online" or "degraded" or "offline" or "na" |
cluster:reports/status:value | string | status value one of: "online" or "degraded" or "offline" or "pending" or "payment" |
cluster:reports/status:detail | nullable string | status detail |
cluster:members/active | nullable boolean | cluster member is actively hosting services |
cluster:members/cluster_ip | nullable ipv4 | cluster network address of member |
cluster:members/role | nullable string | cluster member role one of: "active" or "passive" or "vote" |
cluster:members/failover | nullable boolean | this cluster member is passive and ready for accept failover |
cluster:members/status:indicator | string | status indicator one of: "online" or "degraded" or "offline" or "na" |
cluster:members/status:value | string | status value one of: "online" or "degraded" or "offline" or "pending" or "payment" |
cluster:members/status:detail | nullable string | status detail |
cluster:members/status_ip | nullable ipv4 | address of cluster member from which it reports status |
cluster:members/id | string | cluster member name |
cluster:members/state | nullable string | cluster member state one of: "dirty" or "standby" or "maintenance" or "clean" or "offline" |
cluster:members/online | nullable boolean | cluster member is online |
cluster:failover | nullable string | cluster failover capability one of: "available" or "unavailable" |
cluster:status:indicator | string | status indicator one of: "online" or "degraded" or "offline" or "na" |
cluster:status:value | string | status value one of: "online" or "degraded" or "offline" or "pending" or "payment" |
cluster:status:detail | nullable string | status detail |
cluster:is_cluster | nullable boolean | node is running in cluster mode |
Node Info
Retrieve an existing node.
GET /node/{node_id_or_serial}
Curl Example
$ curl https://mgmt-node/api/node/node:10000 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:50 GMT
Server: Goliath
ETag: "6b394f6213c622e08f82de002403957d"
Content-Type: application/json
Content-Length: 2163
{
"id": "node:10000",
"uuid": "4347e01f-f106-4735-bfbf-68addda9982f",
"serial": "NOD0F68194C40601558",
"evt_qry": "serial=NOD0F68194C40601558",
"ctime": 1507562835087,
"mtime": 1507569964547,
"seq": 1507569993701,
"label": "node101",
"notes": "node updated to 101",
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507569969000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
94,
160,
160,
160
],
"v": "dbg"
},
{
"d": [
45,
85,
85,
85
],
"v": "info"
},
{
"d": [
1,
2,
2,
2
],
"v": "warn"
},
{
"d": [
2,
2,
2,
2
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507569969666
},
"rec_status": null,
"site_id": "site:10",
"type": [
"storage"
],
"tags": [
],
"disk_nodes": [
],
"license": {
"type": [
"evaluation"
],
"minutes_remaining": 43100,
"token": "8cf63f34593571104393cb8306b6cb13"
},
"activation_code": null,
"activation_state": "activated",
"install_mode": "solo",
"install_token": "WyJpMSIsIm1hc3Rlci1ob28yd29vMWFlcGhlaTZjIiwic3MiLDMxNzg5MjYwODJd",
"ip": {
"pub_addr": "172.16.100.61",
"pub_addr_user_set": true,
"prv_addr": "10.10.200.23",
"prv_addr_user_set": true
},
"build_time": "Thu Oct 05 10:32 UTC 2017",
"build_version": "4.0.0-4252.1",
"cpu_model": "Intel Xeon E312xx (Sandy Bridge)",
"cpu_processors": 1,
"mem_total": 1929072640,
"humantime": "Mon Oct 09 17:26 UTC 2017",
"isotime": "2017-10-09T17:26+00:00",
"version": {
"major": 4,
"minor": 0,
"patch": 0,
"release": "4252.1",
"tag": "",
"hash": "f41b54b0c02b9ecbee50ffca17fc1d74a6e20672",
"timestamp": 1507199541000
},
"restore": {
"start_time": null,
"end_time": null,
"state": null,
"errors": null,
"phase": null,
"failure": null
},
"sn": {
"data_cache_size": 536870912,
"meta_cache_size_limit": 134217728,
"max_data_log_size": 142078242,
"max_meta_cache_size": 134217728,
"usage": {
"accounts": 0,
"sds": 0,
"os_dev": 8,
"iscsi_dev": 0,
"vss": 0,
"vdisk_int": 0,
"vdisk_ext": 0,
"clones": 0,
"snapshots": 0,
"removable": 0,
"repl_masters": 0,
"repl_slaves": 0,
"profiles": 0,
"targets": 0,
"rules": 0,
"sessions": 0,
"conn_insecure": 0,
"conn_secure": 0,
"vdisk_int_cap_mb": 0,
"os_dev_max": 64,
"profile_max": 8192,
"rule_max": 16384,
"session_max": 8192,
"target_max": 8192,
"vdisk_max": 4096,
"vss_max": 4096
}
},
"cluster": {
"is_cluster": false,
"failover": null,
"members": [
],
"status": {
"value": "pending",
"indicator": "degraded",
"detail": "unable to connect to cluster"
}
}
}
Node List
Enumerate nodes.
GET /node
Curl Example
$ curl https://mgmt-node/api/node \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:50 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 6744
[
{
"id": "node:10000",
"uuid": "4347e01f-f106-4735-bfbf-68addda9982f",
"serial": "NOD0F68194C40601558",
"evt_qry": "serial=NOD0F68194C40601558",
"ctime": 1507562835087,
"mtime": 1507569964547,
"seq": 1507569993701,
"label": "node101",
"notes": "node updated to 101",
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507569969000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
94,
160,
160,
160
],
"v": "dbg"
},
{
"d": [
45,
85,
85,
85
],
"v": "info"
},
{
"d": [
1,
2,
2,
2
],
"v": "warn"
},
{
"d": [
2,
2,
2,
2
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507569969666
},
"rec_status": null,
"site_id": "site:10",
"type": [
"storage"
],
"tags": [
],
"disk_nodes": [
],
"license": {
"type": [
"evaluation"
],
"minutes_remaining": 43100,
"token": "8cf63f34593571104393cb8306b6cb13"
},
"activation_code": null,
"activation_state": "activated",
"install_mode": "solo",
"install_token": "WyJpMSIsIm1hc3Rlci1ob28yd29vMWFlcGhlaTZjIiwic3MiLDMxNzg5MjYwODJd",
"ip": {
"pub_addr": "172.16.100.61",
"pub_addr_user_set": true,
"prv_addr": "10.10.200.23",
"prv_addr_user_set": true
},
"build_time": "Thu Oct 05 10:32 UTC 2017",
"build_version": "4.0.0-4252.1",
"cpu_model": "Intel Xeon E312xx (Sandy Bridge)",
"cpu_processors": 1,
"mem_total": 1929072640,
"humantime": "Mon Oct 09 17:26 UTC 2017",
"isotime": "2017-10-09T17:26+00:00",
"version": {
"major": 4,
"minor": 0,
"patch": 0,
"release": "4252.1",
"tag": "",
"hash": "f41b54b0c02b9ecbee50ffca17fc1d74a6e20672",
"timestamp": 1507199541000
},
"restore": {
"start_time": null,
"end_time": null,
"state": null,
"errors": null,
"phase": null,
"failure": null
},
"sn": {
"data_cache_size": 536870912,
"meta_cache_size_limit": 134217728,
"max_data_log_size": 142078242,
"max_meta_cache_size": 134217728,
"usage": {
"accounts": 0,
"sds": 0,
"os_dev": 8,
"iscsi_dev": 0,
"vss": 0,
"vdisk_int": 0,
"vdisk_ext": 0,
"clones": 0,
"snapshots": 0,
"removable": 0,
"repl_masters": 0,
"repl_slaves": 0,
"profiles": 0,
"targets": 0,
"rules": 0,
"sessions": 0,
"conn_insecure": 0,
"conn_secure": 0,
"vdisk_int_cap_mb": 0,
"os_dev_max": 64,
"profile_max": 8192,
"rule_max": 16384,
"session_max": 8192,
"target_max": 8192,
"vdisk_max": 4096,
"vss_max": 4096
}
},
"cluster": {
"is_cluster": false,
"failover": null,
"members": [
],
"status": {
"value": "pending",
"indicator": "degraded",
"detail": "unable to connect to cluster"
}
}
},
{
"id": "node:10",
"uuid": "c323c428-2336-4bc4-9412-839e2d325261",
"serial": "NOD0F68194C406264FD",
"evt_qry": "serial=NOD0F68194C406264FD",
"ctime": 1507562833437,
"mtime": 1507569970863,
"seq": 1507569970885,
"label": "management node",
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": null,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"v": "dbg",
"d": [
0,
0,
0,
0
]
},
{
"v": "info",
"d": [
0,
0,
0,
0
]
},
{
"v": "warn",
"d": [
0,
0,
0,
0
]
},
{
"v": "err",
"d": [
0,
0,
0,
0
]
}
]
},
"status": "current",
"seq": 1507562839605
},
"rec_status": null,
"site_id": "site:10",
"type": [
"management"
],
"tags": [
],
"disk_nodes": null,
"license": {
"type": [
"evaluation"
],
"minutes_remaining": 43100,
"token": "8cf63f34593571104393cb8306b6cb13"
},
"eula": {
"accepted": true,
"accepted_at": 1507563022812
},
"activation_code": null,
"activation_state": null,
"params": {
"scheduling_algorithms": [
{
"type": [
"ideal_usage"
],
"label": "ideal-usage",
"ideal_usage_pct": 50,
"min_usage_pct": 10,
"capacity_weight_pct": 50,
"iops_weight_pct": 50,
"default": true
}
],
"service_templates": [
{
"type": [
"gp"
],
"description": "General Purpose",
"default": true,
"tags": {
"include": [
],
"exclude": [
]
},
"size": {
"reserve_min": 1073741824,
"reserve_max": 17592186044416,
"limit_percent": 200
},
"iops": {
"ratio": 3,
"burst": 3000,
"burst_credit": 5400000,
"min": 100,
"max": 3000
},
"piops": {
"type": [
"disabled"
],
"value": null,
"ratio": null,
"min": null,
"max": null
}
},
{
"type": [
"piops"
],
"description": "Provisioned IOPS",
"default": false,
"tags": {
"include": [
],
"exclude": [
]
},
"size": {
"reserve_min": 4294967296,
"reserve_max": 17592186044416,
"limit_percent": 200
},
"iops": {
"ratio": 50,
"burst": null,
"burst_credit": null,
"min": 100,
"max": 20000
},
"piops": {
"type": [
"user-specified"
],
"value": null,
"ratio": 50,
"min": 100,
"max": 20000
}
},
{
"type": [
"unlimited"
],
"description": "Unlimited Provisioning",
"default": false,
"tags": {
"include": [
],
"exclude": [
]
},
"size": {
"reserve_min": 1048576,
"reserve_max": null,
"limit_percent": null
},
"iops": {
"ratio": null,
"burst": null,
"burst_credit": null,
"min": null,
"max": null
},
"piops": {
"type": [
"disabled"
],
"value": null,
"ratio": null,
"min": null,
"max": null
}
}
],
"scheduling_workloads": [
{
"workload": "lower_iops",
"iops": 100
},
{
"workload": "normal_iops",
"iops": 500
},
{
"workload": "higher_iops",
"iops": 2000
}
],
"account_templates": [
{
"type": [
"standard"
],
"description": "Standard Account",
"default": true,
"provisioning": {
"size_reserve_max": null,
"iops_reserve_max": null,
"tags_include": [
],
"tags_exclude": [
],
"tags_permit": null
},
"limits": {
"vss_num": null,
"size_reserve_total": null
},
"permissions": {
"vss": {
"all_account_scope": true,
"rights": {
"dismiss_tasks": true,
"update_vss": true,
"remove_vss": true,
"set_vss_quota": true,
"manage_internal_disks": true,
"manage_external_disks": true,
"manage_removable_disks": true,
"manage_disk_cryptography": true,
"remove_locked_disks": true,
"replicate_disks": true,
"synchronize_disks": true,
"format_disks": true,
"resize_disks": true,
"backup_disks": true,
"validate_data_integrity": true,
"manage_snapshots": true,
"manage_targets": true,
"manage_profiles": true,
"manage_secure_access_tokens": true,
"manage_rules": true
}
},
"user": {
"rights": {
"manage_users": true,
"modify_user_contact_settings": true,
"reset_user_password": true,
"reset_user_two_factor": true,
"manage_authorizations": true
}
},
"account": {
"rights": {
"modify_contact_settings": true,
"view_events": true,
"view_statistics": true,
"manage_global_profiles": true,
"manage_global_secure_access_tokens": true,
"query_catalog": true,
"provision_vss": true,
"manage_obj_stores": true,
"read_object_storage": true,
"write_object_storage": true,
"delete_object_storage": true
}
}
}
}
]
},
"openstack_idp": {
"id": "idp:1:10",
"uuid": "e1f2692a-4543-443c-9c08-c7afc4349b2f",
"label": "openstack",
"type": [
"openstack"
],
"enabled": false,
"url": null,
"auth": {
"user": {
"id": null,
"name": "admin",
"password": null
},
"project": {
"id": null,
"name": "admin"
},
"domain": {
"id": "default",
"name": null
}
},
"auto_create_account": true,
"auto_create_user": true,
"accepted_roles": [
],
"recheck_interval": 60
},
"install_mode": null,
"install_token": null,
"ip": {
"pub_addr": "172.16.100.61",
"pub_addr_user_set": true,
"prv_addr": "10.10.200.23",
"prv_addr_user_set": true
},
"build_time": "Thu Oct 05 10:32 UTC 2017",
"build_version": "4.0.0-4252.1",
"cpu_model": null,
"cpu_processors": null,
"mem_total": null,
"humantime": "Mon Oct 09 17:26 UTC 2017",
"isotime": "2017-10-09T17:26+00:00",
"version": {
"major": 4,
"minor": 0,
"patch": 0,
"release": "4252.1",
"tag": "",
"hash": "f41b54b0c02b9ecbee50ffca17fc1d74a6e20672",
"timestamp": 1507199541000
},
"restore": {
"start_time": null,
"end_time": null,
"state": null,
"errors": null,
"phase": null,
"failure": null
},
"cluster": {
"is_cluster": false,
"failover": null,
"members": [
],
"status": {
"value": "pending",
"indicator": "degraded",
"detail": "unable to connect to cluster"
}
}
}
]
Node Create
Create a new storage node.
POST /node
Required Parameters
Name | Type | Description |
---|---|---|
site_id | string | site id |
type | string | type of processing node one of: "management" or "storage" or "disk" |
Optional Parameters
Name | Type | Description |
---|---|---|
uuid | uuid | UUID to use for created object |
label | string | user assigned label Length: 1..64 |
notes | string | user assigned notes Length: 0..256 |
license | string | software license bundle |
mode | string | node clustering mode default: "solo" one of: "solo" or "cluster" |
pub_ipaddr | ipv4 | node public IP address |
pub_ipaddr_desc | string | node public IP address description |
prv_ipaddr | ipv4 | node private IP address |
prv_ipaddr_desc | string | node private IP address description |
maintenance:mode | string | maintenance mode one of: "none" or "restrict" or "rendezvous" |
maintenance:restrict/type | string | restriction type one of: "svc_purchase" or "pt_queue_user" or "pt_queue_admin" or "pt_queue_remote" or "pt_rpc_send" or "pt_rpc_recv" or "pt_sched_user" or "pt_sched_admin" or "rpc_send" or "rpc_recv" or "rc_task_add" or "rc_task_sched" or "rc_msg_send" or "rc_msg_recv" or "cp_proxy" or "slp_send_boot" |
maintenance:restrict/set | boolean | restriction set |
maintenance:reason | string | reason for restriction |
params:scheduling_algorithms/type | string | scheduling algorithm type one of: "ideal_usage" |
params:scheduling_algorithms/label | nullable string | no documentation |
params:scheduling_algorithms/ideal_usage_pct | nullable string | no documentation |
params:scheduling_algorithms/min_usage_pct | nullable string | no documentation |
params:scheduling_algorithms/capacity_weight_pct | nullable string | no documentation |
params:scheduling_algorithms/iops_weight_pct | nullable string | no documentation |
params:scheduling_algorithms/default | nullable string | no documentation |
params:service_templates/type | string | service type name Length: 1..32 |
params:service_templates/description | string | service type description Length: 1..256 |
params:service_templates/default | boolean | default template |
params:service_templates/tags:include | array | include array |
params:service_templates/tags:exclude | array | exclude array |
params:service_templates/size:reserve_min | nullable integer | minimum size reserve |
params:service_templates/size:reserve_max | nullable integer | maximum size reserve |
params:service_templates/size:limit_percent | nullable integer | Set the hard limit on storage consumption to a percentage of the size reserved. Must be at least 100% of the reserved size. If null, it's unlimited. Range: 100 <= value |
params:service_templates/iops:ratio | nullable integer | baseline IOPS ratio, specified as a ratio of IOPS to reserved size (in IOPS/GiB) |
params:service_templates/iops:burst | nullable integer | IOPS burst limit (in IOPS) |
params:service_templates/iops:burst_credit | nullable integer | maximum burst credits (in IOPS credits); not supported with provisioned IOPS |
params:service_templates/iops:min | nullable integer | minimum IOPS |
params:service_templates/iops:max | nullable integer | maximum IOPS |
params:service_templates/iops:type | string | how limited IOPS are specified default: "disabled" one of: "disabled" or "capacity-scaled" |
params:service_templates/iops:burst_type | string | how burst IOPS are specified default: "disabled" one of: "disabled" or "admin-fixed" or "capacity-scaled" |
params:service_templates/iops:burst_ratio | nullable integer | baseline burst IOPS ratio, specified as a ratio of burst IOPS to reserved size (in IOPS/GiB) |
params:service_templates/piops:type | string | how provisioned IOPS are specified default: "disabled" one of: "disabled" or "admin-fixed" or "capacity-scaled" or "user-specified" |
params:service_templates/piops:value | nullable integer | fixed IOPS value Range: 1 <= value |
params:service_templates/piops:ratio | nullable integer | baseline provisioned IOPS ratio, specified as a ratio of IOPS to reserved size (in IOPS/GiB) |
params:service_templates/piops:min | nullable integer | minimum provisioned IOPS |
params:service_templates/piops:max | nullable integer | maximum provisioned IOPS |
cert_fingerprint | string | TLS certificate fingerprint |
openstack_idp:id | nullable string | no documentation |
openstack_idp:uuid | nullable uuid | no documentation |
openstack_idp:label | string | no documentation default: "openstack" Length: 1..∞ |
openstack_idp:type | string | identity provider type default: "openstack" one of: "internal" or "openstack" |
openstack_idp:enabled | boolean | identity provider enabled |
openstack_idp:url | nullable string | idP API endpoint |
openstack_idp:auth:user:id | nullable string | look up user by idp-specific index |
openstack_idp:auth:user:name | nullable string | look up user by name/login default: "admin" |
openstack_idp:auth:user:password | nullable string | authenticate using supplied password |
openstack_idp:auth:project:id | nullable string | look up project by idp-specific index |
openstack_idp:auth:project:name | nullable string | look up project by name default: "admin" |
openstack_idp:auth:domain:id | nullable string | look up domain by idp-specific index default: "default" |
openstack_idp:auth:domain:name | nullable string | look up domain by name |
openstack_idp:auto_create_account | boolean | automatically create mapped accounts default: true |
openstack_idp:auto_create_user | boolean | automatically create mapped users default: true |
openstack_idp:accepted_roles | array | accepted roles default: [] |
openstack_idp:recheck_interval | nullable integer | time after which a token must be re-validated (in seconds) default: 60 |
visibility_ctl | string | object visibility control default: "default" one of: "default" or "show" or "hide" |
tags | array | object tags |
Curl Example
$ curl -X POST https://mgmt-node/api/node \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"label": "node100",
"site_id": "site:18",
"type": [
"storage"
]
}'
Response Example
201 Created
Date: Mon, 09 Oct 2017 17:27:39 GMT
Server: Goliath
ETag: "a7e87547e5dc760784a3217a9335a328"
Content-Type: application/json
Content-Length: 1759
{
"id": "node:10001",
"uuid": "e69e5740-19bd-4e5d-a5a8-4ec04776b7d4",
"serial": "NOD0F68194C40601540",
"evt_qry": "serial=NOD0F68194C40601540",
"ctime": 1507570059104,
"mtime": 1507570059104,
"seq": 1507570059150,
"label": "node100",
"notes": null,
"status": {
"value": "degraded",
"indicator": "degraded",
"detail": "node not registered"
},
"ec": {
"table": null,
"status": "retrieving",
"seq": 1507570059150
},
"rec_status": null,
"site_id": "site:18",
"type": [
"storage"
],
"tags": [
],
"disk_nodes": [
],
"license": {
"type": [
"none"
],
"token": "8cf63f34593571104393cb8306b6cb13"
},
"activation_code": "WyJhMSIsIjEwLjEwLjIwMC4yMyIsMjA0MDAsMTAwMDEsInN0b3JhZ2UiLCIyMGNhZWQxMTJkMWEzODZiMWRhOGYxM2NiZmJiYzhiMiJd",
"activation_state": "node not registered",
"install_mode": "solo",
"install_token": "WyJpMSIsIm1hc3Rlci1ob28yd29vMWFlcGhlaTZjIiwic3MiLDMxNzg5MjYwODJd",
"ip": null,
"build_time": null,
"build_version": null,
"cpu_model": null,
"cpu_processors": null,
"mem_total": null,
"humantime": null,
"isotime": null,
"version": null,
"restore": {
"start_time": null,
"end_time": null,
"state": null,
"errors": null,
"phase": null,
"failure": null
},
"sn": {
"data_cache_size": null,
"meta_cache_size_limit": null,
"max_data_log_size": null,
"max_meta_cache_size": null,
"usage": {
"accounts": null,
"sds": null,
"os_dev": null,
"iscsi_dev": null,
"vss": null,
"vdisk_int": null,
"vdisk_ext": null,
"clones": null,
"snapshots": null,
"removable": null,
"repl_masters": null,
"repl_slaves": null,
"profiles": null,
"targets": null,
"rules": null,
"sessions": null,
"conn_insecure": null,
"conn_secure": null,
"vdisk_int_cap_mb": null,
"os_dev_max": null,
"profile_max": null,
"rule_max": null,
"session_max": null,
"target_max": null,
"vdisk_max": null,
"vss_max": null
}
},
"cluster": {
"is_cluster": false,
"failover": null,
"members": [
],
"status": {
"value": "pending",
"indicator": "degraded",
"detail": "unable to connect to cluster"
}
}
}
Node Remove
Remove an existing storage node.
DELETE /node/{node_id_or_serial}
Curl Example
$ curl -X DELETE https://mgmt-node/api/node/node:10001 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
204 No Content
Date: Mon, 09 Oct 2017 17:27:40 GMT
Server: Goliath
Node Update
Change the configuration of an existing management node or a storage node.
PATCH /node/{node_id_or_serial}
Optional Parameters
Name | Type | Description |
---|---|---|
label | string | user assigned label Length: 1..64 |
notes | string | user assigned notes Length: 0..256 |
enabled | boolean | node enabled for use |
maintenance:mode | string | maintenance mode one of: "none" or "restrict" or "rendezvous" |
maintenance:restrict/type | string | restriction type one of: "svc_purchase" or "pt_queue_user" or "pt_queue_admin" or "pt_queue_remote" or "pt_rpc_send" or "pt_rpc_recv" or "pt_sched_user" or "pt_sched_admin" or "rpc_send" or "rpc_recv" or "rc_task_add" or "rc_task_sched" or "rc_msg_send" or "rc_msg_recv" or "cp_proxy" or "slp_send_boot" |
maintenance:restrict/set | boolean | restriction set |
maintenance:reason | string | reason for restriction |
management:ca | string | no documentation one of: "none" or "embedded" |
management:hostname | string | no documentation Length: 1..∞ |
pub_ipaddr | ipv4 | node public IP address |
pub_ipaddr_desc | string | node public IP address description |
prv_ipaddr | ipv4 | node private IP address |
prv_ipaddr_desc | string | node private IP address description |
params:scheduling_algorithms/type | string | scheduling algorithm type one of: "ideal_usage" |
params:scheduling_algorithms/label | nullable string | no documentation |
params:scheduling_algorithms/ideal_usage_pct | nullable string | no documentation |
params:scheduling_algorithms/min_usage_pct | nullable string | no documentation |
params:scheduling_algorithms/capacity_weight_pct | nullable string | no documentation |
params:scheduling_algorithms/iops_weight_pct | nullable string | no documentation |
params:scheduling_algorithms/default | nullable string | no documentation |
params:service_templates/type | string | service type name Length: 1..32 |
params:service_templates/description | string | service type description Length: 1..256 |
params:service_templates/default | boolean | default template |
params:service_templates/tags:include | array | include array |
params:service_templates/tags:exclude | array | exclude array |
params:service_templates/size:reserve_min | nullable integer | minimum size reserve |
params:service_templates/size:reserve_max | nullable integer | maximum size reserve |
params:service_templates/size:limit_percent | nullable integer | Set the hard limit on storage consumption to a percentage of the size reserved. Must be at least 100% of the reserved size. If null, it's unlimited. Range: 100 <= value |
params:service_templates/iops:ratio | nullable integer | baseline IOPS ratio, specified as a ratio of IOPS to reserved size (in IOPS/GiB) |
params:service_templates/iops:burst | nullable integer | IOPS burst limit (in IOPS) |
params:service_templates/iops:burst_credit | nullable integer | maximum burst credits (in IOPS credits); not supported with provisioned IOPS |
params:service_templates/iops:min | nullable integer | minimum IOPS |
params:service_templates/iops:max | nullable integer | maximum IOPS |
params:service_templates/iops:type | string | how limited IOPS are specified default: "disabled" one of: "disabled" or "capacity-scaled" |
params:service_templates/iops:burst_type | string | how burst IOPS are specified default: "disabled" one of: "disabled" or "admin-fixed" or "capacity-scaled" |
params:service_templates/iops:burst_ratio | nullable integer | baseline burst IOPS ratio, specified as a ratio of burst IOPS to reserved size (in IOPS/GiB) |
params:service_templates/piops:type | string | how provisioned IOPS are specified default: "disabled" one of: "disabled" or "admin-fixed" or "capacity-scaled" or "user-specified" |
params:service_templates/piops:value | nullable integer | fixed IOPS value Range: 1 <= value |
params:service_templates/piops:ratio | nullable integer | baseline provisioned IOPS ratio, specified as a ratio of IOPS to reserved size (in IOPS/GiB) |
params:service_templates/piops:min | nullable integer | minimum provisioned IOPS |
params:service_templates/piops:max | nullable integer | maximum provisioned IOPS |
params:account_templates/type | string | account template name Length: 1..32 |
params:account_templates/description | string | account template description Length: 1..256 |
params:account_templates/default | boolean | default template |
params:account_templates/provisioning:size_reserve_max | nullable integer | maximum size reserve of a single virtual storage service |
params:account_templates/provisioning:iops_reserve_max | nullable integer | maximum iops reserve of a single virtual storage service |
params:account_templates/provisioning:tags_include | array | tags included default: [] |
params:account_templates/provisioning:tags_exclude | array | tags excluded default: [] |
params:account_templates/provisioning:tags_permit | nullable array | tags permitted |
params:account_templates/provisioning:tags_permit | nullable array | tags permitted |
params:account_templates/limits:vss_num | nullable integer | number of virtual storage services |
params:account_templates/limits:size_reserve_total | nullable integer | maximum size of storage |
params:account_templates/permissions:realm:rights:can_switch_user | boolean | can SU to lower level user |
params:account_templates/permissions:realm:rights:manage_node_membership | boolean | accept or delete nodes from the management network |
params:account_templates/permissions:realm:rights:manage_accounts | boolean | can create or delete other accounts, users and their settings |
params:account_templates/permissions:realm:rights:view_logs | boolean | view administrative logs |
params:account_templates/permissions:realm:rights:run_admin_tasks | boolean | run realm administrative tasks |
params:account_templates/permissions:realm:rights:run_tests | boolean | run realm administrative tests |
params:account_templates/permissions:node:all_realm_scope | boolean | apply to all nodes in the realm default: true |
params:account_templates/permissions:node:nodes | array | scope permissions to specific nodes |
params:account_templates/permissions:node:rights:manage_storage | boolean | configure OS devices, iSCSI devices, and system datastores |
params:account_templates/permissions:node:rights:manage_networks | boolean | configure networks |
params:account_templates/permissions:node:rights:provision_vss | boolean | manually provision virtual storage services |
params:account_templates/permissions:node:rights:remove_vss | boolean | remove virtual storage services |
params:account_templates/permissions:vss:all_account_scope | boolean | apply to all virtual storage services in the account default: true |
params:account_templates/permissions:vss:vsses | array | limit scope to specified vsses |
params:account_templates/permissions:vss:rights:dismiss_tasks | boolean | dismiss tasks |
params:account_templates/permissions:vss:rights:update_vss | boolean | update vss configuration |
params:account_templates/permissions:vss:rights:remove_vss | boolean | remove vss |
params:account_templates/permissions:vss:rights:set_vss_quota | boolean | set vss quota |
params:account_templates/permissions:vss:rights:manage_internal_disks | boolean | manage internal disks |
params:account_templates/permissions:vss:rights:manage_external_disks | boolean | manage external disks |
params:account_templates/permissions:vss:rights:manage_removable_disks | boolean | manage removable disks |
params:account_templates/permissions:vss:rights:manage_disk_cryptography | boolean | manage disk cryptography |
params:account_templates/permissions:vss:rights:remove_locked_disks | boolean | remove locked disks |
params:account_templates/permissions:vss:rights:replicate_and_synchronize_disks | boolean | replicate and synchronize disks |
params:account_templates/permissions:vss:rights:validate_data_integrity | boolean | validate data integrity |
params:account_templates/permissions:vss:rights:manage_targets | boolean | manage targets |
params:account_templates/permissions:vss:rights:manage_profiles | boolean | manage profiles |
params:account_templates/permissions:vss:rights:manage_secure_access_tokens | boolean | manage secure access tokens |
params:account_templates/permissions:vss:rights:manage_rules | boolean | manage rules |
params:account_templates/permissions:vss:rights:replicate_disks | boolean | replicate disks |
params:account_templates/permissions:vss:rights:synchronize_disks | boolean | synchronize disks |
params:account_templates/permissions:vss:rights:format_disks | boolean | format disks |
params:account_templates/permissions:vss:rights:resize_disks | boolean | resize disks |
params:account_templates/permissions:vss:rights:backup_disks | boolean | backup disks |
params:account_templates/permissions:vss:rights:manage_snapshots | boolean | manage snapshots |
params:account_templates/permissions:vss:rights:compress_disks | boolean | compress disks |
params:account_templates/permissions:vss:rights:manage_disk_compression | boolean | manage disk |
params:account_templates/permissions:user:rights:manage_users | boolean | create or delete users in an account |
params:account_templates/permissions:user:rights:modify_user_contact_settings | boolean | modify user contact info |
params:account_templates/permissions:user:rights:reset_user_password | boolean | reset user password |
params:account_templates/permissions:user:rights:reset_user_two_factor | boolean | reset two factor authentication |
params:account_templates/permissions:user:rights:manage_authorizations | boolean | create or delete persistent authorizations |
params:account_templates/permissions:account:rights:modify_contact_settings | boolean | modify account contact settings |
params:account_templates/permissions:account:rights:view_events | boolean | view events |
params:account_templates/permissions:account:rights:view_statistics | boolean | view statistics |
params:account_templates/permissions:account:rights:manage_global_profiles | boolean | manage global profiles |
params:account_templates/permissions:account:rights:manage_global_secure_access_tokens | boolean | manage global secure access tokens |
params:account_templates/permissions:account:rights:query_catalog | boolean | query product catalog |
params:account_templates/permissions:account:rights:provision_vss | boolean | provision vss from catalog |
params:account_templates/permissions:account:rights:manage_obj_stores | boolean | manage object stores |
params:account_templates/permissions:account:rights:read_object_storage | boolean | read from object storage |
params:account_templates/permissions:account:rights:write_object_storage | boolean | write to object storage |
params:account_templates/permissions:account:rights:delete_object_storage | boolean | delete from object storage |
cert_fingerprint | string | TLS certificate fingerprint |
license | string | software license bundle |
registration:allow | boolean | allow registrations for this node |
openstack_idp:label | string | no documentation Length: 1..∞ |
openstack_idp:enabled | boolean | identity provider enabled |
openstack_idp:auto_create_account | boolean | automatically create mapped accounts |
openstack_idp:auto_create_user | boolean | automatically create mapped users |
openstack_idp:url | nullable string | idP API endpoint |
openstack_idp:auth:user:id | nullable string | look up user by idp-specific index |
openstack_idp:auth:user:name | nullable string | look up user by name/login |
openstack_idp:auth:user:password | nullable string | authenticate using supplied password |
openstack_idp:auth:project:id | nullable string | look up project by idp-specific index |
openstack_idp:auth:project:name | nullable string | look up project by name |
openstack_idp:auth:domain:id | nullable string | look up domain by idp-specific index |
openstack_idp:auth:domain:name | nullable string | look up domain by name |
openstack_idp:accepted_roles | array | accepted roles |
eula:accepted | boolean | eula accepted |
tags | array | object tags |
disk_nodes | array | object tags |
visibility_ctl | string | object visibility control one of: "default" or "show" or "hide" |
openstack_portal_filter:ip | ipv4 | IP address |
openstack_portal_filter:mask | ipv4 | netmask |
Curl Example
$ curl -X PATCH https://mgmt-node/api/node/node:10000 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"label": "node101",
"notes": "node updated to 101"
}'
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:51 GMT
Server: Goliath
ETag: "ff28c49726b8b52cae4c6b4bc04ea79d"
Content-Type: application/json
Content-Length: 2163
{
"id": "node:10000",
"uuid": "4347e01f-f106-4735-bfbf-68addda9982f",
"serial": "NOD0F68194C40601558",
"evt_qry": "serial=NOD0F68194C40601558",
"ctime": 1507562835087,
"mtime": 1507570011169,
"seq": 1507570011197,
"label": "node101",
"notes": "node updated to 101",
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507569969000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
94,
160,
160,
160
],
"v": "dbg"
},
{
"d": [
45,
85,
85,
85
],
"v": "info"
},
{
"d": [
1,
2,
2,
2
],
"v": "warn"
},
{
"d": [
2,
2,
2,
2
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507569969666
},
"rec_status": null,
"site_id": "site:10",
"type": [
"storage"
],
"tags": [
],
"disk_nodes": [
],
"license": {
"type": [
"evaluation"
],
"minutes_remaining": 43100,
"token": "8cf63f34593571104393cb8306b6cb13"
},
"activation_code": null,
"activation_state": "activated",
"install_mode": "solo",
"install_token": "WyJpMSIsIm1hc3Rlci1ob28yd29vMWFlcGhlaTZjIiwic3MiLDMxNzg5MjYwODJd",
"ip": {
"pub_addr": "172.16.100.61",
"pub_addr_user_set": true,
"prv_addr": "10.10.200.23",
"prv_addr_user_set": true
},
"build_time": "Thu Oct 05 10:32 UTC 2017",
"build_version": "4.0.0-4252.1",
"cpu_model": "Intel Xeon E312xx (Sandy Bridge)",
"cpu_processors": 1,
"mem_total": 1929072640,
"humantime": "Mon Oct 09 17:26 UTC 2017",
"isotime": "2017-10-09T17:26+00:00",
"version": {
"major": 4,
"minor": 0,
"patch": 0,
"release": "4252.1",
"tag": "",
"hash": "f41b54b0c02b9ecbee50ffca17fc1d74a6e20672",
"timestamp": 1507199541000
},
"restore": {
"start_time": null,
"end_time": null,
"state": null,
"errors": null,
"phase": null,
"failure": null
},
"sn": {
"data_cache_size": 536870912,
"meta_cache_size_limit": 134217728,
"max_data_log_size": 142078242,
"max_meta_cache_size": 134217728,
"usage": {
"accounts": 0,
"sds": 0,
"os_dev": 8,
"iscsi_dev": 0,
"vss": 0,
"vdisk_int": 0,
"vdisk_ext": 0,
"clones": 0,
"snapshots": 0,
"removable": 0,
"repl_masters": 0,
"repl_slaves": 0,
"profiles": 0,
"targets": 0,
"rules": 0,
"sessions": 0,
"conn_insecure": 0,
"conn_secure": 0,
"vdisk_int_cap_mb": 0,
"os_dev_max": 64,
"profile_max": 8192,
"rule_max": 16384,
"session_max": 8192,
"target_max": 8192,
"vdisk_max": 4096,
"vss_max": 4096
}
},
"cluster": {
"is_cluster": false,
"failover": null,
"members": [
],
"status": {
"value": "pending",
"indicator": "degraded",
"detail": "unable to connect to cluster"
}
}
}
Node Discover Devices
Retrieve a list of operating system storage devices that match the specified parameters.
GET /node/{node_id_or_serial}/devices
Optional Parameters
Name | Type | Description |
---|---|---|
type | string | device type default: "block" one of: "block" |
subsystem | nullable string | device subsystem one of: "scsi" or "xen" |
Curl Example
$ curl https://mgmt-node/api/node/node:10000/devices \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:50 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 6063
[
{
"name": "sdd",
"desc": "disk",
"path": "/dev/sdd",
"preferred_path": "/dev/disk/by-id/wwn-0x60a010a04628d4f81962194c406558c1",
"parent": "",
"devlinks": [
"/dev/bb/6932606f-1cd8-43bc-bc4c-6fb5f8d42846",
"/dev/disk/by-id/scsi-360a010a04628d4f81962194c406558c1",
"/dev/disk/by-id/wwn-0x60a010a04628d4f81962194c406558c1",
"/dev/disk/by-path/ip-172.16.5.148:3260-iscsi-iqn.2009-12.com.blockbridge:t-pjuagemzukanm-abpdmcle-lun-0"
],
"syspath": "/sys/devices/platform/host5/session4/target5:0:0/5:0:0:0/block/sdd",
"type": [
"block"
],
"subsystem": "scsi",
"driver": "sd",
"raw_size": 107374182400,
"properties": [
{
"name": "DEVLINKS",
"value": "/dev/bb/6932606f-1cd8-43bc-bc4c-6fb5f8d42846 /dev/disk/by-id/scsi-360a010a04628d4f81962194c406558c1 /dev/disk/by-id/wwn-0x60a010a04628d4f81962194c406558c1 /dev/disk/by-path/ip-172.16.5.148:3260-iscsi-iqn.2009-12.com.blockbridge:t-pjuagemzukanm-abpdmcle-lun-0"
},
{
"name": "DEVNAME",
"value": "/dev/sdd"
},
{
"name": "DEVPATH",
"value": "/devices/platform/host5/session4/target5:0:0/5:0:0:0/block/sdd"
},
{
"name": "DEVTYPE",
"value": "disk"
},
{
"name": "DM_MULTIPATH_TIMESTAMP",
"value": "1507562788"
},
{
"name": "ID_BUS",
"value": "scsi"
},
{
"name": "ID_MODEL",
"value": "SECURE_DRIVE"
},
{
"name": "ID_MODEL_ENC",
"value": "SECURE\\x20DRIVE"
},
{
"name": "ID_PATH",
"value": "ip-172.16.5.148:3260-iscsi-iqn.2009-12.com.blockbridge:t-pjuagemzukanm-abpdmcle-lun-0"
},
{
"name": "ID_PATH_TAG",
"value": "ip-172_16_5_148_3260-iscsi-iqn_2009-12_com_blockbridge_t-pjuagemzukanm-abpdmcle-lun-0"
},
{
"name": "ID_REVISION",
"value": "4.0"
},
{
"name": "ID_SCSI",
"value": "1"
},
{
"name": "ID_SCSI_SERIAL",
"value": "6932606f-1cd8-43bc-bc4c-6fb5f8d42846"
},
{
"name": "ID_SERIAL",
"value": "360a010a04628d4f81962194c406558c1"
},
{
"name": "ID_SERIAL_SHORT",
"value": "60a010a04628d4f81962194c406558c1"
},
{
"name": "ID_TYPE",
"value": "disk"
},
{
"name": "ID_VENDOR",
"value": "B_BRIDGE"
},
{
"name": "ID_VENDOR_ENC",
"value": "B\\x2aBRIDGE"
},
{
"name": "ID_WWN",
"value": "0x60a010a04628d4f8"
},
{
"name": "ID_WWN_VENDOR_EXTENSION",
"value": "0x1962194c406558c1"
},
{
"name": "ID_WWN_WITH_EXTENSION",
"value": "0x60a010a04628d4f81962194c406558c1"
},
{
"name": "MAJOR",
"value": "8"
},
{
"name": "MINOR",
"value": "48"
},
{
"name": "MPATH_SBIN_PATH",
"value": "/sbin"
},
{
"name": "SUBSYSTEM",
"value": "block"
},
{
"name": "TAGS",
"value": ":systemd:"
},
{
"name": "USEC_INITIALIZED",
"value": "7443479"
}
],
"wwn": "0x60a010a04628d4f81962194c406558c1",
"inuse": true
},
{
"name": "md124",
"desc": "disk",
"path": "/dev/md124",
"preferred_path": "/dev/disk/by-id/md-name-mirror1",
"parent": "",
"devlinks": [
"/dev/disk/by-id/md-name-mirror1",
"/dev/disk/by-id/md-uuid-7b70f246:5a824029:b39ef139:929c9a9e",
"/dev/md/mirror1"
],
"syspath": "/sys/devices/virtual/block/md124",
"type": [
"block"
],
"subsystem": "",
"driver": "",
"raw_size": 107338530816,
"properties": [
{
"name": "DEVLINKS",
"value": "/dev/disk/by-id/md-name-mirror1 /dev/disk/by-id/md-uuid-7b70f246:5a824029:b39ef139:929c9a9e /dev/md/mirror1"
},
{
"name": "DEVNAME",
"value": "/dev/md124"
},
{
"name": "DEVPATH",
"value": "/devices/virtual/block/md124"
},
{
"name": "DEVTYPE",
"value": "disk"
},
{
"name": "DM_MULTIPATH_TIMESTAMP",
"value": "1507562788"
},
{
"name": "MAJOR",
"value": "9"
},
{
"name": "MD_CONTAINER",
"value": "/dev/md/mirror1:c"
},
{
"name": "MD_CTIME",
"value": "1507562847"
},
{
"name": "MD_DEVICES",
"value": "2"
},
{
"name": "MD_DEVICE_sdc_DEV",
"value": "/dev/sdc"
},
{
"name": "MD_DEVICE_sdc_ROLE",
"value": "1"
},
{
"name": "MD_DEVICE_sde_DEV",
"value": "/dev/sde"
},
{
"name": "MD_DEVICE_sde_ROLE",
"value": "0"
},
{
"name": "MD_DEVNAME",
"value": "mirror1"
},
{
"name": "MD_LEVEL",
"value": "raid1"
},
{
"name": "MD_MEMBER",
"value": "0"
},
{
"name": "MD_MON_THIS",
"value": "../md125"
},
{
"name": "MD_MTIME",
"value": "1507562847"
},
{
"name": "MD_NAME",
"value": "mirror1"
},
{
"name": "MD_UUID",
"value": "7b70f246:5a824029:b39ef139:929c9a9e"
},
{
"name": "MINOR",
"value": "124"
},
{
"name": "MPATH_SBIN_PATH",
"value": "/sbin"
},
{
"name": "SUBSYSTEM",
"value": "block"
},
{
"name": "SYSTEMD_WANTS",
"value": "mdmonitor.service mdmon@md125.service"
},
{
"name": "TAGS",
"value": ":systemd:"
},
{
"name": "USEC_INITIALIZED",
"value": "3539136"
}
],
"inuse": true
},
{
"name": "md126p6",
"desc": "partition",
"path": "/dev/md126p6",
"preferred_path": "/dev/md126p6",
"parent": "/dev/md126",
"devlinks": [
"/dev/disk/by-id/md-name-bb:system-array-part6",
"/dev/disk/by-id/md-uuid-791bf0b6:27184b1a:a7cc46b9:c7d4a716-part6",
"/dev/md/bb:system-array6"
],
"syspath": "/sys/devices/virtual/block/md126/md126p6",
"type": [
"block"
],
"subsystem": "block",
"driver": "",
"raw_size": 18216893952,
"properties": [
{
"name": "BLOCKBRIDGE_LABEL",
"value": "system"
},
{
"name": "BLOCKBRIDGE_WHITELIST",
"value": "1"
},
{
"name": "DEVLINKS",
"value": "/dev/disk/by-id/md-name-bb:system-array-part6 /dev/disk/by-id/md-uuid-791bf0b6:27184b1a:a7cc46b9:c7d4a716-part6 /dev/md/bb:system-array6"
},
{
"name": "DEVNAME",
"value": "/dev/md126p6"
},
{
"name": "DEVPATH",
"value": "/devices/virtual/block/md126/md126p6"
},
{
"name": "DEVTYPE",
"value": "partition"
},
{
"name": "ID_PART_ENTRY_DISK",
"value": "9:126"
},
{
"name": "ID_PART_ENTRY_NAME",
"value": "blockbridge-sp"
},
{
"name": "ID_PART_ENTRY_NUMBER",
"value": "6"
},
{
"name": "ID_PART_ENTRY_OFFSET",
"value": "174065664"
},
{
"name": "ID_PART_ENTRY_SCHEME",
"value": "gpt"
},
{
"name": "ID_PART_ENTRY_SIZE",
"value": "35579871"
},
{
"name": "ID_PART_ENTRY_TYPE",
"value": "0fc63daf-8483-4772-8e79-3d69d8477de4"
},
{
"name": "ID_PART_ENTRY_UUID",
"value": "c0edd702-7801-42ef-b675-2b34411ee13e"
},
{
"name": "MAJOR",
"value": "259"
},
{
"name": "MD_CONTAINER",
"value": "/dev/md/bb:system-array:c"
},
{
"name": "MD_CTIME",
"value": "1507562801"
},
{
"name": "MD_DEVICES",
"value": "2"
},
{
"name": "MD_DEVICE_sda_DEV",
"value": "/dev/sda"
},
{
"name": "MD_DEVICE_sda_ROLE",
"value": "1"
},
{
"name": "MD_DEVICE_sdb_DEV",
"value": "/dev/sdb"
},
{
"name": "MD_DEVICE_sdb_ROLE",
"value": "0"
},
{
"name": "MD_DEVNAME",
"value": "bb:system-array"
},
{
"name": "MD_LEVEL",
"value": "raid1"
},
{
"name": "MD_MEMBER",
"value": "0"
},
{
"name": "MD_MON_THIS",
"value": "../md127"
},
{
"name": "MD_MTIME",
"value": "1507562801"
},
{
"name": "MD_NAME",
"value": "bb:system-array"
},
{
"name": "MD_UUID",
"value": "791bf0b6:27184b1a:a7cc46b9:c7d4a716"
},
{
"name": "MINOR",
"value": "5"
},
{
"name": "SUBSYSTEM",
"value": "block"
},
{
"name": "SYSTEMD_WANTS",
"value": "mdmonitor.service mdmon@md127.service"
},
{
"name": "TAGS",
"value": ":systemd:"
},
{
"name": "USEC_INITIALIZED",
"value": "9419779"
}
],
"inuse": true
}
]
Node Discover Interfaces
Retrieve a list of network interfaces that match the specified parameters.
GET /node/{node_id_or_serial}/interfaces
Curl Example
$ curl https://mgmt-node/api/node/node:10000/interfaces \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:51 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 900
[
{
"interface": "eth0",
"hwaddr": "FA:16:3E:6A:7C:79",
"mtu": 1400,
"flags": {
"up": true,
"broadcast": true,
"debug": false,
"loopback": false,
"pointopoint": false,
"notrailers": false,
"running": true,
"noarp": false,
"promisc": false,
"master": false,
"slave": false,
"multicast": true
},
"link": {
"detected": true,
"speed": null,
"duplex": null,
"port": "other"
},
"driver": {
"name": "virtio_net",
"version": "1.0.0",
"fw_version": "",
"bus": "0000:00:03.0"
},
"stats": {
"tx_packets": 0,
"tx_bytes": 0,
"tx_errors": 0,
"tx_dropped": 0,
"rx_packets": 0,
"rx_bytes": 0,
"rx_errors": 0,
"rx_dropped": 0
},
"ipaddrs": [
{
"addr": "10.10.200.23",
"family": "IPv4"
},
{
"addr": "fe80::f816:3eff:fe6a:7c79%eth0",
"family": "IPv6"
}
],
"inuse": true,
"config": {
"net_id": "net:8:10",
"service": {
"application": {
"enabled": false
},
"management": {
"enabled": false
},
"storage": {
"enabled": true,
"shared": true
},
"replication": {
"enabled": true
},
"infrastructure": {
"enabled": true
},
"external": {
"enabled": true
}
}
}
}
]
Site
Sites are groups of storage and management nodes. When deploying a Blockbridge storage network, you can use sites to group nodes together that are co-located in the same data center. Or, you can subdivide a datacenter into multiple sites, or align sites along business unit lines. Every node in a site shares the same SMTP configuration.
Attributes
Name | Type | Description |
---|---|---|
id | string | object id |
uuid | uuid | object uuid |
ctime | integer | site create time Range: 0 <= value |
mtime | integer | site last modified time Range: 0 <= value |
serial | string | site serial number |
label | string | user assigned label Length: 1..64 |
notes | nullable string | user assigned notes Length: 0..256 |
location:country | string | ISO 3166-1 alpha-3 country code default: "" |
location:lat | number | latitude default: 0 |
location:long | number | longitude default: 0 |
location:city | string | city default: "" |
location:state | string | state as two-character USPS abbreviation default: "" |
zip_code | string | site zip code |
tier | string | datacenter infrastructure tier one of: "I" or "II" or "III" or "IV" |
email:type | string | email type one of: "none" or "smtp" or "mailgun" |
email:smtp:server_ssl | string | SMTP server SSL/TLS one of: "none" or "required" or "optional" |
email:smtp:server_addr | hostname | SMTP server hostname Length: 0..1024 |
email:smtp:mail_from | mail from email address Length: 0..128 | |
email:smtp:server_username | string | SMTP authentication username |
email:smtp:server_auth | boolean | SMTP authentication enabled |
email:smtp:server_port | integer | SMTP server port default: 587 Range: 1 <= value <= 65535 |
status:indicator | string | status indicator one of: "online" or "degraded" or "offline" or "na" |
status:value | string | status value one of: "online" or "degraded" or "offline" or "pending" or "payment" |
status:detail | nullable string | status detail |
Site Info
Retrieve an existing site.
GET /site/{site_id_or_serial}
Curl Example
$ curl https://mgmt-node/api/site/site:18 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:52 GMT
Server: Goliath
ETag: "d9adddf3c3dfd1418fd44fa1da69b35e"
Content-Type: application/json
Content-Length: 681
{
"id": "site:18",
"uuid": "d0132f8e-05c5-48d9-97da-806011f94bcd",
"serial": "SIT1468194C40626570",
"evt_qry": "serial=SIT1468194C40626570",
"ctime": 1507570012289,
"mtime": 1507570012535,
"seq": 1507570012682,
"label": "virginia1",
"notes": "site updated",
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507570012000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
4,
4,
4,
4
],
"v": "dbg"
},
{
"d": [
3,
3,
3,
3
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507570012682
},
"rec_status": null,
"tier": "IV",
"location": {
"country": "US",
"lat": 39.0436,
"long": -77.4875,
"city": "Ashburn",
"state": "VA"
},
"email": {
"type": [
"none"
]
}
}
Site List
Enumerate sites.
GET /site
Curl Example
$ curl https://mgmt-node/api/site \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:52 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 6119
[
{
"id": "site:12",
"uuid": "0ad99d88-c1e4-4e3e-8ce9-1ebbf261e73e",
"serial": "SIT1468194C40626494",
"evt_qry": "serial=SIT1468194C40626494",
"ctime": 1507567898865,
"mtime": 1507567899084,
"seq": 1507567899667,
"label": "virginia1",
"notes": "site updated",
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507567899000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
4,
4,
4,
4
],
"v": "dbg"
},
{
"d": [
3,
3,
3,
3
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507567899667
},
"rec_status": null,
"tier": "IV",
"location": {
"country": "US",
"lat": 39.0436,
"long": -77.4875,
"city": "Ashburn",
"state": "VA"
},
"email": {
"type": [
"none"
]
}
},
{
"id": "site:16",
"uuid": "53184182-b00c-4b6c-94c0-ed470b958c72",
"serial": "SIT1468194C40626550",
"evt_qry": "serial=SIT1468194C40626550",
"ctime": 1507569795479,
"mtime": 1507569795721,
"seq": 1507569796666,
"label": "virginia1",
"notes": "site updated",
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507569795000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
4,
4,
4,
4
],
"v": "dbg"
},
{
"d": [
3,
3,
3,
3
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507569796666
},
"rec_status": null,
"tier": "IV",
"location": {
"country": "US",
"lat": 39.0436,
"long": -77.4875,
"city": "Ashburn",
"state": "VA"
},
"email": {
"type": [
"none"
]
}
},
{
"id": "site:13",
"uuid": "16f3d9e8-10ca-46e9-be38-40e7472c6541",
"serial": "SIT1468194C4062648C",
"evt_qry": "serial=SIT1468194C4062648C",
"ctime": 1507567916392,
"mtime": 1507567916616,
"seq": 1507567916674,
"label": "virginia1",
"notes": "site updated",
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507567916000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
4,
4,
4,
4
],
"v": "dbg"
},
{
"d": [
3,
3,
3,
3
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507567916674
},
"rec_status": null,
"tier": "IV",
"location": {
"country": "US",
"lat": 39.0436,
"long": -77.4875,
"city": "Ashburn",
"state": "VA"
},
"email": {
"type": [
"none"
]
}
},
{
"id": "site:17",
"uuid": "e66d233a-00d9-43aa-92d1-e03ed0e2faec",
"serial": "SIT1468194C40626548",
"evt_qry": "serial=SIT1468194C40626548",
"ctime": 1507569965655,
"mtime": 1507569965913,
"seq": 1507569966668,
"label": "virginia1",
"notes": "site updated",
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507569965000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
4,
4,
4,
4
],
"v": "dbg"
},
{
"d": [
3,
3,
3,
3
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507569966668
},
"rec_status": null,
"tier": "IV",
"location": {
"country": "US",
"lat": 39.0436,
"long": -77.4875,
"city": "Ashburn",
"state": "VA"
},
"email": {
"type": [
"none"
]
}
},
{
"id": "site:10",
"uuid": "e582c5ea-26f5-452c-98f6-8133bf91790e",
"serial": "SIT1468194C406264F5",
"evt_qry": "serial=SIT1468194C406264F5",
"ctime": 1507562833433,
"mtime": 1507562839908,
"seq": 1507570011670,
"label": "packet.net",
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507570011000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
14,
22,
22,
22
],
"v": "dbg"
},
{
"d": [
17,
28,
28,
28
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507570011670
},
"rec_status": null,
"tier": "IV",
"location": {
"country": "USA",
"lat": 40,
"long": -43,
"city": "Newark",
"state": "NJ"
},
"email": {
"type": [
"none"
]
}
},
{
"id": "site:14",
"uuid": "8e9b9c5e-6145-42af-ac79-7d03f21d7750",
"serial": "SIT1468194C406264B4",
"evt_qry": "serial=SIT1468194C406264B4",
"ctime": 1507567942158,
"mtime": 1507567942381,
"seq": 1507567942673,
"label": "virginia1",
"notes": "site updated",
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507567942000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
4,
4,
4,
4
],
"v": "dbg"
},
{
"d": [
3,
3,
3,
3
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507567942673
},
"rec_status": null,
"tier": "IV",
"location": {
"country": "US",
"lat": 39.0436,
"long": -77.4875,
"city": "Ashburn",
"state": "VA"
},
"email": {
"type": [
"none"
]
}
},
{
"id": "site:18",
"uuid": "d0132f8e-05c5-48d9-97da-806011f94bcd",
"serial": "SIT1468194C40626570",
"evt_qry": "serial=SIT1468194C40626570",
"ctime": 1507570012289,
"mtime": 1507570012535,
"seq": 1507570012540,
"label": "virginia1",
"notes": "site updated",
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": null,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"v": "dbg",
"d": [
0,
0,
0,
0
]
},
{
"v": "info",
"d": [
0,
0,
0,
0
]
},
{
"v": "warn",
"d": [
0,
0,
0,
0
]
},
{
"v": "err",
"d": [
0,
0,
0,
0
]
}
]
},
"status": "current",
"seq": 1507570012310
},
"rec_status": null,
"tier": "IV",
"location": {
"country": "US",
"lat": 39.0436,
"long": -77.4875,
"city": "Ashburn",
"state": "VA"
},
"email": {
"type": [
"none"
]
}
},
{
"id": "site:11",
"uuid": "79110da6-9357-4700-9f4d-d3cb2a4734c8",
"serial": "SIT1468194C406264ED",
"evt_qry": "serial=SIT1468194C406264ED",
"ctime": 1507563525129,
"mtime": 1507563525260,
"seq": 1507563525691,
"label": "virginia1",
"notes": "site updated",
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507563525000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
4,
4,
4,
4
],
"v": "dbg"
},
{
"d": [
3,
3,
3,
3
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507563525691
},
"rec_status": null,
"tier": "IV",
"location": {
"country": "US",
"lat": 39.0436,
"long": -77.4875,
"city": "Ashburn",
"state": "VA"
},
"email": {
"type": [
"none"
]
}
},
{
"id": "site:15",
"uuid": "35a002d9-59f0-4fa7-99f3-a71718f2f0d8",
"serial": "SIT1468194C406264AC",
"evt_qry": "serial=SIT1468194C406264AC",
"ctime": 1507568230545,
"mtime": 1507568230778,
"seq": 1507568231667,
"label": "virginia1",
"notes": "site updated",
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507568230000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
4,
4,
4,
4
],
"v": "dbg"
},
{
"d": [
3,
3,
3,
3
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507568231667
},
"rec_status": null,
"tier": "IV",
"location": {
"country": "US",
"lat": 39.0436,
"long": -77.4875,
"city": "Ashburn",
"state": "VA"
},
"email": {
"type": [
"none"
]
}
}
]
Site Create
Create a new site.
POST /site
Optional Parameters
Name | Type | Description |
---|---|---|
label | string | user assigned label Length: 1..64 |
notes | string | user assigned notes Length: 0..256 |
location:country | string | ISO 3166-1 alpha-3 country code default: "" |
location:lat | number | latitude default: 0 |
location:long | number | longitude default: 0 |
location:city | string | city default: "" |
location:state | string | state as two-character USPS abbreviation default: "" |
tier | string | datacenter infrastructure tier default: "IV" one of: "I" or "II" or "III" or "IV" |
email:type | string | email type one of: "none" or "smtp" or "mailgun" |
email:smtp:mail_from | mail from email address Length: 0..128 | |
email:smtp:server_ssl | string | smtp server ssl one of: "none" or "required" or "optional" |
email:smtp:server_addr | hostname | smtp server name Length: 0..1024 |
email:smtp:server_password | string | smtp auth password |
email:smtp:server_username | string | smtp auth username |
email:smtp:server_auth | boolean | smtp auth enabled |
email:smtp:server_port | integer | smtp server port default: 587 Range: 1 <= value <= 65535 |
uuid | uuid | object UUID |
Curl Example
$ curl -X POST https://mgmt-node/api/site \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"label": "virginia",
"location": {
"country": "US",
"lat": 39.0436,
"long": -77.4875,
"city": "Ashburn",
"state": "VA"
},
"tier": "IV"
}'
Response Example
201 Created
Date: Mon, 09 Oct 2017 17:26:52 GMT
Server: Goliath
ETag: "805c3bcb643efd2efe2db982d234b60d"
Content-Type: application/json
Content-Length: 661
{
"id": "site:18",
"uuid": "d0132f8e-05c5-48d9-97da-806011f94bcd",
"serial": "SIT1468194C40626570",
"evt_qry": "serial=SIT1468194C40626570",
"ctime": 1507570012289,
"mtime": 1507570012289,
"seq": 1507570012310,
"label": "virginia",
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": null,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"v": "dbg",
"d": [
0,
0,
0,
0
]
},
{
"v": "info",
"d": [
0,
0,
0,
0
]
},
{
"v": "warn",
"d": [
0,
0,
0,
0
]
},
{
"v": "err",
"d": [
0,
0,
0,
0
]
}
]
},
"status": "current",
"seq": 1507570012310
},
"rec_status": null,
"tier": "IV",
"location": {
"country": "US",
"lat": 39.0436,
"long": -77.4875,
"city": "Ashburn",
"state": "VA"
},
"email": {
"type": [
"none"
]
}
}
Site Remove
Remove an existing site.
DELETE /site/{site_id_or_serial}
Curl Example
$ curl -X DELETE https://mgmt-node/api/site/SIT1468194C40626570 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
204 No Content
Date: Mon, 09 Oct 2017 17:27:40 GMT
Server: Goliath
Site Update
Change the configuration of an existing site.
PATCH /site/{site_id_or_serial}
Optional Parameters
Name | Type | Description |
---|---|---|
notes | string | user assigned notes Length: 0..256 |
label | string | user assigned label Length: 1..64 |
location:country | string | ISO 3166-1 alpha-3 country code default: "" |
location:lat | number | latitude default: 0 |
location:long | number | longitude default: 0 |
location:city | string | city default: "" |
location:state | string | state as two-character USPS abbreviation default: "" |
zip_code | string | ZIP code |
tier | string | datacenter infrastructure tier one of: "I" or "II" or "III" or "IV" |
email:type | string | email type one of: "none" or "smtp" or "mailgun" |
email:smtp:server_port | integer | SMTP server port default: 587 Range: 1 <= value <= 65535 |
email:smtp:mail_from | alternative mail-from email address Length: 0..128 | |
email:smtp:server_ssl | string | SMTP server SSL/TLS one of: "none" or "required" or "optional" |
email:smtp:server_addr | hostname | SMTP server name Length: 0..1024 |
email:smtp:server_password | string | SMTP authentication password Length: 1..∞ |
email:smtp:server_username | string | SMTP authentication username Length: 1..∞ |
email:smtp:server_auth | boolean | SMTP authentication is enabled |
Curl Example
$ curl -X PATCH https://mgmt-node/api/site/SIT1468194C40626570 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"label": "virginia1",
"notes": "site updated"
}'
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:52 GMT
Server: Goliath
ETag: "515d98722d696ec32dc7467e13f46587"
Content-Type: application/json
Content-Length: 672
{
"id": "site:18",
"uuid": "d0132f8e-05c5-48d9-97da-806011f94bcd",
"serial": "SIT1468194C40626570",
"evt_qry": "serial=SIT1468194C40626570",
"ctime": 1507570012289,
"mtime": 1507570012535,
"seq": 1507570012540,
"label": "virginia1",
"notes": "site updated",
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": null,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"v": "dbg",
"d": [
0,
0,
0,
0
]
},
{
"v": "info",
"d": [
0,
0,
0,
0
]
},
{
"v": "warn",
"d": [
0,
0,
0,
0
]
},
{
"v": "err",
"d": [
0,
0,
0,
0
]
}
]
},
"status": "current",
"seq": 1507570012310
},
"rec_status": null,
"tier": "IV",
"location": {
"country": "US",
"lat": 39.0436,
"long": -77.4875,
"city": "Ashburn",
"state": "VA"
},
"email": {
"type": [
"none"
]
}
}
Network Interface
Blockbridge storage node software detects the Ethernet interfaces you have configured on your nodes. Network Interface resources allow you to define how these interfaces are used for Blockbridge storage services.
The Blockbridge system thinks of networking in terms of these interfaces. You have the full power of Linux networking at your disposal including channel bonding, VLANs, and tunnels. You can have multiple interfaces for segregation, performance or high availability.
When a storage node completes its initial rendezvous with the management node, it registers the first Ethernet interface it finds, along with its IP addresses. If the node has additional interfaces, use this interface to register them.
Attributes
Name | Type | Description |
---|---|---|
id | string | object id |
uuid | uuid | object uuid |
label | string | user assigned label Length: 1..64 |
serial | string | network interface serial number |
ctime | integer | network interface create time Range: 0 <= value |
mtime | integer | network interface last modified time Range: 0 <= value |
notes | nullable string | user assigned notes Length: 0..256 |
node_id | string | storage node id |
cplx_id | nullable integer | processor complex assignment; null indicates shared between all complexes |
pcid | string | storage node id |
enabled | boolean | service is enabled on this network interface |
interface | string | network interface device name |
nat_addr | nullable ipv4 | NAT address assigned to interface |
hostname | nullable hostname | hostname assigned to interface Length: 0..1024 |
portals | nullable array | published portals |
portals | nullable array | published portals |
parent | nullable object | one-to-one resource identifier |
parent:type | string | type of identified resource |
service:application:enabled | boolean | application service enabled |
service:management:enabled | boolean | management service enabled |
service:storage:enabled | boolean | storage service enabled |
service:storage:shared | boolean | service is shared |
service:replication:enabled | boolean | replication service enabled |
service:infrastructure:enabled | boolean | infrastructure service enabled |
service:external:enabled | boolean | external service enabled |
status:indicator | string | status indicator one of: "online" or "degraded" or "offline" or "na" |
status:value | string | status value one of: "online" or "degraded" or "offline" or "pending" or "payment" |
status:detail | nullable string | status detail |
network | nullable object | network interface description |
network:interface | string | interface name |
network:hwaddr | string | hardware address (MAC) |
network:mtu | integer | MTU |
network:flags:up | boolean | up |
network:flags:broadcast | boolean | broadcast |
network:flags:debug | boolean | debug |
network:flags:loopback | boolean | loopback |
network:flags:pointopoint | boolean | pointopoint |
network:flags:notrailers | boolean | notrailers |
network:flags:running | boolean | running |
network:flags:noarp | boolean | noarp |
network:flags:promisc | boolean | promisc |
network:flags:master | boolean | master |
network:flags:slave | boolean | slave |
network:flags:multicast | boolean | multicast |
network:link:detected | nullable boolean | media link detected |
network:link:speed | nullable integer | network interface speed in Mb/s |
network:link:duplex | nullable string | network interface duplex one of: "half" or "full" or "unknown" |
network:link:port | nullable string | network interface port one of: "twisted-pair" or "AUI" or "BNC" or "MII" or "FIBRE" or "direct-attach-copper" or "none" or "other" or "unknown" |
network:driver:name | nullable string | driver name |
network:driver:version | nullable string | driver version |
network:driver:fw_version | nullable string | driver firmware version |
network:driver:bus | nullable string | driver bus |
network:stats:tx_packets | integer | tx packets |
network:stats:tx_bytes | integer | tx bytes |
network:stats:tx_errors | integer | tx errors |
network:stats:tx_dropped | integer | tx dropped |
network:stats:rx_packets | integer | rx packets |
network:stats:rx_bytes | integer | rx bytes |
network:stats:rx_errors | integer | rx errors |
network:stats:rx_dropped | integer | rx dropped |
network:ipaddrs/addr | string | ip address |
network:ipaddrs/family | string | address family one of: "IPv4" or "IPv6" or "unknown" |
network:inuse | boolean | network interface configured |
network:config:net_id | string | network interface id |
network:config:service:application:enabled | boolean | service enabled |
network:config:service:management:enabled | boolean | service enabled |
network:config:service:storage:enabled | boolean | service enabled |
network:config:service:storage:shared | boolean | service shared |
network:config:service:replication:enabled | boolean | service enabled |
network:config:service:infrastructure:enabled | boolean | service enabled |
network:config:service:external:enabled | boolean | service enabled |
network:config:nat_addr | string | NAT address |
network:config:enabled | boolean | net administratively enabled/disabled |
network:parent | nullable object | parent interface |
network:parent:name | string | parent interface name |
network:parent:net_id | nullable string | parent net |
network:vlan | nullable integer | VLAN ID, if defined |
network:bond | nullable object | bonding information |
network:bond:mode | string | bonding mode |
network:bond:interfaces/up | boolean | link up |
network:bond:interfaces/speed | nullable integer | link speed in Mb/s |
network:bond:interfaces/mtu | integer | MTU |
network:bond:interfaces/interface | string | interface name |
Network Interface Info
Retrieve an existing network interface.
GET /net/{net_id_or_serial}
Curl Example
$ curl https://mgmt-node/api/net/net:9:10 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:27:38 GMT
Server: Goliath
ETag: "67faa3dd29a0443799d26eaca7edac70"
Content-Type: application/json
Content-Length: 1498
{
"id": "net:9:10",
"uuid": "aa3b1c6b-456d-45a7-9840-40d6879df950",
"serial": "NET1C62194C406264CE",
"evt_qry": "serial=NET1C62194C406264CE",
"node_id": "node:10000",
"ctime": 1507570011779,
"mtime": 1507570011779,
"seq": 1507570013237,
"label": "net-1",
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507570011000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
2,
2,
2,
2
],
"v": "dbg"
},
{
"d": [
1,
1,
1,
1
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507570012677
},
"rec_status": null,
"enabled": true,
"interface": "eth0",
"hostname": null,
"nat_addr": null,
"service": {
"application": {
"enabled": false
},
"management": {
"enabled": false
},
"storage": {
"enabled": true,
"shared": true
},
"replication": {
"enabled": true
},
"infrastructure": {
"enabled": true
},
"external": {
"enabled": true
}
},
"network": {
"interface": "eth0",
"hwaddr": "FA:16:3E:6A:7C:79",
"mtu": 1400,
"flags": {
"up": true,
"broadcast": true,
"debug": false,
"loopback": false,
"pointopoint": false,
"notrailers": false,
"running": true,
"noarp": false,
"promisc": false,
"master": false,
"slave": false,
"multicast": true
},
"link": {
"detected": true,
"speed": null,
"duplex": null,
"port": "other"
},
"driver": {
"name": "virtio_net",
"version": "1.0.0",
"fw_version": "",
"bus": "0000:00:03.0"
},
"stats": {
"tx_packets": 0,
"tx_bytes": 0,
"tx_errors": 0,
"tx_dropped": 0,
"rx_packets": 0,
"rx_bytes": 0,
"rx_errors": 0,
"rx_dropped": 0
},
"ipaddrs": [
{
"addr": "10.10.200.23",
"family": "IPv4"
},
{
"addr": "fe80::f816:3eff:fe6a:7c79%eth0",
"family": "IPv6"
}
]
}
}
Network Interface List
Enumerate network interfaces.
GET /net
Curl Example
$ curl https://mgmt-node/api/net \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:51 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 1500
[
{
"id": "net:8:10",
"uuid": "9935b887-1f48-4d60-b4d1-c7dcef082a66",
"serial": "NET1C62194C406264D6",
"evt_qry": "serial=NET1C62194C406264D6",
"node_id": "node:10000",
"ctime": 1507569965178,
"mtime": 1507569965242,
"seq": 1507570010649,
"label": "net-1",
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507569965000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
2,
2,
2,
2
],
"v": "dbg"
},
{
"d": [
1,
1,
1,
1
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507569965673
},
"rec_status": null,
"enabled": true,
"interface": "eth0",
"hostname": null,
"nat_addr": null,
"service": {
"application": {
"enabled": false
},
"management": {
"enabled": false
},
"storage": {
"enabled": true,
"shared": true
},
"replication": {
"enabled": true
},
"infrastructure": {
"enabled": true
},
"external": {
"enabled": true
}
},
"network": {
"interface": "eth0",
"hwaddr": "FA:16:3E:6A:7C:79",
"mtu": 1400,
"flags": {
"up": true,
"broadcast": true,
"debug": false,
"loopback": false,
"pointopoint": false,
"notrailers": false,
"running": true,
"noarp": false,
"promisc": false,
"master": false,
"slave": false,
"multicast": true
},
"link": {
"detected": true,
"speed": null,
"duplex": null,
"port": "other"
},
"driver": {
"name": "virtio_net",
"version": "1.0.0",
"fw_version": "",
"bus": "0000:00:03.0"
},
"stats": {
"tx_packets": 0,
"tx_bytes": 0,
"tx_errors": 0,
"tx_dropped": 0,
"rx_packets": 0,
"rx_bytes": 0,
"rx_errors": 0,
"rx_dropped": 0
},
"ipaddrs": [
{
"addr": "10.10.200.23",
"family": "IPv4"
},
{
"addr": "fe80::f816:3eff:fe6a:7c79%eth0",
"family": "IPv6"
}
]
}
}
]
Network Interface Create
Register a new network interface.
POST /net
Required Parameters
Name | Type | Description |
---|---|---|
node_id | string | node id |
interface | string | interface name |
Optional Parameters
Name | Type | Description |
---|---|---|
label | string | user assigned label Length: 1..64 |
notes | string | user assigned notes Length: 0..256 |
enabled | boolean | service is enabled on this network interface default: true |
nat_addr | nullable ipv4 | NAT IP address |
hostname | nullable hostname | hostname Length: 0..1024 |
service:application:enabled | boolean | application service enabled |
service:management:enabled | boolean | management service enabled |
service:storage:enabled | boolean | storage service enabled default: true |
service:storage:shared | boolean | storage service shared default: true |
service:replication:enabled | boolean | replication service enabled default: true |
service:infrastructure:enabled | boolean | infrastructure service enabled default: true |
service:external:enabled | boolean | external service enabled default: true |
uuid | uuid | object UUID |
portals | nullable array | published portals |
portals | nullable array | published portals |
cplx_id | nullable integer | processor complex assignment |
Curl Example
$ curl -X POST https://mgmt-node/api/net \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"node_id": "node:10000",
"interface": "eth0"
}'
Response Example
201 Created
Date: Mon, 09 Oct 2017 17:26:51 GMT
Server: Goliath
ETag: "45e7c4efa8349d677789a828f54636d4"
Content-Type: application/json
Content-Length: 881
{
"id": "net:9:10",
"uuid": "aa3b1c6b-456d-45a7-9840-40d6879df950",
"serial": "NET1C62194C406264CE",
"evt_qry": "serial=NET1C62194C406264CE",
"node_id": "node:10000",
"ctime": 1507570011779,
"mtime": 1507570011779,
"seq": 1507570011789,
"label": "net-1",
"notes": null,
"status": {
"value": "pending",
"indicator": "degraded",
"detail": "retrieving status; please wait"
},
"ec": {
"table": {
"time": null,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"v": "dbg",
"d": [
0,
0,
0,
0
]
},
{
"v": "info",
"d": [
0,
0,
0,
0
]
},
{
"v": "warn",
"d": [
0,
0,
0,
0
]
},
{
"v": "err",
"d": [
0,
0,
0,
0
]
}
]
},
"status": "current",
"seq": 1507570011789
},
"rec_status": null,
"enabled": true,
"interface": "eth0",
"hostname": null,
"nat_addr": null,
"service": {
"application": {
"enabled": false
},
"management": {
"enabled": false
},
"storage": {
"enabled": true,
"shared": true
},
"replication": {
"enabled": true
},
"infrastructure": {
"enabled": true
},
"external": {
"enabled": true
}
},
"network": null
}
Network Interface Remove
Remove the configuration for an existing network interface.
DELETE /net/{net_id_or_serial}
Curl Example
$ curl -X DELETE https://mgmt-node/api/net/net:8:10 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
204 No Content
Date: Mon, 09 Oct 2017 17:26:51 GMT
Server: Goliath
Network Interface Update
Change the configuration of an existing network interface.
PATCH /net/{net_id_or_serial}
Optional Parameters
Name | Type | Description |
---|---|---|
label | string | user assigned label Length: 1..64 |
notes | string | user assigned notes Length: 0..256 |
enabled | boolean | service is enabled on this network interface |
interface | string | interface name |
nat_addr | nullable ipv4 | NAT IP address |
hostname | nullable hostname | hostname Length: 0..1024 |
service:application:enabled | boolean | application service enabled |
service:management:enabled | boolean | management service enabled |
service:storage:enabled | boolean | storage service enabled |
service:storage:shared | boolean | storage service shared |
service:replication:enabled | boolean | replication service enabled |
service:infrastructure:enabled | boolean | infrastructure service enabled |
service:external:enabled | boolean | external service enabled |
portals | nullable array | published portals |
portals | nullable array | published portals |
cplx_id | nullable integer | processor complex assignment |
Curl Example
$ curl -X PATCH https://mgmt-node/api/net/net:9:10 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:51 GMT
Server: Goliath
ETag: "45e7c4efa8349d677789a828f54636d4"
Content-Type: application/json
Content-Length: 881
{
"id": "net:9:10",
"uuid": "aa3b1c6b-456d-45a7-9840-40d6879df950",
"serial": "NET1C62194C406264CE",
"evt_qry": "serial=NET1C62194C406264CE",
"node_id": "node:10000",
"ctime": 1507570011779,
"mtime": 1507570011779,
"seq": 1507570011789,
"label": "net-1",
"notes": null,
"status": {
"value": "pending",
"indicator": "degraded",
"detail": "retrieving status; please wait"
},
"ec": {
"table": {
"time": null,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"v": "dbg",
"d": [
0,
0,
0,
0
]
},
{
"v": "info",
"d": [
0,
0,
0,
0
]
},
{
"v": "warn",
"d": [
0,
0,
0,
0
]
},
{
"v": "err",
"d": [
0,
0,
0,
0
]
}
]
},
"status": "current",
"seq": 1507570011789
},
"rec_status": null,
"enabled": true,
"interface": "eth0",
"hostname": null,
"nat_addr": null,
"service": {
"application": {
"enabled": false
},
"management": {
"enabled": false
},
"storage": {
"enabled": true,
"shared": true
},
"replication": {
"enabled": true
},
"infrastructure": {
"enabled": true
},
"external": {
"enabled": true
}
},
"network": null
}
Operating System Device
The Operating System Storage Device object has the configuration necessary for a Blockbridge storage node to integrate direct-attached (DAS) storage into a System Datastore. The operating system has been configured with the proper drivers for the storage technology, and is responsible for providing a persistent device path. You can use any storage device that's compatible with Linux, such as NVDIMM, NVMe, PCI Flash, direct-attached hardware RAID, or a Fibre Channel SAN.
Attributes
Name | Type | Description |
---|---|---|
id | string | object id |
uuid | uuid | object uuid |
label | nullable string | user assigned label |
notes | nullable string | user assigned notes Length: 0..256 |
transient | boolean | device is transient |
serial | string | OS device serial number |
evt_qry | string | query string for event application to display associated events |
ctime | integer | OS device create time Range: 0 <= value |
mtime | integer | OS device last modified time Range: 0 <= value |
node_id | string | storage node id |
pcid | string | storage node id |
initialized | boolean | device is initialized |
enabled | boolean | device is enabled |
align_writes_4k | nullable boolean | align all writes to 4KiB boundaries, executing read requests as necessary |
size | nullable integer | raw device size |
path | nullable string | device path |
sds_id | nullable string | system datastore id |
parent | nullable object | parent device reference |
parent:type | string | type of identified resource |
flags | nullable string | generic api rts flags field |
hidden | nullable boolean | device hidden in client UIs by default |
status:indicator | string | status indicator one of: "online" or "degraded" or "offline" or "na" |
status:value | string | status value one of: "online" or "degraded" or "offline" or "pending" or "payment" |
status:detail | nullable string | status detail |
usable | nullable integer | usable device size (in bytes) |
used | nullable integer | number of bytes of device that have been consumed |
rebalance_delta | nullable integer | remainder of rebalancing goal, bytes (negative: moving extents away) |
vendor_id | nullable string | device vendor id |
prod_id | nullable string | device product id |
prod_rev | nullable string | device product revision |
usn | nullable string | device unit serial number |
t10_vendor_specific_id | nullable string | device t10 vendor specific device id |
naa_id | nullable string | device naa id |
eui64_id | nullable string | device eui64 id |
logical_block_size | nullable integer | device logical block size |
physical_block_size | nullable integer | device physical block size |
smart_info | nullable object | smart info |
md_info | nullable object | md array info |
device_info | nullable object | device info |
mpath_info | nullable object | single slave device info |
Operating System Device Info
Retrieve an existing operating system storage device.
GET /os-dev/{os_dev_id_or_serial}
Curl Example
$ curl https://mgmt-node/api/os-dev/os_dev:4:10 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:56 GMT
Server: Goliath
ETag: "f160fcc0139f2017ebb5ccff54331aa6"
Content-Type: application/json
Content-Length: 1303
{
"id": "os_dev:4:10",
"uuid": "5a05f431-0a1b-4725-bc8b-ea179aa501b6",
"serial": "OSD0D62194C4062641A",
"evt_qry": "serial=OSD0D62194C4062641A",
"sds_id": null,
"node_id": "node:10000",
"ctime": 1507562840777,
"mtime": 1507570016428,
"seq": 1507570016436,
"label": "device-1",
"notes": "device label updated",
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507569799000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
4,
10,
10,
10
],
"v": "dbg"
},
{
"d": [
0,
3,
3,
3
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507569799668
},
"rec_status": null,
"transient": false,
"path": "/dev/bb/b9a74447-9962-4f82-88c8-1bcd655ff432",
"size": 107374182400,
"initialized": false,
"enabled": false,
"parent": {
"type": [
"os_dev"
],
"id": "os_dev:7:10"
},
"meta": {
"blockbridge_agent": "1f57e3a8-6ade-4aea-900e-3ebb5350f025",
"blockbridge_md": false,
"blockbridge_disk_id": "b9a74447-9962-4f82-88c8-1bcd655ff432"
},
"usable": null,
"used": null,
"device_info": {
"dsn": null,
"enclosure": null,
"present": true,
"owner": "Volume Manager (mirror1)",
"devname": "sde",
"display_name": "scsi/sde",
"serial": "b9a74447-9962-4f82-88c8-1bcd655ff432",
"vendor": "B*BRIDGE",
"model": "SECURE DRIVE",
"bus": "scsi",
"rotational": false,
"type": [
"disk"
],
"_remote_dev_id": null
},
"smart_info": null,
"md_info": null,
"hidden": false
}
Operating System Device List
Enumerate operating system storage devices.
GET /os-dev
Curl Example
$ curl https://mgmt-node/api/os-dev \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:56 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 13655
[
{
"id": "os_dev:4:10",
"uuid": "5a05f431-0a1b-4725-bc8b-ea179aa501b6",
"serial": "OSD0D62194C4062641A",
"evt_qry": "serial=OSD0D62194C4062641A",
"sds_id": null,
"node_id": "node:10000",
"ctime": 1507562840777,
"mtime": 1507569799536,
"seq": 1507569799668,
"label": "device-1",
"notes": "device label updated",
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507569799000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
4,
10,
10,
10
],
"v": "dbg"
},
{
"d": [
0,
3,
3,
3
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507569799668
},
"rec_status": null,
"transient": false,
"path": "/dev/bb/b9a74447-9962-4f82-88c8-1bcd655ff432",
"size": 107374182400,
"initialized": false,
"enabled": false,
"parent": {
"type": [
"os_dev"
],
"id": "os_dev:7:10"
},
"meta": {
"blockbridge_agent": "1f57e3a8-6ade-4aea-900e-3ebb5350f025",
"blockbridge_md": false,
"blockbridge_disk_id": "b9a74447-9962-4f82-88c8-1bcd655ff432"
},
"usable": null,
"used": null,
"device_info": {
"dsn": null,
"enclosure": null,
"present": true,
"owner": "Volume Manager (mirror1)",
"devname": "sde",
"display_name": "scsi/sde",
"serial": "b9a74447-9962-4f82-88c8-1bcd655ff432",
"vendor": "B*BRIDGE",
"model": "SECURE DRIVE",
"bus": "scsi",
"rotational": false,
"type": [
"disk"
],
"_remote_dev_id": null
},
"smart_info": null,
"md_info": null,
"hidden": false
},
{
"id": "os_dev:5:10",
"uuid": "c0edd702-7801-42ef-b675-2b34411ee13e",
"serial": "OSD0D62194C40626402",
"evt_qry": "serial=OSD0D62194C40626402",
"sds_id": null,
"node_id": "node:10000",
"ctime": 1507562840991,
"mtime": 1507569948684,
"seq": 1507569948698,
"label": null,
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507569801000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
0,
2,
2,
2
],
"v": "dbg"
},
{
"d": [
4,
5,
5,
5
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507569801731
},
"rec_status": null,
"transient": false,
"path": "/dev/disk/by-id/md-uuid-791bf0b6:27184b1a:a7cc46b9:c7d4a716-part6",
"size": 18216893952,
"initialized": false,
"enabled": false,
"parent": null,
"meta": {
"blockbridge_agent": "1f57e3a8-6ade-4aea-900e-3ebb5350f025",
"blockbridge_md": false,
"blockbridge_disk_id": "c0edd702-7801-42ef-b675-2b34411ee13e"
},
"usable": null,
"used": null,
"device_info": {
"dsn": null,
"enclosure": null,
"present": true,
"owner": null,
"devname": "md126p6",
"display_name": "md/system",
"serial": null,
"vendor": null,
"model": null,
"bus": null,
"rotational": false,
"type": [
"partition"
],
"_remote_dev_id": null
},
"smart_info": null,
"md_info": {
"chunk_size": null,
"state": "active",
"degraded": false,
"mismatch_cnt": 0,
"created": 1507562801000,
"modified": 1507562801000,
"active_disks": 2,
"working_disks": 2,
"failed_disks": 0,
"spare_disks": 0,
"metadata": {
"version": "0.90.3"
},
"bitmap": {
"chunk_size": null,
"location": "none",
"metadata": "internal",
"space": 0,
"backlog": 0,
"max_backlog_used": 0
},
"raid": {
"rebuild_min": 1048576,
"rebuild_max": 1048576,
"level": "raid1",
"layout": null,
"disks_num": 2
},
"sync_action": {
"action": "none"
},
"disks": [
{
"size": 107338530816,
"slot": 0,
"state": "in_sync",
"errors": null,
"bad_blocks": null,
"blockdev": "8:16",
"dev": "/dev/sdb",
"flags": [
"active",
"in-sync"
],
"health": {
"value": "online",
"syndrome": null,
"updating": false,
"hidden": false,
"device_info": {
"dsn": null,
"enclosure": null,
"present": true,
"owner": "system-array-791bf0b6-2718-4b1a-a7cc-46b9c7d4a716",
"devname": "sdb",
"display_name": "scsi/sdb",
"serial": "6dcf15dc-fdde-4c2b-8cd0-af2cca17c0ba",
"vendor": "B*BRIDGE",
"model": "SECURE DRIVE",
"bus": "scsi",
"rotational": false,
"type": [
"disk"
],
"_remote_dev_id": null
}
},
"oid": "os_dev:3:10",
"uuid": "ea38df59-c5d2-459c-ab85-5c6434e8c9e4",
"display_name": "scsi/sdb",
"preferred_path": "/dev/bb/6dcf15dc-fdde-4c2b-8cd0-af2cca17c0ba",
"remote_oid": null
},
{
"size": 107338530816,
"slot": 1,
"state": "in_sync",
"errors": null,
"bad_blocks": null,
"blockdev": "8:0",
"dev": "/dev/sda",
"flags": [
"active",
"in-sync"
],
"health": {
"value": "online",
"syndrome": null,
"updating": false,
"hidden": false,
"device_info": {
"dsn": null,
"enclosure": null,
"present": true,
"owner": "system-array-791bf0b6-2718-4b1a-a7cc-46b9c7d4a716",
"devname": "sda",
"display_name": "scsi/sda",
"serial": "c88b16a9-20ea-4a54-88b8-2ef9c68d5258",
"vendor": "B*BRIDGE",
"model": "SECURE DRIVE",
"bus": "scsi",
"rotational": false,
"type": [
"disk"
],
"_remote_dev_id": null
}
},
"oid": "os_dev:6:10",
"uuid": "6fd8dd9d-03cb-4020-a753-4cdee61242f5",
"display_name": "scsi/sda",
"preferred_path": "/dev/bb/c88b16a9-20ea-4a54-88b8-2ef9c68d5258",
"remote_oid": null
}
],
"flags": [
"active"
]
},
"hidden": false
},
{
"id": "os_dev:1:10",
"uuid": "88e4cabf-7dac-4950-9ec0-fb4de02599fd",
"serial": "OSD0D62194C40626443",
"evt_qry": "serial=OSD0D62194C40626443",
"sds_id": null,
"node_id": "node:10000",
"ctime": 1507562840328,
"mtime": 1507562858197,
"seq": 1507562861680,
"label": null,
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507562858000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
4,
4,
4,
4
],
"v": "dbg"
},
{
"d": [
1,
1,
1,
1
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507562861680
},
"rec_status": null,
"transient": false,
"path": "/dev/bb/125e92af-2cf2-4152-a07b-b792eabb55fe",
"size": 107374182400,
"initialized": false,
"enabled": false,
"parent": {
"type": [
"os_dev"
],
"id": "os_dev:7:10"
},
"meta": {
"blockbridge_agent": "1f57e3a8-6ade-4aea-900e-3ebb5350f025",
"blockbridge_md": false,
"blockbridge_disk_id": "125e92af-2cf2-4152-a07b-b792eabb55fe"
},
"usable": null,
"used": null,
"device_info": {
"dsn": null,
"enclosure": null,
"present": true,
"owner": "Volume Manager (mirror1)",
"devname": "sdc",
"display_name": "scsi/sdc",
"serial": "125e92af-2cf2-4152-a07b-b792eabb55fe",
"vendor": "B*BRIDGE",
"model": "SECURE DRIVE",
"bus": "scsi",
"rotational": false,
"type": [
"disk"
],
"_remote_dev_id": null
},
"smart_info": null,
"md_info": null,
"hidden": false
},
{
"id": "os_dev:2:10",
"uuid": "180c2fb7-f787-45b4-831c-c56c3e58123f",
"serial": "OSD0D62194C4062647B",
"evt_qry": "serial=OSD0D62194C4062647B",
"sds_id": null,
"node_id": "node:10000",
"ctime": 1507562840465,
"mtime": 1507569948685,
"seq": 1507569948695,
"label": null,
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507569802000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
0,
2,
2,
2
],
"v": "dbg"
},
{
"d": [
2,
5,
5,
5
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507569802681
},
"rec_status": null,
"transient": false,
"path": "/dev/bb/6932606f-1cd8-43bc-bc4c-6fb5f8d42846",
"size": 107374182400,
"initialized": false,
"enabled": false,
"parent": null,
"meta": {
"blockbridge_agent": "1f57e3a8-6ade-4aea-900e-3ebb5350f025",
"blockbridge_md": false,
"blockbridge_disk_id": "6932606f-1cd8-43bc-bc4c-6fb5f8d42846"
},
"usable": null,
"used": null,
"device_info": {
"dsn": null,
"enclosure": null,
"present": true,
"owner": null,
"devname": "sdd",
"display_name": "scsi/sdd",
"serial": "6932606f-1cd8-43bc-bc4c-6fb5f8d42846",
"vendor": "B*BRIDGE",
"model": "SECURE DRIVE",
"bus": "scsi",
"rotational": false,
"type": [
"disk"
],
"_remote_dev_id": null
},
"smart_info": null,
"md_info": null,
"hidden": false
},
{
"id": "os_dev:6:10",
"uuid": "6fd8dd9d-03cb-4020-a753-4cdee61242f5",
"serial": "OSD0D62194C4062643A",
"evt_qry": "serial=OSD0D62194C4062643A",
"sds_id": null,
"node_id": "node:10000",
"ctime": 1507562841153,
"mtime": 1507562847450,
"seq": 1507562849622,
"label": null,
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507562847000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
4,
4,
4,
4
],
"v": "dbg"
},
{
"d": [
1,
1,
1,
1
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507562849622
},
"rec_status": null,
"transient": false,
"path": "/dev/bb/c88b16a9-20ea-4a54-88b8-2ef9c68d5258",
"size": 107374182400,
"initialized": false,
"enabled": false,
"parent": {
"type": [
"os_dev"
],
"id": "os_dev:5:10"
},
"meta": {
"blockbridge_agent": "1f57e3a8-6ade-4aea-900e-3ebb5350f025",
"blockbridge_md": false,
"blockbridge_disk_id": "c88b16a9-20ea-4a54-88b8-2ef9c68d5258"
},
"usable": null,
"used": null,
"device_info": {
"dsn": null,
"enclosure": null,
"present": true,
"owner": "system-array-791bf0b6-2718-4b1a-a7cc-46b9c7d4a716",
"devname": "sda",
"display_name": "scsi/sda",
"serial": "c88b16a9-20ea-4a54-88b8-2ef9c68d5258",
"vendor": "B*BRIDGE",
"model": "SECURE DRIVE",
"bus": "scsi",
"rotational": false,
"type": [
"disk"
],
"_remote_dev_id": null
},
"smart_info": null,
"md_info": null,
"hidden": false
},
{
"id": "os_dev:10:10",
"uuid": "4d16735c-b8bf-4149-950b-5233c7660907",
"serial": "OSD0D62194C406264F8",
"evt_qry": "serial=OSD0D62194C406264F8",
"sds_id": null,
"node_id": "node:10000",
"ctime": 1507568149178,
"mtime": 1507568149513,
"seq": 1507568149699,
"label": "osdev_file1",
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507568149000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
4,
4,
4,
4
],
"v": "dbg"
},
{
"d": [
1,
1,
1,
1
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507568149669
},
"rec_status": null,
"transient": false,
"path": "/tmp/disk1.osdev_file",
"size": 1073741824,
"initialized": false,
"enabled": false,
"parent": null,
"meta": {
"blockbridge_disk_id": "4d16735c-b8bf-4149-950b-5233c7660907"
},
"usable": null,
"used": null,
"device_info": {
"dsn": null,
"enclosure": null,
"present": true,
"owner": null,
"devname": null,
"display_name": null,
"serial": null,
"vendor": null,
"model": null,
"bus": null,
"rotational": null,
"type": null,
"_remote_dev_id": null
},
"smart_info": null,
"md_info": null,
"hidden": false
},
{
"id": "os_dev:3:10",
"uuid": "ea38df59-c5d2-459c-ab85-5c6434e8c9e4",
"serial": "OSD0D62194C40626463",
"evt_qry": "serial=OSD0D62194C40626463",
"sds_id": null,
"node_id": "node:10000",
"ctime": 1507562840630,
"mtime": 1507562847170,
"seq": 1507562849630,
"label": null,
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507562847000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
4,
4,
4,
4
],
"v": "dbg"
},
{
"d": [
1,
1,
1,
1
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507562849630
},
"rec_status": null,
"transient": false,
"path": "/dev/bb/6dcf15dc-fdde-4c2b-8cd0-af2cca17c0ba",
"size": 107374182400,
"initialized": false,
"enabled": false,
"parent": {
"type": [
"os_dev"
],
"id": "os_dev:5:10"
},
"meta": {
"blockbridge_agent": "1f57e3a8-6ade-4aea-900e-3ebb5350f025",
"blockbridge_md": false,
"blockbridge_disk_id": "6dcf15dc-fdde-4c2b-8cd0-af2cca17c0ba"
},
"usable": null,
"used": null,
"device_info": {
"dsn": null,
"enclosure": null,
"present": true,
"owner": "system-array-791bf0b6-2718-4b1a-a7cc-46b9c7d4a716",
"devname": "sdb",
"display_name": "scsi/sdb",
"serial": "6dcf15dc-fdde-4c2b-8cd0-af2cca17c0ba",
"vendor": "B*BRIDGE",
"model": "SECURE DRIVE",
"bus": "scsi",
"rotational": false,
"type": [
"disk"
],
"_remote_dev_id": null
},
"smart_info": null,
"md_info": null,
"hidden": false
},
{
"id": "os_dev:7:10",
"uuid": "7b70f246-5a82-4029-b39e-f139929c9a9e",
"serial": "OSD0D62194C40626422",
"evt_qry": "serial=OSD0D62194C40626422",
"flags": "md",
"sds_id": null,
"node_id": "node:10000",
"ctime": 1507562852823,
"mtime": 1507567764983,
"seq": 1507568230675,
"label": null,
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507564907000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
0,
2,
2,
2
],
"v": "dbg"
},
{
"d": [
1,
8,
8,
8
],
"v": "info"
},
{
"d": [
0,
1,
1,
1
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507568230675
},
"rec_status": null,
"transient": false,
"path": "/dev/disk/by-id/md-uuid-7b70f246:5a824029:b39ef139:929c9a9e",
"size": 107338530816,
"initialized": false,
"enabled": false,
"parent": null,
"meta": {
"blockbridge_agent": "1f57e3a8-6ade-4aea-900e-3ebb5350f025",
"blockbridge_md": true,
"blockbridge_disk_id": "7b70f246-5a82-4029-b39e-f139929c9a9e"
},
"usable": null,
"used": null,
"device_info": {
"dsn": null,
"enclosure": null,
"present": true,
"owner": null,
"devname": "md124",
"display_name": "md/mirror1",
"serial": null,
"vendor": null,
"model": null,
"bus": null,
"rotational": true,
"type": [
"md"
],
"_remote_dev_id": null
},
"smart_info": null,
"md_info": {
"chunk_size": null,
"state": "clean",
"degraded": false,
"mismatch_cnt": 0,
"created": 1507562847000,
"modified": 1507562847000,
"active_disks": 2,
"working_disks": 2,
"failed_disks": 0,
"spare_disks": 0,
"metadata": {
"version": "0.90.3"
},
"bitmap": {
"chunk_size": 268435456,
"location": "file",
"metadata": "internal",
"space": 0,
"backlog": 0,
"max_backlog_used": 0
},
"raid": {
"rebuild_min": 1048576,
"rebuild_max": 1048576,
"level": "raid1",
"layout": null,
"disks_num": 2
},
"sync_action": {
"action": "none"
},
"disks": [
{
"size": 107338530816,
"slot": 0,
"state": "in_sync",
"errors": null,
"bad_blocks": null,
"blockdev": "8:64",
"dev": "/dev/sde",
"flags": [
"active",
"in-sync"
],
"health": {
"value": "online",
"syndrome": null,
"updating": false,
"hidden": false,
"device_info": {
"dsn": null,
"enclosure": null,
"present": true,
"owner": "Volume Manager (mirror1)",
"devname": "sde",
"display_name": "scsi/sde",
"serial": "b9a74447-9962-4f82-88c8-1bcd655ff432",
"vendor": "B*BRIDGE",
"model": "SECURE DRIVE",
"bus": "scsi",
"rotational": false,
"type": [
"disk"
],
"_remote_dev_id": null
}
},
"oid": "os_dev:4:10",
"uuid": "5a05f431-0a1b-4725-bc8b-ea179aa501b6",
"display_name": "scsi/sde",
"preferred_path": "/dev/bb/b9a74447-9962-4f82-88c8-1bcd655ff432",
"remote_oid": null
},
{
"size": 107338530816,
"slot": 1,
"state": "in_sync",
"errors": null,
"bad_blocks": null,
"blockdev": "8:32",
"dev": "/dev/sdc",
"flags": [
"active",
"in-sync"
],
"health": {
"value": "online",
"syndrome": null,
"updating": false,
"hidden": false,
"device_info": {
"dsn": null,
"enclosure": null,
"present": true,
"owner": "Volume Manager (mirror1)",
"devname": "sdc",
"display_name": "scsi/sdc",
"serial": "125e92af-2cf2-4152-a07b-b792eabb55fe",
"vendor": "B*BRIDGE",
"model": "SECURE DRIVE",
"bus": "scsi",
"rotational": false,
"type": [
"disk"
],
"_remote_dev_id": null
}
},
"oid": "os_dev:1:10",
"uuid": "88e4cabf-7dac-4950-9ec0-fb4de02599fd",
"display_name": "scsi/sdc",
"preferred_path": "/dev/bb/125e92af-2cf2-4152-a07b-b792eabb55fe",
"remote_oid": null
}
],
"flags": [
"clean"
]
},
"hidden": false
}
]
Operating System Device Create
Register a new operating system storage device, creating its configuration.
POST /os-dev
Required Parameters
Name | Type | Description |
---|---|---|
path | string | device path string |
node_id | string | storage node id |
raw_size | integer | raw device size in bytes Range: 1000000000 <= value |
parent:type | string | type of identified resource |
Optional Parameters
Name | Type | Description |
---|---|---|
label | nullable string | user assigned label Length: 1..64 |
notes | string | user assigned notes Length: 0..256 |
align_writes_4k | boolean | align all writes to 4KiB boundaries, executing read requests as necessary |
uuid | nullable uuid | object UUID |
Curl Example
$ curl -X POST https://mgmt-node/api/os-dev \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"node_id": "node:10000",
"path": "/tmp/disk.osdev_file",
"raw_size": 1073741824,
"label": "osdev_file"
}'
Response Example
201 Created
Date: Mon, 09 Oct 2017 17:26:55 GMT
Server: Goliath
ETag: "36f4dc2164d2a599050ef5a7753d1308"
Content-Type: application/json
Content-Length: 823
{
"id": "os_dev:14:10",
"uuid": "e40d2e16-b611-4d71-8b9a-0d3535871177",
"serial": "OSD0D62194C406264B9",
"evt_qry": "serial=OSD0D62194C406264B9",
"sds_id": null,
"node_id": "node:10000",
"ctime": 1507570015827,
"mtime": 1507570015889,
"seq": 1507570015901,
"label": "osdev_file",
"notes": null,
"status": {
"value": "pending",
"indicator": "degraded",
"detail": "retrieving status; please wait"
},
"ec": {
"table": {
"time": null,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"v": "dbg",
"d": [
0,
0,
0,
0
]
},
{
"v": "info",
"d": [
0,
0,
0,
0
]
},
{
"v": "warn",
"d": [
0,
0,
0,
0
]
},
{
"v": "err",
"d": [
0,
0,
0,
0
]
}
]
},
"status": "current",
"seq": 1507570015840
},
"rec_status": null,
"transient": false,
"path": "/tmp/disk.osdev_file",
"size": 1073741824,
"initialized": false,
"enabled": false,
"parent": null,
"usable": null,
"used": null,
"device_info": null,
"smart_info": null,
"md_info": null,
"hidden": false
}
Operating System Device Remove
Remove the configuration of an existing operating system storage device.
DELETE /os-dev/{os_dev_id_or_serial}
Curl Example
$ curl -X DELETE https://mgmt-node/api/os-dev/OSD0D62194C406264B9 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
204 No Content
Date: Mon, 09 Oct 2017 17:26:56 GMT
Server: Goliath
Operating System Device Update
Change the configuration of an existing operating system storage device.
PATCH /os-dev/{os_dev_id_or_serial}
Optional Parameters
Name | Type | Description |
---|---|---|
path | string | device path |
label | nullable string | user assigned label Length: 1..64 |
notes | string | user assigned notes Length: 0..256 |
align_writes_4k | boolean | align all writes to 4KiB boundaries, executing read requests as necessary |
parent:type | string | type of identified resource |
Curl Example
$ curl -X PATCH https://mgmt-node/api/os-dev/os_dev:4:10 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"label": "device-1",
"notes": "device label updated"
}'
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:56 GMT
Server: Goliath
ETag: "f160fcc0139f2017ebb5ccff54331aa6"
Content-Type: application/json
Content-Length: 1303
{
"id": "os_dev:4:10",
"uuid": "5a05f431-0a1b-4725-bc8b-ea179aa501b6",
"serial": "OSD0D62194C4062641A",
"evt_qry": "serial=OSD0D62194C4062641A",
"sds_id": null,
"node_id": "node:10000",
"ctime": 1507562840777,
"mtime": 1507570016428,
"seq": 1507570016436,
"label": "device-1",
"notes": "device label updated",
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507569799000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
4,
10,
10,
10
],
"v": "dbg"
},
{
"d": [
0,
3,
3,
3
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507569799668
},
"rec_status": null,
"transient": false,
"path": "/dev/bb/b9a74447-9962-4f82-88c8-1bcd655ff432",
"size": 107374182400,
"initialized": false,
"enabled": false,
"parent": {
"type": [
"os_dev"
],
"id": "os_dev:7:10"
},
"meta": {
"blockbridge_agent": "1f57e3a8-6ade-4aea-900e-3ebb5350f025",
"blockbridge_md": false,
"blockbridge_disk_id": "b9a74447-9962-4f82-88c8-1bcd655ff432"
},
"usable": null,
"used": null,
"device_info": {
"dsn": null,
"enclosure": null,
"present": true,
"owner": "Volume Manager (mirror1)",
"devname": "sde",
"display_name": "scsi/sde",
"serial": "b9a74447-9962-4f82-88c8-1bcd655ff432",
"vendor": "B*BRIDGE",
"model": "SECURE DRIVE",
"bus": "scsi",
"rotational": false,
"type": [
"disk"
],
"_remote_dev_id": null
},
"smart_info": null,
"md_info": null,
"hidden": false
}
System Datastore
A System Datastore (or just Datastore) defines a pool of storage from which you, your users, and applications will provision secure virtual storage services. You can aggregate direct-attached and iSCSI storage devices to create a single large pool of storage.
Attributes
Name | Type | Description |
---|---|---|
id | string | object id |
uuid | uuid | object uuid |
label | string | user assigned label Length: 1..64 |
notes | nullable string | user assigned notes Length: 0..256 |
serial | string | system datastore serial number |
ctime | integer | system datastore create time Range: 0 <= value |
mtime | integer | system datastore last modified time Range: 0 <= value |
product_id | string | product id |
node_id | string | node id |
cplx_id | nullable integer | processor complex assignment |
networks | nullable array | set of interfaces to bind to datastore--null means bind all interfaces |
networks | nullable array | set of interfaces to bind to datastore--null means bind all interfaces |
size_reservable | nullable integer | size of system datastore storage that is reservable |
size_reserve_hard_threshold | nullable integer | When the available size is less than this threshold, the data plane denies write allocations for volumes that exceed their reserve. This is the amount of storage held for use only by reservation holders. |
size_reserve_soft_threshold | nullable integer | When the available size is less than this threshold, the data plane marks the datastore degraded. |
iops_rating | nullable integer | system datastore IOPS rating |
iops_scheduling | nullable boolean | system datastore supports provisioned IOPS |
iops_io_size | nullable integer | size in bytes (aligned to 4096) used for IOPS accounting |
iops_reserve_pct | nullable integer | percent of IOPS reserved |
vss_provisioning | boolean | virtual storage services are allowed to provision out of this system datastore |
label_tag | nullable boolean | automatically use the system datastore label as a provisioning tag |
blk_encode_default | nullable string | default block format for virtual disks one of: "aes256-gcm-4k" or "aes128-xts-4k" |
pool | nullable object | system datastore pool configuration |
pool:strategy | string | pool allocation strategy one of: "weighted" or "ranked" or "ranked_weighted" or "balanced_unused_percentage" or "balanced_unused" |
pool:devs/dev_id | string | device id |
pool:devs/allocation | boolean | data allocation is permitted |
pool:devs/rank | integer | allocation rank Range: 1 <= value <= 255 |
pool:devs/weight | integer | allocation weight Range: 0 <= value <= 255 |
pool:rebalance:enabled | boolean | rebalancing administrative control |
pool:rebalance:evaluate | string | evaluate pool balance once or continuously during scheduled interval one of: "continuous" or "once" |
pool:rebalance:threshold | number | do not rebalance until the pool is at least this percentage out of balance Range: 0 <= value <= 100 |
pool:rebalance:start_time | integer | starting time of day Range: 0 <= value <= 86399000 |
pool:rebalance:end_time | integer | ending time of day Range: 0 <= value <= 86399000 |
pool:rebalance:bandwidth_limit | nullable integer | rebalance bandwidth limit |
data:log_dev_id | string | system datastore log device |
data:log_compress | nullable boolean | enable data log compression |
data:log_bypass | nullable boolean | do not use the write ahead log (XTS only, implies sequential_write_direct) |
data:sequential_write_direct | nullable boolean | sequential writes go direct to pool storage |
data:write_merge_timeout | nullable integer | write merge timeout |
data:segment_size | nullable string | segment size one of: "128KiB" or "144KiB" or "256KiB" |
meta:dev_id | string | device to use for metasystem |
meta:cache_size | nullable integer | metasystem cache size |
compression:enabled | nullable boolean | compression administrative state |
compression:codec | nullable string | compression codec one of: "economy" or "adaptive" or "adaptive_economy" or "adaptive_performance" or "performance" |
compression:iops_limit | nullable integer | limit sustained I/O operations per second |
compression:activity_monitor | nullable integer | prevent compression of active data (in minutes) |
compression:cycle_detection | nullable integer | recurring compression of active data (in minutes) |
compression:start_time | nullable integer | limit compression processing, starting time of day Range: 0 <= value <= 86399000 |
compression:end_time | nullable integer | limit compression processing, ending time of day Range: 0 <= value <= 86399000 |
product:notes | string | user assigned notes Length: 0..256 |
product:tags | array | provisioning tags |
status:indicator | string | status indicator one of: "online" or "degraded" or "offline" or "na" |
status:value | string | status value one of: "online" or "degraded" or "offline" or "pending" or "payment" |
status:detail | nullable string | status detail |
size | nullable integer | total size of system datastore (in bytes) |
used | nullable integer | used size of system datastore (in bytes) |
compress_gain | nullable integer | reduction in usage due to compression (in bytes) |
available | nullable integer | available size of system datastore (in bytes) |
reserve_available | nullable integer | unreserved reservable (in bytes) |
reserve_size | nullable integer | total reserve size of system datastore (in bytes) |
reserve_used | nullable integer | used reserve size of system datastore (in bytes) |
reserve_iops | nullable integer | total reserved IOPS of system datastore |
iops_read | nullable integer | Read operations per second, normalized to 4K |
iops_write | nullable integer | Write operations per second, normalized to 4K |
iops | nullable integer | I/O operations per second, normalized to 4K |
bw_read | nullable integer | instantaneous read bandwidth |
bw_write | nullable integer | instantaneous write bandwidth |
bw | nullable integer | instantaneous read and write bandwidth |
rebalanced | nullable integer | space rebalanced, current or prior rebalancing run |
iops_rebalance | nullable integer | current rebalancing IOPS |
imbalance | nullable integer | imbalance of current pool allocation, in bytes |
iops_merge_up | nullable integer | current decompress IOPS (due to partial overwrite of a compressed segments) |
iops_merge_down | nullable integer | current compress IOPS |
task_depth | nullable integer | one second peak task depth |
task_latency | nullable integer | three second windowed average task latency (in microseconds) |
metrics_rts:used_percent | nullable number | used size of system datastore (in percentage of rts.size) |
metrics_rts:used_note | nullable string | human-readable usage notice text |
metrics_rts:reserve_size_percent | nullable number | current total size reserved (in percentage of cfg.size_reservable) |
metrics_rts:reserve_size_note | nullable string | human-readable reserve size notice text |
metrics_rts:reserve_iops_percent | nullable number | total IOPS reserved (as a percentage of reservable IOPS |
metrics_rts:size_reserve_hard_threshold_remain | nullable integer | Number of bytes until hard threshold is reached |
metrics_rts:size_reserve_hard_threshold_percent | nullable number | Reserve hard threshold (in percentage of rts.size) |
metrics_rts:size_efficiency_planned | nullable number | ratio of configured reservable size to pool size |
metrics_rts:size_efficiency_planned_desc | nullable string | ratio of configured reservable size to pool size (formatted string) |
metrics_rts:size_efficiency_current | nullable number | ratio of current size reserved to current size used |
metrics_rts:size_efficiency_current_desc | nullable string | ratio of current size reserved to current size used (formatted string) |
metrics_rts:size_efficiency_current_note | nullable string | human-readable note about the ratio of current size reserved to current size used |
metrics_rts:compression_ratio | nullable number | ratio of the decompressed size of the data to the raw (compressed) size currently used |
metrics_rts:available_percent | nullable number | available size of system datastore (in percentage of rts.available) |
metrics_rts:reserve_available_percent | nullable number | current free reservable (in percentage of cfg.reserve_available) |
metrics_rts:metadata_used_percent | nullable number | percentage of metadata database used |
data_rts:log_size | nullable integer | runtime system datastore log size (in bytes) |
data_rts:log_compress_ratio | nullable number | data log compression ratio |
data_rts:cache_size | nullable integer | data cache size |
meta_rts:size | nullable integer | runtime system datastore metasystem size (in bytes) |
meta_rts:log_size | nullable integer | runtime system datastore metasystem log size (in bytes) |
meta_rts:page_size | nullable integer | metasystem page size (in bytes) |
meta_rts:pages | nullable integer | total number of pages in metasystem |
meta_rts:pages_used | nullable integer | number of pages consumed in metasystem |
meta_rts:pages_cached | nullable integer | number of pages in cache in metasystem |
meta_rts:pages_dirty | nullable integer | number of dirty pages in cache in metasystem |
meta_rts:pages_pinned | nullable integer | number of pages pinned into cache in metasystem |
meta_rts:pages_compressed | nullable integer | of total, number of pages that are compressed in cache |
meta_rts:cache_size | nullable integer | metasystem cache size |
alerts_rts | nullable array | list of alerts |
alerts_rts/symbol | string | no documentation |
alerts_rts/text | string | no documentation |
alerts_rts/threshold | number | builtin number type -- integer or double allowed |
alerts_rts/time | date-time | builtin ISO 8601 time string |
alerts_rts/value | number | builtin number type -- integer or double allowed |
alerts_rts/indicator | string | status indicator one of: "online" or "degraded" or "offline" or "na" |
alerts_rts/limit | number | builtin number type -- integer or double allowed |
usage:vdisk_int | nullable integer | internal virtual disks on node |
usage:vss | nullable integer | virtual storage services on node |
usage:targets | nullable integer | targets on node |
usage:sessions_nvme | nullable integer | NVMe sessions (associations) connected to node targets |
usage:dev | nullable integer | iSCSI and OS devices on node |
usage:vdisk | nullable integer | virtual disks on node |
usage:snapshots | nullable integer | snapshots on node |
usage:conn_secure | nullable integer | secure iSCSI session connections to node targets |
usage:conn_insecure | nullable integer | insecure iSCSI session connections to node targets |
usage:nvme_qps | nullable integer | NVMe queue pairs, including admin queues |
usage:conn | nullable integer | iSCSI session connections to node targets |
usage:clones | nullable integer | cloned disks on node |
usage:vdisk_ext | nullable integer | external virtual disks on node |
usage:os_dev | nullable integer | OS devices on node |
usage:sessions | nullable integer | iSCSI+NVMe sessions connected to node targets |
usage:accounts | nullable integer | accounts on node |
usage:profiles | nullable integer | initiator profiles on node |
usage:sessions_iscsi | nullable integer | iSCSI sessions connected to node targets |
network | nullable object | builtin object type (contents are unchecked) |
System Datastore Info
Retrieve an existing system datastore.
GET /sys-ds/{sys_ds_id_or_serial}
Curl Example
$ curl https://mgmt-node/api/sys-ds/sys_ds:5:10 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:58 GMT
Server: Goliath
ETag: "ce517ae0d3c7c0a2b2eed794fa30ada8"
Content-Type: application/json
Content-Length: 1775
{
"id": "sys_ds:5:10",
"uuid": "6bc54a1f-df21-4229-a6ce-d6e4f062c56a",
"serial": "SDS1F62194C4062640D",
"evt_qry": "serial=SDS1F62194C4062640D",
"node_id": "node:10000",
"ctime": 1507570016862,
"mtime": 1507570018719,
"seq": 1507570018800,
"label": "datastore-1",
"notes": "sys-ds label_tag updated",
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507570018000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
7,
7,
7,
7
],
"v": "dbg"
},
{
"d": [
3,
3,
3,
3
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507570018685
},
"rec_status": null,
"product_id": "product:5:10",
"size_reservable": null,
"size_reserve_hard_threshold": null,
"size_reserve_soft_threshold": null,
"iops_reserve_pct": 100,
"iops_rating": 50000,
"iops_scheduling": false,
"iops_io_size": 32768,
"vss_provisioning": true,
"label_tag": true,
"product": {
"tags": [
]
},
"pool": {
"rebalance": {
"enabled": false,
"evaluate": "continuous",
"threshold": 5,
"start_time": 0,
"end_time": 0,
"bandwidth_limit": null
},
"strategy": "weighted",
"devs": [
{
"dev_id": "os_dev:5:10",
"allocation": true,
"rank": 1,
"weight": 1
},
{
"dev_id": "os_dev:2:10",
"allocation": true,
"rank": 1,
"weight": 1
}
]
},
"meta": {
"dev_id": "os_dev:5:10",
"cache_size": 16777216
},
"data": {
"log_compress": false,
"log_bypass": false,
"sequential_write_direct": true,
"write_merge_timeout": 0,
"segment_size": "128KiB",
"log_dev_id": "os_dev:5:10"
},
"blk_encode_default": "aes128-xts-4k",
"size": 18090950656,
"used": 0,
"iops_read": 0,
"iops_write": 0,
"bw_read": 0,
"bw_write": 0,
"reserve_size": 0,
"reserve_used": 0,
"reserve_iops": 0,
"data_rts": {
"log_size": 8388608,
"log_compress_ratio": 1.0
},
"meta_rts": {
"size": 16777216,
"log_size": 8388608,
"page_size": 4096,
"pages": 1919,
"pages_used": 526,
"pages_cached": 336,
"pages_dirty": 9,
"pages_pinned": 333,
"pages_compressed": 0
},
"imbalance": 0
}
System Datastore List
Enumerate system datastores.
GET /sys-ds
Curl Example
$ curl https://mgmt-node/api/sys-ds \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:57 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 1679
[
{
"id": "sys_ds:5:10",
"uuid": "6bc54a1f-df21-4229-a6ce-d6e4f062c56a",
"serial": "SDS1F62194C4062640D",
"evt_qry": "serial=SDS1F62194C4062640D",
"node_id": "node:10000",
"ctime": 1507570016862,
"mtime": 1507570017846,
"seq": 1507570017863,
"label": "datastore-1",
"notes": "sys-ds label_tag updated",
"status": {
"value": "pending",
"indicator": "degraded",
"detail": "retrieving status; please wait"
},
"ec": {
"table": {
"time": 1507570017000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
2,
2,
2,
2
],
"v": "dbg"
},
{
"d": [
1,
1,
1,
1
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507570017669
},
"rec_status": null,
"product_id": "product:5:10",
"size_reservable": null,
"size_reserve_hard_threshold": null,
"size_reserve_soft_threshold": null,
"iops_reserve_pct": 100,
"iops_rating": 50000,
"iops_scheduling": false,
"iops_io_size": 32768,
"vss_provisioning": true,
"label_tag": true,
"product": {
"tags": [
]
},
"pool": {
"rebalance": {
"enabled": false,
"evaluate": "continuous",
"threshold": 5,
"start_time": 0,
"end_time": 0,
"bandwidth_limit": null
},
"strategy": "weighted",
"devs": [
]
},
"meta": {
"dev_id": "os_dev:5:10",
"cache_size": 16777216
},
"data": {
"log_compress": false,
"log_bypass": false,
"sequential_write_direct": true,
"write_merge_timeout": 0,
"segment_size": "128KiB",
"log_dev_id": "os_dev:5:10"
},
"blk_encode_default": "aes128-xts-4k",
"size": null,
"used": null,
"iops_read": null,
"iops_write": null,
"bw_read": null,
"bw_write": null,
"reserve_size": null,
"reserve_used": null,
"reserve_iops": null,
"data_rts": {
"log_size": null
},
"meta_rts": {
"size": null,
"log_size": null,
"page_size": null,
"pages": null,
"pages_used": null,
"pages_cached": null,
"pages_dirty": null,
"pages_pinned": null,
"pages_compressed": null
},
"imbalance": null
}
]
System Datastore Create
Create a new system datastore.
POST /sys-ds
Required Parameters
Name | Type | Description |
---|---|---|
data:log_dev_id | string | data journal device id |
data:log_size | integer | data journal size in bytes default: 8388608 Range: 4194304 <= value <= 17179869184 |
data:log_compress | boolean | enable data log compression |
data:log_bypass | boolean | do not use the write ahead log (XTS only, implies sequential_write_direct) |
data:sequential_write_direct | boolean | sequential writes go direct to pool storage default: true |
data:write_merge_timeout | integer | write merge timeout (microseconds) default: 0 Range: 0 <= value <= 10000000 |
data:segment_size | string | segment size one of: "128KiB" or "144KiB" or "256KiB" |
meta:dev_id | string | thin-provisioning metadata device id |
meta:size | integer | thin-provisioning metadata size in bytes default: 16777216 Range: 16777216 <= value |
meta:log_size | integer | thin-provisioning metadata journal size in bytes (encapsulated inside metadata) default: 8388608 Range: 4194304 <= value |
meta:cache_size | nullable integer | thin-provisioning metadata cache size Range: 4194304 <= value |
node_id | string | node id |
Optional Parameters
Name | Type | Description |
---|---|---|
label | string | user assigned label Length: 1..64 |
notes | string | user assigned notes Length: 0..256 |
strategy | string | pool allocation strategy default: "weighted" one of: "weighted" or "ranked" or "ranked_weighted" or "balanced_unused_percentage" or "balanced_unused" |
size_reservable | nullable integer | size of storage that may be reserved by disks and services Range: 0 <= value |
size_reserve_hard_threshold | nullable integer | the amount of storage held for use only by reservation holders Range: 0 <= value |
size_reserve_soft_threshold | nullable integer | when there is less storage than this available, the datastore is marked degraded Range: 0 <= value |
iops_reserve_pct | integer | percent of storage IOPS that may be reserved by services default: 100 Range: 0 <= value <= 100 |
iops_rating | integer | administrator assigned storage subsystem rating in I/O operations per second default: 50000 Range: 100 <= value <= 1000000 |
iops_scheduling | boolean | IOPS scheduling is enabled |
vss_provisioning | boolean | virtual storage service provisioning is enabled default: true |
label_tag | boolean | system datastore label automatically entered as a provisioning tag default: true |
product:tags | array | array of product tags |
blk_encode_default | string | default block encoding for user data one of: "aes256-gcm-4k" or "aes128-xts-4k" |
backup_mrdb_size | integer | configuration backup database size on metadata device default: 33554432 Range: 1048576 <= value <= 33554432 |
uuid | uuid | object UUID |
rebalance:enabled | boolean | rebalancing administrative control |
rebalance:evaluate | string | evaluate pool balance once or continuously during scheduled interval default: "continuous" one of: "continuous" or "once" |
rebalance:threshold | number | do not rebalance until the pool is at least this percentage out of balance default: 5 Range: 0 <= value <= 100 |
rebalance:start_time | integer | starting time of day default: 0 Range: 0 <= value <= 86399000 |
rebalance:end_time | integer | ending time of day default: 0 Range: 0 <= value <= 86399000 |
rebalance:bandwidth_limit | nullable integer | rebalance bandwidth limit |
iops_io_size | integer | size in bytes (aligned to 4096) used for IOPS accounting default: 32768 Range: 4096 <= value <= 131072 |
compression:enabled | boolean | compression administrative state |
compression:codec | string | compression codec default: "adaptive_economy" one of: "economy" or "adaptive" or "adaptive_economy" or "adaptive_performance" or "performance" |
compression:iops_limit | nullable integer | limit sustained I/O operations per second |
compression:activity_monitor | integer | prevent compression of active data (in minutes) default: 10 |
compression:cycle_detection | integer | recurring compression of active data (in minutes) default: 1440 |
compression:start_time | integer | limit compression processing, starting time of day default: 0 Range: 0 <= value <= 86399000 |
compression:end_time | integer | limit compression processing, ending time of day default: 0 Range: 0 <= value <= 86399000 |
cplx_id | nullable integer | processor complex assignment default: 0 |
networks | nullable array | set of interfaces to bind to datastore |
networks | nullable array | set of interfaces to bind to datastore |
Curl Example
$ curl -X POST https://mgmt-node/api/sys-ds \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"node_id": "node:10000",
"label": "datastore-1",
"data": {
"log_dev_id": "os_dev:5:10"
},
"meta": {
"dev_id": "os_dev:5:10"
}
}'
Response Example
201 Created
Date: Mon, 09 Oct 2017 17:26:57 GMT
Server: Goliath
ETag: "54f70ac52dba7a8c51c3ca5abd36b418"
Content-Type: application/json
Content-Length: 1646
{
"id": "sys_ds:5:10",
"uuid": "6bc54a1f-df21-4229-a6ce-d6e4f062c56a",
"serial": "SDS1F62194C4062640D",
"evt_qry": "serial=SDS1F62194C4062640D",
"node_id": "node:10000",
"ctime": 1507570016862,
"mtime": 1507570017491,
"seq": 1507570017506,
"label": "datastore-1",
"notes": null,
"status": {
"value": "pending",
"indicator": "degraded",
"detail": "retrieving status; please wait"
},
"ec": {
"table": {
"time": null,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"v": "dbg",
"d": [
0,
0,
0,
0
]
},
{
"v": "info",
"d": [
0,
0,
0,
0
]
},
{
"v": "warn",
"d": [
0,
0,
0,
0
]
},
{
"v": "err",
"d": [
0,
0,
0,
0
]
}
]
},
"status": "current",
"seq": 1507570016873
},
"rec_status": null,
"product_id": "product:5:10",
"size_reservable": null,
"size_reserve_hard_threshold": null,
"size_reserve_soft_threshold": null,
"iops_reserve_pct": 100,
"iops_rating": 50000,
"iops_scheduling": false,
"iops_io_size": 32768,
"vss_provisioning": true,
"label_tag": true,
"product": {
"tags": [
]
},
"pool": {
"rebalance": {
"enabled": false,
"evaluate": "continuous",
"threshold": 5,
"start_time": 0,
"end_time": 0,
"bandwidth_limit": null
},
"strategy": "weighted",
"devs": [
]
},
"meta": {
"dev_id": "os_dev:5:10",
"cache_size": 16777216
},
"data": {
"log_compress": false,
"log_bypass": false,
"sequential_write_direct": true,
"write_merge_timeout": 0,
"segment_size": "128KiB",
"log_dev_id": "os_dev:5:10"
},
"blk_encode_default": "aes128-xts-4k",
"size": null,
"used": null,
"iops_read": null,
"iops_write": null,
"bw_read": null,
"bw_write": null,
"reserve_size": null,
"reserve_used": null,
"reserve_iops": null,
"data_rts": {
"log_size": null
},
"meta_rts": {
"size": null,
"log_size": null,
"page_size": null,
"pages": null,
"pages_used": null,
"pages_cached": null,
"pages_dirty": null,
"pages_pinned": null,
"pages_compressed": null
},
"imbalance": null
}
System Datastore Remove
Remove an existing system datastore. Its storage pool must be empty.
DELETE /sys-ds/{sys_ds_id_or_serial}
Curl Example
$ curl -X DELETE https://mgmt-node/api/sys-ds/SDS1F62194C4062640D \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
204 No Content
Date: Mon, 09 Oct 2017 17:27:38 GMT
Server: Goliath
System Datastore Unlink
Unlink a system datastore from its processor complex.
POST /sys-ds/{sys_ds_id_or_serial}/actions/unlink
Curl Example
$ curl -X POST FIXME
Response Example
HTTP/1.1 200 OK
System Datastore Query Usage
Retrieve datastore usage metrics for the specified sys_ds id or serial number.
GET /sys-ds/{sys_ds_id_or_serial}/usage
Optional Parameters
Name | Type | Description |
---|---|---|
tstart | date-time | start time for query default: -604800000 |
tend | integer | end time for query default: -1 Range: 0 <= value |
granularity | string | evaluation granularity default: "hour" one of: "hour" or "day" |
stats | array | limit results to subset of datastore metrics |
with_points | boolean | include raw metric data suitable for graphing |
Curl Example
$ curl FIXME
Response Example
HTTP/1.1 200 OK
System Datastore Update
Change the configuration of an existing system datastore.
PATCH /sys-ds/{sys_ds_id_or_serial}
Optional Parameters
Name | Type | Description |
---|---|---|
label | string | user assigned label Length: 1..64 |
notes | string | user assigned notes Length: 0..256 |
data:cache_size | integer | data cache size in bytes |
data:log_compress | boolean | enable data log compression |
data:log_bypass | boolean | do not use the write ahead log (XTS only, implies sequential_write_direct) |
data:sequential_write_direct | boolean | sequential writes go direct to pool storage |
data:write_merge_timeout | integer | write merge timeout Range: 0 <= value <= 10000000 |
meta:cache_size | integer | thin-provisioning metadata cache size in bytes |
pool:strategy | string | pool allocation strategy one of: "weighted" or "ranked" or "ranked_weighted" or "balanced_unused_percentage" or "balanced_unused" |
pool:devs/dev_id | string | device id |
pool:devs/allocation | boolean | data allocation is permitted |
pool:devs/rank | integer | allocation rank Range: 1 <= value <= 255 |
pool:devs/weight | integer | allocation weight Range: 0 <= value <= 255 |
pool:rebalance:enabled | boolean | rebalancing administrative control |
pool:rebalance:evaluate | string | evaluate pool balance once or continuously during scheduled interval one of: "continuous" or "once" |
pool:rebalance:threshold | number | do not rebalance until the pool is at least this percentage out of balance Range: 0 <= value <= 100 |
pool:rebalance:start_time | integer | starting time of day Range: 0 <= value <= 86399000 |
pool:rebalance:end_time | integer | ending time of day Range: 0 <= value <= 86399000 |
pool:rebalance:bandwidth_limit | nullable integer | rebalance bandwidth limit |
iops_reserve_pct | integer | percent of storage IOPS that may be reserved by services Range: 0 <= value <= 100 |
size_reservable | nullable integer | size of storage that may be reserved by disks and services Range: 0 <= value |
size_reserve_hard_threshold | nullable integer | the amount of storage held for use only by reservation holders Range: 0 <= value |
size_reserve_soft_threshold | nullable integer | when there is less storage than this available, the datastore is marked degraded Range: 0 <= value |
iops_rating | integer | administrator assigned storage subsystem rating in I/O operations per second Range: 100 <= value <= 1000000 |
iops_scheduling | boolean | IOPS scheduling is enabled |
vss_provisioning | boolean | virtual storage service provisioning is enabled |
label_tag | boolean | system datastore label automatically entered as a provisioning tag |
product:tags | array | array of product tags |
product:notes | string | user assigned notes Length: 0..256 |
cplx_id | nullable integer | processor complex assignment |
networks | nullable array | set of interfaces to bind to datastore |
networks | nullable array | set of interfaces to bind to datastore |
compression:enabled | boolean | compression administrative state |
compression:codec | string | compression codec one of: "economy" or "adaptive" or "adaptive_economy" or "adaptive_performance" or "performance" |
compression:iops_limit | nullable integer | limit sustained I/O operations per second |
compression:activity_monitor | integer | prevent compression of active data (in minutes) |
compression:cycle_detection | integer | recurring compression of active data (in minutes) |
compression:start_time | integer | limit compression processing, starting time of day Range: 0 <= value <= 86399000 |
compression:end_time | integer | limit compression processing, ending time of day Range: 0 <= value <= 86399000 |
iops_io_size | integer | size in bytes (aligned to 4096) used for IOPS accounting Range: 4096 <= value <= 131072 |
Curl Example
$ curl -X PATCH https://mgmt-node/api/sys-ds/sys_ds:5:10 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"label_tag": true,
"notes": "sys-ds label_tag updated"
}'
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:57 GMT
Server: Goliath
ETag: "93eca1e08e41fd73ca58d5c023a3590c"
Content-Type: application/json
Content-Length: 1677
{
"id": "sys_ds:5:10",
"uuid": "6bc54a1f-df21-4229-a6ce-d6e4f062c56a",
"serial": "SDS1F62194C4062640D",
"evt_qry": "serial=SDS1F62194C4062640D",
"node_id": "node:10000",
"ctime": 1507570016862,
"mtime": 1507570017846,
"seq": 1507570017863,
"label": "datastore-1",
"notes": "sys-ds label_tag updated",
"status": {
"value": "pending",
"indicator": "degraded",
"detail": "retrieving status; please wait"
},
"ec": {
"table": {
"time": 1507570017000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
2,
2,
2,
2
],
"v": "dbg"
},
{
"d": [
1,
1,
1,
1
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507570017669
},
"rec_status": null,
"product_id": "product:5:10",
"size_reservable": null,
"size_reserve_hard_threshold": null,
"size_reserve_soft_threshold": null,
"iops_reserve_pct": 100,
"iops_rating": 50000,
"iops_scheduling": false,
"iops_io_size": 32768,
"vss_provisioning": true,
"label_tag": true,
"product": {
"tags": [
]
},
"pool": {
"rebalance": {
"enabled": false,
"evaluate": "continuous",
"threshold": 5,
"start_time": 0,
"end_time": 0,
"bandwidth_limit": null
},
"strategy": "weighted",
"devs": [
]
},
"meta": {
"dev_id": "os_dev:5:10",
"cache_size": 16777216
},
"data": {
"log_compress": false,
"log_bypass": false,
"sequential_write_direct": true,
"write_merge_timeout": 0,
"segment_size": "128KiB",
"log_dev_id": "os_dev:5:10"
},
"blk_encode_default": "aes128-xts-4k",
"size": null,
"used": null,
"iops_read": null,
"iops_write": null,
"bw_read": null,
"bw_write": null,
"reserve_size": null,
"reserve_used": null,
"reserve_iops": null,
"data_rts": {
"log_size": null
},
"meta_rts": {
"size": null,
"log_size": null,
"page_size": null,
"pages": null,
"pages_used": null,
"pages_cached": null,
"pages_dirty": null,
"pages_pinned": null,
"pages_compressed": null
},
"imbalance": null
}
System Datastore Pool Add
Add an iSCSI storage device or an OS storage device to the storage pool of a system datastore.
POST /sys-ds/{sys_ds_id_or_serial}/actions/pool-add
Required Parameters
Name | Type | Description |
---|---|---|
dev_id | string | device id |
Optional Parameters
Name | Type | Description |
---|---|---|
allocation | boolean | data allocation is enabled default: true |
rank | integer | allocation rank default: 1 Range: 1 <= value <= 255 |
weight | integer | allocation weight default: 1 Range: 0 <= value <= 255 |
Curl Example
$ curl -X POST https://mgmt-node/api/sys-ds/sys_ds:5:10/actions/pool-add \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"dev_id": "os_dev:5:10"
}'
Response Example
204 No Content
Date: Mon, 09 Oct 2017 17:26:58 GMT
Server: Goliath
System Datastore Pool Delete
Remove an iSCSI storage device or an OS storage device from the storage pool of a system datastore. The device must not contain any user data. Use the pool destage action to move user data away from the device prior to removing it from the pool.
POST /sys-ds/{sys_ds_id_or_serial}/actions/pool-del
Required Parameters
Name | Type | Description |
---|---|---|
dev_id | string | device id |
Curl Example
$ curl -X POST https://mgmt-node/api/sys-ds/sys_ds:5:10/actions/pool-del \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"dev_id": "os_dev:5:10"
}'
Response Example
204 No Content
Date: Mon, 09 Oct 2017 17:27:32 GMT
Server: Goliath
System Datastore Pool Destage
Move all user data off of an iSCSI or OS storage device to other devices in the system datastore storage pool. There must be enough room on the remaining set of pool devices to hold the data.
POST /sys-ds/{sys_ds_id_or_serial}/actions/pool-destage
Required Parameters
Name | Type | Description |
---|---|---|
dev_id | string | device id |
Optional Parameters
Name | Type | Description |
---|---|---|
limit_bandwidth | boolean | limit bandwidth usage |
bandwidth | integer | bandwidth limit in bytes/sec |
Curl Example
$ curl -X POST https://mgmt-node/api/sys-ds/sys_ds:5:10/actions/pool-destage \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"dev_id": "os_dev:5:10"
}'
Response Example
204 No Content
Date: Mon, 09 Oct 2017 17:27:32 GMT
Server: Goliath
System Datastore Benchmark
Initiate a benchmark test for the storage pool of a system datastore.
POST /sys-ds/{sys_ds_id_or_serial}/actions/benchmark
Required Parameters
Name | Type | Description |
---|---|---|
range | integer | byte range of test Range: 1048576 <= value |
workload | string | benchmark workload type one of: "sequential" or "random" |
preformat | boolean | write entire range prior to test |
Optional Parameters
Name | Type | Description |
---|---|---|
read_percent | integer | percentage of read I/Os default: 50 Range: 0 <= value <= 100 |
encoding | string | block encoding one of: "aes256-gcm-4k" or "aes128-xts-4k" |
duration | integer | time in seconds to run test default: 300 |
iosize_min | integer | minimum I/O size default: 4096 Range: 512 <= value <= 1048576 |
iosize_max | integer | maximum I/O size default: 4096 Range: 512 <= value <= 1048576 |
align | integer | I/O offset alignment default: 4096 Range: 512 <= value <= 1048576 |
queue_depth | integer | maximum number of I/O's outstanding default: 64 Range: 1 <= value <= 1024 |
compressibility | integer | percentage that written data should compress, assuming ideal compression default: 0 Range: 0 <= value <= 100 |
Curl Example
$ curl -X POST https://mgmt-node/api/sys-ds/sys_ds:5:10/actions/benchmark \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"range": 1048576,
"workload": "sequential",
"preformat": false,
"duration": 10
}'
Response Example
204 No Content
Date: Mon, 09 Oct 2017 17:27:29 GMT
Server: Goliath
System Datastore Device
Retrieve and change certain basic parameters of iSCSI Devices and Operating System Devices from this common resource. For parameters that are device-specific, consult the individual iSCSI device and operating system device resources.
System Datastore Device Info
Info for existing dev.
GET /dev/{dev_identity}
Curl Example
$ curl https://mgmt-node/api/os-dev/os_dev:4:10 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:59 GMT
Server: Goliath
ETag: "3003499d2cd2e54f0f5e18a3b3ae9c73"
Content-Type: application/json
Content-Length: 1303
{
"id": "os_dev:4:10",
"uuid": "5a05f431-0a1b-4725-bc8b-ea179aa501b6",
"serial": "OSD0D62194C4062641A",
"evt_qry": "serial=OSD0D62194C4062641A",
"sds_id": null,
"node_id": "node:10000",
"ctime": 1507562840777,
"mtime": 1507570016428,
"seq": 1507570016667,
"label": "device-1",
"notes": "device label updated",
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507570016000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
6,
12,
12,
12
],
"v": "dbg"
},
{
"d": [
0,
3,
3,
3
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507570016667
},
"rec_status": null,
"transient": false,
"path": "/dev/bb/b9a74447-9962-4f82-88c8-1bcd655ff432",
"size": 107374182400,
"initialized": false,
"enabled": false,
"parent": {
"type": [
"os_dev"
],
"id": "os_dev:7:10"
},
"meta": {
"blockbridge_agent": "1f57e3a8-6ade-4aea-900e-3ebb5350f025",
"blockbridge_md": false,
"blockbridge_disk_id": "b9a74447-9962-4f82-88c8-1bcd655ff432"
},
"usable": null,
"used": null,
"device_info": {
"dsn": null,
"enclosure": null,
"present": true,
"owner": "Volume Manager (mirror1)",
"devname": "sde",
"display_name": "scsi/sde",
"serial": "b9a74447-9962-4f82-88c8-1bcd655ff432",
"vendor": "B*BRIDGE",
"model": "SECURE DRIVE",
"bus": "scsi",
"rotational": false,
"type": [
"disk"
],
"_remote_dev_id": null
},
"smart_info": null,
"md_info": null,
"hidden": false
}
System Datastore Device List
List existing devs.
GET /dev
Curl Example
$ curl https://mgmt-node/api/dev \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:58 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 13752
[
{
"id": "os_dev:4:10",
"uuid": "5a05f431-0a1b-4725-bc8b-ea179aa501b6",
"serial": "OSD0D62194C4062641A",
"evt_qry": "serial=OSD0D62194C4062641A",
"sds_id": null,
"node_id": "node:10000",
"ctime": 1507562840777,
"mtime": 1507570016428,
"seq": 1507570016667,
"label": "device-1",
"notes": "device label updated",
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507570016000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
6,
12,
12,
12
],
"v": "dbg"
},
{
"d": [
0,
3,
3,
3
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507570016667
},
"rec_status": null,
"transient": false,
"path": "/dev/bb/b9a74447-9962-4f82-88c8-1bcd655ff432",
"size": 107374182400,
"initialized": false,
"enabled": false,
"parent": {
"type": [
"os_dev"
],
"id": "os_dev:7:10"
},
"meta": {
"blockbridge_agent": "1f57e3a8-6ade-4aea-900e-3ebb5350f025",
"blockbridge_md": false,
"blockbridge_disk_id": "b9a74447-9962-4f82-88c8-1bcd655ff432"
},
"usable": null,
"used": null,
"device_info": {
"dsn": null,
"enclosure": null,
"present": true,
"owner": "Volume Manager (mirror1)",
"devname": "sde",
"display_name": "scsi/sde",
"serial": "b9a74447-9962-4f82-88c8-1bcd655ff432",
"vendor": "B*BRIDGE",
"model": "SECURE DRIVE",
"bus": "scsi",
"rotational": false,
"type": [
"disk"
],
"_remote_dev_id": null
},
"smart_info": null,
"md_info": null,
"hidden": false
},
{
"id": "os_dev:5:10",
"uuid": "c0edd702-7801-42ef-b675-2b34411ee13e",
"serial": "OSD0D62194C40626402",
"evt_qry": "serial=OSD0D62194C40626402",
"sds_id": "sys_ds:5:10",
"node_id": "node:10000",
"ctime": 1507562840991,
"mtime": 1507570018283,
"seq": 1507570018754,
"label": null,
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507570018000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
0,
2,
2,
2
],
"v": "dbg"
},
{
"d": [
6,
7,
7,
7
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507570018690
},
"rec_status": null,
"transient": false,
"path": "/dev/disk/by-id/md-uuid-791bf0b6:27184b1a:a7cc46b9:c7d4a716-part6",
"size": 18216893952,
"initialized": true,
"enabled": true,
"parent": null,
"meta": {
"blockbridge_agent": "1f57e3a8-6ade-4aea-900e-3ebb5350f025",
"blockbridge_md": false,
"blockbridge_disk_id": "c0edd702-7801-42ef-b675-2b34411ee13e"
},
"usable": 18090950656,
"used": 0,
"device_info": {
"dsn": null,
"enclosure": null,
"present": true,
"owner": "Storage Processor (SDS1F62194C4062640D)",
"devname": "md126p6",
"display_name": "md/system",
"serial": null,
"vendor": null,
"model": null,
"bus": null,
"rotational": false,
"type": [
"partition"
],
"_remote_dev_id": null
},
"smart_info": null,
"md_info": {
"chunk_size": null,
"state": "active",
"degraded": false,
"mismatch_cnt": 0,
"created": 1507562801000,
"modified": 1507562801000,
"active_disks": 2,
"working_disks": 2,
"failed_disks": 0,
"spare_disks": 0,
"metadata": {
"version": "0.90.3"
},
"bitmap": {
"chunk_size": null,
"location": "none",
"metadata": "internal",
"space": 0,
"backlog": 0,
"max_backlog_used": 0
},
"raid": {
"rebuild_min": 1048576,
"rebuild_max": 1048576,
"level": "raid1",
"layout": null,
"disks_num": 2
},
"sync_action": {
"action": "none"
},
"disks": [
{
"size": 107338530816,
"slot": 0,
"state": "in_sync",
"errors": null,
"bad_blocks": null,
"blockdev": "8:16",
"dev": "/dev/sdb",
"flags": [
"active",
"in-sync"
],
"health": {
"value": "online",
"syndrome": null,
"updating": false,
"hidden": false,
"device_info": {
"dsn": null,
"enclosure": null,
"present": true,
"owner": "system-array-791bf0b6-2718-4b1a-a7cc-46b9c7d4a716",
"devname": "sdb",
"display_name": "scsi/sdb",
"serial": "6dcf15dc-fdde-4c2b-8cd0-af2cca17c0ba",
"vendor": "B*BRIDGE",
"model": "SECURE DRIVE",
"bus": "scsi",
"rotational": false,
"type": [
"disk"
],
"_remote_dev_id": null
}
},
"oid": "os_dev:3:10",
"uuid": "ea38df59-c5d2-459c-ab85-5c6434e8c9e4",
"display_name": "scsi/sdb",
"preferred_path": "/dev/bb/6dcf15dc-fdde-4c2b-8cd0-af2cca17c0ba",
"remote_oid": null
},
{
"size": 107338530816,
"slot": 1,
"state": "in_sync",
"errors": null,
"bad_blocks": null,
"blockdev": "8:0",
"dev": "/dev/sda",
"flags": [
"active",
"in-sync"
],
"health": {
"value": "online",
"syndrome": null,
"updating": false,
"hidden": false,
"device_info": {
"dsn": null,
"enclosure": null,
"present": true,
"owner": "system-array-791bf0b6-2718-4b1a-a7cc-46b9c7d4a716",
"devname": "sda",
"display_name": "scsi/sda",
"serial": "c88b16a9-20ea-4a54-88b8-2ef9c68d5258",
"vendor": "B*BRIDGE",
"model": "SECURE DRIVE",
"bus": "scsi",
"rotational": false,
"type": [
"disk"
],
"_remote_dev_id": null
}
},
"oid": "os_dev:6:10",
"uuid": "6fd8dd9d-03cb-4020-a753-4cdee61242f5",
"display_name": "scsi/sda",
"preferred_path": "/dev/bb/c88b16a9-20ea-4a54-88b8-2ef9c68d5258",
"remote_oid": null
}
],
"flags": [
"active"
]
},
"hidden": false
},
{
"id": "os_dev:1:10",
"uuid": "88e4cabf-7dac-4950-9ec0-fb4de02599fd",
"serial": "OSD0D62194C40626443",
"evt_qry": "serial=OSD0D62194C40626443",
"sds_id": null,
"node_id": "node:10000",
"ctime": 1507562840328,
"mtime": 1507562858197,
"seq": 1507562861680,
"label": null,
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507562858000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
4,
4,
4,
4
],
"v": "dbg"
},
{
"d": [
1,
1,
1,
1
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507562861680
},
"rec_status": null,
"transient": false,
"path": "/dev/bb/125e92af-2cf2-4152-a07b-b792eabb55fe",
"size": 107374182400,
"initialized": false,
"enabled": false,
"parent": {
"type": [
"os_dev"
],
"id": "os_dev:7:10"
},
"meta": {
"blockbridge_agent": "1f57e3a8-6ade-4aea-900e-3ebb5350f025",
"blockbridge_md": false,
"blockbridge_disk_id": "125e92af-2cf2-4152-a07b-b792eabb55fe"
},
"usable": null,
"used": null,
"device_info": {
"dsn": null,
"enclosure": null,
"present": true,
"owner": "Volume Manager (mirror1)",
"devname": "sdc",
"display_name": "scsi/sdc",
"serial": "125e92af-2cf2-4152-a07b-b792eabb55fe",
"vendor": "B*BRIDGE",
"model": "SECURE DRIVE",
"bus": "scsi",
"rotational": false,
"type": [
"disk"
],
"_remote_dev_id": null
},
"smart_info": null,
"md_info": null,
"hidden": false
},
{
"id": "os_dev:2:10",
"uuid": "180c2fb7-f787-45b4-831c-c56c3e58123f",
"serial": "OSD0D62194C4062647B",
"evt_qry": "serial=OSD0D62194C4062647B",
"sds_id": "sys_ds:5:10",
"node_id": "node:10000",
"ctime": 1507562840465,
"mtime": 1507570018719,
"seq": 1507570018803,
"label": null,
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507569802000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
0,
2,
2,
2
],
"v": "dbg"
},
{
"d": [
2,
5,
5,
5
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507569802681
},
"rec_status": null,
"transient": false,
"path": "/dev/bb/6932606f-1cd8-43bc-bc4c-6fb5f8d42846",
"size": 107374182400,
"initialized": true,
"enabled": true,
"parent": null,
"meta": {
"blockbridge_agent": "1f57e3a8-6ade-4aea-900e-3ebb5350f025",
"blockbridge_md": false,
"blockbridge_disk_id": "6932606f-1cd8-43bc-bc4c-6fb5f8d42846"
},
"usable": 107307073536,
"used": 0,
"device_info": {
"dsn": null,
"enclosure": null,
"present": true,
"owner": "Storage Processor (SDS1F62194C4062640D)",
"devname": "sdd",
"display_name": "scsi/sdd",
"serial": "6932606f-1cd8-43bc-bc4c-6fb5f8d42846",
"vendor": "B*BRIDGE",
"model": "SECURE DRIVE",
"bus": "scsi",
"rotational": false,
"type": [
"disk"
],
"_remote_dev_id": null
},
"smart_info": null,
"md_info": null,
"hidden": false
},
{
"id": "os_dev:6:10",
"uuid": "6fd8dd9d-03cb-4020-a753-4cdee61242f5",
"serial": "OSD0D62194C4062643A",
"evt_qry": "serial=OSD0D62194C4062643A",
"sds_id": null,
"node_id": "node:10000",
"ctime": 1507562841153,
"mtime": 1507562847450,
"seq": 1507562849622,
"label": null,
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507562847000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
4,
4,
4,
4
],
"v": "dbg"
},
{
"d": [
1,
1,
1,
1
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507562849622
},
"rec_status": null,
"transient": false,
"path": "/dev/bb/c88b16a9-20ea-4a54-88b8-2ef9c68d5258",
"size": 107374182400,
"initialized": false,
"enabled": false,
"parent": {
"type": [
"os_dev"
],
"id": "os_dev:5:10"
},
"meta": {
"blockbridge_agent": "1f57e3a8-6ade-4aea-900e-3ebb5350f025",
"blockbridge_md": false,
"blockbridge_disk_id": "c88b16a9-20ea-4a54-88b8-2ef9c68d5258"
},
"usable": null,
"used": null,
"device_info": {
"dsn": null,
"enclosure": null,
"present": true,
"owner": "system-array-791bf0b6-2718-4b1a-a7cc-46b9c7d4a716",
"devname": "sda",
"display_name": "scsi/sda",
"serial": "c88b16a9-20ea-4a54-88b8-2ef9c68d5258",
"vendor": "B*BRIDGE",
"model": "SECURE DRIVE",
"bus": "scsi",
"rotational": false,
"type": [
"disk"
],
"_remote_dev_id": null
},
"smart_info": null,
"md_info": null,
"hidden": false
},
{
"id": "os_dev:10:10",
"uuid": "4d16735c-b8bf-4149-950b-5233c7660907",
"serial": "OSD0D62194C406264F8",
"evt_qry": "serial=OSD0D62194C406264F8",
"sds_id": null,
"node_id": "node:10000",
"ctime": 1507568149178,
"mtime": 1507568149513,
"seq": 1507568149699,
"label": "osdev_file1",
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507568149000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
4,
4,
4,
4
],
"v": "dbg"
},
{
"d": [
1,
1,
1,
1
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507568149669
},
"rec_status": null,
"transient": false,
"path": "/tmp/disk1.osdev_file",
"size": 1073741824,
"initialized": false,
"enabled": false,
"parent": null,
"meta": {
"blockbridge_disk_id": "4d16735c-b8bf-4149-950b-5233c7660907"
},
"usable": null,
"used": null,
"device_info": {
"dsn": null,
"enclosure": null,
"present": true,
"owner": null,
"devname": null,
"display_name": null,
"serial": null,
"vendor": null,
"model": null,
"bus": null,
"rotational": null,
"type": null,
"_remote_dev_id": null
},
"smart_info": null,
"md_info": null,
"hidden": false
},
{
"id": "os_dev:3:10",
"uuid": "ea38df59-c5d2-459c-ab85-5c6434e8c9e4",
"serial": "OSD0D62194C40626463",
"evt_qry": "serial=OSD0D62194C40626463",
"sds_id": null,
"node_id": "node:10000",
"ctime": 1507562840630,
"mtime": 1507562847170,
"seq": 1507562849630,
"label": null,
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507562847000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
4,
4,
4,
4
],
"v": "dbg"
},
{
"d": [
1,
1,
1,
1
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507562849630
},
"rec_status": null,
"transient": false,
"path": "/dev/bb/6dcf15dc-fdde-4c2b-8cd0-af2cca17c0ba",
"size": 107374182400,
"initialized": false,
"enabled": false,
"parent": {
"type": [
"os_dev"
],
"id": "os_dev:5:10"
},
"meta": {
"blockbridge_agent": "1f57e3a8-6ade-4aea-900e-3ebb5350f025",
"blockbridge_md": false,
"blockbridge_disk_id": "6dcf15dc-fdde-4c2b-8cd0-af2cca17c0ba"
},
"usable": null,
"used": null,
"device_info": {
"dsn": null,
"enclosure": null,
"present": true,
"owner": "system-array-791bf0b6-2718-4b1a-a7cc-46b9c7d4a716",
"devname": "sdb",
"display_name": "scsi/sdb",
"serial": "6dcf15dc-fdde-4c2b-8cd0-af2cca17c0ba",
"vendor": "B*BRIDGE",
"model": "SECURE DRIVE",
"bus": "scsi",
"rotational": false,
"type": [
"disk"
],
"_remote_dev_id": null
},
"smart_info": null,
"md_info": null,
"hidden": false
},
{
"id": "os_dev:7:10",
"uuid": "7b70f246-5a82-4029-b39e-f139929c9a9e",
"serial": "OSD0D62194C40626422",
"evt_qry": "serial=OSD0D62194C40626422",
"flags": "md",
"sds_id": null,
"node_id": "node:10000",
"ctime": 1507562852823,
"mtime": 1507567764983,
"seq": 1507568230675,
"label": null,
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507564907000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
0,
2,
2,
2
],
"v": "dbg"
},
{
"d": [
1,
8,
8,
8
],
"v": "info"
},
{
"d": [
0,
1,
1,
1
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507568230675
},
"rec_status": null,
"transient": false,
"path": "/dev/disk/by-id/md-uuid-7b70f246:5a824029:b39ef139:929c9a9e",
"size": 107338530816,
"initialized": false,
"enabled": false,
"parent": null,
"meta": {
"blockbridge_agent": "1f57e3a8-6ade-4aea-900e-3ebb5350f025",
"blockbridge_md": true,
"blockbridge_disk_id": "7b70f246-5a82-4029-b39e-f139929c9a9e"
},
"usable": null,
"used": null,
"device_info": {
"dsn": null,
"enclosure": null,
"present": true,
"owner": null,
"devname": "md124",
"display_name": "md/mirror1",
"serial": null,
"vendor": null,
"model": null,
"bus": null,
"rotational": true,
"type": [
"md"
],
"_remote_dev_id": null
},
"smart_info": null,
"md_info": {
"chunk_size": null,
"state": "clean",
"degraded": false,
"mismatch_cnt": 0,
"created": 1507562847000,
"modified": 1507562847000,
"active_disks": 2,
"working_disks": 2,
"failed_disks": 0,
"spare_disks": 0,
"metadata": {
"version": "0.90.3"
},
"bitmap": {
"chunk_size": 268435456,
"location": "file",
"metadata": "internal",
"space": 0,
"backlog": 0,
"max_backlog_used": 0
},
"raid": {
"rebuild_min": 1048576,
"rebuild_max": 1048576,
"level": "raid1",
"layout": null,
"disks_num": 2
},
"sync_action": {
"action": "none"
},
"disks": [
{
"size": 107338530816,
"slot": 0,
"state": "in_sync",
"errors": null,
"bad_blocks": null,
"blockdev": "8:64",
"dev": "/dev/sde",
"flags": [
"active",
"in-sync"
],
"health": {
"value": "online",
"syndrome": null,
"updating": false,
"hidden": false,
"device_info": {
"dsn": null,
"enclosure": null,
"present": true,
"owner": "Volume Manager (mirror1)",
"devname": "sde",
"display_name": "scsi/sde",
"serial": "b9a74447-9962-4f82-88c8-1bcd655ff432",
"vendor": "B*BRIDGE",
"model": "SECURE DRIVE",
"bus": "scsi",
"rotational": false,
"type": [
"disk"
],
"_remote_dev_id": null
}
},
"oid": "os_dev:4:10",
"uuid": "5a05f431-0a1b-4725-bc8b-ea179aa501b6",
"display_name": "scsi/sde",
"preferred_path": "/dev/bb/b9a74447-9962-4f82-88c8-1bcd655ff432",
"remote_oid": null
},
{
"size": 107338530816,
"slot": 1,
"state": "in_sync",
"errors": null,
"bad_blocks": null,
"blockdev": "8:32",
"dev": "/dev/sdc",
"flags": [
"active",
"in-sync"
],
"health": {
"value": "online",
"syndrome": null,
"updating": false,
"hidden": false,
"device_info": {
"dsn": null,
"enclosure": null,
"present": true,
"owner": "Volume Manager (mirror1)",
"devname": "sdc",
"display_name": "scsi/sdc",
"serial": "125e92af-2cf2-4152-a07b-b792eabb55fe",
"vendor": "B*BRIDGE",
"model": "SECURE DRIVE",
"bus": "scsi",
"rotational": false,
"type": [
"disk"
],
"_remote_dev_id": null
}
},
"oid": "os_dev:1:10",
"uuid": "88e4cabf-7dac-4950-9ec0-fb4de02599fd",
"display_name": "scsi/sdc",
"preferred_path": "/dev/bb/125e92af-2cf2-4152-a07b-b792eabb55fe",
"remote_oid": null
}
],
"flags": [
"clean"
]
},
"hidden": false
}
]
Product
The Product resource has the list of Product Tags offered by a Datastore that has been configured to support automatic service provisioning.
Attributes
Name | Type | Description |
---|---|---|
id | string | object id |
uuid | uuid | object uuid |
ctime | integer | product create time Range: 0 <= value |
mtime | integer | product last modified time Range: 0 <= value |
site_id | string | site product is located in |
description | string | product description |
tags | array | array of product tags |
Product Search Create
Query the storage product catalog.
POST /product/search
Required Parameters
Name | Type | Description |
---|---|---|
capacity | integer | capacity to reserve |
Optional Parameters
Name | Type | Description |
---|---|---|
iops | integer | IOPS to reserve |
scheduling_algorithm | string | scheduling algorithm label Length: 1..64 |
tags:include | array | include array |
tags:exclude | array | exclude array |
count | integer | number of results default: 3 |
template | string | service template |
Curl Example
$ curl -X POST https://mgmt-node/api/product/search \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"capacity": 1073741824,
"template": "gp"
}'
Response Example
201 Created
Date: Mon, 09 Oct 2017 17:27:02 GMT
Server: Goliath
Location: /api/product/search/87c9351606060184e4c284c4ecc29a402b91c189a42537b02721b425918918cd4f20606000797070bf
Content-Type: application/json
Content-Length: 418
{
"status": "success",
"products": [
{
"id": "product:5:10",
"serial": "PRD1262194C40626406",
"node": "NOD0F68194C40601558",
"tags": [
"datastore-1",
"NOD0F68194C40601558"
],
"score": 6.0,
"token": "5b313530373537303032323339372c2270726f647563743a353a3130222c313037333734313832342c226770225d"
}
],
"params": {
"capacity": 1073741824,
"type": [
"gp"
],
"type_desc": "General Purpose",
"iops_desc": "100/3000 (3 IOPS/GiB, burstable to 3000)"
},
"headers": {
}
}
Product Search Parameters
Retrieve the available storage catalog parameters.
GET /product/search/params
Curl Example
$ curl https://mgmt-node/api/product/search/params \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:59 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 1156
{
"status": "success",
"scheduling_algorithm": [
"ideal-usage"
],
"service_templates": [
{
"type": [
"gp"
],
"description": "General Purpose",
"default": true,
"tags": {
"include": [
],
"exclude": [
]
},
"size": {
"reserve_min": 1073741824,
"reserve_max": 17592186044416,
"limit_percent": 200
},
"iops": {
"ratio": 3,
"burst": 3000,
"burst_credit": 5400000,
"min": 100,
"max": 3000
},
"piops": {
"type": [
"disabled"
],
"value": null,
"ratio": null,
"min": null,
"max": null
}
},
{
"type": [
"piops"
],
"description": "Provisioned IOPS",
"default": false,
"tags": {
"include": [
],
"exclude": [
]
},
"size": {
"reserve_min": 4294967296,
"reserve_max": 17592186044416,
"limit_percent": 200
},
"iops": {
"ratio": 50,
"burst": null,
"burst_credit": null,
"min": 100,
"max": 20000
},
"piops": {
"type": [
"user-specified"
],
"value": null,
"ratio": 50,
"min": 100,
"max": 20000
}
},
{
"type": [
"unlimited"
],
"description": "Unlimited Provisioning",
"default": false,
"tags": {
"include": [
],
"exclude": [
]
},
"size": {
"reserve_min": 1048576,
"reserve_max": null,
"limit_percent": null
},
"iops": {
"ratio": null,
"burst": null,
"burst_credit": null,
"min": null,
"max": null
},
"piops": {
"type": [
"disabled"
],
"value": null,
"ratio": null,
"min": null,
"max": null
}
}
],
"tags": [
"datastore",
"datastore-1",
"NOD0F68194C40601558"
],
"headers": {
}
}
Virtual Storage Service
A Secure virtual service delivers storage resources to applications, customers, developers and your cloud infrastructure, in a service-oriented fashion. Virtual services can be manually or automatically provisioned.
These virtual services are provisioned from the storage resources provided by a datastore. Each virtual storage service provides an independent storage area network (SAN). You can provision disks and iSCSI targets within a virtual storage service as needed.
The Blockbridge management network makes it possible to manage multiple, distributed virtual storage services from the management application. This allows a single tenant account to operate multiple classes of storage, to scale, and to implement disaster tolerance using virtual disk level replication.
Attributes
Name | Type | Description |
---|---|---|
id | string | object id |
uuid | uuid | object uuid |
ctime | integer | virtual stroage service create time Range: 0 <= value |
mtime | integer | virtual storage service last modified time Range: 0 <= value |
label | nullable string | user assigned label Length: 1..64 |
notes | nullable string | user assigned notes Length: 0..256 |
node_id | string | storage node id |
node_serial | string | storage node serial |
account_id | string | account id |
product_id | string | product id |
location:country | string | ISO 3166-1 alpha-3 country code default: "" |
location:lat | number | latitude default: 0 |
location:long | number | longitude default: 0 |
location:city | string | city default: "" |
location:state | string | state as two-character USPS abbreviation default: "" |
location_str | string | location short string |
tier | string | datacenter infrastructure tier one of: "I" or "II" or "III" or "IV" |
serial | string | virtual storage service serial number |
cap_size_ratio | nullable number | ratio of user addressable capacity to size |
quota | nullable object | restrictions on virtual storage service size and IOPS |
quota:size:limit | nullable integer | upper hard limit on size |
quota:size:notify | nullable integer | notification threshold for size |
quota:size:reserve | integer | guaranteed storage resources |
quota:iops:limit | nullable integer | limit on sustained I/O operations per second |
quota:iops:reserve | integer | reserve I/O operations per second |
quota:iops:burst | nullable integer | upper limit for rate that burst credits can be spent |
quota:iops:burst_credits | nullable integer | upper limit on the number bursting credits that may be accumulated |
trashed | boolean | waiting for garbage collection |
xmd_refs | array | array of extensible metadata reference keys |
xref | string | arbitrary string reference Length: 1..256 |
status:indicator | string | status indicator one of: "online" or "degraded" or "offline" or "na" |
status:value | string | status value one of: "online" or "degraded" or "offline" or "pending" or "payment" |
status:detail | nullable string | status detail |
isotime | nullable date-time | local time on node |
humantime | nullable string | human-readable time on node |
build_version | nullable string | version of software running on node |
build_time | nullable string | time and date that node software was built |
version | nullable object | build version |
version:hash | string | build hash |
version:minor | integer | build minor version |
version:major | integer | build major version |
version:timestamp | integer | build timestamp |
version:patch | integer | build patch version |
version:tag | string | build tag |
version:release | string | build release |
sizing | nullable object | virtual storage service sizing information |
sizing:size | nullable integer | size of virtual storage service (in bytes) |
sizing:snapshot | nullable integer | snapshot size (in bytes) |
sizing:reserve_total | nullable integer | reserved size of all disks or the virtual storage service reserve, whichever is greater (in bytes) |
sizing:compression_ratio | nullable number | compression ratio |
xmd/id | string | no documentation |
xmd/ref | string | arbitrary string reference key Length: 1..256 |
xmd/mtime | integer | last modified time of xmd Range: 0 <= value |
xmd/tags | array | object tags |
xmd/self | boolean | no documentation |
xmd/data | nullable string | no documentation |
Virtual Storage Service Info
Retrieve an existing virtual storage service.
GET /vss/{vss_id_or_serial}
Curl Example
$ curl https://mgmt-node/api/vss/vss:4:10 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:27:03 GMT
Server: Goliath
ETag: "aaa023102dfef1d85a43694c82188901"
Content-Type: application/json
Content-Length: 1253
{
"id": "vss:4:10",
"uuid": "a29b3f9c-62e6-464a-99b4-f75e56d14753",
"serial": "VSS1862194C40626418",
"evt_qry": "serial=VSS1862194C40626418",
"account_id": "account:1:10",
"node_id": "node:10000",
"ctime": 1507570022649,
"mtime": 1507570023851,
"seq": 1507570023861,
"label": "vss1",
"notes": "vss label updated",
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507570023000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
6,
6,
6,
6
],
"v": "dbg"
},
{
"d": [
5,
5,
5,
5
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507570023794
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"node_serial": "NOD0F68194C40601558",
"location": {
"country": "USA",
"lat": 40,
"long": -43,
"city": "Newark",
"state": "NJ"
},
"tier": "IV",
"quota": {
"size": {
"limit": 3221225472,
"notify": 3221225472,
"reserve": 3221225472
},
"iops": {
"limit": null,
"reserve": 0,
"burst": null,
"burst_credits": null
}
},
"cap_size_ratio": 1.0,
"isotime": "2017-10-09T17:26+00:00",
"build_version": "4.0.0-4252.1",
"build_time": "Thu Oct 05 10:32 UTC 2017",
"version": {
"major": 4,
"minor": 0,
"patch": 0,
"release": "4252.1",
"tag": "",
"hash": "f41b54b0c02b9ecbee50ffca17fc1d74a6e20672",
"timestamp": 1507199541000
},
"sizing": {
"size": 0,
"snapshot": 0,
"reserve_total": 1073741824
}
}
Virtual Storage Service List
Enumerate virtual storage services.
GET /vss
Curl Example
$ curl https://mgmt-node/api/vdisk \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:27:03 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 2
[
]
Virtual Storage Service Create
Provision a new virtual storage service. The system datastore is selected by conducting a storage product search.
POST /vss
Optional Parameters
Name | Type | Description |
---|---|---|
token | string | provision token pattern: ^[a-fA-F0-9]*$ |
vss:label | nullable string | label Length: 1..64 |
vss:xmd_refs | array | array of extensible metadata reference keys |
vss:xref | string | arbitrary string reference Length: 1..256 |
vss:notes | string | user assigned notes Length: 0..256 |
disk:create | boolean | create disk |
disk:label | nullable string | label Length: 1..64 |
disk:tags | array | disk tags |
disk:xmd_refs | array | array of extensible metadata reference keys |
disk:xref | string | arbitrary string reference Length: 1..256 |
disk:obj_store_id | string | object store id from which virtual disk is cloned |
disk:backup_id | string | backup ID from which virtual disk is cloned |
disk:src | string | clone source one of: "vdisk" or "snapshot" or "object" or "block" |
disk:snapshot_id | string | snapshot id from which virtual disk is cloned |
disk:vdisk_id | string | virtual disk id from which virtual disk is cloned |
disk:block_id | string | block device id from which virtual disk is cloned |
disk:thicken | boolean | thicken clone from source |
disk:bandwidth | integer | thicken bandwidth limit in bytes/sec |
disk:multi_map | boolean | virtual disk can be mapped into multiple targets |
profile:create | boolean | create profile |
profile:label | nullable string | label Length: 1..64 |
profile:xmd_refs | array | array of extensible metadata reference keys |
profile:xref | string | arbitrary string reference Length: 1..256 |
target:create | boolean | create target |
target:label | nullable string | label Length: 1..64 |
target:xmd_refs | array | array of extensible metadata reference keys |
target:xref | string | arbitrary string reference Length: 1..256 |
target:map_disk | boolean | map created disk into target default: true |
target:allow_profile | boolean | add profile to access control list default: true |
xmd:create | boolean | create xmd |
xmd:ref | string | arbitrary string reference key Length: 1..256 |
xmd:label | nullable string | label Length: 1..64 |
xmd:notes | string | user assigned notes Length: 0..256 |
xmd:tags | array | tags |
xmd:xmd_refs | array | array of extensible metadata reference keys |
xmd:xref | string | arbitrary string reference Length: 1..256 |
xmd:publish | boolean | publish xmd |
xmd:reservation | boolean | reserve xmd grouping |
xmd:exists_ok | boolean | create is idempotent |
account_id | string | account id |
query:capacity | integer | capacity to reserve |
query:iops | integer | IOPS to reserve |
query:scheduling_algorithm | string | scheduling algorithm label Length: 1..64 |
query:tags:include | array | include array |
query:tags:exclude | array | exclude array |
query:count | integer | number of results default: 1 |
query:template | string | service template |
protocol | string | low-level storage protocol (ds record) default: "iscsi" one of: "iscsi" or "nvme" |
Curl Example
$ curl -X POST https://mgmt-node/api/vss \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"token": "5b313530373537303032323339372c2270726f647563743a353a3130222c313037333734313832342c226770225d"
}'
Response Example
201 Created
Date: Mon, 09 Oct 2017 17:27:03 GMT
Server: Goliath
ETag: "03e600348ed60c717e3ca33f982d8257"
Content-Type: application/json
Content-Length: 1239
{
"id": "vss:4:10",
"uuid": "a29b3f9c-62e6-464a-99b4-f75e56d14753",
"serial": "VSS1862194C40626418",
"evt_qry": "serial=VSS1862194C40626418",
"account_id": "account:1:10",
"node_id": "node:10000",
"ctime": 1507570022649,
"mtime": 1507570022855,
"seq": 1507570022985,
"label": "service-4",
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507570022000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
2,
2,
2,
2
],
"v": "dbg"
},
{
"d": [
0,
0,
0,
0
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507570022869
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"node_serial": "NOD0F68194C40601558",
"location": {
"country": "USA",
"lat": 40,
"long": -43,
"city": "Newark",
"state": "NJ"
},
"tier": "IV",
"quota": {
"size": {
"limit": 2147483648,
"notify": null,
"reserve": 1073741824
},
"iops": {
"limit": 100,
"reserve": 0,
"burst": 3000,
"burst_credits": 5400000
}
},
"cap_size_ratio": 1.0,
"isotime": "2017-10-09T17:26+00:00",
"build_version": "4.0.0-4252.1",
"build_time": "Thu Oct 05 10:32 UTC 2017",
"version": {
"major": 4,
"minor": 0,
"patch": 0,
"release": "4252.1",
"tag": "",
"hash": "f41b54b0c02b9ecbee50ffca17fc1d74a6e20672",
"timestamp": 1507199541000
},
"sizing": {
"size": 0,
"snapshot": 0,
"reserve_total": 1073741824
}
}
Virtual Storage Service Remove
Remove an existing virtual storage service, including its virtual disks, iSCSI targets, and initiator profiles. User data that remains in the service will be irretrievable.
DELETE /vss/{vss_id_or_serial}
Curl Example
$ curl -X DELETE https://mgmt-node/api/vss/vss:4:10 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
204 No Content
Date: Mon, 09 Oct 2017 17:27:34 GMT
Server: Goliath
Virtual Storage Service Update
Change the configuration of an existing virtual storage service.
PATCH /vss/{vss_id_or_serial}
Optional Parameters
Name | Type | Description |
---|---|---|
xmd_refs | array | array of extensible metadata reference keys |
label | nullable string | user assigned label Length: 1..64 |
notes | string | user assigned notes Length: 0..256 |
Curl Example
$ curl -X PATCH https://mgmt-node/api/vss/vss:4:10 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"label": "vss1",
"notes": "vss label updated"
}'
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:27:03 GMT
Server: Goliath
ETag: "1ca961c454ef8da913e5b8a86b34dbe2"
Content-Type: application/json
Content-Length: 1249
{
"id": "vss:4:10",
"uuid": "a29b3f9c-62e6-464a-99b4-f75e56d14753",
"serial": "VSS1862194C40626418",
"evt_qry": "serial=VSS1862194C40626418",
"account_id": "account:1:10",
"node_id": "node:10000",
"ctime": 1507570022649,
"mtime": 1507570023453,
"seq": 1507570023462,
"label": "vss1",
"notes": "vss label updated",
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507570022000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
2,
2,
2,
2
],
"v": "dbg"
},
{
"d": [
0,
0,
0,
0
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507570022869
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"node_serial": "NOD0F68194C40601558",
"location": {
"country": "USA",
"lat": 40,
"long": -43,
"city": "Newark",
"state": "NJ"
},
"tier": "IV",
"quota": {
"size": {
"limit": 2147483648,
"notify": null,
"reserve": 1073741824
},
"iops": {
"limit": 100,
"reserve": 0,
"burst": 3000,
"burst_credits": 5400000
}
},
"cap_size_ratio": 1.0,
"isotime": "2017-10-09T17:26+00:00",
"build_version": "4.0.0-4252.1",
"build_time": "Thu Oct 05 10:32 UTC 2017",
"version": {
"major": 4,
"minor": 0,
"patch": 0,
"release": "4252.1",
"tag": "",
"hash": "f41b54b0c02b9ecbee50ffca17fc1d74a6e20672",
"timestamp": 1507199541000
},
"sizing": {
"size": 0,
"snapshot": 0,
"reserve_total": 1073741824
}
}
Virtual Storage Service Quota Update
Change the quota for a virtual storage service.
PUT /vss/{vss_id_or_serial}/quota
Optional Parameters
Name | Type | Description |
---|---|---|
size:limit | nullable integer | upper hard limit on size |
size:notify | nullable integer | notification threshold for size |
size:reserve | integer | guaranteed storage resources default: 0 |
iops:limit | nullable integer | limit on sustained I/O operations per second Range: 0 <= value <= 2147483647 |
iops:reserve | integer | reserve I/O operations per second default: 0 Range: 0 <= value <= 2147483647 |
iops:burst | nullable integer | upper limit for rate that burst credits can be spent Range: 0 <= value <= 2147483647 |
iops:burst_credits | nullable integer | upper limit on the number bursting credits that may be accumulated Range: 0 <= value <= 2147483647 |
Curl Example
$ curl -X PUT https://mgmt-node/api/vss/vss:4:10/quota \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"size": {
"limit": 3221225472,
"notify": 3221225472,
"reserve": 3221225472
}
}'
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:27:03 GMT
Server: Goliath
ETag: "aaa023102dfef1d85a43694c82188901"
Content-Type: application/json
Content-Length: 1253
{
"id": "vss:4:10",
"uuid": "a29b3f9c-62e6-464a-99b4-f75e56d14753",
"serial": "VSS1862194C40626418",
"evt_qry": "serial=VSS1862194C40626418",
"account_id": "account:1:10",
"node_id": "node:10000",
"ctime": 1507570022649,
"mtime": 1507570023851,
"seq": 1507570023861,
"label": "vss1",
"notes": "vss label updated",
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507570023000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
6,
6,
6,
6
],
"v": "dbg"
},
{
"d": [
5,
5,
5,
5
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507570023794
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"node_serial": "NOD0F68194C40601558",
"location": {
"country": "USA",
"lat": 40,
"long": -43,
"city": "Newark",
"state": "NJ"
},
"tier": "IV",
"quota": {
"size": {
"limit": 3221225472,
"notify": 3221225472,
"reserve": 3221225472
},
"iops": {
"limit": null,
"reserve": 0,
"burst": null,
"burst_credits": null
}
},
"cap_size_ratio": 1.0,
"isotime": "2017-10-09T17:26+00:00",
"build_version": "4.0.0-4252.1",
"build_time": "Thu Oct 05 10:32 UTC 2017",
"version": {
"major": 4,
"minor": 0,
"patch": 0,
"release": "4252.1",
"tag": "",
"hash": "f41b54b0c02b9ecbee50ffca17fc1d74a6e20672",
"timestamp": 1507199541000
},
"sizing": {
"size": 0,
"snapshot": 0,
"reserve_total": 1073741824
}
}
Virtual Disk
Virtual disks provide isolated data resources. Each virtual disk has a unique set of encryption keys. Those keys are automatically disposed of when the disk is deleted. You can take the keys out of the infrastructure, and you can provide them in-line of access.
Virtual disks are thinly provisioned. They support no-I/O snapshots, which can be cloned. Virtual disks support limits on IOPS and quotas on storage consumption. Quotas allow you to dedicate storage resources to a disk.
Virtual disks also support synchronous and asynchronous block-level replication, along with the ability to validate data integrity and authenticity. They support SCSI SPC-3 persistent reservations and various emulation modes (including removable disks).
Attributes
Name | Type | Description |
---|---|---|
id | string | object id |
uuid | uuid | object uuid |
ctime | integer | virtual disk create time Range: 0 <= value |
mtime | integer | virtual disk last modified time Range: 0 <= value |
type | string | vdisk type one of: "internal" or "external" |
protocol | string | low-level storage protocol (ds record) one of: "iscsi" or "nvme" |
label | nullable string | user assigned label Length: 1..64 |
notes | nullable string | user assigned notes Length: 0..256 |
tags | array | object tags |
vss_id | string | virtual storage service id |
node_id | string | storage node id |
account_id | string | account id |
basis | nullable object | disk basis |
basis:id | string | object id from which virtual disk is cloned |
basis:object_key | string | backup id from which virtual disk is cloned |
basis:src_id | string | basis src across attachment |
basis:requires_faultin | boolean | not thickened from basis |
basis:protocol | string | protocol: block or object one of: "block" or "object" |
basis:locality | string | locality: local or remote one of: "local" or "remote" |
basis:mode | string | mode: read-through or read-copy one of: "read-through" or "read-copy" |
basis:gc | boolean | delete / detach basis objects when basis is unset |
basis:xref | string | basis xref |
basis:vss_id | string | basis vss |
transient | boolean | disk is transient |
capacity | nullable integer | user addressable capacity in bytes |
blk_encoding | nullable string | encryption type and format of virtual blocks one of: "aes256-gcm-4k" or "aes128-xts-4k" |
cap_size_ratio | nullable number | ratio of user addressable capacity to size |
quota | nullable object | restrictions on virtual disk size and IOPS |
quota:size:limit | nullable integer | upper hard limit on size |
quota:size:notify | nullable integer | notification threshold for size |
quota:size:reserve | integer | guaranteed storage resources |
quota:iops:limit | nullable integer | limit on sustained I/O operations per second |
quota:workload | nullable string | workload hint one of: "lower_iops" or "normal_iops" or "higher_iops" |
locked | boolean | virtual disk is locked |
caps:encryption | nullable string | encryption technique for stored data blocks |
caps:eval | nullable boolean | disk is non-persistent, for demonstration use only |
scsi:protocol | string | SCSI protocol compatibility set |
scsi:tagged_queuing | boolean | tagged queuing default: true |
scsi:reservations | boolean | persistent reservations default: true |
scsi:lu_serial | string | logical unit serial number |
scsi:vendor_id | nullable string | SCSI vendor id string |
scsi:eui64_id | nullable string | EUI-64 id string |
scsi:t10_id | nullable string | T10 id string |
scsi:naa_id | nullable string | Network Address Authority id string |
scsi:ua_interlock | nullable boolean | unit attention interlock |
scsi:aca | nullable boolean | auto-contingent alliegance |
scsi:vendor_ext | nullable boolean | vendor extensions |
scsi:dif | nullable boolean | data integrity field |
scsi:multi_map | nullable boolean | multi-map permitted |
scsi:read_only | nullable boolean | read-only disk |
scsi:removable | nullable boolean | removable disk emulation |
scsi:advise_lbp | nullable boolean | advisory logical block provisioning |
scsi:features | string | SCSI features summary |
scsi:write_once | nullable boolean | Write-once disk |
scsi:nguid_id | nullable string | NVMe NGUID id string |
replication | nullable object | virtual disk replication parameters |
replication:master | nullable object | replication master parameters |
replication:master:disk_id | string | master virtual disk id |
replication:master:disk_serial | string | master virtual disk serial number |
replication:slaves/state | string | slave state one of: "disabled" or "enabled" or "suspended" |
replication:slaves/disk_id | string | slave virtual disk id |
replication:slaves/disk_serial | string | slave virtual disk serial number |
replication:slaves/config:mode | string | replication mode one of: "async" or "sync" or "async-ordered" |
replication:slaves/config:max_lag_cmds | integer | maximum commands to lag behind during async replication |
replication:slaves/config:max_lag_bytes | integer | maximum bytes to lag behind during async replication |
replication:slaves/config:recovery | string | recovery options one of: "none" or "drl" |
replication:slaves/config:rebuild_bandwidth | integer | rebuild bandwidth limit in bytes/sec default: 0 |
replication:slaves/config:rebuild_hash | boolean | use a hashing optimization to reduce network traffic during rebuild default: true |
replication:slaves/config:timeout | integer | time to wait (in milliseconds) before stopping an unresponsive slave default: 20000 Range: 100 <= value |
replication:slaves/policy | nullable string | replication policy |
replication_supported | boolean | true if replication is supported for this disk |
serial | string | virtual disk serial number |
task:id | string | running task id |
task:op | string | task state one of: "none" or "backup" or "format" or "verify" or "synchronize" or "resize" or "rollback" |
trashed | boolean | object is awaiting garbage collection |
system | boolean | system target |
xmd_refs | array | array of extensible metadata reference keys |
xref | string | arbitrary string reference Length: 1..256 |
readahead:mode | nullable string | readahead mode control one of: "none" or "constant" |
readahead:size | integer | readahead size Range: value <= 4194304 |
encryption | nullable object | virtual disk encryption details |
encryption:method | string | encryption method keyword |
encryption:method_desc | string | human-readable encryption method description |
encryption:cipher | string | encryption cipher keyword |
encryption:cipher_desc | string | human-readable encryption cipher description |
encryption:mode | string | encryption mode keyword |
encryption:mode_desc | string | human-readable encryption mode description |
encryption:key_desc | string | human-readable encryption key description |
data_cache | nullable boolean | data read from disk will be cached |
compression | nullable string | compression codec one of: "none" or "inherit" or "economy" or "adaptive" or "adaptive_economy" or "adaptive_performance" or "performance" |
status:indicator | string | status indicator one of: "online" or "degraded" or "offline" or "na" |
status:value | string | status value one of: "online" or "degraded" or "offline" or "pending" or "payment" |
status:detail | nullable string | status detail |
scsi_reservations | nullable object | virtual disk scsi reservations |
scsi_reservations:generation | integer | SCSI reservation generation |
scsi_reservations:persist | boolean | persist through power loss |
scsi_reservations:reserve6:ini_id | string | reservation initiator id |
scsi_reservations:reserve6:isid | integer | reservation iSCSI session id Range: value <= 281474976710660 |
scsi_reservations:reservations/holder | boolean | reservation holder |
scsi_reservations:reservations/ini_id | string | reservation initiator id |
scsi_reservations:reservations/isid | integer | reservation iSCSI session id Range: value <= 281474976710660 |
scsi_reservations:reservations/key | integer | reservation key |
scsi_reservations:reservations/type | string | reservation type one of: "wr_ex" or "ex_ac" or "wr_ex_reg_only" or "ex_ac_reg_only" or "wr_ex_all_reg" or "ex_ac_all_reg" |
media_loaded | nullable boolean | removable media loaded (if removable) |
loaded_profile_id | nullable string | loaded initiator profile (if removable) |
loaded_profile_serial | nullable string | loaded initiator profile serial number (if removable) |
sizing:size | nullable integer | size in bytes |
sizing:snapshot | nullable integer | total snapshot size in bytes |
sizing:compression_ratio | nullable number | compression ratio |
replication_rts | nullable object | virtual disk replication run-time state |
replication_rts:master | nullable object | replication master status, from slave |
replication_rts:master:state | nullable string | virtual disk slave-side replication state one of: "initializing" or "attached" or "detaching" or "rendezvous" |
replication_rts:master:consistency:master_serial | nullable string | slave consistency reported with respect to specified master virtual disk serial number |
replication_rts:master:consistency:master | nullable string | slave consistency reported with respect to specified master virtual disk ID |
replication_rts:master:consistency:time | nullable integer | slave is consistent with master as of this time Range: 0 <= value |
replication_rts:master:consistency:repl_id | nullable string | virtual disk SCSI id Length: 1..255 |
replication_rts:slaves/disk_id | string | replication slave virtual disk id |
replication_rts:slaves/syndromes | array | master-side slave state syndrome list, if available |
replication_rts:slaves/state | nullable string | virtual disk master-side slave replication state one of: "active" or "attached" or "detached" or "detaching" or "disabled" or "disabling" or "enabling" or "initializing" or "halted" or "rebuild" or "rendezvous" or "resuming" or "suspended" or "suspending" |
replication_rts:slaves/rebuild | nullable object | statistics for the replication rebuild phase |
replication_rts:slaves/rebuild:elapsed | integer | elapsed time of rebuild in milliseconds |
replication_rts:slaves/rebuild:bandwidth | integer | interval SCSI end-to-end bandwidth in bytes/second |
replication_rts:slaves/rebuild:goal | integer | estimated total SCSI transfer bytes |
replication_rts:slaves/rebuild:mode | string | replication rebuild mode one of: "unknown" or "initial" or "recovery" |
replication_rts:slaves/rebuild:evaluated | integer | of estimated transfer bytes, number evaluated |
replication_rts:slaves/rebuild:transfer | integer | total number of bytes written to destination |
replication_rts:slaves/rebuild:progress | integer | percent complete Range: 0 <= value <= 100 |
replication_rts:slaves/rebuild:ettc | nullable integer | estimated time to completion in milliseconds Range: 0 <= value <= 2147483647000 |
replication_rts:slaves/rebuild:start_time | integer | start time of this rebuild in milliseconds since epoch Range: 0 <= value |
replication_rts:slaves/active | nullable object | stats for the replication rebuild phase |
replication_rts:slaves/active:bandwidth | integer | average network bandwidth in bytes/second |
replication_rts:slaves/active:cmd_lag | integer | command lag |
replication_rts:slaves/active:byte_lag | integer | transfer lag |
replication_rts:slaves/active:latency | integer | write latency in milliseconds |
replication_rts:slaves/active:history/bandwidth | integer | average network bandwidth in bytes/second |
replication_rts:slaves/active:history/cmd_lag | integer | command lag |
replication_rts:slaves/active:history/byte_lag | integer | transfer lag |
replication_rts:slaves/active:history/latency | integer | write latency in milliseconds |
replication_rts:slaves/active:history/timestamp | integer | timestamp of this snapshot Range: 0 <= value |
replication_rts:slaves/active:transfer | integer | bytes transferred |
replication_rts:slaves/repair | nullable string | replication slave repair method one of: "repair" or "synchronize" |
iops | nullable integer | normalized 4K I/O operations per second |
iops_read | nullable integer | read operations per second |
iops_write | nullable integer | write operations per second |
bw_read | nullable integer | read bandwidth |
bw_write | nullable integer | write bandwidth |
xmd/id | string | no documentation |
xmd/ref | string | arbitrary string reference key Length: 1..256 |
xmd/mtime | integer | last modified time of xmd Range: 0 <= value |
xmd/tags | array | object tags |
xmd/self | boolean | no documentation |
xmd/data | nullable string | no documentation |
Virtual Disk Info
Retrieve an existing virtual disk.
GET /vdisk/{vdisk_id_or_serial}
Curl Example
$ curl https://mgmt-node/api/vdisk/vdisk:5:10 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:27:05 GMT
Server: Goliath
ETag: "85ed421425032dc2771f5883e0d10ed0"
Content-Type: application/json
Content-Length: 2003
{
"id": "vdisk:5:10",
"uuid": "b4b8f626-b739-4658-abef-7575e8a71559",
"serial": "DSK1962194C4062640F",
"evt_qry": "serial=DSK1962194C4062640F",
"account_id": "account:1:10",
"node_id": "node:10000",
"vss_id": "vss:4:10",
"ctime": 1507570024180,
"mtime": 1507570025869,
"seq": 1507570025881,
"label": "disk-1",
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507570025000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
8,
8,
8,
8
],
"v": "dbg"
},
{
"d": [
6,
6,
6,
6
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507570025771
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"basis_id": null,
"tags": [
],
"locked": true,
"scsi": {
"protocol": "SAM-2,SPC-3,SBC-2",
"tagged_queuing": true,
"reservations": true,
"ua_interlock": false,
"aca": true,
"vendor_ext": false,
"dif": false,
"multi_map": false,
"read_only": false,
"write_once": false,
"removable": false,
"advise_lbp": false,
"features": "Tagged Queueing, Reservations, ACA",
"eui64_id": null,
"lu_serial": "lu.DSK1962194C4062640F",
"vendor_id": "B*BRIDGE",
"t10_id": "b4b8f626-b739-4658-abef-7575e8a71559",
"naa_id": "naa.60a010a05915a7e81962194c4062640f"
},
"caps": {
"encryption": "XTS-AES-128",
"eval": false
},
"task": {
"op": "none"
},
"capacity": 1036871168,
"quota": {
"size": {
"limit": null,
"notify": null,
"reserve": 2073741824
},
"iops": {
"limit": null
},
"workload": null
},
"cap_size_ratio": 1.0,
"transient": null,
"type": [
"internal"
],
"format": null,
"readahead": {
"mode": "constant",
"size": 131072
},
"encryption": {
"method": "symmetric",
"cipher": "aes128",
"mode": "xts",
"method_desc": "Symmetric encryption",
"cipher_desc": "Advanced Encryption Standard (AES128)",
"mode_desc": "XEX-based tweaked-codebook mode with ciphertext stealing (XTS)",
"key_desc": "Randomly generated 128-bit key with 128-bit tweak"
},
"data_cache": true,
"replication": {
"master": null,
"slave": null,
"slaves": [
]
},
"replication_rts": {
"master": null,
"slave": null,
"slaves": [
]
},
"sizing": {
"size": 0,
"snapshot": 0
},
"media_loaded": false,
"loaded_profile_id": null,
"loaded_profile_serial": null
}
Virtual Disk List
Enumerate virtual disks.
GET /vdisk
Curl Example
$ curl https://mgmt-node/api/vss \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:27:04 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 1255
[
{
"id": "vss:4:10",
"uuid": "a29b3f9c-62e6-464a-99b4-f75e56d14753",
"serial": "VSS1862194C40626418",
"evt_qry": "serial=VSS1862194C40626418",
"account_id": "account:1:10",
"node_id": "node:10000",
"ctime": 1507570022649,
"mtime": 1507570023851,
"seq": 1507570023861,
"label": "vss1",
"notes": "vss label updated",
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507570023000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
6,
6,
6,
6
],
"v": "dbg"
},
{
"d": [
5,
5,
5,
5
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507570023794
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"node_serial": "NOD0F68194C40601558",
"location": {
"country": "USA",
"lat": 40,
"long": -43,
"city": "Newark",
"state": "NJ"
},
"tier": "IV",
"quota": {
"size": {
"limit": 3221225472,
"notify": 3221225472,
"reserve": 3221225472
},
"iops": {
"limit": null,
"reserve": 0,
"burst": null,
"burst_credits": null
}
},
"cap_size_ratio": 1.0,
"isotime": "2017-10-09T17:26+00:00",
"build_version": "4.0.0-4252.1",
"build_time": "Thu Oct 05 10:32 UTC 2017",
"version": {
"major": 4,
"minor": 0,
"patch": 0,
"release": "4252.1",
"tag": "",
"hash": "f41b54b0c02b9ecbee50ffca17fc1d74a6e20672",
"timestamp": 1507199541000
},
"sizing": {
"size": 0,
"snapshot": 0,
"reserve_total": 1073741824
}
}
]
Virtual Disk Create
Create a new internal virtual disk.
POST /vdisk
Required Parameters
Name | Type | Description |
---|---|---|
vss_id | string | virtual storage service id |
capacity | integer | capacity in bytes Range: 131072 <= value <= 1125899906842624 |
Optional Parameters
Name | Type | Description |
---|---|---|
uuid | uuid | virtual disk UUID |
label | nullable string | user assigned label Length: 1..64 |
xmd_refs | array | array of extensible metadata reference keys |
xref | nullable string | arbitrary string reference Length: 1..256 |
multi_map | boolean | virtual disk can be mapped into multiple targets |
read_only | boolean | virtual disk is read-only |
removable | boolean | virtual disk is removable |
notes | string | user assigned notes Length: 0..256 |
scsi_advise_lbp | boolean | advisory SCSI logical block provisioning (internal use only) |
tags | array | object tags |
quota:size:limit | nullable integer | upper hard limit on size |
quota:size:notify | nullable integer | notification threshold for size |
quota:size:reserve | integer | guaranteed storage resources default: 0 |
quota:iops:limit | nullable integer | limit on sustained I/O operations per second |
quota:workload | nullable string | workload hint default: "normal_iops" one of: "lower_iops" or "normal_iops" or "higher_iops" |
fs_type | string | filesystem formatting type one of: "ntfs" or "ext4" or "hfsplus" |
fs_options:fs_type | string | filesystem formatting type one of: "ntfs" or "ext4" or "hfsplus" |
readahead:mode | string | readahead mode control default: "constant" one of: "none" or "constant" |
readahead:size | integer | readahead size in bytes (rounded internally to 512-byte blocks) default: 131072 Range: 4096 <= value <= 4194304 |
write_once | boolean | disk is write-once (block can not be re-written) |
data_cache | boolean | data read from disk will be cached default: true |
compression | string | compression codec one of: "none" or "inherit" or "economy" or "adaptive" or "adaptive_economy" or "adaptive_performance" or "performance" |
protocol | string | low-level storage protocol (task parameter) default: "iscsi" one of: "iscsi" or "nvme" |
Curl Example
$ curl -X POST https://mgmt-node/api/vdisk \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"vss_id": "vss:4:10",
"capacity": 1048576
}'
Response Example
201 Created
Date: Mon, 09 Oct 2017 17:27:04 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 1978
{
"id": "vdisk:5:10",
"uuid": "b4b8f626-b739-4658-abef-7575e8a71559",
"serial": "DSK1962194C4062640F",
"evt_qry": "serial=DSK1962194C4062640F",
"account_id": "account:1:10",
"node_id": "node:10000",
"vss_id": "vss:4:10",
"ctime": 1507570024180,
"mtime": 1507570024273,
"seq": 1507570024324,
"label": "disk-1",
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": null,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"v": "dbg",
"d": [
0,
0,
0,
0
]
},
{
"v": "info",
"d": [
0,
0,
0,
0
]
},
{
"v": "warn",
"d": [
0,
0,
0,
0
]
},
{
"v": "err",
"d": [
0,
0,
0,
0
]
}
]
},
"status": "current",
"seq": 1507570024195
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"basis_id": null,
"tags": [
],
"locked": false,
"scsi": {
"protocol": "SAM-2,SPC-3,SBC-2",
"tagged_queuing": true,
"reservations": true,
"ua_interlock": false,
"aca": true,
"vendor_ext": false,
"dif": false,
"multi_map": false,
"read_only": false,
"write_once": false,
"removable": false,
"advise_lbp": false,
"features": "Tagged Queueing, Reservations, ACA",
"eui64_id": null,
"lu_serial": "lu.DSK1962194C4062640F",
"vendor_id": "B*BRIDGE",
"t10_id": "b4b8f626-b739-4658-abef-7575e8a71559",
"naa_id": "naa.60a010a05915a7e81962194c4062640f"
},
"caps": {
"encryption": null,
"eval": null
},
"task": {
"op": "none"
},
"capacity": 1048576,
"quota": {
"size": {
"limit": null,
"notify": null,
"reserve": 0
},
"iops": {
"limit": null
},
"workload": null
},
"cap_size_ratio": 1.0,
"transient": null,
"type": [
"internal"
],
"format": null,
"readahead": {
"mode": "constant",
"size": 131072
},
"encryption": {
"method": "symmetric",
"cipher": "aes128",
"mode": "xts",
"method_desc": "Symmetric encryption",
"cipher_desc": "Advanced Encryption Standard (AES128)",
"mode_desc": "XEX-based tweaked-codebook mode with ciphertext stealing (XTS)",
"key_desc": "Randomly generated 128-bit key with 128-bit tweak"
},
"data_cache": true,
"replication": {
"master": null,
"slave": null,
"slaves": [
]
},
"replication_rts": {
"master": null,
"slave": null,
"slaves": [
]
},
"sizing": {
"size": null,
"snapshot": null
},
"media_loaded": null,
"loaded_profile_id": null,
"loaded_profile_serial": null
}
Virtual Disk Remove
Remove an existing virtual disk. Once removed, the user data in a virtual disk is not retrievable.
DELETE /vdisk/{vdisk_id_or_serial}
Curl Example
$ curl -X DELETE https://mgmt-node/api/vdisk/vdisk:5:10 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
204 No Content
Date: Mon, 09 Oct 2017 17:27:34 GMT
Server: Goliath
Virtual Disk Update
Change the configuration of an existing internal virtual disk.
PATCH /vdisk/{vdisk_id_or_serial}
Optional Parameters
Name | Type | Description |
---|---|---|
xmd_refs | array | array of extensible metadata reference keys |
multi_map | boolean | virtual disk can be mapped in multiple targets |
read_only | boolean | virtual disk is read-only |
removable | boolean | virtual disk is removable |
ua_interlock | boolean | support for SCSI unit attention interlock |
dif | boolean | support for SCSI data integrity field |
scsi_advise_lbp | boolean | advisory SCSI logical block provisioning (internal use only) |
label | nullable string | user assigned label Length: 1..64 |
notes | string | user assigned notes Length: 0..256 |
tags | array | object tags |
readahead:mode | string | readahead mode control one of: "none" or "constant" |
readahead:size | integer | readahead size in bytes (rounded internally to 512-byte blocks) Range: 4096 <= value <= 4194304 |
write_once | boolean | disk is write-once (blocks can not be re-written) |
data_cache | boolean | data read from disk will be cached |
compression | string | compression codec one of: "none" or "inherit" or "economy" or "adaptive" or "adaptive_economy" or "adaptive_performance" or "performance" |
xref | nullable string | arbitrary string reference Length: 1..256 |
Curl Example
$ curl -X PATCH https://mgmt-node/api/vdisk/vdisk:5:10 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"label": "disk",
"notes": "vdisk label changed"
}'
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:27:06 GMT
Server: Goliath
ETag: "99cd117823dbb5404cded284c7cc6fa8"
Content-Type: application/json
Content-Length: 2018
{
"id": "vdisk:5:10",
"uuid": "b4b8f626-b739-4658-abef-7575e8a71559",
"serial": "DSK1962194C4062640F",
"evt_qry": "serial=DSK1962194C4062640F",
"account_id": "account:1:10",
"node_id": "node:10000",
"vss_id": "vss:4:10",
"ctime": 1507570024180,
"mtime": 1507570026250,
"seq": 1507570026260,
"label": "disk",
"notes": "vdisk label changed",
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507570025000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
8,
8,
8,
8
],
"v": "dbg"
},
{
"d": [
6,
6,
6,
6
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507570025771
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"basis_id": null,
"tags": [
],
"locked": true,
"scsi": {
"protocol": "SAM-2,SPC-3,SBC-2",
"tagged_queuing": true,
"reservations": true,
"ua_interlock": false,
"aca": true,
"vendor_ext": false,
"dif": false,
"multi_map": false,
"read_only": false,
"write_once": false,
"removable": false,
"advise_lbp": false,
"features": "Tagged Queueing, Reservations, ACA",
"eui64_id": null,
"lu_serial": "lu.DSK1962194C4062640F",
"vendor_id": "B*BRIDGE",
"t10_id": "b4b8f626-b739-4658-abef-7575e8a71559",
"naa_id": "naa.60a010a05915a7e81962194c4062640f"
},
"caps": {
"encryption": "XTS-AES-128",
"eval": false
},
"task": {
"op": "none"
},
"capacity": 1036871168,
"quota": {
"size": {
"limit": null,
"notify": null,
"reserve": 2073741824
},
"iops": {
"limit": null
},
"workload": null
},
"cap_size_ratio": 1.0,
"transient": null,
"type": [
"internal"
],
"format": null,
"readahead": {
"mode": "constant",
"size": 131072
},
"encryption": {
"method": "symmetric",
"cipher": "aes128",
"mode": "xts",
"method_desc": "Symmetric encryption",
"cipher_desc": "Advanced Encryption Standard (AES128)",
"mode_desc": "XEX-based tweaked-codebook mode with ciphertext stealing (XTS)",
"key_desc": "Randomly generated 128-bit key with 128-bit tweak"
},
"data_cache": true,
"replication": {
"master": null,
"slave": null,
"slaves": [
]
},
"replication_rts": {
"master": null,
"slave": null,
"slaves": [
]
},
"sizing": {
"size": 0,
"snapshot": 0
},
"media_loaded": false,
"loaded_profile_id": null,
"loaded_profile_serial": null
}
Virtual Disk Quota Update
Change the quota for a virtual disk.
PUT /vdisk/{vdisk_id_or_serial}/quota
Optional Parameters
Name | Type | Description |
---|---|---|
size:limit | nullable integer | upper hard limit on size |
size:notify | nullable integer | notification threshold for size |
size:reserve | integer | guaranteed storage resources default: 0 |
iops:limit | nullable integer | limit on sustained I/O operations per second |
workload | nullable string | workload hint default: "normal_iops" one of: "lower_iops" or "normal_iops" or "higher_iops" |
Curl Example
$ curl -X PUT https://mgmt-node/api/vdisk/vdisk:5:10/quota \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"size": {
"reserve": 2097152
}
}'
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:27:04 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 1998
{
"id": "vdisk:5:10",
"uuid": "b4b8f626-b739-4658-abef-7575e8a71559",
"serial": "DSK1962194C4062640F",
"evt_qry": "serial=DSK1962194C4062640F",
"account_id": "account:1:10",
"node_id": "node:10000",
"vss_id": "vss:4:10",
"ctime": 1507570024180,
"mtime": 1507570024757,
"seq": 1507570024812,
"label": "disk-1",
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507570024000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
3,
3,
3,
3
],
"v": "dbg"
},
{
"d": [
2,
2,
2,
2
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507570024779
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"basis_id": null,
"tags": [
],
"locked": false,
"scsi": {
"protocol": "SAM-2,SPC-3,SBC-2",
"tagged_queuing": true,
"reservations": true,
"ua_interlock": false,
"aca": true,
"vendor_ext": false,
"dif": false,
"multi_map": false,
"read_only": false,
"write_once": false,
"removable": false,
"advise_lbp": false,
"features": "Tagged Queueing, Reservations, ACA",
"eui64_id": null,
"lu_serial": "lu.DSK1962194C4062640F",
"vendor_id": "B*BRIDGE",
"t10_id": "b4b8f626-b739-4658-abef-7575e8a71559",
"naa_id": "naa.60a010a05915a7e81962194c4062640f"
},
"caps": {
"encryption": "XTS-AES-128",
"eval": false
},
"task": {
"op": "none"
},
"capacity": 1048576,
"quota": {
"size": {
"limit": null,
"notify": null,
"reserve": 2097152
},
"iops": {
"limit": null
},
"workload": null
},
"cap_size_ratio": 1.0,
"transient": null,
"type": [
"internal"
],
"format": null,
"readahead": {
"mode": "constant",
"size": 131072
},
"encryption": {
"method": "symmetric",
"cipher": "aes128",
"mode": "xts",
"method_desc": "Symmetric encryption",
"cipher_desc": "Advanced Encryption Standard (AES128)",
"mode_desc": "XEX-based tweaked-codebook mode with ciphertext stealing (XTS)",
"key_desc": "Randomly generated 128-bit key with 128-bit tweak"
},
"data_cache": true,
"replication": {
"master": null,
"slave": null,
"slaves": [
]
},
"replication_rts": {
"master": null,
"slave": null,
"slaves": [
]
},
"sizing": {
"size": 0,
"snapshot": 0
},
"media_loaded": false,
"loaded_profile_id": null,
"loaded_profile_serial": null
}
Virtual Disk Add Replication Master
Add a replication master or slave virtual disk.
POST /vdisk/{vdisk_id_or_serial}/replication/master
Required Parameters
Name | Type | Description |
---|---|---|
vdisk_id | string | virtual disk id to add as replica |
Curl Example
$ curl -X POST https://mgmt-node/api/vdisk/vdisk:7:10/replication/master \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"vdisk_id": "vdisk:6:10"
}'
Response Example
204 No Content
Date: Mon, 09 Oct 2017 17:27:09 GMT
Server: Goliath
Virtual Disk Remove Replication Master
Remove a replication master or slave virtual disk.
DELETE /vdisk/{vdisk_id_or_serial}/replication/master/{vdisk_master_id}
Curl Example
$ curl -X DELETE https://mgmt-node/api/vdisk/vdisk:7:10/replication/master/vdisk:6:10 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
204 No Content
Date: Mon, 09 Oct 2017 17:27:10 GMT
Server: Goliath
Virtual Disk Add Replication Slave
Add a replication master or slave virtual disk.
POST /vdisk/{vdisk_id_or_serial}/replication/slaves
Required Parameters
Name | Type | Description |
---|---|---|
vdisk_id | string | virtual disk id to add as replica |
Curl Example
$ curl -X POST https://mgmt-node/api/vdisk/vdisk:6:10/replication/slaves \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"vdisk_id": "vdisk:7:10"
}'
Response Example
204 No Content
Date: Mon, 09 Oct 2017 17:27:09 GMT
Server: Goliath
Virtual Disk Update Replication Slave
Update the configuration of a replication master or slave virtual disk.
PUT /vdisk/{vdisk_id_or_serial}/replication/slaves/{vdisk_slave_id}
Optional Parameters
Name | Type | Description |
---|---|---|
state | string | state transition to perform one of: "enable" or "disable" or "suspend" or "resume" |
config:mode | string | replication mode one of: "async" or "sync" or "async-ordered" |
config:max_lag_cmds | integer | maximum commands to lag behind during async replication default: 0 |
config:max_lag_bytes | integer | maximum bytes to lag behind during async replication default: 0 |
config:recovery | string | recovery options default: "drl" one of: "none" or "drl" |
config:rebuild_bandwidth | integer | rebuild bandwidth limit in bytes/sec default: 0 |
config:rebuild_hash | boolean | use a hashing optimization to reduce network traffic during rebuild default: true |
config:timeout | integer | time to wait (in milliseconds) before stopping an unresponsive slave default: 20000 Range: 100 <= value |
Curl Example
$ curl -X PUT https://mgmt-node/api/vdisk/vdisk:6:10/replication/slaves/vdisk:7:10 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"state": "enable",
"config": {
"mode": "async-ordered"
}
}'
Response Example
204 No Content
Date: Mon, 09 Oct 2017 17:27:09 GMT
Server: Goliath
Virtual Disk Remove Replication Slave
Remove a replication master or slave virtual disk.
DELETE /vdisk/{vdisk_id_or_serial}/replication/slaves/{vdisk_slave_id}
Curl Example
$ curl -X DELETE https://mgmt-node/api/vdisk/vdisk:6:10/replication/slaves/vdisk:7:10 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
204 No Content
Date: Mon, 09 Oct 2017 17:27:10 GMT
Server: Goliath
Virtual Disk Attach Replication Peers
Create a replication relationship between a master virtual disk and a slave virtual disk.
POST /vdisk/actions/replication/attach
Required Parameters
Name | Type | Description |
---|---|---|
master_id | string | virtual disk id of replica master |
slave_id | string | virtual disk id of replica slave |
Curl Example
$ curl -X POST https://mgmt-node/api/vdisk/actions/replication/attach \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"master_id": "vdisk:7:10",
"slave_id": "vdisk:6:10"
}'
Response Example
204 No Content
Date: Mon, 09 Oct 2017 17:27:11 GMT
Server: Goliath
Virtual Disk Detach Replication Peers
Break the replication relationship between a master virtual disk and a slave virtual disk.
POST /vdisk/actions/replication/detach
Required Parameters
Name | Type | Description |
---|---|---|
master_id | string | virtual disk id of replica master |
slave_id | string | virtual disk id of replica slave |
Curl Example
$ curl -X POST https://mgmt-node/api/vdisk/actions/replication/detach \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"master_id": "vdisk:6:10",
"slave_id": "vdisk:7:10"
}'
Response Example
204 No Content
Date: Mon, 09 Oct 2017 17:27:11 GMT
Server: Goliath
Virtual Disk Rebuild Replication Slave
Rebuild a replication slave virtual disk.
POST /vdisk/actions/replication/rebuild
Required Parameters
Name | Type | Description |
---|---|---|
master_id | string | virtual disk id of replica master |
slave_id | string | virtual disk id of replica slave |
Curl Example
$ curl -X POST https://mgmt-node/api/vdisk/actions/replication/rebuild \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"master_id": "vdisk:6:10",
"slave_id": "vdisk:7:10"
}'
Response Example
204 No Content
Date: Mon, 09 Oct 2017 17:27:11 GMT
Server: Goliath
Virtual Disk Resize
Change the size of an internal virtual disk
POST /vdisk/{vdisk_id_or_serial}/actions/resize
Required Parameters
Name | Type | Description |
---|---|---|
capacity | integer | new user addressable capacity in bytes Range: 131072 <= value <= 1125899906842624 |
Curl Example
$ curl -X POST https://mgmt-node/api/vdisk/vdisk:5:10/actions/resize \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"capacity": 1036870912
}'
Response Example
201 Created
Date: Mon, 09 Oct 2017 17:27:05 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 2004
{
"id": "vdisk:5:10",
"uuid": "b4b8f626-b739-4658-abef-7575e8a71559",
"serial": "DSK1962194C4062640F",
"evt_qry": "serial=DSK1962194C4062640F",
"account_id": "account:1:10",
"node_id": "node:10000",
"vss_id": "vss:4:10",
"ctime": 1507570024180,
"mtime": 1507570025563,
"seq": 1507570025573,
"label": "disk-1",
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507570024000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
3,
3,
3,
3
],
"v": "dbg"
},
{
"d": [
2,
2,
2,
2
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507570024779
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"basis_id": null,
"tags": [
],
"locked": false,
"scsi": {
"protocol": "SAM-2,SPC-3,SBC-2",
"tagged_queuing": true,
"reservations": true,
"ua_interlock": false,
"aca": true,
"vendor_ext": false,
"dif": false,
"multi_map": false,
"read_only": false,
"write_once": false,
"removable": false,
"advise_lbp": false,
"features": "Tagged Queueing, Reservations, ACA",
"eui64_id": null,
"lu_serial": "lu.DSK1962194C4062640F",
"vendor_id": "B*BRIDGE",
"t10_id": "b4b8f626-b739-4658-abef-7575e8a71559",
"naa_id": "naa.60a010a05915a7e81962194c4062640f"
},
"caps": {
"encryption": "XTS-AES-128",
"eval": false
},
"task": {
"op": "none"
},
"capacity": 1036871168,
"quota": {
"size": {
"limit": null,
"notify": null,
"reserve": 2073741824
},
"iops": {
"limit": null
},
"workload": null
},
"cap_size_ratio": 1.0,
"transient": null,
"type": [
"internal"
],
"format": null,
"readahead": {
"mode": "constant",
"size": 131072
},
"encryption": {
"method": "symmetric",
"cipher": "aes128",
"mode": "xts",
"method_desc": "Symmetric encryption",
"cipher_desc": "Advanced Encryption Standard (AES128)",
"mode_desc": "XEX-based tweaked-codebook mode with ciphertext stealing (XTS)",
"key_desc": "Randomly generated 128-bit key with 128-bit tweak"
},
"data_cache": true,
"replication": {
"master": null,
"slave": null,
"slaves": [
]
},
"replication_rts": {
"master": null,
"slave": null,
"slaves": [
]
},
"sizing": {
"size": 0,
"snapshot": 0
},
"media_loaded": false,
"loaded_profile_id": null,
"loaded_profile_serial": null
}
Virtual Disk Thicken
vdisk thicken
POST /vdisk/{vdisk_id_or_serial}/actions/thicken
Optional Parameters
Name | Type | Description |
---|---|---|
limit_bandwidth | boolean | limit bandwidth usage |
bandwidth | integer | verification bandwidth limit in bytes/sec |
Curl Example
$ curl -X POST FIXME
Response Example
HTTP/1.1 200 OK
Virtual Disk Compress
vdisk compress
POST /vdisk/{vdisk_id_or_serial}/actions/compress
Optional Parameters
Name | Type | Description |
---|---|---|
limit_bandwidth | boolean | limit bandwidth usage |
bandwidth | integer | verification bandwidth limit in bytes/sec |
Curl Example
$ curl -X POST FIXME
Response Example
HTTP/1.1 200 OK
Virtual Disk Reclaim
vdisk reclaim
POST /vdisk/{vdisk_id_or_serial}/actions/reclaim
Curl Example
$ curl -X POST FIXME
Response Example
HTTP/1.1 200 OK
Virtual Disk Rollback
vdisk rollback
POST /vdisk/{vdisk_id_or_serial}/actions/rollback
Required Parameters
Name | Type | Description |
---|---|---|
snapshot_id | string | snapshot id to roll back to |
Optional Parameters
Name | Type | Description |
---|---|---|
dry_run | boolean | Run a non-destructive check to see if rollback is possible |
Curl Example
$ curl -X POST FIXME
Response Example
HTTP/1.1 200 OK
Virtual Disk Lock
Lock an internal virtual disk. This action uses the supplied passphrase to encrypt the disk's encryption key. Once locked, the disk cannot be decrypted without supplying the passphrase.
POST /vdisk/{vdisk_id_or_serial}/actions/lock
Required Parameters
Name | Type | Description |
---|---|---|
passphrase | string | passphrase Length: 1..∞ |
Curl Example
$ curl -X POST https://mgmt-node/api/vdisk/vdisk:5:10/actions/lock \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"passphrase": "foo"
}'
Response Example
201 Created
Date: Mon, 09 Oct 2017 17:27:05 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 2003
{
"id": "vdisk:5:10",
"uuid": "b4b8f626-b739-4658-abef-7575e8a71559",
"serial": "DSK1962194C4062640F",
"evt_qry": "serial=DSK1962194C4062640F",
"account_id": "account:1:10",
"node_id": "node:10000",
"vss_id": "vss:4:10",
"ctime": 1507570024180,
"mtime": 1507570025869,
"seq": 1507570025881,
"label": "disk-1",
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507570025000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
8,
8,
8,
8
],
"v": "dbg"
},
{
"d": [
6,
6,
6,
6
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507570025771
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"basis_id": null,
"tags": [
],
"locked": true,
"scsi": {
"protocol": "SAM-2,SPC-3,SBC-2",
"tagged_queuing": true,
"reservations": true,
"ua_interlock": false,
"aca": true,
"vendor_ext": false,
"dif": false,
"multi_map": false,
"read_only": false,
"write_once": false,
"removable": false,
"advise_lbp": false,
"features": "Tagged Queueing, Reservations, ACA",
"eui64_id": null,
"lu_serial": "lu.DSK1962194C4062640F",
"vendor_id": "B*BRIDGE",
"t10_id": "b4b8f626-b739-4658-abef-7575e8a71559",
"naa_id": "naa.60a010a05915a7e81962194c4062640f"
},
"caps": {
"encryption": "XTS-AES-128",
"eval": false
},
"task": {
"op": "none"
},
"capacity": 1036871168,
"quota": {
"size": {
"limit": null,
"notify": null,
"reserve": 2073741824
},
"iops": {
"limit": null
},
"workload": null
},
"cap_size_ratio": 1.0,
"transient": null,
"type": [
"internal"
],
"format": null,
"readahead": {
"mode": "constant",
"size": 131072
},
"encryption": {
"method": "symmetric",
"cipher": "aes128",
"mode": "xts",
"method_desc": "Symmetric encryption",
"cipher_desc": "Advanced Encryption Standard (AES128)",
"mode_desc": "XEX-based tweaked-codebook mode with ciphertext stealing (XTS)",
"key_desc": "Randomly generated 128-bit key with 128-bit tweak"
},
"data_cache": true,
"replication": {
"master": null,
"slave": null,
"slaves": [
]
},
"replication_rts": {
"master": null,
"slave": null,
"slaves": [
]
},
"sizing": {
"size": 0,
"snapshot": 0
},
"media_loaded": false,
"loaded_profile_id": null,
"loaded_profile_serial": null
}
Virtual Disk Unlock
Unlock a locked virtual disk. The correct passphrase must be supplied.
POST /vdisk/{vdisk_id_or_serial}/actions/unlock
Required Parameters
Name | Type | Description |
---|---|---|
passphrase | string | passphrase Length: 1..∞ |
Curl Example
$ curl -X POST https://mgmt-node/api/vdisk/vdisk:5:10/actions/unlock \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"passphrase": "foo"
}'
Response Example
201 Created
Date: Mon, 09 Oct 2017 17:27:06 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 2019
{
"id": "vdisk:5:10",
"uuid": "b4b8f626-b739-4658-abef-7575e8a71559",
"serial": "DSK1962194C4062640F",
"evt_qry": "serial=DSK1962194C4062640F",
"account_id": "account:1:10",
"node_id": "node:10000",
"vss_id": "vss:4:10",
"ctime": 1507570024180,
"mtime": 1507570026542,
"seq": 1507570026553,
"label": "disk",
"notes": "vdisk label changed",
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": 1507570025000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
8,
8,
8,
8
],
"v": "dbg"
},
{
"d": [
6,
6,
6,
6
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"status": "current",
"seq": 1507570025771
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"basis_id": null,
"tags": [
],
"locked": false,
"scsi": {
"protocol": "SAM-2,SPC-3,SBC-2",
"tagged_queuing": true,
"reservations": true,
"ua_interlock": false,
"aca": true,
"vendor_ext": false,
"dif": false,
"multi_map": false,
"read_only": false,
"write_once": false,
"removable": false,
"advise_lbp": false,
"features": "Tagged Queueing, Reservations, ACA",
"eui64_id": null,
"lu_serial": "lu.DSK1962194C4062640F",
"vendor_id": "B*BRIDGE",
"t10_id": "b4b8f626-b739-4658-abef-7575e8a71559",
"naa_id": "naa.60a010a05915a7e81962194c4062640f"
},
"caps": {
"encryption": "XTS-AES-128",
"eval": false
},
"task": {
"op": "none"
},
"capacity": 1036871168,
"quota": {
"size": {
"limit": null,
"notify": null,
"reserve": 2073741824
},
"iops": {
"limit": null
},
"workload": null
},
"cap_size_ratio": 1.0,
"transient": null,
"type": [
"internal"
],
"format": null,
"readahead": {
"mode": "constant",
"size": 131072
},
"encryption": {
"method": "symmetric",
"cipher": "aes128",
"mode": "xts",
"method_desc": "Symmetric encryption",
"cipher_desc": "Advanced Encryption Standard (AES128)",
"mode_desc": "XEX-based tweaked-codebook mode with ciphertext stealing (XTS)",
"key_desc": "Randomly generated 128-bit key with 128-bit tweak"
},
"data_cache": true,
"replication": {
"master": null,
"slave": null,
"slaves": [
]
},
"replication_rts": {
"master": null,
"slave": null,
"slaves": [
]
},
"sizing": {
"size": 0,
"snapshot": 0
},
"media_loaded": false,
"loaded_profile_id": null,
"loaded_profile_serial": null
}
Virtual Disk Load Media
vdisk load
POST /vdisk/{vdisk_id_or_serial}/actions/load
Required Parameters
Name | Type | Description |
---|---|---|
profile_id | string | initiator profile id (for which virtual disk is loaded) |
Curl Example
$ curl -X POST https://mgmt-node/api/vdisk/vdisk:8:10/actions/load \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"profile_id": "initiator_profile:9:10"
}'
Response Example
201 Created
Date: Mon, 09 Oct 2017 17:27:15 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 1994
{
"id": "vdisk:8:10",
"uuid": "51ea1be3-fd01-40ff-8b7d-585af695959f",
"serial": "DSK1962194C406264D5",
"evt_qry": "serial=DSK1962194C406264D5",
"account_id": "account:1:10",
"node_id": "node:10000",
"vss_id": "vss:4:10",
"ctime": 1507570035177,
"mtime": 1507570035279,
"seq": 1507570035326,
"label": "rmv",
"notes": "removable virtual disk",
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": null,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"v": "dbg",
"d": [
0,
0,
0,
0
]
},
{
"v": "info",
"d": [
0,
0,
0,
0
]
},
{
"v": "warn",
"d": [
0,
0,
0,
0
]
},
{
"v": "err",
"d": [
0,
0,
0,
0
]
}
]
},
"status": "current",
"seq": 1507570035193
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"basis_id": null,
"tags": [
],
"locked": false,
"scsi": {
"protocol": "SAM-2,SPC-3,SBC-2",
"tagged_queuing": true,
"reservations": true,
"ua_interlock": false,
"aca": true,
"vendor_ext": false,
"dif": false,
"multi_map": false,
"read_only": false,
"write_once": false,
"removable": true,
"advise_lbp": false,
"features": "Tagged Queueing, Reservations, ACA",
"eui64_id": null,
"lu_serial": "lu.DSK1962194C406264D5",
"vendor_id": "B*BRIDGE",
"t10_id": "51ea1be3-fd01-40ff-8b7d-585af695959f",
"naa_id": "naa.60a010a09f9595f61962194c406264d5"
},
"caps": {
"encryption": null,
"eval": null
},
"task": {
"op": "none"
},
"capacity": 1048576,
"quota": {
"size": {
"limit": null,
"notify": null,
"reserve": 0
},
"iops": {
"limit": null
},
"workload": null
},
"cap_size_ratio": 1.0,
"transient": null,
"type": [
"internal"
],
"format": null,
"readahead": {
"mode": "constant",
"size": 131072
},
"encryption": {
"method": "symmetric",
"cipher": "aes128",
"mode": "xts",
"method_desc": "Symmetric encryption",
"cipher_desc": "Advanced Encryption Standard (AES128)",
"mode_desc": "XEX-based tweaked-codebook mode with ciphertext stealing (XTS)",
"key_desc": "Randomly generated 128-bit key with 128-bit tweak"
},
"data_cache": true,
"replication": {
"master": null,
"slave": null,
"slaves": [
]
},
"replication_rts": {
"master": null,
"slave": null,
"slaves": [
]
},
"sizing": {
"size": null,
"snapshot": null
},
"media_loaded": null,
"loaded_profile_id": null,
"loaded_profile_serial": null
}
Virtual Disk Load Cloned Media
Clone the specified snapshot and load the media into a new removable virtual disk.
POST /vdisk/{vdisk_id_or_serial}/actions/load-clone
Required Parameters
Name | Type | Description |
---|---|---|
profile_id | string | initiator profile id (for which virtual disk is loaded) |
Optional Parameters
Name | Type | Description |
---|---|---|
label | string | user assigned label Length: 1..64 |
Curl Example
$ curl -X POST https://mgmt-node/api/vdisk/vdisk:5:10/actions/load-clone \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"profile_id": "initiator_profile:9:10",
"label": "clone-disk"
}'
Response Example
201 Created
Date: Mon, 09 Oct 2017 17:27:16 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 1995
{
"id": "vdisk:9:10",
"uuid": "1a72cbae-b6f9-485e-96e8-ab5b5f342912",
"serial": "DSK1962194C406264CD",
"evt_qry": "serial=DSK1962194C406264CD",
"account_id": "account:1:10",
"node_id": "node:10000",
"vss_id": "vss:4:10",
"ctime": 1507570035928,
"mtime": 1507570036189,
"seq": 1507570036249,
"label": "clone-disk",
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": null,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"v": "dbg",
"d": [
0,
0,
0,
0
]
},
{
"v": "info",
"d": [
0,
0,
0,
0
]
},
{
"v": "warn",
"d": [
0,
0,
0,
0
]
},
{
"v": "err",
"d": [
0,
0,
0,
0
]
}
]
},
"status": "current",
"seq": 1507570035956
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"basis_id": "snapshot:1:10",
"tags": [
],
"locked": false,
"scsi": {
"protocol": "SAM-2,SPC-3,SBC-2",
"tagged_queuing": true,
"reservations": true,
"ua_interlock": false,
"aca": true,
"vendor_ext": false,
"dif": false,
"multi_map": false,
"read_only": false,
"write_once": false,
"removable": true,
"advise_lbp": false,
"features": "Tagged Queueing, Reservations, ACA",
"eui64_id": null,
"lu_serial": "lu.DSK1962194C406264CD",
"vendor_id": "B*BRIDGE",
"t10_id": "1a72cbae-b6f9-485e-96e8-ab5b5f342912",
"naa_id": "naa.60a010a01229345f1962194c406264cd"
},
"caps": {
"encryption": null,
"eval": null
},
"task": {
"op": "none"
},
"capacity": 1036871168,
"quota": {
"size": {
"limit": null,
"notify": null,
"reserve": 0
},
"iops": {
"limit": null
},
"workload": null
},
"cap_size_ratio": 1.0,
"transient": true,
"type": [
"internal"
],
"format": null,
"readahead": {
"mode": "constant",
"size": 131072
},
"encryption": {
"method": "symmetric",
"cipher": "aes128",
"mode": "xts",
"method_desc": "Symmetric encryption",
"cipher_desc": "Advanced Encryption Standard (AES128)",
"mode_desc": "XEX-based tweaked-codebook mode with ciphertext stealing (XTS)",
"key_desc": "Randomly generated 128-bit key with 128-bit tweak"
},
"data_cache": true,
"replication": {
"master": null,
"slave": null,
"slaves": [
]
},
"replication_rts": {
"master": null,
"slave": null,
"slaves": [
]
},
"sizing": {
"size": null,
"snapshot": null
},
"media_loaded": null,
"loaded_profile_id": null,
"loaded_profile_serial": null
}
Virtual Disk Eject Media
Eject the media for a removable virtual disk.
POST /vdisk/{vdisk_id_or_serial}/actions/eject
Curl Example
$ curl -X POST https://mgmt-node/api/vdisk/vdisk:8:10/actions/eject \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
204 No Content
Date: Mon, 09 Oct 2017 17:27:16 GMT
Server: Goliath
Virtual Disk Backup
Initiate a backup.
POST /vdisk/{vdisk_id_or_serial}/actions/backup
Required Parameters
Name | Type | Description |
---|---|---|
snapshot_id | string | snapshot id |
obj_store_id | string | object store id |
Optional Parameters
Name | Type | Description |
---|---|---|
uuid | uuid | backup UUID |
object_key | nullable string | object store base key string |
Curl Example
$ curl -X POST https://mgmt-node/api/vdisk/vdisk:5:10/actions/backup \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"snapshot_id": "snapshot:2:10",
"obj_store_id": "obj_store:7:10"
}'
Response Example
201 Created
Date: Mon, 09 Oct 2017 17:27:18 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 163
{
"status": "success",
"task_id": "ptask:313:10",
"task_context": "759fe227-d14f-4d80-909b-2b37dd7ddac6",
"backup_id": "a541db70-32fa-4f7d-b4a0-0edb93d391a6",
"headers": {
}
}
Virtual Disk Barrier Create
Raise a time-limited I/O barrier. Outstanding I/O operations will run to completion. New operations will wait until the barrier expires or is removed.
POST /vdisk/{vdisk_id_or_serial}/barrier
Required Parameters
Name | Type | Description |
---|---|---|
uuid | uuid | barrier UUID |
expires | integer | relative expiration time (in ms) |
vdisk_id | string | virtual disk ID |
Curl Example
$ curl -X POST https://mgmt-node/api/vdisk/vdisk:5:10/barrier \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"uuid": "58308c7f-9501-4a03-a36d-31e2be6eb015",
"expires": 5000
}'
Response Example
201 Created
Date: Mon, 09 Oct 2017 17:27:05 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 55
{
"status": "success",
"start": 1507570025022,
"headers": {
}
}
Virtual Disk Barrier Remove
Remove a virtual disk I/O barrier.
DELETE /vdisk/{vdisk_id_or_serial}/barrier/{vdisk_uuid}
Required Parameters
Name | Type | Description |
---|---|---|
uuid | uuid | object uuid |
vdisk_id | string | virtual disk ID |
Curl Example
$ curl -X DELETE https://mgmt-node/api/vdisk/vdisk:5:10/barrier/58308c7f-9501-4a03-a36d-31e2be6eb015 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:27:05 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 53
{
"status": "success",
"barrier": "removed",
"headers": {
}
}
iSCSI Initiator Profile
Initiator profiles hold the authentication and transport encryption parameters for one or more iSCSI initiators. From this resource, you may also create secure access tokens that use split key encryption to enable you to unlock access to your disks on demand. And, you can define policies that restrict initiator access to certain times of day, or to certain IP address ranges.
Attributes
Name | Type | Description |
---|---|---|
id | string | object id |
uuid | uuid | object uuid |
ctime | integer | initiator profile create time Range: 0 <= value |
mtime | integer | initiator profile last modified time Range: 0 <= value |
label | nullable string | user assigned label Length: 1..64 |
protocol | string | low-level storage protocol (ds record) one of: "iscsi" or "nvme" |
iscsi:auth_method | string | authentication method string |
iscsi:initiator_login | string | initator CHAP username |
iscsi:initiator_login_suffix | string | initiator CHAP username suffix (account name) |
iscsi:initiator_pass_set | boolean | password is set |
iscsi:suggested_base_iqn | string | suggested IQN string for this profile |
iscsi:initiator_list | array | initiator access list |
iscsi:initiator_chap_mode | string | initiator CHAP mode one of: "username" or "token" |
iscsi:mutual_auth | string | mutual authentication administrative state one of: "disabled" or "optional" or "required" |
iscsi:target_login | string | mutual authentication target CHAP username |
access_token:valid | boolean | access token is valid |
access_token:created_stamp | integer | token created timestamp Range: 0 <= value |
access_token:id | string | access token id |
transport:mode | string | secure transport mode one of: "insecure" or "tls" or "ikev1" or "ikev2" |
transport:encryption_policy | string | transport encryption policy default: "disallowed" one of: "disallowed" or "optional" or "required" |
transport:ikev1:mode | string | no documentation one of: "transport" |
transport:ikev1:auth | string | client authentication mode one of: "psk" |
transport:ikev1:psk | string | pre-shared secret key Length: 1..∞ |
transport:ikev2:mode | string | no documentation one of: "transport" or "tunnel" |
transport:ikev2:subnet | string | private subnet designation default: "172_31" one of: "172_31" or "172_30" or "10_1" |
transport:ikev2:auth | string | client authentication mode one of: "mschapv2" |
transport:ikev2:mschapv2_user | string | MSCHAPv2 username Length: 1..∞ |
transport:ikev2:mschapv2_pass | string | MSCHAPv2 password Length: 1..∞ |
transport:tls:portal_ipaddr | ipv4 | virtual target portal ip address |
transport:tls:portal_ipport | integer | virtual target portal ip port |
nvme:initiator_list | array | initiator access list |
account_id | string | account ref |
serial | string | initiator profile serial number |
vss_id | nullable string | virtual storage service id (if not global) |
notes | nullable string | user assigned notes Length: 0..256 |
replication | boolean | is profile for replication |
system | boolean | system target |
xmd_refs | array | array of extensible metadata reference keys |
xref | nullable string | arbitrary string reference Length: 1..256 |
rules:options:timezone | string | timezone one of: "local" |
rules:access:ip/type | string | access type one of: "allow" or "deny" |
rules:access:ip/ip | ipv4 | IP address |
rules:access:ip/mask | ipv4 | netmask |
rules:access:weekly/type | string | access type one of: "allow" or "deny" |
rules:access:weekly/start | integer | start time in milliseconds since the start of the week (Monday 00:00:00.000) Range: 0 <= value <= 604799000 |
rules:access:weekly/end | integer | end time in milliseconds since the start of the week (Monday 00:00:00.000) Range: 0 <= value <= 604799000 |
rules:throttle:weekly/bandwidth | integer | bandwidth limit |
rules:throttle:weekly/start | integer | start time in milliseconds since the start of the week (Monday 00:00:00.000) Range: 0 <= value <= 604799000 |
rules:throttle:weekly/end | integer | end time in milliseconds since the start of the week (Monday 00:00:00.000) Range: 0 <= value <= 604799000 |
rules:disk:commands | string | data commands one of: "read-write" or "read-only" or "write-only" |
rules:disk:model | string | model override pattern: ^[\x20-\x7e]+$ Length: 0..16 |
status:indicator | string | status indicator one of: "online" or "degraded" or "offline" or "na" |
status:value | string | status value one of: "online" or "degraded" or "offline" or "pending" or "payment" |
status:detail | nullable string | status detail |
xmd/id | string | no documentation |
xmd/ref | string | arbitrary string reference key Length: 1..256 |
xmd/mtime | integer | last modified time of xmd Range: 0 <= value |
xmd/tags | array | object tags |
xmd/self | boolean | no documentation |
xmd/data | nullable string | no documentation |
iSCSI Initiator Profile Info
Retrieve an existing iSCSI initiator profile.
GET /initiator-profile/{initiator_profile_id_or_serial}
Curl Example
$ curl https://mgmt-node/api/initiator-profile/initiator_profile:9:10 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:27:12 GMT
Server: Goliath
ETag: "c9e392e8a14d62d563325d038a852d81"
Content-Type: application/json
Content-Length: 1420
{
"id": "initiator_profile:9:10",
"uuid": "3a20192f-7fac-4ac9-acc7-a506038a8d83",
"serial": "PRF0062194C406264CB",
"evt_qry": "serial=PRF0062194C406264CB",
"account_id": "account:1:10",
"vss_id": null,
"ctime": 1507570031974,
"mtime": 1507570032486,
"seq": 1507570032618,
"label": "global_profile",
"notes": "initiator profile was updated with chap info",
"status": {
"indicator": "online",
"value": "online",
"detail": ""
},
"ec": {
"status": "current",
"table": {
"time": null,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
0,
0,
0,
0
],
"v": "dbg"
},
{
"d": [
0,
0,
0,
0
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"seq": 1507570031982
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"access_token": {
"valid": false
},
"iscsi": {
"auth_method": "Challenge-Handshake Authentication Protocol (CHAP)",
"initiator_login": "chapuser",
"initiator_login_suffix": "@system",
"initiator_pass_set": true,
"suggested_base_iqn": "iqn.2009-12.com.blockbridge:i-pjxazxi",
"initiator_list": [
"iqn.2009-12.com.blockbridge.client-host:da3db582a6f7"
],
"initiator_chap_mode": "username",
"mutual_auth": "disabled"
},
"transport": {
"mode": "insecure",
"encryption_policy": "disallowed"
},
"rules": {
"options": {
"timezone": "local"
},
"disk": {
"commands": "read-write"
},
"access": {
"options": {
},
"ip": [
{
"type": [
"allow"
],
"ip": "0.0.0.0",
"mask": "0.0.0.0"
},
{
"type": [
"allow"
],
"ip": "::",
"mask": "::"
}
],
"weekly": [
{
"type": [
"allow"
],
"start": 0,
"end": 604799000
}
]
},
"throttle": {
"options": {
},
"weekly": [
]
}
}
}
iSCSI Initiator Profile List
Enumerate iSCSI initiator profiles.
GET /initiator-profile
Curl Example
$ curl https://mgmt-node/api/initiator-profile \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:27:12 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 2913
[
{
"id": "initiator_profile:8:10",
"uuid": "7b81fe1e-d5f4-4edf-87d0-f9b7b45b1713",
"serial": "PRF0062194C406264D3",
"evt_qry": "serial=PRF0062194C406264D3",
"account_id": "account:1:10",
"vss_id": "vss:5:10",
"ctime": 1507570030986,
"mtime": 1507570030986,
"seq": 1507570031776,
"label": "replication-dsk1962194c40626437-764188fd15164c48f545a8871c923206",
"notes": null,
"status": {
"indicator": "online",
"value": "online",
"detail": ""
},
"ec": {
"status": "current",
"table": {
"time": 1507570031000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
2,
2,
2,
2
],
"v": "dbg"
},
{
"d": [
5,
5,
5,
5
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"seq": 1507570031776
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"access_token": {
"valid": false
},
"iscsi": {
"auth_method": "Challenge-Handshake Authentication Protocol (CHAP)",
"initiator_login": "replication-dsk1962194c40626437-764188fd15164c48f545a8871c923206",
"initiator_login_suffix": "@system",
"initiator_pass_set": true,
"suggested_base_iqn": "iqn.2009-12.com.blockbridge:i-pjxazxh",
"initiator_list": [
"iqn.2009-12.com.blockbridge:i-pjxazxh-replication-764188fd15164c48f545a8871c923206"
],
"initiator_chap_mode": "username",
"mutual_auth": "disabled"
},
"transport": {
"mode": "tls",
"encryption_policy": "required",
"tls": {
"portal_ipaddr": "127.0.0.1",
"portal_ipport": 3260
}
},
"rules": {
"options": {
"timezone": "local"
},
"disk": {
"commands": "read-write"
},
"access": {
"options": {
},
"ip": [
{
"type": [
"allow"
],
"ip": "0.0.0.0",
"mask": "0.0.0.0"
},
{
"type": [
"allow"
],
"ip": "::",
"mask": "::"
}
],
"weekly": [
{
"type": [
"allow"
],
"start": 0,
"end": 604799000
}
]
},
"throttle": {
"options": {
},
"weekly": [
]
}
}
},
{
"id": "initiator_profile:9:10",
"uuid": "3a20192f-7fac-4ac9-acc7-a506038a8d83",
"serial": "PRF0062194C406264CB",
"evt_qry": "serial=PRF0062194C406264CB",
"account_id": "account:1:10",
"vss_id": null,
"ctime": 1507570031974,
"mtime": 1507570031975,
"seq": 1507570031982,
"label": "profile-1",
"notes": null,
"status": {
"indicator": "online",
"value": "online",
"detail": ""
},
"ec": {
"status": "current",
"table": {
"time": null,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
0,
0,
0,
0
],
"v": "dbg"
},
{
"d": [
0,
0,
0,
0
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"seq": 1507570031982
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"access_token": {
"valid": false
},
"iscsi": {
"auth_method": "Challenge-Handshake Authentication Protocol (CHAP)",
"initiator_login": "PRF0062194C406264CB",
"initiator_login_suffix": "@system",
"initiator_pass_set": false,
"suggested_base_iqn": "iqn.2009-12.com.blockbridge:i-pjxazxi",
"initiator_list": [
],
"initiator_chap_mode": "username",
"mutual_auth": "disabled"
},
"transport": {
"mode": "insecure",
"encryption_policy": "disallowed"
},
"rules": {
"options": {
"timezone": "local"
},
"disk": {
"commands": "read-write"
},
"access": {
"options": {
},
"ip": [
{
"type": [
"allow"
],
"ip": "0.0.0.0",
"mask": "0.0.0.0"
},
{
"type": [
"allow"
],
"ip": "::",
"mask": "::"
}
],
"weekly": [
{
"type": [
"allow"
],
"start": 0,
"end": 604799000
}
]
},
"throttle": {
"options": {
},
"weekly": [
]
}
}
}
]
iSCSI Initiator Profile Create
Create a new iSCSI initiator profile.
POST /initiator-profile
Optional Parameters
Name | Type | Description |
---|---|---|
xmd_refs | array | array of extensible metadata reference keys |
xref | nullable string | arbitrary string reference Length: 1..256 |
label | nullable string | user assigned label Length: 1..64 |
enabled | boolean | initiator profile enabled for access default: true |
initiator_login | string | initiator CHAP username Length: 1..128 |
initiator_pass | string | initiator CHAP password Length: 12..64 |
vss_id | string | profile is local to specified virtual storage service |
initiator_list | array | initiator access list |
initiator_chap_mode | string | initiator CHAP mode one of: "username" or "token" |
mutual_auth | string | mutual authentication default: "disabled" one of: "disabled" or "optional" or "required" |
target_login | string | mutual authentication target CHAP username Length: 1..128 |
target_pass | string | mutual authentication target CHAP password Length: 12..64 |
transport:mode | string | secure transport mode default: "insecure" one of: "insecure" |
transport:encryption_policy | string | transport encryption policy default: "disallowed" one of: "disallowed" or "optional" or "required" |
transport:tls:portal_ipaddr | ipv4 | virtual target portal ip address default: "127.0.0.1" |
transport:tls:portal_ipport | integer | virtual target portal ip port default: 3260 |
rules:options:timezone | string | timezone one of: "local" |
rules:disk:commands | string | data commands default: "read-write" one of: "read-write" or "read-only" or "write-only" |
rules:disk:model | string | model override pattern: ^[\x20-\x7e]+$ Length: 0..16 |
rules:access:ip/type | string | access type one of: "allow" or "deny" |
rules:access:ip/ip | ipv4 | IP address |
rules:access:ip/mask | ipv4 | netmask |
rules:access:weekly/type | string | access type one of: "allow" or "deny" |
rules:access:weekly/start | integer | start time in milliseconds since the start of the week (Monday 00:00:00.000) Range: 0 <= value <= 604799000 |
rules:access:weekly/end | integer | end time in milliseconds since the start of the week (Monday 00:00:00.000) Range: 0 <= value <= 604799000 |
rules:throttle:weekly/bandwidth | integer | bandwidth limit |
rules:throttle:weekly/start | integer | start time in milliseconds since the start of the week (Monday 00:00:00.000) Range: 0 <= value <= 604799000 |
rules:throttle:weekly/end | integer | end time in milliseconds since the start of the week (Monday 00:00:00.000) Range: 0 <= value <= 604799000 |
notes | string | user assigned notes Length: 0..256 |
uuid | uuid | object UUID |
protocol | string | low-level storage protocol (task parameter) default: "iscsi" one of: "iscsi" or "nvme" |
Curl Example
$ curl -X POST https://mgmt-node/api/initiator-profile \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
201 Created
Date: Mon, 09 Oct 2017 17:27:12 GMT
Server: Goliath
ETag: "611e739de8597997cbbfab21c6120cc2"
Content-Type: application/json
Content-Length: 1331
{
"id": "initiator_profile:9:10",
"uuid": "3a20192f-7fac-4ac9-acc7-a506038a8d83",
"serial": "PRF0062194C406264CB",
"evt_qry": "serial=PRF0062194C406264CB",
"account_id": "account:1:10",
"vss_id": null,
"ctime": 1507570031974,
"mtime": 1507570031975,
"seq": 1507570031982,
"label": "profile-1",
"notes": null,
"status": {
"indicator": "online",
"value": "online",
"detail": ""
},
"ec": {
"status": "current",
"table": {
"time": null,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
0,
0,
0,
0
],
"v": "dbg"
},
{
"d": [
0,
0,
0,
0
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"seq": 1507570031982
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"access_token": {
"valid": false
},
"iscsi": {
"auth_method": "Challenge-Handshake Authentication Protocol (CHAP)",
"initiator_login": "PRF0062194C406264CB",
"initiator_login_suffix": "@system",
"initiator_pass_set": false,
"suggested_base_iqn": "iqn.2009-12.com.blockbridge:i-pjxazxi",
"initiator_list": [
],
"initiator_chap_mode": "username",
"mutual_auth": "disabled"
},
"transport": {
"mode": "insecure",
"encryption_policy": "disallowed"
},
"rules": {
"options": {
"timezone": "local"
},
"disk": {
"commands": "read-write"
},
"access": {
"options": {
},
"ip": [
{
"type": [
"allow"
],
"ip": "0.0.0.0",
"mask": "0.0.0.0"
},
{
"type": [
"allow"
],
"ip": "::",
"mask": "::"
}
],
"weekly": [
{
"type": [
"allow"
],
"start": 0,
"end": 604799000
}
]
},
"throttle": {
"options": {
},
"weekly": [
]
}
}
}
iSCSI Initiator Profile Remove
Remove an existing iSCSI initiator profile.
DELETE /initiator-profile/{initiator_profile_id_or_serial}
Curl Example
$ curl -X DELETE https://mgmt-node/api/initiator-profile/initiator_profile:9:10 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
204 No Content
Date: Mon, 09 Oct 2017 17:27:33 GMT
Server: Goliath
iSCSI Initiator Profile Update
Change the configuration of an existing iSCSI initiator profile.
PATCH /initiator-profile/{initiator_profile_id_or_serial}
Optional Parameters
Name | Type | Description |
---|---|---|
xmd_refs | array | array of extensible metadata reference keys |
enabled | boolean | initiator profile enabled for access |
initiator_login | string | initiator CHAP username Length: 1..128 |
initiator_pass | string | initiator CHAP password Length: 12..64 |
initiator_list | array | initiator access list |
initiator_chap_mode | string | initiator CHAP mode one of: "username" or "token" |
mutual_auth | string | mutual authentication one of: "disabled" or "optional" or "required" |
target_login | string | mutual authentication target CHAP username Length: 1..128 |
target_pass | string | mutual authentication target CHAP password Length: 12..64 |
transport:mode | string | secure transport mode one of: "insecure" |
transport:encryption_policy | string | transport encryption policy default: "disallowed" one of: "disallowed" or "optional" or "required" |
transport:tls:portal_ipaddr | ipv4 | virtual target portal ip address default: "127.0.0.1" |
transport:tls:portal_ipport | integer | virtual target portal ip port default: 3260 |
rules:options:timezone | string | timezone one of: "local" |
rules:disk:commands | string | data commands one of: "read-write" or "read-only" or "write-only" |
rules:disk:model | string | model override pattern: ^[\x20-\x7e]+$ Length: 0..16 |
rules:access:ip/type | string | access type one of: "allow" or "deny" |
rules:access:ip/ip | ipv4 | IP address |
rules:access:ip/mask | ipv4 | netmask |
rules:access:weekly/type | string | access type one of: "allow" or "deny" |
rules:access:weekly/start | integer | start time in milliseconds since the start of the week (Monday 00:00:00.000) Range: 0 <= value <= 604799000 |
rules:access:weekly/end | integer | end time in milliseconds since the start of the week (Monday 00:00:00.000) Range: 0 <= value <= 604799000 |
rules:throttle:weekly/bandwidth | integer | bandwidth limit |
rules:throttle:weekly/start | integer | start time in milliseconds since the start of the week (Monday 00:00:00.000) Range: 0 <= value <= 604799000 |
rules:throttle:weekly/end | integer | end time in milliseconds since the start of the week (Monday 00:00:00.000) Range: 0 <= value <= 604799000 |
label | nullable string | user assigned label Length: 1..64 |
notes | string | user assigned notes Length: 0..256 |
Curl Example
$ curl -X PATCH https://mgmt-node/api/initiator-profile/initiator_profile:9:10 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"initiator_login": "chapuser",
"initiator_pass": "chappassword",
"initiator_list": [
"iqn.2009-12.com.blockbridge.client-host:da3db582a6f7"
],
"label": "global_profile",
"notes": "initiator profile was updated with chap info"
}'
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:27:12 GMT
Server: Goliath
ETag: "c9e392e8a14d62d563325d038a852d81"
Content-Type: application/json
Content-Length: 1420
{
"id": "initiator_profile:9:10",
"uuid": "3a20192f-7fac-4ac9-acc7-a506038a8d83",
"serial": "PRF0062194C406264CB",
"evt_qry": "serial=PRF0062194C406264CB",
"account_id": "account:1:10",
"vss_id": null,
"ctime": 1507570031974,
"mtime": 1507570032486,
"seq": 1507570032618,
"label": "global_profile",
"notes": "initiator profile was updated with chap info",
"status": {
"indicator": "online",
"value": "online",
"detail": ""
},
"ec": {
"status": "current",
"table": {
"time": null,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
0,
0,
0,
0
],
"v": "dbg"
},
{
"d": [
0,
0,
0,
0
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"seq": 1507570031982
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"access_token": {
"valid": false
},
"iscsi": {
"auth_method": "Challenge-Handshake Authentication Protocol (CHAP)",
"initiator_login": "chapuser",
"initiator_login_suffix": "@system",
"initiator_pass_set": true,
"suggested_base_iqn": "iqn.2009-12.com.blockbridge:i-pjxazxi",
"initiator_list": [
"iqn.2009-12.com.blockbridge.client-host:da3db582a6f7"
],
"initiator_chap_mode": "username",
"mutual_auth": "disabled"
},
"transport": {
"mode": "insecure",
"encryption_policy": "disallowed"
},
"rules": {
"options": {
"timezone": "local"
},
"disk": {
"commands": "read-write"
},
"access": {
"options": {
},
"ip": [
{
"type": [
"allow"
],
"ip": "0.0.0.0",
"mask": "0.0.0.0"
},
{
"type": [
"allow"
],
"ip": "::",
"mask": "::"
}
],
"weekly": [
{
"type": [
"allow"
],
"start": 0,
"end": 604799000
}
]
},
"throttle": {
"options": {
},
"weekly": [
]
}
}
}
iSCSI Initiator Profile Prepare Token
Prepare to create a secure access token for an initiator profile.
GET /initiator-profile/{initiator_profile_id_or_serial}/token
Curl Example
$ curl FIXME
Response Example
HTTP/1.1 200 OK
iSCSI Initiator Profile Create Token
Create a secure access token for an iSCSI initiator profile.
POST /initiator-profile/{initiator_profile_id_or_serial}/token
Required Parameters
Name | Type | Description |
---|---|---|
tok_hash | string | cryptographic hash of access token (sha-256) Length: 32 |
pad | string | random pad used during access token creation Length: 32 |
Curl Example
$ curl -X POST https://mgmt-node/api/initiator-profile/initiator_profile:18:10/token \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/i1ryvdh1gZU0yexJ9eo5Zztdt0Zgs+k2/BUs71KqDyTLWvK92HWLhQ"
Response Example
400 Bad Request
Date: Sat, 15 Apr 2017 14:38:26 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 207
Connection: close
{
"status": 400,
"message": "parameter validation failure",
"type": [
"validation"
],
"errors": [
{
"type": [
"missing"
],
"field": "/tok_hash",
"msg": "must be present"
},
{
"type": [
"missing"
],
"field": "/pad",
"msg": "must be present"
}
]
}
iSCSI Initiator Profile Remove Token
Remove a configured secure access token from an iSCSI initiator profile.
DELETE /initiator-profile/{initiator_profile_id_or_serial}/token
Curl Example
$ curl -X DELETE https://mgmt-node/api/initiator-profile/initiator_profile:9:10/token \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
204 No Content
Date: Mon, 09 Oct 2017 17:27:12 GMT
Server: Goliath
iSCSI Target
The iSCSI target defines how disks are mapped to the network, making them accessible to iSCSI clients. In the Blockbridge System, the iSCSI target is virtual, so that a single storage node supports many targets. You're free to define them as needed.
Attributes
Name | Type | Description |
---|---|---|
id | string | object id |
uuid | uuid | object uuid |
ctime | integer | iSCSI target create time Range: 0 <= value |
mtime | integer | iSCSI target last modified time Range: 0 <= value |
protocol | string | low-level storage protocol (ds record) one of: "iscsi" or "nvme" |
iqn_base | string | base of iSCSI target IQN pattern: ^iqn.\d{4}-\d{2}((?<!-).(?!-)[a-zA-Z0-9-]+){1,63}(?<!-)(?<!.)(:[^:]+)?}$ |
iqn_suffix | string | suffix of iSCSI target IQN pattern: ^[a-z0-9.-]*$ |
iqn | string | iSCSI target IQN pattern: ^iqn.\d{4}-\d{2}((?<!-).(?!-)[a-zA-Z0-9-]+){1,63}(?<!-)(?<!.)(:[^:]+)?}$ |
name | string | iSCSI target IQN or NVMe subsystem NQN |
label | nullable string | user assigned label Length: 1..64 |
alias | string | iSCSI target alias Length: 0..64 |
nvme:nqn | string | target NQN |
nvme:nqn_base | string | target NQN base |
nvme:nqn_suffix | string | target NQN suffix |
account_id | string | account id |
node_id | string | storage node id |
vss_id | string | virtual storage service id |
acl/profile_id | string | profile ref |
acl/privacy | string | privacy permission level default: "no" one of: "yes" or "no" |
acl/discover | string | discovery permission level default: "no" one of: "yes" or "no" |
acl/access | string | access permission level default: "no" one of: "yes" or "no" |
luns/lun | integer | SCSI logical unit number |
luns/vdisk_id | string | no documentation |
lun_unit | string | target LUN mapping table |
lun_min | integer | minimum allowed lun value |
lun_max | integer | maximum allowed lun value |
notes | nullable string | user assigned notes Length: 0..256 |
serial | string | iSCSI target serial number |
automap | boolean | iSCSI target supports automapped LUNS |
replication | boolean | iSCSI target is the virtual storage service replication target |
system | boolean | system target |
xmd_refs | array | array of extensible metadata reference keys |
xref | string | arbitrary string reference Length: 1..256 |
status:indicator | string | status indicator one of: "online" or "degraded" or "offline" or "na" |
status:value | string | status value one of: "online" or "degraded" or "offline" or "pending" or "payment" |
status:detail | nullable string | status detail |
sessions | nullable array | array of active iSCSI target sessions |
sessions/profile_id | string | initiator profile ID |
sessions/ini_id | string | initiator id |
sessions/isid | integer | iSCSI session ID Range: value <= 281474976710660 |
sessions/ini_alias | string | initiator alias Length: 0..255 |
sessions/tsih | integer | target session identifying handle Range: 0 <= value <= 65535 |
sessions/age | integer | session age (in milliseconds) |
sessions/prm:max_conn | integer | max connections Range: 0 <= value <= 65535 |
sessions/prm:erlvl | integer | error recovery level Range: 0 <= value <= 2 |
sessions/prm:immed | boolean | immediate data |
sessions/prm:init_r2t | boolean | initial R2T |
sessions/prm:inrd_data | boolean | In Order Data |
sessions/prm:inrd_seq | boolean | In Order Sequence |
sessions/prm:fbl | integer | first burst length Range: 0 <= value <= 16777215 |
sessions/prm:mbl | integer | maximum burst length Range: 0 <= value <= 16777215 |
sessions/conns/cid | integer | connection ID Range: 0 <= value <= 65535 |
sessions/conns/port | integer | initiator TCP port |
sessions/conns/hdr_dig | boolean | Header Digest |
sessions/conns/dat_dig | boolean | Data Digest |
sessions/conns/rcv_win | integer | TCP Receive Window |
sessions/conns/latency | integer | latency in milliseconds |
sessions/conns/sec_mode | string | security mode one of: "insecure" or "ssl" or "ipsec" |
sessions/conns/ipsec:crypt_alg | string | crypto algorithm |
sessions/conns/ipsec:auth_mode | string | authentication cipher mode |
sessions/conns/ipsec:tunnel | boolean | tunnel mode |
sessions/conns/ipsec:auth_len | integer | authentication key length |
sessions/conns/ipsec:auth_alg | string | authentication algorithm |
sessions/conns/ipsec:crypt_len | integer | crypto key length |
sessions/conns/ipsec:crypt_mode | string | crypto cipher mode |
sessions/conns/ssl:comp | boolean | is compressed |
sessions/conns/ssl:comp_alg | string | compression algorithm |
sessions/conns/ssl:version | string | SSL version |
sessions/conns/peer_inner | nullable ipv4 | initiator IP address, tunnel mode inner |
sessions/conns/peer_outer | ipv4 | initiator IP address, public |
sessions/conns/host_inner | nullable ipv4 | target IP address, tunnel mode inner |
sessions/conns/host_outer | ipv4 | target IP address, public |
associations | nullable array | array of active NVMe target associations |
associations/subsys_ip | ipv4 | subsystem IP address |
associations/host_nqn | string | host NQN |
associations/ctime | integer | creation time (in epoch ms), local to storage node |
associations/host_id | string | hexadecimal host ID |
associations/host_ip | ipv4 | host IP address |
associations/qp | integer | number of I/O queue pairs (excluding admin) Range: 0 <= value <= 256 |
associations/cntlid | integer | controller id Range: value <= 65535 |
associations/ioq | integer | number of I/O queue pairs (excluding admin) Range: 0 <= value <= 256 |
session_num | nullable integer | number of active sessions |
conn_num | nullable integer | number of active connections |
portals/hostname | nullable hostname | iSCSI target portal DNS hostname Length: 0..1024 |
portals/interface | nullable string | iSCSI target portal network interface |
portals/up | nullable boolean | iSCSI target portal network interface is up |
portals/speed | nullable integer | iSCSI target portal network interface link speed |
portals/duplex | nullable string | network interface duplex one of: "half" or "full" or "unknown" |
portals/ipaddrs/addr | ipv4 | iSCSI target portal ip address |
portals/ipaddrs/port | integer | iSCSI target portal ip port |
portals/ipaddrs/family | string | network interface family one of: "IPv4" or "IPv6" or "unknown" |
portals/ipaddrs/detail | string | iSCSI target portal ip detail |
portals/mtu | nullable integer | no documentation |
portals/hwaddr | nullable string | no documentation |
pps | nullable integer | iSCSI PDUs per second |
xmd/id | string | no documentation |
xmd/ref | string | arbitrary string reference key Length: 1..256 |
xmd/mtime | integer | last modified time of xmd Range: 0 <= value |
xmd/tags | array | object tags |
xmd/self | boolean | no documentation |
xmd/data | nullable string | no documentation |
iSCSI Target Info
Retrieve an existing iSCSI target.
GET /target/{target_id_or_serial}
Curl Example
$ curl https://mgmt-node/api/target/target:9:10 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:27:13 GMT
Server: Goliath
ETag: "5ae9cdbab762724d8b51db3d56a92a80"
Content-Type: application/json
Content-Length: 1205
{
"id": "target:9:10",
"uuid": "d8ca81fa-1729-4daa-b31b-10112b1b5f40",
"serial": "TGT1D62194C406264C1",
"evt_qry": "serial=TGT1D62194C406264C1",
"account_id": "account:1:10",
"node_id": "node:10000",
"vss_id": "vss:4:10",
"ctime": 1507570033125,
"mtime": 1507570033582,
"seq": 1507570033589,
"label": "target",
"notes": "target was updated",
"status": {
"indicator": "online",
"value": "online",
"detail": ""
},
"ec": {
"status": "current",
"table": {
"time": null,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
0,
0,
0,
0
],
"v": "dbg"
},
{
"d": [
0,
0,
0,
0
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"seq": 1507570033144
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"iqn": "iqn.2009-12.com.blockbridge:t-pjxazxi-gbliafkm:target-1",
"iqn_base": "iqn.2009-12.com.blockbridge:t-pjxazxi-",
"iqn_suffix": "gbliafkm:target-1",
"alias": "target-1",
"acl": [
{
"profile_id": "initiator_profile:9:10",
"privacy": "no",
"discover": "yes",
"access": "yes"
}
],
"luns": [
],
"automap": true,
"replication": false,
"sessions": [
],
"portals": [
{
"hostname": null,
"interface": "eth0",
"up": true,
"speed": null,
"duplex": null,
"ipaddrs": [
{
"addr": "10.10.200.23",
"port": 3260,
"family": "IPv4"
},
{
"addr": "fe80::f816:3eff:fe6a:7c79%eth0",
"port": 3260,
"family": "IPv6"
}
]
}
]
}
iSCSI Target List
Enumerate iSCSI targets.
GET /target
Curl Example
$ curl https://mgmt-node/api/target \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:27:13 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 1107
[
{
"id": "target:9:10",
"uuid": "d8ca81fa-1729-4daa-b31b-10112b1b5f40",
"serial": "TGT1D62194C406264C1",
"evt_qry": "serial=TGT1D62194C406264C1",
"account_id": "account:1:10",
"node_id": "node:10000",
"vss_id": "vss:4:10",
"ctime": 1507570033125,
"mtime": 1507570033125,
"seq": 1507570033144,
"label": "target-1",
"notes": null,
"status": {
"indicator": "online",
"value": "online",
"detail": ""
},
"ec": {
"status": "current",
"table": {
"time": null,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
0,
0,
0,
0
],
"v": "dbg"
},
{
"d": [
0,
0,
0,
0
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"seq": 1507570033144
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"iqn": "iqn.2009-12.com.blockbridge:t-pjxazxi-gbliafkm:target-1",
"iqn_base": "iqn.2009-12.com.blockbridge:t-pjxazxi-",
"iqn_suffix": "gbliafkm:target-1",
"alias": "target-1",
"acl": [
],
"luns": [
],
"automap": true,
"replication": false,
"sessions": [
],
"portals": [
{
"hostname": null,
"interface": "eth0",
"up": true,
"speed": null,
"duplex": null,
"ipaddrs": [
{
"addr": "10.10.200.23",
"port": 3260,
"family": "IPv4"
},
{
"addr": "fe80::f816:3eff:fe6a:7c79%eth0",
"port": 3260,
"family": "IPv6"
}
]
}
]
}
]
iSCSI Target Create
Create a new iSCSI target.
POST /target
Required Parameters
Name | Type | Description |
---|---|---|
vss_id | string | virtual storage service id |
Optional Parameters
Name | Type | Description |
---|---|---|
label | nullable string | user assigned label Length: 1..64 |
xmd_refs | array | array of extensible metadata reference keys |
xref | nullable string | arbitrary string reference Length: 1..256 |
iqn_suffix | string | suffix for generated iSCSI target IQN pattern: ^[a-z0-9.-]*$ Length: 0..223 |
alias | string | iSCSI target alias Length: 0..64 |
acl/profile_id | string | profile ref |
acl/privacy | string | privacy permission level default: "no" one of: "yes" or "no" |
acl/discover | string | discovery permission level default: "no" one of: "yes" or "no" |
acl/access | string | access permission level default: "no" one of: "yes" or "no" |
luns/lun | integer | SCSI logical unit number Range: 1 <= value <= 65535 |
luns/vdisk_id | string | no documentation |
notes | string | user assigned notes Length: 0..256 |
automap | boolean | target allows automap |
uuid | uuid | object UUID |
protocol | string | low-level storage protocol (task parameter) default: "iscsi" one of: "iscsi" or "nvme" |
nvme:nqn_suffix | string | target NQN suffix |
Curl Example
$ curl -X POST https://mgmt-node/api/target \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"vss_id": "vss:4:10"
}'
Response Example
201 Created
Date: Mon, 09 Oct 2017 17:27:13 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 1105
{
"id": "target:9:10",
"uuid": "d8ca81fa-1729-4daa-b31b-10112b1b5f40",
"serial": "TGT1D62194C406264C1",
"evt_qry": "serial=TGT1D62194C406264C1",
"account_id": "account:1:10",
"node_id": "node:10000",
"vss_id": "vss:4:10",
"ctime": 1507570033125,
"mtime": 1507570033125,
"seq": 1507570033144,
"label": "target-1",
"notes": null,
"status": {
"indicator": "online",
"value": "online",
"detail": ""
},
"ec": {
"status": "current",
"table": {
"time": null,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
0,
0,
0,
0
],
"v": "dbg"
},
{
"d": [
0,
0,
0,
0
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"seq": 1507570033144
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"iqn": "iqn.2009-12.com.blockbridge:t-pjxazxi-gbliafkm:target-1",
"iqn_base": "iqn.2009-12.com.blockbridge:t-pjxazxi-",
"iqn_suffix": "gbliafkm:target-1",
"alias": "target-1",
"acl": [
],
"luns": [
],
"automap": true,
"replication": false,
"sessions": [
],
"portals": [
{
"hostname": null,
"interface": "eth0",
"up": true,
"speed": null,
"duplex": null,
"ipaddrs": [
{
"addr": "10.10.200.23",
"port": 3260,
"family": "IPv4"
},
{
"addr": "fe80::f816:3eff:fe6a:7c79%eth0",
"port": 3260,
"family": "IPv6"
}
]
}
]
}
iSCSI Target Remove
Remove an existing iSCSI target.
DELETE /target/{target_id_or_serial}
Curl Example
$ curl -X DELETE https://mgmt-node/api/target/target:9:10 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
204 No Content
Date: Mon, 09 Oct 2017 17:27:33 GMT
Server: Goliath
iSCSI Target Update
Change the configuration of an existing iSCSI target.
PATCH /target/{target_id_or_serial}
Optional Parameters
Name | Type | Description |
---|---|---|
xmd_refs | array | array of extensible metadata reference keys |
acl/profile_id | string | profile ref |
acl/privacy | string | privacy permission level default: "no" one of: "yes" or "no" |
acl/discover | string | discovery permission level default: "no" one of: "yes" or "no" |
acl/access | string | access permission level default: "no" one of: "yes" or "no" |
luns/lun | integer | SCSI logical unit number Range: 1 <= value <= 65535 |
luns/vdisk_id | string | no documentation |
iqn_suffix | string | suffix for generated iSCSI target IQN pattern: ^[a-z0-9.-]*$ Length: 0..223 |
label | nullable string | user assigned label Length: 1..64 |
alias | string | iSCSI target alias Length: 0..64 |
notes | string | user assigned notes Length: 0..256 |
automap | boolean | target allows automap |
nvme:nqn_suffix | string | target NQN suffix |
Curl Example
$ curl -X PATCH https://mgmt-node/api/target/target:9:10 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"label": "target",
"notes": "target was updated",
"acl": [
{
"profile_id": "initiator_profile:9:10",
"discover": "yes",
"access": "yes"
}
]
}'
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:27:13 GMT
Server: Goliath
ETag: "5ae9cdbab762724d8b51db3d56a92a80"
Content-Type: application/json
Content-Length: 1205
{
"id": "target:9:10",
"uuid": "d8ca81fa-1729-4daa-b31b-10112b1b5f40",
"serial": "TGT1D62194C406264C1",
"evt_qry": "serial=TGT1D62194C406264C1",
"account_id": "account:1:10",
"node_id": "node:10000",
"vss_id": "vss:4:10",
"ctime": 1507570033125,
"mtime": 1507570033582,
"seq": 1507570033589,
"label": "target",
"notes": "target was updated",
"status": {
"indicator": "online",
"value": "online",
"detail": ""
},
"ec": {
"status": "current",
"table": {
"time": null,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
0,
0,
0,
0
],
"v": "dbg"
},
{
"d": [
0,
0,
0,
0
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"seq": 1507570033144
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"iqn": "iqn.2009-12.com.blockbridge:t-pjxazxi-gbliafkm:target-1",
"iqn_base": "iqn.2009-12.com.blockbridge:t-pjxazxi-",
"iqn_suffix": "gbliafkm:target-1",
"alias": "target-1",
"acl": [
{
"profile_id": "initiator_profile:9:10",
"privacy": "no",
"discover": "yes",
"access": "yes"
}
],
"luns": [
],
"automap": true,
"replication": false,
"sessions": [
],
"portals": [
{
"hostname": null,
"interface": "eth0",
"up": true,
"speed": null,
"duplex": null,
"ipaddrs": [
{
"addr": "10.10.200.23",
"port": 3260,
"family": "IPv4"
},
{
"addr": "fe80::f816:3eff:fe6a:7c79%eth0",
"port": 3260,
"family": "IPv6"
}
]
}
]
}
iSCSI Target LUN Map
Map a virtual disk to an existing iSCSI target.
PUT /target/{target_id_or_serial}/luns/{target_lun}
Required Parameters
Name | Type | Description |
---|---|---|
vdisk_id | string | virtual disk id |
Curl Example
$ curl -X PUT https://mgmt-node/api/target/target:9:10/luns/42 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"vdisk_id": "vdisk:5:10"
}'
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:27:14 GMT
Server: Goliath
ETag: "e73a392ce22c0c304f56e7672f94c6d2"
Content-Type: application/json
Content-Length: 1248
{
"id": "target:9:10",
"uuid": "d8ca81fa-1729-4daa-b31b-10112b1b5f40",
"serial": "TGT1D62194C406264C1",
"evt_qry": "serial=TGT1D62194C406264C1",
"account_id": "account:1:10",
"node_id": "node:10000",
"vss_id": "vss:4:10",
"ctime": 1507570033125,
"mtime": 1507570034623,
"seq": 1507570034635,
"label": "target",
"notes": "target was updated",
"status": {
"indicator": "online",
"value": "online",
"detail": ""
},
"ec": {
"status": "current",
"table": {
"time": 1507570033000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
4,
4,
4,
4
],
"v": "dbg"
},
{
"d": [
4,
4,
4,
4
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"seq": 1507570033773
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"iqn": "iqn.2009-12.com.blockbridge:t-pjxazxi-gbliafkm:target-1",
"iqn_base": "iqn.2009-12.com.blockbridge:t-pjxazxi-",
"iqn_suffix": "gbliafkm:target-1",
"alias": "target-1",
"acl": [
{
"profile_id": "initiator_profile:9:10",
"privacy": "no",
"discover": "yes",
"access": "yes"
}
],
"luns": [
{
"lun": 42,
"vdisk_id": "vdisk:5:10"
}
],
"automap": true,
"replication": false,
"sessions": [
],
"portals": [
{
"hostname": null,
"interface": "eth0",
"up": true,
"speed": null,
"duplex": null,
"ipaddrs": [
{
"addr": "10.10.200.23",
"port": 3260,
"family": "IPv4"
},
{
"addr": "fe80::f816:3eff:fe6a:7c79%eth0",
"port": 3260,
"family": "IPv6"
}
]
}
]
}
iSCSI Target LUN Unmap
Unmap a virtual disk from an existing iSCSI target.
DELETE /target/{target_id_or_serial}/luns/{target_lun}
Curl Example
$ curl -X DELETE https://mgmt-node/api/target/target:9:10/luns/42 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:27:14 GMT
Server: Goliath
ETag: "08b9b2c937f4856727ceb00b5aa6f21b"
Content-Type: application/json
Content-Length: 1218
{
"id": "target:9:10",
"uuid": "d8ca81fa-1729-4daa-b31b-10112b1b5f40",
"serial": "TGT1D62194C406264C1",
"evt_qry": "serial=TGT1D62194C406264C1",
"account_id": "account:1:10",
"node_id": "node:10000",
"vss_id": "vss:4:10",
"ctime": 1507570033125,
"mtime": 1507570034898,
"seq": 1507570034906,
"label": "target",
"notes": "target was updated",
"status": {
"indicator": "online",
"value": "online",
"detail": ""
},
"ec": {
"status": "current",
"table": {
"time": 1507570034000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
10,
10,
10,
10
],
"v": "dbg"
},
{
"d": [
7,
7,
7,
7
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"seq": 1507570034773
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"iqn": "iqn.2009-12.com.blockbridge:t-pjxazxi-gbliafkm:target-1",
"iqn_base": "iqn.2009-12.com.blockbridge:t-pjxazxi-",
"iqn_suffix": "gbliafkm:target-1",
"alias": "target-1",
"acl": [
{
"profile_id": "initiator_profile:9:10",
"privacy": "no",
"discover": "yes",
"access": "yes"
}
],
"luns": [
],
"automap": true,
"replication": false,
"sessions": [
],
"portals": [
{
"hostname": null,
"interface": "eth0",
"up": true,
"speed": null,
"duplex": null,
"ipaddrs": [
{
"addr": "10.10.200.23",
"port": 3260,
"family": "IPv4"
},
{
"addr": "fe80::f816:3eff:fe6a:7c79%eth0",
"port": 3260,
"family": "IPv6"
}
]
}
]
}
iSCSI Target Disk Map
Map a virtual disk to an existing iSCSI target.
PUT /target/{target_id_or_serial}/disks/{vdisk_id_or_serial}
Required Parameters
Name | Type | Description |
---|---|---|
lun | integer | SCSI LUN assignment (automatic if unspecified) Range: 0 <= value <= 16384 |
Curl Example
$ curl -X PUT https://mgmt-node/api/target/target:9:10/disks/vdisk:5:10 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"vdisk_id": "vdisk:5:10"
}'
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:27:14 GMT
Server: Goliath
ETag: "86fb0f31223eddb4d1dca5ff887c4ca5"
Content-Type: application/json
Content-Length: 1247
{
"id": "target:9:10",
"uuid": "d8ca81fa-1729-4daa-b31b-10112b1b5f40",
"serial": "TGT1D62194C406264C1",
"evt_qry": "serial=TGT1D62194C406264C1",
"account_id": "account:1:10",
"node_id": "node:10000",
"vss_id": "vss:4:10",
"ctime": 1507570033125,
"mtime": 1507570034021,
"seq": 1507570034036,
"label": "target",
"notes": "target was updated",
"status": {
"indicator": "online",
"value": "online",
"detail": ""
},
"ec": {
"status": "current",
"table": {
"time": 1507570033000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
4,
4,
4,
4
],
"v": "dbg"
},
{
"d": [
4,
4,
4,
4
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"seq": 1507570033773
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"iqn": "iqn.2009-12.com.blockbridge:t-pjxazxi-gbliafkm:target-1",
"iqn_base": "iqn.2009-12.com.blockbridge:t-pjxazxi-",
"iqn_suffix": "gbliafkm:target-1",
"alias": "target-1",
"acl": [
{
"profile_id": "initiator_profile:9:10",
"privacy": "no",
"discover": "yes",
"access": "yes"
}
],
"luns": [
{
"lun": 0,
"vdisk_id": "vdisk:5:10"
}
],
"automap": true,
"replication": false,
"sessions": [
],
"portals": [
{
"hostname": null,
"interface": "eth0",
"up": true,
"speed": null,
"duplex": null,
"ipaddrs": [
{
"addr": "10.10.200.23",
"port": 3260,
"family": "IPv4"
},
{
"addr": "fe80::f816:3eff:fe6a:7c79%eth0",
"port": 3260,
"family": "IPv6"
}
]
}
]
}
iSCSI Target Disk Unmap
Unmap a virtual disk from an existing iSCSI target.
DELETE /target/{target_id_or_serial}/disks/{vdisk_id_or_serial}
Curl Example
$ curl -X DELETE https://mgmt-node/api/target/target:9:10/disks/vdisk:5:10 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:27:14 GMT
Server: Goliath
ETag: "a78abd1ded3f410f336ef8ac17d46f73"
Content-Type: application/json
Content-Length: 1214
{
"id": "target:9:10",
"uuid": "d8ca81fa-1729-4daa-b31b-10112b1b5f40",
"serial": "TGT1D62194C406264C1",
"evt_qry": "serial=TGT1D62194C406264C1",
"account_id": "account:1:10",
"node_id": "node:10000",
"vss_id": "vss:4:10",
"ctime": 1507570033125,
"mtime": 1507570034331,
"seq": 1507570034341,
"label": "target",
"notes": "target was updated",
"status": {
"indicator": "online",
"value": "online",
"detail": ""
},
"ec": {
"status": "current",
"table": {
"time": 1507570033000,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
4,
4,
4,
4
],
"v": "dbg"
},
{
"d": [
4,
4,
4,
4
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"seq": 1507570033773
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"iqn": "iqn.2009-12.com.blockbridge:t-pjxazxi-gbliafkm:target-1",
"iqn_base": "iqn.2009-12.com.blockbridge:t-pjxazxi-",
"iqn_suffix": "gbliafkm:target-1",
"alias": "target-1",
"acl": [
{
"profile_id": "initiator_profile:9:10",
"privacy": "no",
"discover": "yes",
"access": "yes"
}
],
"luns": [
],
"automap": true,
"replication": false,
"sessions": [
],
"portals": [
{
"hostname": null,
"interface": "eth0",
"up": true,
"speed": null,
"duplex": null,
"ipaddrs": [
{
"addr": "10.10.200.23",
"port": 3260,
"family": "IPv4"
},
{
"addr": "fe80::f816:3eff:fe6a:7c79%eth0",
"port": 3260,
"family": "IPv6"
}
]
}
]
}
Snapshot
You can take a point-in-time snapshot of a disk's contents to make a backup image, or to create a reference from which cloned disks may be created.
Attributes
Name | Type | Description |
---|---|---|
id | string | object id |
uuid | uuid | object uuid |
ctime | integer | snapshot create time Range: 0 <= value |
mtime | integer | snapshot last modified time Range: 0 <= value |
label | nullable string | user assigned label Length: 1..64 |
notes | nullable string | user assigned notes Length: 0..256 |
tags | array | object tags |
vss_id | string | virtual storage service id |
node_id | string | storage node id |
account_id | string | account id |
vdisk_id | string | virtual disk id |
serial | string | snapshot serial number |
capacity | nullable integer | snapshot capacity (in bytes) |
generation | nullable integer | snapshot generation |
timestamp | nullable integer | snapshot timestamp Range: 0 <= value |
transient | boolean | snapshot transient |
trashed | boolean | waiting for garbage collection |
xmd_refs | array | array of extensible metadata reference keys |
xref | string | arbitrary string reference Length: 1..256 |
vdisk_refs/id | string | dependent vdisk id |
vdisk_refs/serial | string | dependent vdisk serial |
vdisk_refs/label | nullable string | dependent vdisk label Length: 1..64 |
status:indicator | string | status indicator one of: "online" or "degraded" or "offline" or "na" |
status:value | string | status value one of: "online" or "degraded" or "offline" or "pending" or "payment" |
status:detail | nullable string | status detail |
xmd/id | string | no documentation |
xmd/ref | string | arbitrary string reference key Length: 1..256 |
xmd/mtime | integer | last modified time of xmd Range: 0 <= value |
xmd/tags | array | object tags |
xmd/self | boolean | no documentation |
xmd/data | nullable string | no documentation |
Snapshot Info
Retrieve an existing virtual disk snapshot.
GET /snapshot/{snapshot_id_or_serial}
Curl Example
$ curl https://mgmt-node/api/snapshot/snapshot:2:10 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:27:17 GMT
Server: Goliath
ETag: "d258b47c5ce32ea12920122a602d2a1b"
Content-Type: application/json
Content-Length: 787
{
"id": "snapshot:2:10",
"uuid": "a541db70-32fa-4f7d-b4a0-0edb93d391a6",
"serial": "SNP3D62194C40626478",
"evt_qry": "serial=SNP3D62194C40626478",
"account_id": "account:1:10",
"node_id": "node:10000",
"vss_id": "vss:4:10",
"vdisk_id": "vdisk:5:10",
"ctime": 1507570037150,
"mtime": 1507570037721,
"seq": 1507570037742,
"label": "snapshot",
"notes": "snapshot name was updated",
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": null,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"v": "dbg",
"d": [
0,
0,
0,
0
]
},
{
"v": "info",
"d": [
0,
0,
0,
0
]
},
{
"v": "warn",
"d": [
0,
0,
0,
0
]
},
{
"v": "err",
"d": [
0,
0,
0,
0
]
}
]
},
"status": "current",
"seq": 1507570037213
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"vdisk_refs": [
],
"tags": [
],
"capacity": 1036871168,
"generation": 1,
"timestamp": 1507570037000
}
Snapshot List
Enumerate virtual disk snapshots.
GET /snapshot
Curl Example
$ curl https://mgmt-node/api/snapshot \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:27:17 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 768
[
{
"id": "snapshot:2:10",
"uuid": "a541db70-32fa-4f7d-b4a0-0edb93d391a6",
"serial": "SNP3D62194C40626478",
"evt_qry": "serial=SNP3D62194C40626478",
"account_id": "account:1:10",
"node_id": "node:10000",
"vss_id": "vss:4:10",
"vdisk_id": "vdisk:5:10",
"ctime": 1507570037150,
"mtime": 1507570037309,
"seq": 1507570037322,
"label": "snapshot-2",
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": null,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"v": "dbg",
"d": [
0,
0,
0,
0
]
},
{
"v": "info",
"d": [
0,
0,
0,
0
]
},
{
"v": "warn",
"d": [
0,
0,
0,
0
]
},
{
"v": "err",
"d": [
0,
0,
0,
0
]
}
]
},
"status": "current",
"seq": 1507570037213
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"vdisk_refs": [
],
"tags": [
],
"capacity": 1036871168,
"generation": 1,
"timestamp": 1507570037000
}
]
Snapshot Create
Create a new snapshot of the contents of an internal virtual disk.
POST /snapshot
Required Parameters
Name | Type | Description |
---|---|---|
vdisk_id | string | virtual disk id |
Optional Parameters
Name | Type | Description |
---|---|---|
uuid | uuid | snapshot UUID |
xmd_refs | array | array of extensible metadata reference keys |
xref | string | arbitrary string reference Length: 1..256 |
label | nullable string | user assigned label Length: 1..64 |
notes | string | user assigned notes Length: 0..256 |
tags | array | object tags |
transient | boolean | snapshot created for a transient clone |
Curl Example
$ curl -X POST https://mgmt-node/api/snapshot \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"vdisk_id": "vdisk:5:10"
}'
Response Example
201 Created
Date: Mon, 09 Oct 2017 17:27:17 GMT
Server: Goliath
ETag: "8187479d36ea0802a5d369cb80eff844"
Content-Type: application/json
Content-Length: 766
{
"id": "snapshot:2:10",
"uuid": "a541db70-32fa-4f7d-b4a0-0edb93d391a6",
"serial": "SNP3D62194C40626478",
"evt_qry": "serial=SNP3D62194C40626478",
"account_id": "account:1:10",
"node_id": "node:10000",
"vss_id": "vss:4:10",
"vdisk_id": "vdisk:5:10",
"ctime": 1507570037150,
"mtime": 1507570037309,
"seq": 1507570037322,
"label": "snapshot-2",
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": null,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"v": "dbg",
"d": [
0,
0,
0,
0
]
},
{
"v": "info",
"d": [
0,
0,
0,
0
]
},
{
"v": "warn",
"d": [
0,
0,
0,
0
]
},
{
"v": "err",
"d": [
0,
0,
0,
0
]
}
]
},
"status": "current",
"seq": 1507570037213
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"vdisk_refs": [
],
"tags": [
],
"capacity": 1036871168,
"generation": 1,
"timestamp": 1507570037000
}
Snapshot Remove
Remove an existing virtual disk snapshot. Once the snapshot has been removed, the storage node starts reclaiming user data blocks that are no longer needed for other snapshots or for the virtual disk itself.
DELETE /snapshot/{snapshot_id_or_serial}
Curl Example
$ curl -X DELETE https://mgmt-node/api/snapshot/snapshot:2:10 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
204 No Content
Date: Mon, 09 Oct 2017 17:27:33 GMT
Server: Goliath
Snapshot Update
Change the configuration of an existing virtual disk snapshot.
PATCH /snapshot/{snapshot_id_or_serial}
Optional Parameters
Name | Type | Description |
---|---|---|
label | nullable string | user assigned label Length: 1..64 |
notes | string | user assigned notes Length: 0..256 |
xmd_refs | array | array of extensible metadata reference keys |
tags | array | object tags |
Curl Example
$ curl -X PATCH https://mgmt-node/api/snapshot/snapshot:2:10 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"label": "snapshot",
"notes": "snapshot name was updated"
}'
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:27:17 GMT
Server: Goliath
ETag: "d258b47c5ce32ea12920122a602d2a1b"
Content-Type: application/json
Content-Length: 787
{
"id": "snapshot:2:10",
"uuid": "a541db70-32fa-4f7d-b4a0-0edb93d391a6",
"serial": "SNP3D62194C40626478",
"evt_qry": "serial=SNP3D62194C40626478",
"account_id": "account:1:10",
"node_id": "node:10000",
"vss_id": "vss:4:10",
"vdisk_id": "vdisk:5:10",
"ctime": 1507570037150,
"mtime": 1507570037721,
"seq": 1507570037742,
"label": "snapshot",
"notes": "snapshot name was updated",
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": null,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"v": "dbg",
"d": [
0,
0,
0,
0
]
},
{
"v": "info",
"d": [
0,
0,
0,
0
]
},
{
"v": "warn",
"d": [
0,
0,
0,
0
]
},
{
"v": "err",
"d": [
0,
0,
0,
0
]
}
]
},
"status": "current",
"seq": 1507570037213
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"vdisk_refs": [
],
"tags": [
],
"capacity": 1036871168,
"generation": 1,
"timestamp": 1507570037000
}
Object Store
The Object Store is endpoint and authentication configuration to support data backup to an object store such as Amazon S3 or OpenStack Swift.
Attributes
Name | Type | Description |
---|---|---|
id | string | object id |
uuid | uuid | object uuid |
ctime | integer | object store create time Range: 0 <= value |
mtime | integer | object store last modified time Range: 0 <= value |
serial | string | object store serial number |
label | nullable string | user assigned label Length: 1..64 |
notes | nullable string | user assigned notes Length: 0..256 |
account_id | string | account id |
location:country | string | ISO 3166-1 alpha-3 country code default: "" |
location:lat | number | latitude default: 0 |
location:long | number | longitude default: 0 |
location:city | string | city default: "" |
location:state | string | state as two-character USPS abbreviation default: "" |
verified:status | string | verified status one of: "unverified" or "success" or "failed" |
verified:time | nullable integer | last verified time Range: 0 <= value |
verified:detail | string | verified detail |
type | string | object store type one of: "s3" |
bucket_name | string | bucket name |
host_name | nullable string | host name |
protocol | nullable string | protocol |
uri_style | nullable string | uri style |
access_key_id | nullable string | access key id |
secret_access_key_set | boolean | secret access key is set |
security_token_set | boolean | security token is set |
default_wkey_password_set | boolean | default wkey password is set |
status:indicator | string | status indicator one of: "online" or "degraded" or "offline" or "na" |
status:value | string | status value one of: "online" or "degraded" or "offline" or "pending" or "payment" |
status:detail | nullable string | status detail |
Object Store Info
Retrieve an existing object store definition.
GET /obj-store/{obj_store_id_or_serial}
Curl Example
$ curl https://mgmt-node/api/obj-store/obj_store:7:10 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:54 GMT
Server: Goliath
ETag: "9b23b33078e4daada733eecef0802e36"
Content-Type: application/json
Content-Length: 888
{
"id": "obj_store:7:10",
"uuid": "01299a26-ac49-4db0-b2e8-a3d78cd92a8a",
"serial": "OBJ4562194C4062642E",
"evt_qry": "serial=OBJ4562194C4062642E",
"account_id": "account:1:10",
"ctime": 1507570013691,
"mtime": 1507570014086,
"seq": 1507570014094,
"label": "cambridge bucket",
"notes": null,
"status": {
"indicator": "online",
"value": "online",
"detail": ""
},
"ec": {
"status": "current",
"table": {
"time": null,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
0,
0,
0,
0
],
"v": "dbg"
},
{
"d": [
0,
0,
0,
0
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"seq": 1507570013715
},
"rec_status": null,
"type": [
"s3"
],
"location": {
"country": "",
"lat": 0,
"long": 0,
"city": "",
"state": ""
},
"bucket_name": "bb-api-ox-test",
"host_name": "ceph-s3.localnet:7480",
"protocol": "http",
"uri_style": "path",
"access_key_id": "AWPTG56F131EAZIFSD04",
"secret_access_key_set": true,
"security_token_set": false,
"default_wkey_password_set": true
}
Object Store List
Enumerate object stores.
GET /obj-store
Curl Example
$ curl https://mgmt-node/api/obj-store \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:53 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 889
[
{
"id": "obj_store:7:10",
"uuid": "01299a26-ac49-4db0-b2e8-a3d78cd92a8a",
"serial": "OBJ4562194C4062642E",
"evt_qry": "serial=OBJ4562194C4062642E",
"account_id": "account:1:10",
"ctime": 1507570013691,
"mtime": 1507570013728,
"seq": 1507570013734,
"label": "object-store-1",
"notes": null,
"status": {
"indicator": "online",
"value": "online",
"detail": ""
},
"ec": {
"status": "current",
"table": {
"time": null,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
0,
0,
0,
0
],
"v": "dbg"
},
{
"d": [
0,
0,
0,
0
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"seq": 1507570013715
},
"rec_status": null,
"type": [
"s3"
],
"location": {
"country": "",
"lat": 0,
"long": 0,
"city": "",
"state": ""
},
"bucket_name": "bb-api-ox-test",
"host_name": "ceph-s3.localnet:7480",
"protocol": "http",
"uri_style": "path",
"access_key_id": "AWPTG56F131EAZIFSD04",
"secret_access_key_set": true,
"security_token_set": false,
"default_wkey_password_set": false
}
]
Object Store List backups
Enumerate backups on an object-store.
GET /obj-store/{obj_store_id_or_serial}/backups
Optional Parameters
Name | Type | Description |
---|---|---|
max_results | integer | maximum number of results to return default: 256 |
token | nullable string | continuation token for paged enumeration |
Curl Example
$ curl https://mgmt-node/api/obj-store/obj_store:7:10/backups \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:27:18 GMT
Server: Goliath
etag: "e71373c6a95370dc4c015178e4247af3c075035cfab70e1ff1dc5614b4a9b500"
Content-Type: application/json
Content-Length: 2289
[
{
"id": "a541db70-32fa-4f7d-b4a0-0edb93d391a6",
"key": "a541db70-32fa-4f7d-b4a0-0edb93d391a6",
"short_id": "snap-0edb93d391a6",
"uuid": "8f729850-7cec-445d-92c2-65e9878d1946",
"mode": "full",
"progress": 100,
"phase": "complete",
"capacity": 1036871168,
"size": 0,
"comp_size": 0,
"started_at": "2017-10-09T17:27+00:00",
"completed_at": "2017-10-09T17:27+00:00",
"description": "snap-0edb93d391a6 988.8 MiB"
},
{
"id": "feb3e7d4-ad17-4f03-b249-d07c34f766d9",
"key": "feb3e7d4-ad17-4f03-b249-d07c34f766d9",
"short_id": "snap-d07c34f766d9",
"uuid": "fb799644-033d-4ee1-bda1-30702f93cfaf",
"mode": "full",
"progress": 100,
"phase": "complete",
"capacity": 2073741824,
"size": 0,
"comp_size": 0,
"started_at": "2017-08-06T02:35+00:00",
"completed_at": "2017-08-06T02:35+00:00",
"description": "snap-d07c34f766d9 1.9 GiB"
},
{
"id": "ff97c7a7-1017-4a26-bc82-180b01efcecc",
"key": "ff97c7a7-1017-4a26-bc82-180b01efcecc",
"short_id": "snap-180b01efcecc",
"uuid": "46d16646-4dc1-4b24-90a0-7fd578ada189",
"mode": "full",
"progress": 100,
"phase": "complete",
"capacity": 2073741824,
"size": 0,
"comp_size": 0,
"started_at": "2017-06-28T09:39+00:00",
"completed_at": "2017-06-28T09:39+00:00",
"description": "snap-180b01efcecc 1.9 GiB"
},
{
"id": "ffb1bfa2-da49-44e0-ab97-8d23577f4120",
"key": "ffb1bfa2-da49-44e0-ab97-8d23577f4120",
"short_id": "snap-8d23577f4120",
"uuid": "895c0c59-5783-4e8f-9172-71b08c29f547",
"mode": "full",
"progress": 100,
"phase": "complete",
"capacity": 2073741824,
"size": 0,
"comp_size": 0,
"started_at": "2017-06-14T05:53+00:00",
"completed_at": "2017-06-14T05:53+00:00",
"description": "snap-8d23577f4120 1.9 GiB"
},
{
"id": "ffe1af43-e70c-40cc-81dd-c634c136b469",
"key": "ffe1af43-e70c-40cc-81dd-c634c136b469",
"short_id": "snap-c634c136b469",
"uuid": "f4a4bc05-af59-4de3-bf08-7e7236bceb2f",
"mode": "full",
"progress": 100,
"phase": "complete",
"capacity": 2073741824,
"size": 0,
"comp_size": 0,
"started_at": "2017-06-20T07:44+00:00",
"completed_at": "2017-06-20T07:44+00:00",
"description": "snap-c634c136b469 1.9 GiB"
},
{
"id": "ffe32972-dca1-4f51-8567-33c1848461d7",
"key": "ffe32972-dca1-4f51-8567-33c1848461d7",
"short_id": "snap-33c1848461d7",
"uuid": "35816b72-9ebb-4e38-b5c1-3328e44f6ce8",
"mode": "full",
"progress": 100,
"phase": "complete",
"capacity": 2073741824,
"size": 0,
"comp_size": 0,
"started_at": "2017-07-18T11:07+00:00",
"completed_at": "2017-07-18T11:07+00:00",
"description": "snap-33c1848461d7 1.9 GiB"
}
]
Object Store Remove backup
Delete a backup from an object-store.
DELETE /obj-store/{obj_store_id_or_serial}/backups/{obj_store_backup_id}
Optional Parameters
Name | Type | Description |
---|---|---|
force | boolean | remove in-progress backup |
Curl Example
$ curl -X DELETE https://mgmt-node/api/obj-store/obj_store:7:10/backups/a541db70-32fa-4f7d-b4a0-0edb93d391a6 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
204 No Content
Date: Mon, 09 Oct 2017 17:27:18 GMT
Server: Goliath
Object Store Create
Create an object store definition.
POST /obj-store
Required Parameters
Name | Type | Description |
---|---|---|
bucket_name | string | bucket name |
host_name | string | host name |
Optional Parameters
Name | Type | Description |
---|---|---|
type | string | object store type default: "s3" one of: "s3" |
access_key_id | nullable string | access key id |
secret_access_key | nullable string | secret access key |
security_token | nullable string | security token |
label | nullable string | user assigned label Length: 1..64 |
notes | string | user assigned notes Length: 0..256 |
uuid | uuid | object UUID |
protocol | nullable string | object store protocol default: "http" one of: "http" or "https" |
uri_style | nullable string | object store uri style default: "path" one of: "virtual_host" or "path" |
location:country | string | ISO 3166-1 alpha-3 country code default: "" |
location:lat | number | latitude default: 0 |
location:long | number | longitude default: 0 |
location:city | string | city default: "" |
location:state | string | state as two-character USPS abbreviation default: "" |
default_wkey_password | nullable string | default wrap key passphrase Length: 1..128 |
Curl Example
$ curl -X POST https://mgmt-node/api/obj-store \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"bucket_name": "bb-api-ox-test",
"access_key_id": "AWPTG56F131EAZIFSD04",
"secret_access_key": "w8SLNWrqDOfCIgJmYc39kQlFnDtqrT384e95JLNr",
"host_name": "ceph-s3.localnet:7480"
}'
Response Example
201 Created
Date: Mon, 09 Oct 2017 17:26:53 GMT
Server: Goliath
ETag: "732b13e01fedb77d53fd884cfd646c25"
Content-Type: application/json
Content-Length: 887
{
"id": "obj_store:7:10",
"uuid": "01299a26-ac49-4db0-b2e8-a3d78cd92a8a",
"serial": "OBJ4562194C4062642E",
"evt_qry": "serial=OBJ4562194C4062642E",
"account_id": "account:1:10",
"ctime": 1507570013691,
"mtime": 1507570013728,
"seq": 1507570013734,
"label": "object-store-1",
"notes": null,
"status": {
"indicator": "online",
"value": "online",
"detail": ""
},
"ec": {
"status": "current",
"table": {
"time": null,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
0,
0,
0,
0
],
"v": "dbg"
},
{
"d": [
0,
0,
0,
0
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"seq": 1507570013715
},
"rec_status": null,
"type": [
"s3"
],
"location": {
"country": "",
"lat": 0,
"long": 0,
"city": "",
"state": ""
},
"bucket_name": "bb-api-ox-test",
"host_name": "ceph-s3.localnet:7480",
"protocol": "http",
"uri_style": "path",
"access_key_id": "AWPTG56F131EAZIFSD04",
"secret_access_key_set": true,
"security_token_set": false,
"default_wkey_password_set": false
}
Object Store Remove
Remove an obj_store definition.
DELETE /obj-store/{obj_store_id_or_serial}
Curl Example
$ curl -X DELETE https://mgmt-node/api/obj-store/obj_store:7:10 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
204 No Content
Date: Mon, 09 Oct 2017 17:27:18 GMT
Server: Goliath
Object Store Update
Change the configuration of an existing object store definition.
PATCH /obj-store/{obj_store_id_or_serial}
Optional Parameters
Name | Type | Description |
---|---|---|
label | nullable string | user assigned label Length: 1..64 |
notes | string | user assigned notes Length: 0..256 |
bucket_name | string | bucket name |
host_name | nullable string | host name |
access_key_id | nullable string | access key id |
secret_access_key | nullable string | secret access key |
security_token | nullable string | security token |
protocol | nullable string | object store protocol one of: "http" or "https" |
location:country | string | ISO 3166-1 alpha-3 country code default: "" |
location:lat | number | latitude default: 0 |
location:long | number | longitude default: 0 |
location:city | string | city default: "" |
location:state | string | state as two-character USPS abbreviation default: "" |
type | string | object store type one of: "s3" |
uri_style | nullable string | object store uri style one of: "virtual_host" or "path" |
default_wkey_password | nullable string | default wrap key passphrase Length: 1..128 |
Curl Example
$ curl -X PATCH https://mgmt-node/api/obj-store/obj_store:7:10 \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"label": "cambridge bucket",
"default_wkey_password": "foo"
}'
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:54 GMT
Server: Goliath
ETag: "896f26b4fa665453b063a7bc96d80cea"
Content-Type: application/json
Content-Length: 910
{
"id": "obj_store:7:10",
"uuid": "01299a26-ac49-4db0-b2e8-a3d78cd92a8a",
"serial": "OBJ4562194C4062642E",
"evt_qry": "serial=OBJ4562194C4062642E",
"account_id": "account:1:10",
"ctime": 1507570013691,
"mtime": 1507570014048,
"seq": 1507570014053,
"label": "cambridge bucket",
"notes": null,
"status": {
"indicator": "degraded",
"value": "degraded",
"detail": "needs verification"
},
"ec": {
"status": "current",
"table": {
"time": null,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"d": [
0,
0,
0,
0
],
"v": "dbg"
},
{
"d": [
0,
0,
0,
0
],
"v": "info"
},
{
"d": [
0,
0,
0,
0
],
"v": "warn"
},
{
"d": [
0,
0,
0,
0
],
"v": "err"
}
]
},
"seq": 1507570013715
},
"rec_status": null,
"type": [
"s3"
],
"location": {
"country": "",
"lat": 0,
"long": 0,
"city": "",
"state": ""
},
"bucket_name": "bb-api-ox-test",
"host_name": "ceph-s3.localnet:7480",
"protocol": "http",
"uri_style": "path",
"access_key_id": "AWPTG56F131EAZIFSD04",
"secret_access_key_set": true,
"security_token_set": false,
"default_wkey_password_set": true
}
Events
The Blockbridge system maintains an extensive audit history of administrative actions and status changes for each configuration object. These events have a descriptive symbol, such as TARGET_LOGIN
and several additional qualifiers, such as the ID and serial number of the affected objects, and in some cases the iSCSI initiator IQN, or the user's name.
Requesting events from the REST API opens a distributed query to retrieve events from throughout the Blockbridge managment network. If the response doesn't indicate end-of-file (eof
), then increase the number of desired results with the num
parameter, or shorten the specified time range.
Attributes
Name | Type | Description |
---|---|---|
eof | boolean | end of results |
batch/c | string | cookie |
batch/eof | boolean | end of results |
batch/d | integer | process ID |
batch/g | array | classification tags |
batch/f | string | truncated source file |
batch/i | string | primary context id (pcid) |
batch/h | integer | HA cluster logical node ID |
batch/k | integer | query sequence number |
batch/m | string | formatted message string |
batch/l | integer | source file line |
batch/n | string | node ID |
batch/q | integer | sequence number |
batch/s | string | message symbol |
batch/r | integer | reference sequence number |
batch/t | integer | milliseconds since epoch Range: 0 <= value |
batch/y | string | data type, set to 'e' for events one of: "l" or "e" or "c" or "s" or "m" or "h" |
batch/p | string | process one of: "unk" or "mp" or "cp" or "dcp" or "sp" or "con" or "slp" or "mlp" or "dlp" or "sl" or "ml" or "dl" or "dc" or "mclmon" or "sclmon" or "da" or "ha" |
batch/pi | string | primary ID |
batch/b | nullable string | context block |
batch/v | string | message severity one of: "dev" or "dbg" or "info" or "note" or "warn" or "err" or "crit" or "alrt" |
batch/x | integer | SP complex ID |
Events Query Account
Retrieve all events for the requestor's account.
GET /events
Required Parameters
Name | Type | Description |
---|---|---|
tstart | integer | start time for query in milliseconds since epoch Range: 0 <= value |
num | integer | number of events to return Range: 1 <= value <= 8192 |
Optional Parameters
Name | Type | Description |
---|---|---|
tend | integer | end time for query in milliseconds since epoch (0 or unspecified for now) default: 0 Range: 0 <= value |
sev | string | minimum event severity default: "info" one of: "dbg" or "info" or "note" or "warn" or "err" |
Curl Example
$ curl https://mgmt-node/api/events/account:10:10 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-G \
-d num=2 \
-d sev=info \
-d tstart=0
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:27:40 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 23
{
"batch": [
],
"eof": true
}
Events Query
Retrieve user and administrative events for the specified id or serial number. Any type of id or serial number may be specified in place of {events_identity}
.
GET /events/{events_identity}
Required Parameters
Name | Type | Description |
---|---|---|
tstart | integer | start time for query in milliseconds since epoch Range: 0 <= value |
num | integer | number of events to return Range: 1 <= value <= 8192 |
Optional Parameters
Name | Type | Description |
---|---|---|
tend | integer | end time for query in milliseconds since epoch (0 or unspecified for now) default: 0 Range: 0 <= value |
sev | string | minimum event severity default: "info" one of: "dbg" or "info" or "note" or "warn" or "err" |
Curl Example
$ curl https://mgmt-node/api/events \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-G \
-d num=2 \
-d sev=info \
-d tstart=0
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:27:40 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 1196
{
"batch": [
{
"c": "e1507569969.226.010bcc:me5e01082d:a",
"d": 14830,
"g": [
"task"
],
"f": "v-create",
"i": "node:10000",
"k": 1,
"m": " ",
"l": 105,
"n": "node:10",
"q": 68556,
"s": "OS_DEVICE_CREATE_INTERNAL_ERROR",
"t": 1507569969226,
"y": "e",
"p": "mp",
"pi": "os_device",
"b": {
"account.id": "account:1:10",
"user.id": "user_profile:1:10",
"user.serial": "USR1B62194C40626440",
"user.login": "system",
"user.ipaddr": "172.16.5.200",
"task.id": "ptask:228:10",
"task.serial": "TSK0A62194C40626A14",
"node.id": "node:10000",
"node.serial": "NOD0F68194C40601558",
"os_device.id": "os_dev:13:10",
"os_device.serial": "OSD0D62194C40626481"
},
"v": "err"
},
{
"c": "e1507567945.502.009200:me5e01082d:a",
"d": 14830,
"g": [
"task"
],
"f": "v-create",
"i": "node:10000",
"k": 2,
"m": " ",
"l": 105,
"n": "node:10",
"q": 37376,
"s": "OS_DEVICE_CREATE_INTERNAL_ERROR",
"t": 1507567945502,
"y": "e",
"p": "mp",
"pi": "os_device",
"b": {
"account.id": "account:1:10",
"user.id": "user_profile:1:10",
"user.serial": "USR1B62194C40626440",
"user.login": "system",
"user.ipaddr": "172.16.5.200",
"task.id": "ptask:107:10",
"task.serial": "TSK0A62194C406262EA",
"node.id": "node:10000",
"node.serial": "NOD0F68194C40601558",
"os_device.id": "os_dev:9:10",
"os_device.serial": "OSD0D62194C406264C0"
},
"v": "err"
}
],
"eof": false
}
Statistics
Blockbridge storage nodes keep a long history of how the node's storage resources have been used over time. You can retrieve time-series information information such as block usage for virtual disks, IOPS, or write bandwidth for various types of resources.
These statistics are grouped into snapshots of related data points called statistics blocks. Available statistics block types include:
- vdisk_history: read/write bandwidth, I/O size histograms, IOPS and storage consumption for virtual disks
- target_history: read/write bandwidth and IOPS, iSCSI PDUs sent and received for iSCSI targets
- vss_history: storage consumption and IOPS usage for virtual storage services
- sys_ds_history: storage consumption, IOPS, and other performance metrics for system datastores
- node_usage_history: counters for devices, services, virtual disks, snapshots, etc. for a storage node
Requesting statistics from the REST API opens a query internally to the appropriate storage node. The statistics are reuturned in reverse time order, starting from tend
. If the response doesn't indicate end-of-file (eof
), then increase the number of desired results with the num
parameter, or shorten the specified time range.
Attributes
Name | Type | Description |
---|---|---|
eof | boolean | end of results |
batch/a | string | account/admin ID |
batch/c | string | cookie |
batch/eof | boolean | end of results |
batch/e | nullable string | extended key |
batch/d | nullable string | statistics block sub-object, see additional notes |
batch/rt | boolean | data point obtained in real time (open-ended query only) |
batch/k | integer | query sequence number |
batch/o | string | object OID |
batch/n | string | node ID |
batch/t | integer | milliseconds since epoch for measurement Range: 0 <= value |
batch/y | string | data type, set to 's' for statistics one of: "l" or "e" or "c" or "s" or "m" or "h" |
batch/x | string | statistics block type |
Statistics Query
Retrieve statistics for the specified id or serial number. Any type of id or serial number may be specified in place of {stats_identity}
.
GET /stats/{stats_identity}
Required Parameters
Name | Type | Description |
---|---|---|
tstart | integer | start time for query in milliseconds since epoch Range: 0 <= value |
period | integer | resolution to return data, in milliseconds (0 for all data) Range: 0 <= value |
num | integer | number of data points to return Range: 1 <= value <= 8192 |
Optional Parameters
Name | Type | Description |
---|---|---|
tend | integer | end time for query in milliseconds since epoch (0 or unspecified for now) default: 0 Range: 0 <= value |
Curl Example
$ curl https://mgmt-node/api/stats/vdisk:5:10 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-G \
-d num=2 \
-d period=0 \
-d tstart=0
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:27:33 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 314
{
"batch": [
{
"a": "account:1:10",
"c": "x1507570024.225.1f0a000000000050.0 20:900000000027100",
"d": {
"rb": 0,
"wb": 0,
"ub": 0,
"ro": 0,
"wo": 0,
"oo": 0,
"i": 0,
"rst": 0,
"rsto": 0,
"wst": 0,
"wsto": 0,
"tt": 0,
"dt": 0,
"qs": 0,
"qsz": 0,
"qes": 0
},
"k": 1,
"o": "vdisk:5:10",
"n": "node:10000",
"t": 1507570024225,
"y": "s",
"x": "vdisk_history"
}
],
"eof": true
}
Extensible Metadata Record
The Extensible Metadata Record provides a way for applications to store free-form data in the Blockbridge management node. The data can include information of use to the client itself, to other clients, or to the storage administrator. The data can be associated with another object such as a virtual disk or service, so that it is removed when the associated object is deleted.
Attributes
Name | Type | Description |
---|---|---|
id | string | object id |
uuid | uuid | object uuid |
ctime | integer | extensible metadata create time Range: 0 <= value |
mtime | integer | extensible metadata last modified time Range: 0 <= value |
serial | string | extensible metadata serial number |
label | nullable string | user assigned label Length: 1..64 |
account_id | nullable string | account id |
vss_id | nullable string | optional vss ref |
ref | string | arbitrary string reference key Length: 1..256 |
publish | boolean | no documentation |
type | nullable string | no documentation |
notes | nullable string | user assigned notes Length: 0..256 |
tags | array | object tags |
ext_status | nullable object | external application status |
ext_status:indicator | string | status indicator one of: "online" or "degraded" or "offline" or "na" |
ext_status:value | string | status value one of: "online" or "degraded" or "offline" or "pending" or "payment" |
ext_status:detail | nullable string | status detail |
data | nullable object | application-supplied data |
system | boolean | system xmd |
xmd_refs | array | array of extensible metadata reference keys |
xref | string | arbitrary string reference Length: 1..256 |
status:indicator | string | status indicator one of: "online" or "degraded" or "offline" or "na" |
status:value | string | status value one of: "online" or "degraded" or "offline" or "pending" or "payment" |
status:detail | nullable string | status detail |
rdeps/id | string | dependent object id |
rdeps/serial | string | dependent object serial number |
rdeps/label | nullable string | dependent object label |
rdeps/ref | string | dependent object reference key Length: 1..256 |
rdeps/type | string | dependent object type |
rdeps/self | boolean | dependent object references itself |
xmd/id | string | no documentation |
xmd/ref | string | arbitrary string reference key Length: 1..256 |
xmd/mtime | integer | last modified time of xmd Range: 0 <= value |
xmd/tags | array | object tags |
xmd/self | boolean | no documentation |
xmd/data | nullable string | no documentation |
Extensible Metadata Record Info
Retrieve an existing external metadata object.
GET /xmd/{xmd_id_or_serial_or_ref}
Curl Example
$ curl https://mgmt-node/api/xmd/xmd:7:10 \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:27:39 GMT
Server: Goliath
ETag: "eb42871915d000bae233234b8619454c"
Content-Type: application/json
Content-Length: 709
{
"id": "xmd:7:10",
"uuid": "ff89ac1c-f779-4f41-be78-60bb62492d61",
"serial": "XMD3962194C4062642D",
"evt_qry": null,
"account_id": "account:1:10",
"ctime": 1507570059641,
"mtime": 1507570059642,
"seq": 1507570059689,
"label": null,
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": null,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"v": "dbg",
"d": [
0,
0,
0,
0
]
},
{
"v": "info",
"d": [
0,
0,
0,
0
]
},
{
"v": "warn",
"d": [
0,
0,
0,
0
]
},
{
"v": "err",
"d": [
0,
0,
0,
0
]
}
]
},
"status": "current",
"seq": 1507570059689
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"ref": "68d89b8c-75a9-484b-ac9f-99e1984a706f",
"tags": [
],
"data": {
"example": {
"data": {
},
"_schema": "terminal"
}
},
"ext_status": null,
"rdeps": [
]
}
Extensible Metadata Record List
Enumerate extensible metadata objects.
GET /xmd
Curl Example
$ curl https://mgmt-node/api/xmd \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:27:39 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 711
[
{
"id": "xmd:7:10",
"uuid": "ff89ac1c-f779-4f41-be78-60bb62492d61",
"serial": "XMD3962194C4062642D",
"evt_qry": null,
"account_id": "account:1:10",
"ctime": 1507570059641,
"mtime": 1507570059642,
"seq": 1507570059689,
"label": null,
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": null,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"v": "dbg",
"d": [
0,
0,
0,
0
]
},
{
"v": "info",
"d": [
0,
0,
0,
0
]
},
{
"v": "warn",
"d": [
0,
0,
0,
0
]
},
{
"v": "err",
"d": [
0,
0,
0,
0
]
}
]
},
"status": "current",
"seq": 1507570059689
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"ref": "68d89b8c-75a9-484b-ac9f-99e1984a706f",
"tags": [
],
"data": {
"example": {
"data": {
},
"_schema": "terminal"
}
},
"ext_status": null,
"rdeps": [
]
}
]
Extensible Metadata Record Create
Create an extensible metadata object.
POST /xmd
Required Parameters
Name | Type | Description |
---|---|---|
ref | string | arbitrary string reference key Length: 1..256 |
Optional Parameters
Name | Type | Description |
---|---|---|
vss_id | string | virtual storage service id |
xmd_refs | array | array of extensible metadata reference keys |
xref | nullable string | arbitrary string reference Length: 1..256 |
label | nullable string | user assigned label Length: 1..64 |
notes | string | user assigned notes Length: 0..256 |
tags | array | object tags |
ext_status:indicator | string | status indicator one of: "online" or "degraded" or "offline" or "na" |
ext_status:value | string | status value one of: "online" or "degraded" or "offline" or "pending" or "payment" |
ext_status:detail | nullable string | status detail |
uuid | uuid | object UUID |
replace | boolean | replace existing xmd ref |
type | nullable string | no documentation |
publish | boolean | publish xmd |
Curl Example
$ curl -X POST https://mgmt-node/api/xmd \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"ref": "68d89b8c-75a9-484b-ac9f-99e1984a706f",
"data": {
"example": {
"data": {
},
"_schema": "terminal"
}
}
}'
Response Example
201 Created
Date: Mon, 09 Oct 2017 17:27:39 GMT
Server: Goliath
ETag: "eb42871915d000bae233234b8619454c"
Content-Type: application/json
Content-Length: 709
{
"id": "xmd:7:10",
"uuid": "ff89ac1c-f779-4f41-be78-60bb62492d61",
"serial": "XMD3962194C4062642D",
"evt_qry": null,
"account_id": "account:1:10",
"ctime": 1507570059641,
"mtime": 1507570059642,
"seq": 1507570059689,
"label": null,
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": null,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"v": "dbg",
"d": [
0,
0,
0,
0
]
},
{
"v": "info",
"d": [
0,
0,
0,
0
]
},
{
"v": "warn",
"d": [
0,
0,
0,
0
]
},
{
"v": "err",
"d": [
0,
0,
0,
0
]
}
]
},
"status": "current",
"seq": 1507570059689
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"ref": "68d89b8c-75a9-484b-ac9f-99e1984a706f",
"tags": [
],
"data": {
"example": {
"data": {
},
"_schema": "terminal"
}
},
"ext_status": null,
"rdeps": [
]
}
Extensible Metadata Record Remove
Remove an extensible metadata object.
DELETE /xmd/{xmd_id_or_serial_or_ref}
Curl Example
$ curl -X DELETE https://mgmt-node/api/xmd/68d89b8c-75a9-484b-ac9f-99e1984a706f \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg"
Response Example
204 No Content
Date: Mon, 09 Oct 2017 17:27:40 GMT
Server: Goliath
Extensible Metadata Record Update
Change an extensible metadata object.
PATCH /xmd/{xmd_id_or_serial_or_ref}
Optional Parameters
Name | Type | Description |
---|---|---|
noent_action | string | response when metadata record not found default: "fail" one of: "fail" or "success" or "create" |
mode | string | update mode default: "replace" one of: "replace" or "merge" or "patch" |
xmd_refs | array | array of extensible metadata reference keys |
label | nullable string | user assigned label Length: 1..64 |
notes | string | user assigned notes Length: 0..256 |
tags | array | object tags |
ext_status:indicator | string | status indicator one of: "online" or "degraded" or "offline" or "na" |
ext_status:value | string | status value one of: "online" or "degraded" or "offline" or "pending" or "payment" |
ext_status:detail | nullable string | status detail |
vss_id | string | vss id |
uuid | uuid | object UUID |
type | nullable string | no documentation |
xref | nullable string | arbitrary string reference Length: 1..256 |
publish | boolean | publish xmd |
new_ref | string | arbitrary string reference key Length: 1..256 |
Curl Example
$ curl -X PATCH https://mgmt-node/api/xmd/68d89b8c-75a9-484b-ac9f-99e1984a706f \
-H "Content-Type: application/json" \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-d \
'{
"data": [
{
"path": "/example/data/lines",
"value": [
"Linux client 2.6.32-431.29.2.el6.x86_64"
],
"op": "add"
}
],
"mode": "patch"
}'
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:27:40 GMT
Server: Goliath
ETag: "ff6827d4a5ba87024776fe031e07ecbe"
Content-Type: application/json
Content-Length: 760
{
"id": "xmd:7:10",
"uuid": "ff89ac1c-f779-4f41-be78-60bb62492d61",
"serial": "XMD3962194C4062642D",
"evt_qry": null,
"account_id": "account:1:10",
"ctime": 1507570059641,
"mtime": 1507570060134,
"seq": 1507570060146,
"label": null,
"notes": null,
"status": {
"value": "online",
"indicator": "online",
"detail": ""
},
"ec": {
"table": {
"time": null,
"hdrs": [
3600000,
86400000,
604800000,
2629800000
],
"rows": [
{
"v": "dbg",
"d": [
0,
0,
0,
0
]
},
{
"v": "info",
"d": [
0,
0,
0,
0
]
},
{
"v": "warn",
"d": [
0,
0,
0,
0
]
},
{
"v": "err",
"d": [
0,
0,
0,
0
]
}
]
},
"status": "current",
"seq": 1507570059689
},
"rec_status": null,
"xmd_refs": [
],
"xref": null,
"xmd": null,
"ref": "68d89b8c-75a9-484b-ac9f-99e1984a706f",
"tags": [
],
"data": {
"example": {
"_schema": "terminal",
"data": {
"lines": [
"Linux client 2.6.32-431.29.2.el6.x86_64"
]
}
}
},
"ext_status": null,
"rdeps": [
]
}
CA Certificate
The Blockbridge management node may be configured with an embedded Certificate Authority that issues SSL certificates for clients to securely access to the API and the management web application. Install its CA certificate on client machines that will use Blockbridge management services. If no certificate authority is configured, SSL connections use self-signed certificates.
Attributes
Name | Type | Description |
---|---|---|
data | string | encoded ca-certificate data |
encoding | string | additional encoding of response data one of: "base64" |
CA Certificate Info
Retrieve the certificate authority certificate.
GET /ca-certificate
Optional Parameters
Name | Type | Description |
---|---|---|
cert_format | string | ca cert format default: "pem" one of: "pem" or "der" |
Curl Example
$ curl https://mgmt-node/api/ca-certificate \
-H "Authorization: Bearer 0/ZWbIgDWDjWa86fkBeFN34C/p+TDTQf/2hFEomiWU2Q1lZ8iANYOHdg" \
-G \
-d cert_format=pem
Response Example
200 OK
Date: Mon, 09 Oct 2017 17:26:52 GMT
Server: Goliath
Content-Type: application/json
Content-Length: 2897
{
"data": "-----BEGIN CERTIFICATE-----\nMIIH+jCCBeKgAwIBAgIJAIFqYjmDMSPJMA0GCSqGSIb3DQEBBQUAMIHPMQswCQYD\nVQQGEwJVUzEWMBQGA1UECAwNTWFzc2FjaHVzZXR0czESMBAGA1UEBwwJQ2FtYnJp\nZGdlMSIwIAYDVQQKDBlCbG9ja2JyaWRnZSBOZXR3b3JrcywgTExDMTAwLgYDVQQL\nDCdFbWJlZGRlZCBDQSAoTW9uIE9jdCAwOSAxNToyNyBVVEMgMjAxNykxGDAWBgNV\nBAMMD2Jsb2NrYnJpZGdlLmNvbTEkMCIGCSqGSIb3DQEJARYVYWRtaW5AYmxvY2ti\ncmlkZ2UuY29tMB4XDTE3MTAwOTE1MjcxNFoXDTM3MTAwOTE1MjcxNFowgc8xCzAJ\nBgNVBAYTAlVTMRYwFAYDVQQIDA1NYXNzYWNodXNldHRzMRIwEAYDVQQHDAlDYW1i\ncmlkZ2UxIjAgBgNVBAoMGUJsb2NrYnJpZGdlIE5ldHdvcmtzLCBMTEMxMDAuBgNV\nBAsMJ0VtYmVkZGVkIENBIChNb24gT2N0IDA5IDE1OjI3IFVUQyAyMDE3KTEYMBYG\nA1UEAwwPYmxvY2ticmlkZ2UuY29tMSQwIgYJKoZIhvcNAQkBFhVhZG1pbkBibG9j\na2JyaWRnZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDQ6UXb\nm1bCtko87HJRKaCfCNwOejG2vwTg4dKV715r/VmtpwQgoa1xZKHMI+9pzs33FNuj\nq/OEjk9gYIOnuGXO5J+Vh527RUscIpHhs9q02/6TIUoBV1NW0YyNZh19ZzFuanaO\nl2YPkXRaEMb0MadHd38+ItqVlFvl+PSfZOLeKgbYRJdE2OPk+K8VJZ2FD1PNmu6q\nCLk36PqMifFmPItDsUCZBL7f3xuVmnrdU3juGE8QXXPysBj8fU/5k5aMW31Pfc2m\nHojcXGsYqjoVEnvd89qzNJt3U8zc51XkrjnAxS68dV9lWAjuk5bF5ZYfhuYAKaH+\ngruiYOroyCq3RiPCXYTe7jk1tQMTR3V8Gr9N05B37uzYBJ3HQ8FdK6NgJ/z+68Y7\nOuVrDXbkBAK4DYcV2u2RSHe/RMCZT36rNQcjMv6r528XsIctxWktLeSHar5WdEC3\n6rbi0PE40hu6L10tViTI9hlU+ZjPEmjANpQtcluFY/pB0riOxNzEhEeIJ6pmahIu\n2X93SA1uds5NaiCLPwAC24hISeGv2xcGjx6QCgvPqE079bcWl/kwBxAosOdh8Shs\nCwXYjpcznNOXClvjNr6XErZpbkxIKsDdVS8YVxtrr7h1b09Y08tPDIdUy7SazE6t\nG8blN73oCCEMFXKaXWavBIbdv/XPVqG85xb4lQIDAQABo4IB1TCCAdEwIAYDVR0R\nBBkwF4EVYWRtaW5AYmxvY2ticmlkZ2UuY29tMA4GA1UdDwEB/wQEAwIBBjAPBgNV\nHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSSJ3ByGRWjRZF5pkcnXYEDNZQ85jARBglg\nhkgBhvhCAQEEBAMCAgQwggEEBgNVHSMEgfwwgfmAFJIncHIZFaNFkXmmRyddgQM1\nlDzmoYHVpIHSMIHPMQswCQYDVQQGEwJVUzEWMBQGA1UECAwNTWFzc2FjaHVzZXR0\nczESMBAGA1UEBwwJQ2FtYnJpZGdlMSIwIAYDVQQKDBlCbG9ja2JyaWRnZSBOZXR3\nb3JrcywgTExDMTAwLgYDVQQLDCdFbWJlZGRlZCBDQSAoTW9uIE9jdCAwOSAxNToy\nNyBVVEMgMjAxNykxGDAWBgNVBAMMD2Jsb2NrYnJpZGdlLmNvbTEkMCIGCSqGSIb3\nDQEJARYVYWRtaW5AYmxvY2ticmlkZ2UuY29tggkAgWpiOYMxI8kwIAYDVR0SBBkw\nF4EVYWRtaW5AYmxvY2ticmlkZ2UuY29tMDAGCWCGSAGG+EIBAwQjFiFodHRwOi8v\nd3d3LmJsb2NrYnJpZGdlLmNvbS9jYS5jcmwwDQYJKoZIhvcNAQEFBQADggIBAL++\n3zKnq/B+TaBe//w7/fLBJIhRmMUj852dUD1EWhFHnBeYU8wOzZ4nzOym95XZMVLg\nbC4WKUFr0C+oYOM7zz9M9GZUoLLGK1SFAKtP3BjJNCcBPmBpdUwFnTPXMLRx+pRy\nWl7iVrpG+jq2Oq0ubBzpP/kiJ06HMJNou6e1PNiMKGsupcvEICiu7w4LSkNX4z2I\nlj+cYRhNJBQrsbvWmorz1tU7DYLNLIvFlaMZRr4xQ0ZEiWVww4ojomS32Brl0JkN\nSSg5EG3zh1CkS8uy1lqiPCzSLFE0JYL2cVM1v0VKjppn7YzE7Zj4WUf+Ptdk8fs1\n1t69MC8o31h1BZ8JVLNK/Dm6MGyOf/a+LpdKGm5SM0WSbkAtatO7EJTK8Ee12Us8\nqH7jPFy2h0S7swRA0QNpPn5ujboSsycVi7difI7YekO2xX5fFZO+1iErrcrxPNRW\nYTZiRWYii+HOkq5SAteiwvt/IG5Ud/81XPlmqgV2bxEuA7Rx6Dbdef3S4Y9A7TPW\naXjYkOp8OJCs/YXHtJXO18UPEhqLh4V8OjuVP51EsMCJJsjaEPXBkbvurfpaKCkr\nKyS4M6ns8YmSCuvVINVdAcUTiraHXrnzVLcHnnUPWxfq230RRt0BlIp6SUO0kBXP\nJN9qm7geoCcdOz4pmC7W3r+OITOQtBp9feHoY74R\n-----END CERTIFICATE-----\n",
"encoding": null
}