Skip to content

Instantly share code, notes, and snippets.

@akutz
Created March 1, 2016 22:38
Show Gist options
  • Save akutz/4adac243c967f095f518 to your computer and use it in GitHub Desktop.
Save akutz/4adac243c967f095f518 to your computer and use it in GitHub Desktop.
{
"id": "https://github.com/emccode/libstorage",
"$schema": "http://json-schema.org/draft-04/schema#",
"$ref": "#/definitions/serviceInfo",
"definitions": {
"volume": {
"properties": {
"id": {
"type": "string",
"description": "The volume ID."
},
"name": {
"type": "string",
"description": "The volume name."
},
"type": {
"type": "string",
"description": "The volume type."
},
"attachments": {
"type": "array",
"description": "The volume's attachments.",
"items": { "$ref": "#/definitions/volumeAttachment" }
},
"availabilityZone": {
"type": "string",
"description": "The zone for which the volume is available."
},
"iops": {
"type": "number",
"description": "The volume IOPs."
},
"networkName": {
"type": "string",
"description": "The name of the network on which the volume resides."
},
"size": {
"type": "number",
"description": "The volume size (GB)."
},
"status": {
"type": "string",
"description": "The volume status."
},
"fields": { "$ref": "#/definitions/fields" }
},
"required": [ "id", "name", "size" ],
"additionalProperties": false
},
"volumeAttachment": {
"properties": {
"instanceID": { "$ref": "#/definitions/instanceID" },
"deviceName": {
"type": "string",
"description": "The name of the device on which the volume to which the object is attached is mounted."
},
"status": {
"type": "string",
"description": "The status of the attachment."
},
"volumeID": {
"type": "string",
"description": "The ID of the volume to which the attachment belongs."
},
"fields": { "$ref": "#/definitions/fields" }
},
"required": [ "instanceID", "deviceName", "volumeID" ],
"additionalProperties": false
},
"instanceID": {
"properties": {
"id": {
"type": "string",
"description": "The instance ID."
},
"metadata": {
"type": "object",
"description": "Extra information about the instance ID."
}
},
"required": [ "id" ],
"additionalProperties": false
},
"instance": {
"properties": {
"instanceID": { "$ref": "#/definitions/instanceID" },
"name": {
"type": "string",
"description": "The name of the instance."
},
"providerName": {
"type": "string",
"description": "The name of the provider that owns the object."
},
"region": {
"type": "string",
"description": "The region from which the object originates."
},
"fields": { "$ref": "#/definitions/fields" }
},
"required": [ "id" ],
"additionalProperties": false
},
"snapshot": {
"properties": {
"id": {
"type": "string",
"description": "The snapshot's ID."
},
"name": {
"type": "string",
"description": "The name of the snapshot."
},
"description": {
"type": "string",
"description": "A description of the snapshot."
},
"startTime": {
"type": "number",
"description": "The time (epoch) at which the request to create the snapshot was submitted."
},
"status": {
"type": "string",
"description": "The status of the snapshot."
},
"volumeID": {
"type": "string",
"description": "The ID of the volume to which the snapshot belongs."
},
"volumeSize": {
"type": "number",
"description": "The size of the volume to which the snapshot belongs."
},
"fields": { "$ref": "#/definitions/fields" }
},
"required": [ "id" ],
"additionalProperties": false
},
"serviceInfo": {
"properties": {
"name": {
"type": "string",
"description": "Name is the service's name."
},
"driver": { "$ref": "#/definitions/driverInfo" }
},
"required": [ "name", "driver" ],
"additionalProperties": false
},
"driverInfo": {
"properties": {
"name": {
"type": "string",
"description": "Ignore is a flag that indicates whether the client logic should invoke the GetNextAvailableDeviceName function prior to submitting an AttachVolume request to the server."
},
"type": {
"type": "string",
"description": "Type is the type of storage the driver provides: block, nas, object."
},
"nextDevice": { "$ref": "#/definitions/nextDeviceInfo" },
"executors": {
"type": "array",
"description": "Executors is information about the driver's client-side executors.",
"items": { "$ref": "#/definitions/executorInfo" }
}
},
"required": [ "name", "type" ]
},
"executorInfo": {
"properties": {
"ignore": {
"type": "boolean",
"description": "Ignore is a flag that indicates whether the client logic should invoke the GetNextAvailableDeviceName function prior to submitting an AttachVolume request to the server."
},
"prefix": {
"type": "string",
"description": "Prefix is the first part of a device path's value after the \"/dev/\" portion. For example, the prefix in \"/dev/xvda\" is \"xvd\"."
},
"pattern": {
"type": "string",
"description": "Pattern is the regex to match the part of a device path after the prefix."
}
}
},
"nextDeviceInfo": {
"properties": {
"ignore": {
"type": "boolean",
"description": "Ignore is a flag that indicates whether the client logic should invoke the GetNextAvailableDeviceName function prior to submitting an AttachVolume request to the server."
},
"prefix": {
"type": "string",
"description": "Prefix is the first part of a device path's value after the \"/dev/\" portion. For example, the prefix in \"/dev/xvda\" is \"xvd\"."
},
"pattern": {
"type": "string",
"description": "Pattern is the regex to match the part of a device path after the prefix."
}
}
},
"fields": {
"description": "Fields are additional properties that can be defined for this type.",
"patternProperties": {
".+": { "type": "string" }
},
"additionalProperties": true
},
"volumeMap": {
"patternProperties": {
"^[a-zA-Z].+$": { "$ref": "#/definitions/volume" }
},
"additionalProperties": false
},
"snapshotMap": {
"patternProperties": {
"^[a-zA-Z].+$": { "$ref": "#/definitions/snapshot" }
},
"additionalProperties": false
},
"serviceInfoMap": {
"patternProperties": {
"^[a-zA-Z].+$": { "$ref": "#/definitions/serviceInfo" }
},
"additionalProperties": false
},
"driverInfoMap": {
"patternProperties": {
"^[a-zA-Z].+$": { "$ref": "#/definitions/driverInfo" }
},
"additionalProperties": false
},
"serviceVolumeMap": {
"patternProperties": {
"^[a-zA-Z].+$": { "$ref": "#/definitions/volumeMap" }
},
"additionalProperties": false
},
"serviceSnapshotMap": {
"patternProperties": {
"^[a-zA-Z].+$": { "$ref": "#/definitions/snapshotMap" }
},
"additionalProperties": false
},
"opts": {
"description": "Opts are additional properties that can be defined for POST requests.",
"patternProperties": {
".+": { "$ref": "#/definitions/opts" }
},
"additionalProperties": true
},
"volumeCreateRequest": {
"properties": {
"name": {
"type": "string"
},
"availabilityZone": {
"type": "string"
},
"iops": {
"type": "number"
},
"size": {
"type": "number"
},
"type": {
"type": "string"
},
"opts": { "$ref" : "#/definitions/opts" }
},
"required": [ "name" ],
"additionalProperties": false
},
"volumeCreateFromSnapshotRequest": {
"properties": {
"volumeName": {
"type": "string"
},
"opts": { "$ref" : "#/definitions/opts" }
},
"required": [ "volumeName" ],
"additionalProperties": false
},
"volumeCopyRequest": {
"properties": {
"volumeName": {
"type": "string"
},
"opts": { "$ref" : "#/definitions/opts" }
},
"required": [ "volumeName" ],
"additionalProperties": false
},
"volumeSnapshotRequest": {
"properties": {
"snapshotName": {
"type": "string"
},
"opts": { "$ref" : "#/definitions/opts" }
},
"required": [ "snapshotName" ],
"additionalProperties": false
},
"volumeRemoveRequest": {
"properties": {
"opts": { "$ref" : "#/definitions/opts" }
},
"additionalProperties": false
},
"volumeAttachRequest": {
"properties": {
"nextDeviceName": {
"type": "string"
},
"opts": { "$ref" : "#/definitions/opts" }
},
"required": [ "nextDeviceName" ],
"additionalProperties": false
},
"volumeDetachRequest": {
"properties": {
"opts": { "$ref" : "#/definitions/opts" }
},
"additionalProperties": false
},
"volumeDetachAllRequest": {
"properties": {
"opts": { "$ref" : "#/definitions/opts" }
},
"additionalProperties": false
},
"snapshotCopyRequest": {
"properties": {
"snapshotName": {
"type": "string"
},
"destinationID": {
"type": "string"
},
"opts": { "$ref" : "#/definitions/opts" }
},
"required": [ "snapshotName", "destinationID" ],
"additionalProperties": false
},
"snapshotRemoveRequest": {
"properties": {
"opts": { "$ref" : "#/definitions/opts" }
},
"additionalProperties": false
},
"error": {
"properties": {
"type": {
"type": "string",
"pattern": "^.{10,}|.*[Ee]rror$"
},
"httpStatus": {
"type": "number",
"minimum": 400,
"maximum": 599
},
"message": {
"type": "string",
"pattern": "^.{20,}$"
}
},
"required": [ "type", "httpStatus", "message" ],
"additionalProperties": false
},
"invalidRequestError": {
"$ref" : "#/definitions/error",
"properties": {
"type": {
"type": "string",
"enum": [ "invalidRequest" ]
},
"httpStatus": {
"type": "number",
"enum": [ 400 ]
}
}
},
"unauthorizedRequestError": {
"$ref" : "#/definitions/error",
"properties": {
"type": {
"type": "string",
"enum": [ "unauthorizedRequest" ]
},
"httpStatus": {
"type": "number",
"enum": [ 401, 403 ]
}
}
},
"resourceNotFoundError": {
"$ref" : "#/definitions/error",
"properties": {
"type": {
"type": "string",
"enum": [ "resourceNotFound" ]
},
"httpStatus": {
"type": "number",
"enum": [ 404 ]
}
}
},
"internalServerError": {
"$ref" : "#/definitions/error",
"properties": {
"type": {
"type": "string",
"enum": [ "internalServerError" ]
},
"httpStatus": {
"type": "number",
"enum": [ 500 ]
}
}
}
}
}
[
{
"name": "testservice3",
"driver": {
"name": "mockDriver3",
"type": "block",
"nextDevice": {
"ignore": false,
"prefix": "xvd",
"pattern": "\\w"
},
"executors": [
{
"md5checksum": "",
"name": "mockDriver3-executor.sh"
}
]
}
},
{
"name": "testservice1",
"driver": {
"name": "mockDriver1",
"type": "block",
"nextDevice": {
"ignore": false,
"prefix": "xvd",
"pattern": "\\w"
},
"executors": [
{
"md5checksum": "",
"name": "mockDriver1-executor.sh"
}
]
}
},
{
"name": "testservice2",
"driver": {
"name": "mockDriver2",
"type": "block",
"nextDevice": {
"ignore": true,
"prefix": "xvd",
"pattern": "\\w"
},
"executors": [
{
"md5checksum": "",
"name": "mockDriver2-executor.sh"
}
]
}
}
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment