diff --git a/api-ref/source/index.rst b/api-ref/source/index.rst index 1678a2a2975..196265a25fa 100644 --- a/api-ref/source/index.rst +++ b/api-ref/source/index.rst @@ -9,6 +9,7 @@ Contents: v1/index v2/index + v3/index Indices and tables diff --git a/api-ref/source/v2/index.rst b/api-ref/source/v2/index.rst index 33f17dd81f1..5693ddf0218 100644 --- a/api-ref/source/v2/index.rst +++ b/api-ref/source/v2/index.rst @@ -1,8 +1,8 @@ :tocdepth: 2 -==================== -Block Storage API V2 -==================== +================================ +Block Storage API V2 (SUPPORTED) +================================ .. rest_expand_all:: diff --git a/api-ref/source/v3/api-versions.inc b/api-ref/source/v3/api-versions.inc new file mode 100644 index 00000000000..948ead9c2f3 --- /dev/null +++ b/api-ref/source/v3/api-versions.inc @@ -0,0 +1,32 @@ +.. -*- rst -*- + +List All Api Versions +===================== + +.. rest_method:: GET / + +Lists information for all Block Storage API versions. + + +Normal response codes: 200,300 + +Error response codes: computeFault(400, 500), serviceUnavailable(503), badRequest(400), +unauthorized(401), forbidden(403), badMethod(405), itemNotFound(404) + +Request +------- + +Response +-------- + +**Example List Api Versions: JSON request** + + +.. literalinclude:: ./samples/versions-response.json + :language: javascript + +**Example List Api Versions: XML request** + + +.. literalinclude:: ./samples/versions-response.xml + :language: javascript diff --git a/api-ref/source/v3/capabilities-v3.inc b/api-ref/source/v3/capabilities-v3.inc new file mode 100644 index 00000000000..84b8cde6127 --- /dev/null +++ b/api-ref/source/v3/capabilities-v3.inc @@ -0,0 +1,48 @@ +.. -*- rst -*- + +================================================= +Capabilities for storage back ends (capabilities) +================================================= + +Shows capabilities for a storage back end. + + +Show all back-end capabilities +============================== + +.. rest_method:: GET /v3/{tenant_id}/capabilities/{hostname} + +Shows capabilities for a storage back end. + + +Normal response codes: 200 +Error response codes: + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - hostname: hostname + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - pool_name: pool_name + - description: description + - volume_backend_name: volume_backend_name + - namespace: namespace + - visibility: visibility + - driver_version: driver_version + - vendor_name: vendor_name + - properties: properties + - storage_protocol: storage_protocol + +Response Example +---------------- + +.. literalinclude:: ./samples/backend-capabilities-response.json + :language: javascript diff --git a/api-ref/source/v3/consistencygroups-v3.inc b/api-ref/source/v3/consistencygroups-v3.inc new file mode 100644 index 00000000000..fe6deb5a3fe --- /dev/null +++ b/api-ref/source/v3/consistencygroups-v3.inc @@ -0,0 +1,267 @@ +.. -*- rst -*- + +================== +Consistency groups +================== + +Consistency groups enable you to create snapshots at the exact same +point in time from multiple volumes. For example, a database might +place its tables, logs, and configuration on separate volumes. To +restore this database from a previous point in time, it makes sense +to restore the logs, tables, and configuration together from the +exact same point in time. + +Use the ``policy.json`` file to grant permissions for these actions +to limit roles. + + +List tenant's consistency groups +================================ + +.. rest_method:: GET /v3/{tenant_id}/consistencygroups + +Lists consistency groups. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - sort_key: sort_key + - sort_dir: sort_dir + - limit: limit + - marker: marker + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - id: id + - name: name + +Response Example +---------------- + +.. literalinclude:: ./samples/consistency-groups-list-response.json + :language: javascript + + +Create a consistency group +========================== + +.. rest_method:: POST /v3/{tenant_id}/consistencygroups + +Creates a consistency group. + +Error response codes:202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - description: description_6 + - availability_zone: availability_zone + - volume_types: volume_types_2 + - name: name_15 + +Response +-------- + +.. rest_parameters:: parameters.yaml + + - status: status_1 + - description: description_11 + - availability_zone: availability_zone + - created_at: created_at + - volume_types: volume_types + - name: name_15 + - id: consistencygroup_id_1 + +Request Example +--------------- + +.. literalinclude:: ./samples/consistency-group-create-request.json + :language: javascript + +Response Example +---------------- + +.. literalinclude:: ./samples/consistency-group-create-response.json + :language: javascript + +Show a consistency group's details +================================== + +.. rest_method:: GET /v3/{tenant_id}/consistencygroups/{consistencygroup_id} + +Shows details for a consistency group. + +Normal response codes: 200 +Error response codes: + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - consistencygroup_id: consistencygroup_id + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - status: status + - description: description + - availability_zone: availability_zone + - created_at: created_at + - volume_types: volume_types + - id: id + - name: name + +Response Example +---------------- + +.. literalinclude:: ./samples/consistency-group-show-response.json + :language: javascript + + +Create a consistency group from source +====================================== + +.. rest_method:: POST /v3/{tenant_id}/consistencygroups/create_from_src + +Creates a consistency group from source. + +Error response codes:202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - status: status + - user_id: user_id + - description: description + - cgsnapshot_id: cgsnapshot_id + - source_cgid: source_cgid + - project_id: project_id + - name: name + - tenant_id: tenant_id + +Request Example +--------------- + +.. literalinclude:: ./samples/consistency-group-create-from-src-request.json + :language: javascript + + +Delete a consistency group +========================== + +.. rest_method:: POST /v3/{tenant_id}/consistencygroups/{consistencygroup_id}/delete + +Deletes a consistency group. + +Error response codes:202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - force: force + - tenant_id: tenant_id + - consistencygroup_id: consistencygroup_id + +Request Example +--------------- + +.. literalinclude:: ./samples/consistency-group-delete-request.json + :language: javascript + + +List consistency groups and details +=================================== + +.. rest_method:: GET /v3/{tenant_id}/consistencygroups/detail + +Lists consistency groups with details. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - sort_key: sort_key + - sort_dir: sort_dir + - limit: limit + - marker: marker + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - status: status + - description: description + - availability_zone: availability_zone + - created_at: created_at + - volume_types: volume_types + - id: id + - name: name + +Response Example +---------------- + +.. literalinclude:: ./samples/consistency-groups-list-detailed-response.json + :language: javascript + + +Update a consistency group +========================== + +.. rest_method:: PUT /v3/{tenant_id}/consistencygroups/{consistencygroup_id}/update + +Updates a consistency group. + +Error response codes:202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - remove_volumes: remove_volumes + - description: description + - add_volumes: add_volumes + - name: name + - tenant_id: tenant_id + - consistencygroup_id: consistencygroup_id + +Request Example +--------------- + +.. literalinclude:: ./samples/consistency-group-update-request.json + :language: javascript diff --git a/api-ref/source/v3/ext-backups-actions-v3.inc b/api-ref/source/v3/ext-backups-actions-v3.inc new file mode 100644 index 00000000000..08de5f68199 --- /dev/null +++ b/api-ref/source/v3/ext-backups-actions-v3.inc @@ -0,0 +1,38 @@ +.. -*- rst -*- + +================================ +Backup actions (backups, action) +================================ + +Force-deletes a backup. + + +Force-delete a backup +===================== + +.. rest_method:: POST /v3/{tenant_id}/backups/{backup_id}/action + +Force-deletes a backup. Specify the ``os-force_delete`` action in the request body. + +This operations deletes the backup and any backup data. + +The backup driver returns the ``405`` status code if it does not +support this operation. + +Error response codes:404,405,202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - os-force_delete: os-force_delete + - tenant_id: tenant_id + - backup_id: backup_id + +Request Example +--------------- + +.. literalinclude:: ./samples/backup-force-delete-request.json + :language: javascript diff --git a/api-ref/source/v3/ext-backups.inc b/api-ref/source/v3/ext-backups.inc new file mode 100644 index 00000000000..01d823a722a --- /dev/null +++ b/api-ref/source/v3/ext-backups.inc @@ -0,0 +1,276 @@ +.. -*- rst -*- + +================= +Backups (backups) +================= + +A backup is a full copy of a volume stored in an external service. +The service can be configured. The only supported service is Object +Storage. A backup can subsequently be restored from the external +service to either the same volume that the backup was originally +taken from or to a new volume. Backup and restore operations can +only be carried out on volumes that are in an unattached and +available state. + +When you create, list, or delete backups, these status values are +possible: + +**Backup statuses** + ++-----------------+---------------------------------------------+ +| Status | Description | ++-----------------+---------------------------------------------+ +| creating | The backup is being created. | ++-----------------+---------------------------------------------+ +| available | The backup is ready to restore to a volume. | ++-----------------+---------------------------------------------+ +| deleting | The backup is being deleted. | ++-----------------+---------------------------------------------+ +| error | A backup error occurred. | ++-----------------+---------------------------------------------+ +| restoring | The backup is being restored to a volume. | ++-----------------+---------------------------------------------+ +| error_restoring | A backup restoration error occurred. | ++-----------------+---------------------------------------------+ + + +If an error occurs, you can find more information about the error +in the ``fail_reason`` field for the backup. + + +List backups with detail +======================== + +.. rest_method:: GET /v3/{tenant_id}/backups/detail + +Lists Block Storage backups, with details, to which the tenant has access. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - sort_key: sort_key + - sort_dir: sort_dir + - limit: limit + - marker: marker + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - status: status + - object_count: object_count + - fail_reason: fail_reason + - description: description + - links: links + - availability_zone: availability_zone + - created_at: created_at + - updated_at: updated_at + - name: name + - has_dependent_backups: has_dependent_backups + - volume_id: volume_id + - container: container + - backups: backups + - size: size + - id: id + - is_incremental: is_incremental + +Response Example +---------------- + +.. literalinclude:: ./samples/backups-list-detailed-response.json + :language: javascript + + +Show backup detail +================== + +.. rest_method:: GET /v3/{tenant_id}/backups/{backup_id} + +Shows details for a backup. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - backup_id: backup_id + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - status: status + - object_count: object_count + - container: container + - description: description + - links: links + - availability_zone: availability_zone + - created_at: created_at + - updated_at: updated_at + - name: name + - has_dependent_backups: has_dependent_backups + - volume_id: volume_id + - fail_reason: fail_reason + - size: size + - backup: backup + - id: id + - is_incremental: is_incremental + +Response Example +---------------- + +.. literalinclude:: ./samples/backup-show-response.json + :language: javascript + + +Delete a backup +=============== + +.. rest_method:: DELETE /v3/{tenant_id}/backups/{backup_id} + +Deletes a backup. + +Error response codes:204, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - backup_id: backup_id + + +Restore a backup +================ + +.. rest_method:: POST /v3/{tenant_id}/backups/{backup_id}/restore + +Restores a Block Storage backup to an existing or new Block Storage volume. + +You must specify either the UUID or name of the volume. If you +specify both the UUID and name, the UUID takes priority. + +Error response codes:202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - restore: restore + - name: name + - volume_id: volume_id + - tenant_id: tenant_id + - backup_id: backup_id + +Request Example +--------------- + +.. literalinclude:: ./samples/backup-restore-request.json + :language: javascript + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - restore: restore + - backup_id: backup_id + - volume_id: volume_id + +Create a backup +=============== + +.. rest_method:: POST /v3/{tenant_id}/backups + +Creates a Block Storage backup from a volume. + +Error response codes:202, + +Request +------- + +.. rest_parameters:: parameters.yaml + + - container: container + - description: description + - incremental: incremental + - volume_id: volume_id + - force: force + - backup: backup + - name: name + - tenant_id: tenant_id + +Request Example +--------------- + +.. literalinclude:: ./samples/backup-create-request.json + :language: javascript + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - backup: backup + - id: id + - links: links + - name: name + +List backups for tenant +======================= + +.. rest_method:: GET /v3/{tenant_id}/backups + +Lists Block Storage backups to which the tenant has access. + +Normal response codes: 200 +Error response codes: + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - sort_key: sort_key + - sort_dir: sort_dir + - limit: limit + - marker: marker + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - backups: backups + - id: id + - links: links + - name: name + +Response Example +---------------- + +.. literalinclude:: ./samples/backups-list-response.json + :language: javascript diff --git a/api-ref/source/v3/index.rst b/api-ref/source/v3/index.rst new file mode 100644 index 00000000000..7f5dc462c3d --- /dev/null +++ b/api-ref/source/v3/index.rst @@ -0,0 +1,28 @@ +:tocdepth: 2 + +============================== +Block Storage API V3 (CURRENT) +============================== + +.. rest_expand_all:: + +.. include:: api-versions.inc +.. include:: ext-backups.inc +.. include:: ext-backups-actions-v3.inc +.. include:: capabilities-v3.inc +.. include:: os-cgsnapshots-v3.inc +.. include:: consistencygroups-v3.inc +.. include:: limits.inc +.. include:: os-vol-image-meta-v3.inc +.. include:: os-vol-pool-v3.inc +.. include:: os-vol-transfer-v3.inc +.. include:: qos-specs-v3-qos-specs.inc +.. include:: quota-sets.inc +.. include:: volume-manage.inc +.. include:: volume-type-access.inc +.. include:: volumes-v3-extensions.inc +.. include:: volumes-v3-snapshots.inc +.. include:: volumes-v3-types.inc +.. include:: volumes-v3-versions.inc +.. include:: volumes-v3-volumes-actions.inc +.. include:: volumes-v3-volumes.inc diff --git a/api-ref/source/v3/limits.inc b/api-ref/source/v3/limits.inc new file mode 100644 index 00000000000..2d7cba04870 --- /dev/null +++ b/api-ref/source/v3/limits.inc @@ -0,0 +1,57 @@ +.. -*- rst -*- + +=============== +Limits (limits) +=============== + +Shows absolute limits for a tenant. + +An absolute limit value of ``-1`` indicates that the absolute limit +for the item is infinite. + + +Show absolute limits for tenant +=============================== + +.. rest_method:: GET /v3/{tenant_id}/limits + +Shows absolute limits for a tenant. + +An absolute limit value of ``-1`` indicates that the absolute limit +for the item is infinite. + + +Normal response codes: 200 +Error response codes:203, + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - totalSnapshotsUsed: totalSnapshotsUsed + - maxTotalBackups: maxTotalBackups + - maxTotalVolumeGigabytes: maxTotalVolumeGigabytes + - limits: limits + - maxTotalSnapshots: maxTotalSnapshots + - maxTotalBackupGigabytes: maxTotalBackupGigabytes + - totalBackupGigabytesUsed: totalBackupGigabytesUsed + - maxTotalVolumes: maxTotalVolumes + - totalVolumesUsed: totalVolumesUsed + - rate: rate + - totalBackupsUsed: totalBackupsUsed + - totalGigabytesUsed: totalGigabytesUsed + - absolute: absolute + +Response Example +---------------- + +.. literalinclude:: ./samples/limits-show-response.json + :language: javascript diff --git a/api-ref/source/v3/os-cgsnapshots-v3.inc b/api-ref/source/v3/os-cgsnapshots-v3.inc new file mode 100644 index 00000000000..2a97f4949f5 --- /dev/null +++ b/api-ref/source/v3/os-cgsnapshots-v3.inc @@ -0,0 +1,179 @@ +.. -*- rst -*- + +=========================== +Consistency group snapshots +=========================== + +Lists all, lists all with details, shows details for, creates, and +deletes consistency group snapshots. + + +Delete a consistency group snapshot +=================================== + +.. rest_method:: DELETE /v3/{tenant_id}/cgsnapshots/{cgsnapshot_id} + +Deletes a consistency group snapshot. + +Error response codes:202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - cgsnapshot_id: cgsnapshot_id + + +Show consistency group snapshot detail +====================================== + +.. rest_method:: GET /v3/{tenant_id}/cgsnapshots/{cgsnapshot_id} + +Shows details for a consistency group snapshot. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - cgsnapshot_id: cgsnapshot_id + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - status: status + - description: description + - created_at: created_at + - consistencygroup_id: consistencygroup_id + - id: id + - name: name + +Response Example +---------------- + +.. literalinclude:: ./samples/cgsnapshots-show-response.json + :language: javascript + + +List all consistency group snapshots with details +================================================= + +.. rest_method:: GET /v3/{tenant_id}/cgsnapshots/detail + +Lists all consistency group snapshots with details. + + +Normal response codes: 200 +Error response codes: + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - status: status + - description: description + - created_at: created_at + - consistencygroup_id: consistencygroup_id + - id: id + - name: name + +Response Example +---------------- + +.. literalinclude:: ./samples/cgsnapshots-list-detailed-response.json + :language: javascript + +List all consistency group snapshots +==================================== + +.. rest_method:: GET /v3/{tenant_id}/cgsnapshots + +Lists all consistency group snapshots. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - id: id + - name: name + + + +Response Example +---------------- + +.. literalinclude:: ./samples/cgsnapshots-list-response.json + :language: javascript + + + + +Create a consistency group snapshot +=================================== + +.. rest_method:: POST /v3/{tenant_id}/cgsnapshots + +Creates a consistency group snapshot. + +Error response codes:202, + +Request +------- + +.. rest_parameters:: parameters.yaml + + - name: name + - tenant_id: tenant_id + +Request Example +--------------- + +.. literalinclude:: ./samples/cgsnapshots-create-request.json + :language: javascript + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - status: status + - description: description + - created_at: created_at + - consistencygroup_id: consistencygroup_id + - id: id + - name: name diff --git a/api-ref/source/v3/os-vol-image-meta-v3.inc b/api-ref/source/v3/os-vol-image-meta-v3.inc new file mode 100644 index 00000000000..48181bc2b5a --- /dev/null +++ b/api-ref/source/v3/os-vol-image-meta-v3.inc @@ -0,0 +1,46 @@ +.. -*- rst -*- + +=================================================== +Volume image metadata extension (os-vol-image-meta) +=================================================== + +Shows image metadata that is associated with a volume. + + +Show image metadata for a volume +================================ + +.. rest_method:: GET /v3/{tenant_id}/os-vol-image-meta + +Shows image metadata for a volume. + +When the request is made, the caller must specify a reference to an +existing storage volume in the ``ref`` element. Each storage driver +may interpret the existing storage volume reference differently but +should accept a reference structure containing either a ``source- +volume-id`` or ``source-volume-name`` element, if possible. + +Error response codes:202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - description: description + - availability_zone: availability_zone + - bootable: bootable + - volume_type: volume_type + - name: name + - volume: volume + - host: host + - ref: ref + - metadata: metadata + - tenant_id: tenant_id + +Request Example +--------------- + +.. literalinclude:: ./samples/image-metadata-show-request.json + :language: javascript diff --git a/api-ref/source/v3/os-vol-pool-v3.inc b/api-ref/source/v3/os-vol-pool-v3.inc new file mode 100644 index 00000000000..20d4704a7d3 --- /dev/null +++ b/api-ref/source/v3/os-vol-pool-v3.inc @@ -0,0 +1,50 @@ +.. -*- rst -*- + +====================== +Back-end storage pools +====================== + +Administrator only. Lists all back-end storage pools that are known +to the scheduler service. + + +List all back-end storage pools +=============================== + +.. rest_method:: GET /v3/{tenant_id}/scheduler-stats/get_pools + +Lists all back-end storage pools. + + +Normal response codes: 200 +Error response codes: + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - detail: detail + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - updated: updated + - QoS_support: QoS_support + - name: name + - total_capacity: total_capacity + - volume_backend_name: volume_backend_name + - capabilities: capabilities + - free_capacity: free_capacity + - driver_version: driver_version + - reserved_percentage: reserved_percentage + - storage_protocol: storage_protocol + +Response Example +---------------- + +.. literalinclude:: ./samples/pools-list-detailed-response.json + :language: javascript diff --git a/api-ref/source/v3/os-vol-transfer-v3.inc b/api-ref/source/v3/os-vol-transfer-v3.inc new file mode 100644 index 00000000000..ce30a69fd2d --- /dev/null +++ b/api-ref/source/v3/os-vol-transfer-v3.inc @@ -0,0 +1,217 @@ +.. -*- rst -*- + +=============== +Volume transfer +=============== + +Transfers a volume from one user to another user. + + +Accept a volume transfer +======================== + +.. rest_method:: POST /v3/{tenant_id}/os-volume-transfer/{transfer_id}/accept + +Accepts a volume transfer. + +Error response codes:202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - auth_key: auth_key + - transfer_id: transfer_id + - tenant_id: tenant_id + +Request Example +--------------- + +.. literalinclude:: ./samples/volume-transfer-accept-request.json + :language: javascript + + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - volume_id: volume_id + - id: id + - links: links + - name: name + + +Create a volume transfer +======================== + +.. rest_method:: POST /v3/{tenant_id}/os-volume-transfer + +Creates a volume transfer. + +Error response codes:202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - name: name + - volume_id: volume_id + - tenant_id: tenant_id + +Request Example +--------------- + +.. literalinclude:: ./samples/volume-transfer-create-request.json + :language: javascript + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - auth_key: auth_key + - links: links + - created_at: created_at + - volume_id: volume_id + - id: id + - name: name + + +List volume transfers for a tenant +================================== + +.. rest_method:: GET /v3/{tenant_id}/os-volume-transfer + +Lists volume transfers. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - volume_id: volume_id + - id: id + - links: links + - name: name + + +Response Example +---------------- + +.. literalinclude:: ./samples/volume-transfers-list-response.json + :language: javascript + + +Show volume transfer detail +=========================== + +.. rest_method:: GET /v3/{tenant_id}/os-volume-transfer/{transfer_id} + +Shows details for a volume transfer. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - transfer_id: transfer_id + - tenant_id: tenant_id + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - created_at: created_at + - volume_id: volume_id + - id: id + - links: links + - name: name + + +Response Example +---------------- + +.. literalinclude:: ./samples/volume-transfer-show-response.json + :language: javascript + + +Delete a volume transfer +======================== + +.. rest_method:: DELETE /v3/{tenant_id}/os-volume-transfer/{transfer_id} + +Deletes a volume transfer. + +Error response codes:202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - transfer_id: transfer_id + - tenant_id: tenant_id + + +List volume transfers and details +================================= + +.. rest_method:: GET /v3/{tenant_id}/os-volume-transfer/detail + +Lists volume transfers, with details. + + +Normal response codes: 200 +Error response codes: + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - created_at: created_at + - volume_id: volume_id + - id: id + - links: links + - name: name + +Response Example +---------------- + +.. literalinclude:: ./samples/volume-transfers-list-detailed-response.json + :language: javascript diff --git a/api-ref/source/v3/parameters.yaml b/api-ref/source/v3/parameters.yaml new file mode 100644 index 00000000000..3844caa8375 --- /dev/null +++ b/api-ref/source/v3/parameters.yaml @@ -0,0 +1,1620 @@ +# variables in header +x-openstack-request-id: + description: > + foo + in: header + required: false + type: string + +# variables in path +admin_tenant_id: + description: | + The UUID of the administrative tenant. + in: path + required: false + type: string +backup_id: + description: | + The UUID for a backup. + in: path + required: false + type: string +cgsnapshot_id_1: + description: | + The ID of the consistency group snapshot. + in: path + required: false + type: string +consistencygroup_id_2: + description: | + The ID of the consistency group. + in: path + required: false + type: string +force_3: + description: | + To delete a QoS specification even if it is in- + use, set to ``true``. Default is ``false``. + in: path + required: false + type: boolean +hostname: + description: | + The name of the host that hosts the storage back + end. + in: path + required: false + type: string +qos_id: + description: | + The ID of the QoS specification. + in: path + required: false + type: string +snapshot_id_1: + description: | + The UUID of the snapshot. + in: path + required: false + type: string +tenant_id: + description: | + The UUID of the tenant in a multi-tenancy cloud. + in: path + required: false + type: string +transfer_id: + description: | + The unique identifier for a volume transfer. + in: path + required: false + type: string +user_id_1: + description: | + The user ID. Specify in the URI as + ``user_id={user_id}``. + in: path + required: false + type: string +volume_id_1: + description: | + The UUID of the volume. + in: path + required: false + type: string +volume_type: + description: | + The ID of Volume Type to be accessed by project. + in: path + required: false + type: string +volume_type_id: + description: | + The UUID for an existing volume type. + in: path + required: false + type: string + +# variables in query +action: + description: | + The action. Valid values are "set" or "unset." + in: query + required: true + type: string +all-tenants: + description: | + Shows details for all tenants. Admin only.. + in: query + required: false + type: string +bootable_query: + description: | + Filters results by bootable status. Default=None. + in: query + required: false + type: boolean +detail: + description: | + Indicates whether to show pool details or only + pool names in the response. Set to ``true`` to show pool details. + Set to ``false`` to show only pool names. Default is ``false``. + in: query + required: false + type: boolean +image-id: + description: | + Creates volume from image ID. Default=None. + in: query + required: false + type: string +limit: + description: | + Requests a page size of items. Returns a number + of items up to a limit value. Use the ``limit`` parameter to make + an initial limited request and use the ID of the last-seen item + from the response as the ``marker`` parameter value in a + subsequent limited request. + in: query + required: false + type: integer +marker: + description: | + The ID of the last-seen item. Use the ``limit`` + parameter to make an initial limited request and use the ID of the + last-seen item from the response as the ``marker`` parameter value + in a subsequent limited request. + in: query + required: false + type: string +metadata_query: + description: | + Filters results by a metadata key and value pair. + Default=None. + in: query + required: true + type: object +migration_status_query: + description: | + Filters results by a migration status. Default=None. + Admin only. + in: query + required: false + type: string +name_volume: + description: | + Filters results by a name. Default=None. + in: query + required: false + type: string +sort: + description: | + Comma-separated list of sort keys and optional + sort directions in the form of < key > [: < direction > ]. A valid + direction is ``asc`` (ascending) or ``desc`` (descending). + in: query + required: false + type: string +sort_dir: + description: | + Sorts by one or more sets of attribute and sort + direction combinations. If you omit the sort direction in a set, + default is ``desc``. + in: query + required: false + type: string +sort_key: + description: | + Sorts by an attribute. A valid value is ``name``, + ``status``, ``container_format``, ``disk_format``, ``size``, + ``id``, ``created_at``, or ``updated_at``. Default is + ``created_at``. The API uses the natural sorting direction of the + ``sort_key`` attribute value. + in: query + required: false + type: string +sort_key_1: + description: | + Sorts by an image attribute. A valid value is + ``name``, ``status``, ``container_format``, ``disk_format``, + ``size``, ``id``, ``created_at``, or ``updated_at``. Default is + ``created_at``. The API uses the natural sorting direction of the + ``sort_key`` attribute value. + in: query + required: false + type: string +status_query: + description: | + Filters results by a status. Default=None. + in: query + required: false + type: boolean +usage: + description: | + Set to ``usage=true`` to show quota usage. + Default is ``false``. + in: query + required: false + type: boolean + +# variables in body +absolute: + description: | + An ``absolute`` limits object. + in: body + required: true + type: object +add_volumes: + description: | + One or more volume UUIDs, separated by commas, to + add to the volume consistency group. + in: body + required: false + type: string +alias: + description: | + The alias for the extension. For example, + "FOXNSOX", "os- availability-zone", "os-extended-quotas", "os- + share-unmanage" or "os-used-limits." + in: body + required: true + type: string +attach_status: + description: | + The volume attach status. + in: body + required: false + type: string +attachment_id: + description: | + The interface ID. + in: body + required: false + type: string +attachments: + description: | + Instance attachment information. If this volume + is attached to a server instance, the attachments list includes + the UUID of the attached server, an attachment UUID, the name of + the attached host, if any, the volume UUID, the device, and the + device UUID. Otherwise, this list is empty. + in: body + required: true + type: array +auth_key: + description: | + The authentication key for the volume transfer. + in: body + required: true + type: string +availability_zone: + description: | + The name of the availability zone. + in: body + required: false + type: string +availability_zone_1: + description: | + The availability zone. + in: body + required: false + type: string +availability_zone_2: + description: | + The availability zone. + in: body + required: true + type: string +availability_zone_3: + description: | + The availability zone name. + in: body + required: true + type: string +backup: + description: | + A ``backup`` object. + in: body + required: true + type: object +backups: + description: | + A list of ``backup`` objects. + in: body + required: true + type: array +bootable: + description: | + Enables or disables the bootable attribute. You + can boot an instance from a bootable volume. + in: body + required: true + type: boolean +bootable_1: + description: | + Enables or disables the bootable attribute. You + can boot an instance from a bootable volume. + in: body + required: false + type: boolean +capabilities: + description: | + The capabilities for the back end. The value is + either ``null`` or a string value that indicates the capabilities + for each pool. For example, ``total_capacity`` or ``QoS_support``. + in: body + required: true + type: object +cgsnapshot_id: + description: | + The UUID of the consistency group snapshot. + in: body + required: false + type: string +connector: + description: | + The ``connector`` object. + in: body + required: true + type: object +consistencygroup_id: + description: | + The UUID of the consistency group. + in: body + required: true + type: string +consistencygroup_id_1: + description: | + The UUID of the consistency group. + in: body + required: false + type: string +consumer: + description: | + The consumer type. + in: body + required: false + type: string +consumer_1: + description: | + The consumer type. + in: body + required: true + type: string +container: + description: | + The container name or null. + in: body + required: true + type: string +cores: + description: | + The number of instance cores that are allowed for + each tenant. + in: body + required: true + type: integer +created_at: + description: | + The date and time when the resource was created. + + The date and time stamp format is `ISO 8601 + `_: + + :: + + CCYY-MM-DDThh:mm:ss±hh:mm + + For example, ``2015-08-27T09:49:58-05:00``. + + The ``±hh:mm`` value, if included, is the time zone as an offset + from UTC. + in: body + required: true + type: string +created_at_1: + description: | + Date and time when the volume was created. + in: body + required: true + type: string +description: + description: | + The backup description or null. + in: body + required: true + type: string +description_1: + description: | + The consistency group snapshot description. + in: body + required: true + type: string +description_10: + description: | + The capabilities description. + in: body + required: true + type: string +description_11: + description: | + The consistency group description. + in: body + required: false + type: string +description_2: + description: | + The description of the consistency group. + in: body + required: false + type: string +description_3: + description: | + The description of the consistency group. + in: body + required: true + type: string +description_4: + description: | + A description for the snapshot. Default is + ``None``. + in: body + required: false + type: string +description_5: + description: | + The volume description. + in: body + required: false + type: string +description_6: + description: | + The consistency group description. + in: body + required: true + type: string +description_7: + description: | + The extension description. + in: body + required: true + type: string +description_8: + description: | + A description for the snapshot. + in: body + required: true + type: string +description_9: + description: | + The volume description. + in: body + required: true + type: string +driver_version: + description: | + The driver version. + in: body + required: true + type: string +encrypted: + description: | + If true, this volume is encrypted. + in: body + required: true + type: boolean +extra_specs: + description: | + A set of key and value pairs that contains the + specifications for a volume type. + in: body + required: true + type: object +extra_specs_1: + description: | + A key and value pair that contains additional + specifications that are associated with the volume type. Examples + include capabilities, capacity, compression, and so on, depending + on the storage driver in use. + in: body + required: true + type: object +fail_reason: + description: | + If the backup failed, the reason for the failure. + Otherwise, null. + in: body + required: true + type: string +fixed_ips: + description: | + The number of fixed IP addresses that are allowed + for each tenant. Must be equal to or greater than the number of + allowed instances. + in: body + required: true + type: integer +floating_ips: + description: | + The number of floating IP addresses that are + allowed for each tenant. + in: body + required: true + type: integer +force: + description: | + Indicates whether to backup, even if the volume + is attached. Default is ``false``. + in: body + required: false + type: boolean +force_1: + description: | + Indicates whether to snapshot, even if the volume + is attached. Default is ``false``. + in: body + required: false + type: boolean +force_2: + description: | + If set to ``true``, forces deletion of a + consistency group that has a registered volume. + in: body + required: false + type: boolean +free_capacity: + description: | + The amount of free capacity for the back-end + volume, in GBs. A valid value is a string, such as ``unknown``, or + an integer. + in: body + required: true + type: string +has_dependent_backups: + description: | + If this value is ``true``, the backup depends on + other backups. + in: body + required: false + type: boolean +host: + description: | + The OpenStack Block Storage host where the + existing volume resides. + in: body + required: true + type: string +host_name: + description: | + The name of the attaching host. + in: body + required: false + type: string +id: + description: | + The UUID of the volume transfer. + in: body + required: true + type: string +id_1: + description: | + The UUID of the backup. + in: body + required: true + type: string +id_2: + description: | + The UUID of the consistency group snapshot. + in: body + required: true + type: string +id_3: + description: | + The generated ID for the QoS specification. + in: body + required: true + type: string +id_4: + description: | + The snapshot UUID. + in: body + required: true + type: string +id_5: + description: | + The UUID of the volume. + in: body + required: true + type: string +id_6: + description: | + The UUID of the consistency group. + in: body + required: true + type: string +id_7: + description: | + The ID for the quota set. + in: body + required: true + type: integer +imageRef: + description: | + The UUID of the image from which you want to + create the volume. Required to create a bootable volume. + in: body + required: false + type: string +in_use: + description: | + The in use data size. Visible only if you set the + ``usage=true`` query parameter. + in: body + required: false + type: string +incremental: + description: | + The backup mode. A valid value is ``true`` for + incremental backup mode or ``false`` for full backup mode. Default + is ``false``. + in: body + required: false + type: boolean +injected_file_content_bytes: + description: | + The number of bytes of content that are allowed + for each injected file. + in: body + required: true + type: integer +injected_file_path_bytes: + description: | + The number of bytes that are allowed for each + injected file path. + in: body + required: true + type: integer +injected_files: + description: | + The number of injected files that are allowed for + each tenant. + in: body + required: true + type: integer +instance_uuid: + description: | + The UUID of the attaching instance. + in: body + required: false + type: string +instances: + description: | + The number of instances that are allowed for each + tenant. + in: body + required: true + type: integer +is_incremental: + description: | + Indicates whether the backup mode is incremental. + If this value is ``true``, the backup mode is incremental. If this + value is ``false``, the backup mode is full. + in: body + required: false + type: boolean +is_public: + description: + Volume type which is accessible to the public. + in: body + required: false + type: boolean +key: + description: | + The metadata key name for the metadata that you + want to remove. + in: body + required: true + type: string +key_pairs: + description: | + The number of key pairs that are allowed for each + user. + in: body + required: true + type: integer +keys: + description: | + List of Keys. + in: body + required: true + type: array +limits: + description: | + A list of ``limit`` objects. + in: body + required: true + type: object +links: + description: | + Links for the volume transfer. + in: body + required: true + type: array +links_1: + description: | + Links for the backup. + in: body + required: true + type: array +links_2: + description: | + The QoS specification links. + in: body + required: true + type: array +links_3: + description: | + The volume links. + in: body + required: true + type: array +links_4: + description: | + List of links related to the extension. + in: body + required: true + type: array +location: + description: | + Full URL to a service or server. + format: uri + in: body + required: true + type: string +maxTotalBackupGigabytes: + description: | + The maximum total amount of backups, in gibibytes + (GiB). + in: body + required: true + type: integer +maxTotalBackups: + description: | + The maximum number of backups. + in: body + required: true + type: integer +maxTotalSnapshots: + description: | + The maximum number of snapshots. + in: body + required: true + type: integer +maxTotalVolumeGigabytes: + description: | + The maximum total amount of volumes, in gibibytes + (GiB). + in: body + required: true + type: integer +maxTotalVolumes: + description: | + The maximum number of volumes. + in: body + required: true + type: integer +metadata: + description: | + One or more metadata key and value pairs for the + snapshot, if any. + in: body + required: true + type: object +metadata_1: + description: | + A ``metadata`` object. Contains one or more + metadata key and value pairs that are associated with the volume. + in: body + required: true + type: object +metadata_2: + description: | + One or more metadata key and value pairs that are + associated with the volume. + in: body + required: false + type: object +metadata_3: + description: | + One or more metadata key and value pairs that are + associated with the volume. + in: body + required: true + type: object +metadata_4: + description: | + One or more metadata key and value pairs to + associate with the volume. + in: body + required: false + type: string +metadata_5: + description: | + The image metadata to add to the volume as a set + of metadata key and value pairs. + in: body + required: true + type: object +metadata_6: + description: | + One or more metadata key and value pairs to + associate with the volume. + in: body + required: false + type: object +metadata_7: + description: | + One or more metadata key and value pairs for the + snapshot. + in: body + required: false + type: object +metadata_items: + description: | + The number of metadata items that are allowed for + each instance. + in: body + required: true + type: integer +migration_status: + description: | + The volume migration status. + in: body + required: true + type: string +migration_status_1: + description: | + The volume migration status. + in: body + required: false + type: string +mountpoint: + description: | + The attaching mount point. + in: body + required: false + type: string +multiattach: + description: | + To enable this volume to attach to more than one + server, set this value to ``true``. Default is ``false``. + in: body + required: false + type: boolean +multiattach_1: + description: | + If true, this volume can attach to more than one + instance. + in: body + required: true + type: boolean +name: + description: | + The name of the Volume Transfer. + in: body + required: true + type: string +name_1: + description: | + The backup name. + in: body + required: true + type: string +name_10: + description: | + The name of the extension. For example, "Fox In + Socks." + in: body + required: true + type: string +name_11: + description: | + The name of the back-end volume. + in: body + required: true + type: string +name_12: + description: | + The name of the snapshot. + in: body + required: true + type: string +name_13: + description: | + The volume name. + in: body + required: true + type: string +name_14: + description: | + The name of the volume to which you want to + restore a backup. + in: body + required: false + type: string +name_15: + description: | + The consistency group name. + in: body + required: false + type: string +name_2: + description: | + The consistency group snapshot name. + in: body + required: true + type: string +name_3: + description: | + The name of the consistency group. + in: body + required: true + type: string +name_4: + description: | + The name of the QoS specification. + in: body + required: true + type: string +name_5: + description: | + The name of the snapshot. Default is ``None``. + in: body + required: false + type: string +name_6: + description: | + The volume transfer name. + in: body + required: false + type: string +name_7: + description: | + The name of the volume type. + in: body + required: true + type: string +name_8: + description: | + The volume name. + in: body + required: false + type: string +name_9: + description: | + The consistency group name. + in: body + required: true + type: string +namespace: + description: | + Link associated to the extension. + in: body + required: true + type: string +namespace_1: + description: | + The storage namespace, such as + ``OS::Storage::Capabilities::foo``. + in: body + required: true + type: string +new_size: + description: | + The new size of the volume, in gibibytes (GiB). + in: body + required: true + type: integer +object_count: + description: | + The number of objects in the backup. + in: body + required: true + type: integer +os-attach: + description: | + The ``os-attach`` action. + in: body + required: true + type: object +os-extend: + description: | + The ``os-extend`` action. + in: body + required: true + type: object +os-extended-snapshot-attributes:progress: + description: | + A percentage value for the build progress. + in: body + required: true + type: integer +os-extended-snapshot-attributes:project_id: + description: | + The UUID of the owning project. + in: body + required: true + type: string +os-force_delete: + description: | + The ``os-force_delete`` action. + in: body + required: true + type: string +os-force_detach: + description: | + The ``os-force_detach`` action. + in: body + required: true + type: object +os-reset_status: + description: | + The ``os-reset_status`` action. + in: body + required: true + type: object +OS-SCH-HNT:scheduler_hints: + description: | + The dictionary of data to send to the scheduler. + in: body + required: false + type: object +os-set_image_metadata: + description: | + The ``os-set_image_metadata`` action. + in: body + required: true + type: object +os-unmanage: + description: | + The ``os-unmanage`` action. This action removes + the specified volume from Cinder management. + in: body + required: true + type: object +os-unset_image_metadata: + description: | + The ``os-unset_image_metadata`` action. This + action removes the key-value pairs from the image metadata. + in: body + required: true + type: object +os-vol-host-attr:host: + description: | + Current back-end of the volume. + in: body + required: true + type: string +os-vol-mig-status-attr:migstat: + description: | + The status of this volume migration (None means + that a migration is not currently in progress). + in: body + required: true + type: string +os-vol-mig-status-attr:name_id: + description: | + The volume ID that this volume name on the back- + end is based on. + in: body + required: true + type: string +os-vol-tenant-attr:tenant_id: + description: | + The tenant ID which the volume belongs to. + in: body + required: true + type: string +os-volume-replication:driver_data: + description: | + The name of the volume replication driver. + in: body + required: false + type: string +os-volume-replication:extended_status: + description: | + The volume replication status managed by the + driver of backend storage. + in: body + required: false + type: string +os-volume-replication:extended_status_1: + description: | + The status of the volume replication. + in: body + required: false + type: string +pool_name: + description: | + The name of the storage pool. + in: body + required: true + type: string +project: + description: | + The ID of the project. Volume Type access to be + added to this project ID. + in: body + required: true + type: string +project_id: + description: | + The UUID of the project. + in: body + required: true + type: string +project_id_1: + description: | + The Project ID having access to this volume type. + in: body + required: true + type: string +properties: + description: | + The backend volume capabilities list, which is + consisted of cinder standard capabilities and vendor unique + properties. + in: body + required: true + type: object +qos_specs: + description: | + A ``qos_specs`` object. + in: body + required: true + type: object +QoS_support: + description: | + The quality of service (QoS) support. + in: body + required: true + type: boolean +quota_set: + description: | + A ``quota_set`` object. + in: body + required: true + type: object +ram: + description: | + The amount of instance RAM in megabytes that are + allowed for each tenant. + in: body + required: true + type: integer +rate: + description: | + Rate-limit volume copy bandwidth, used to + mitigate slow down of data access from the instances. + in: body + required: true + type: array +ref: + description: | + A reference to the existing volume. The internal + structure of this reference depends on the volume driver + implementation. For details about the required elements in the + structure, see the documentation for the volume driver. + in: body + required: true + type: string +ref_1: + description: | + A reference to the existing volume. The internal + structure of this reference is dependent on the implementation of + the volume driver, see the specific driver's documentation for + details of the required elements in the structure. + in: body + required: true + type: object +remove_volumes: + description: | + One or more volume UUIDs, separated by commas, to + remove from the volume consistency group. + in: body + required: false + type: string +replication_status: + description: | + The volume replication status. + in: body + required: true + type: string +reserved: + description: | + Reserved volume size. Visible only if you set the + ``usage=true`` query parameter. + in: body + required: false + type: integer +reserved_percentage: + description: | + The percentage of the total capacity that is + reserved for the internal use by the back end. + in: body + required: true + type: integer +restore: + description: | + A ``restore`` object. + in: body + required: true + type: object +security_group_rules: + description: | + The number of rules that are allowed for each + security group. + in: body + required: false + type: integer +security_groups: + description: | + The number of security groups that are allowed + for each tenant. + in: body + required: true + type: integer +size: + description: | + The size of the volume, in gibibytes (GiB). + in: body + required: true + type: integer +size_1: + description: | + The size of the backup, in GB. + in: body + required: true + type: integer +snapshot: + description: | + A partial representation of a snapshot used in + the creation process. + in: body + required: true + type: string +snapshot_1: + description: | + A ``snapshot`` object. + in: body + required: true + type: object +snapshot_id: + description: | + To create a volume from an existing snapshot, + specify the UUID of the volume snapshot. The volume is created in + same availability zone and with same size as the snapshot. + in: body + required: false + type: string +snapshot_id_2: + description: | + The UUID of the source volume snapshot. + in: body + required: true + type: string +snapshot_id_3: + description: | + The UUID of the source volume snapshot. The API + creates a new volume snapshot with the same size as the source + volume snapshot. + in: body + required: true + type: string +source_cgid: + description: | + The UUID of the source consistency group. + in: body + required: false + type: string +source_replica: + description: | + The UUID of the primary volume to clone. + in: body + required: false + type: string +source_volid: + description: | + The UUID of the source volume. The API creates a + new volume with the same size as the source volume. + in: body + required: false + type: string +source_volid_1: + description: | + The UUID of the source volume. + in: body + required: true + type: string +specs: + description: | + A ``specs`` object. + in: body + required: true + type: object +specs_1: + description: | + Specification key and value pairs. + in: body + required: true + type: object +specs_2: + description: | + Specification key and value pairs. + in: body + required: true + type: string +status: + description: | + The ``status`` of the consistency group snapshot. + in: body + required: false + type: string +status_1: + description: | + The status of the consistency group. + in: body + required: true + type: string +status_2: + description: | + The status for the snapshot. + in: body + required: true + type: string +status_3: + description: | + The volume status. + in: body + required: true + type: string +status_4: + description: | + The backup status. Refer to Backup statuses table + for the possible status value. + in: body + required: true + type: string +status_5: + description: | + The consistency group status. A valid value is + ``creating``, ``available``, ``error``, ``deleting``, + ``updating``, or ``invalid``. + in: body + required: true + type: string +status_6: + description: | + The volume status. + in: body + required: false + type: string +storage_protocol: + description: | + The storage back end for the back-end volume. For + example, ``iSCSI`` or ``FC``. + in: body + required: true + type: string +storage_protocol_1: + description: | + The storage protocol, such as Fibre Channel, + iSCSI, NFS, and so on. + in: body + required: true + type: string +total_capacity: + description: | + The total capacity for the back-end volume, in + GBs. A valid value is a string, such as ``unknown``, or an + integer. + in: body + required: true + type: string +totalBackupGigabytesUsed: + description: | + The total number of backups gibibytes (GiB) used. + in: body + required: true + type: integer +totalBackupsUsed: + description: | + The total number of backups used. + in: body + required: true + type: integer +totalGigabytesUsed: + description: | + The total number of gibibytes (GiB) used. + in: body + required: true + type: integer +totalSnapshotsUsed: + description: | + The total number of snapshots used. + in: body + required: true + type: integer +totalVolumesUsed: + description: | + The total number of volumes used. + in: body + required: true + type: integer +updated: + description: | + The date and time stamp when the extension was + last updated. + in: body + required: true + type: string +updated_1: + description: | + The date and time stamp when the API request was + issued. + in: body + required: true + type: string +updated_at: + description: | + The date and time when the resource was updated. + + The date and time stamp format is `ISO 8601 + `_: + + :: + + CCYY-MM-DDThh:mm:ss±hh:mm + + For example, ``2015-08-27T09:49:58-05:00``. + + The ``±hh:mm`` value, if included, is the time zone as an offset + from UTC. In the previous example, the offset value is ``-05:00``. + + If the ``updated_at`` date and time stamp is not set, its value is + ``null``. + in: body + required: true + type: string +user_id: + description: | + The UUID of the user. + in: body + required: true + type: string +vendor_name: + description: | + The name of the vendor. + in: body + required: true + type: string +visibility: + description: | + The volume type access. + in: body + required: true + type: string +volume: + description: | + A ``volume`` object. + in: body + required: true + type: object +volume_1: + description: | + A ``volume`` object. + in: body + required: true + type: string +volume_backend_name: + description: | + The name of the back-end volume. + in: body + required: true + type: string +volume_id: + description: | + The UUID of the volume. + in: body + required: true + type: string +volume_id_2: + description: | + The UUID of the volume that you want to back up. + in: body + required: true + type: string +volume_id_3: + description: | + To create a snapshot from an existing volume, + specify the UUID of the existing volume. + in: body + required: true + type: string +volume_id_4: + description: | + The UUID of the volume from which the backup was + created. + in: body + required: true + type: string +volume_id_5: + description: | + If the snapshot was created from a volume, the + volume ID. + in: body + required: true + type: string +volume_id_6: + description: | + The UUID of the volume to which you want to + restore a backup. + in: body + required: false + type: string +volume_type_1: + description: | + A ``volume_type`` object. + in: body + required: true + type: object +volume_type_2: + description: | + The volume type. To create an environment with + multiple-storage back ends, you must specify a volume type. Block + Storage volume back ends are spawned as children to ``cinder- + volume``, and they are keyed from a unique queue. They are named + ``cinder- volume.HOST.BACKEND``. For example, ``cinder- + volume.ubuntu.lvmdriver``. When a volume is created, the scheduler + chooses an appropriate back end to handle the request based on the + volume type. Default is ``None``. For information about how to + use volume types to create multiple- storage back ends, see + `Configure multiple-storage back ends + `_. + in: body + required: false + type: string +volume_type_3: + description: | + The volume type. In an environment with multiple- + storage back ends, the scheduler determines where to send the + volume based on the volume type. For information about how to use + volume types to create multiple- storage back ends, see `Configure + multiple-storage back ends `_. + in: body + required: true + type: string +volume_type_4: + description: | + The associated volume type. + in: body + required: false + type: string +volume_type_5: + description: | + A list of ``volume_type`` objects. + in: body + required: true + type: array +volume_types: + description: | + The list of volume types. In an environment with + multiple-storage back ends, the scheduler determines where to send + the volume based on the volume type. For information about how to + use volume types to create multiple- storage back ends, see + `Configure multiple-storage back ends + `_. + in: body + required: true + type: array +volume_types_2: + description: | + The list of volume types separated by commas. In an environment with + multiple-storage back ends, the scheduler determines where to send + the volume based on the volume type. For information about how to + use volume types to create multiple-storage back ends, see + `Configure multiple-storage back ends + `_. + in: body + required: true + type: string +volumes: + description: | + A list of ``volume`` objects. + in: body + required: true + type: array diff --git a/api-ref/source/v3/qos-specs-v3-qos-specs.inc b/api-ref/source/v3/qos-specs-v3-qos-specs.inc new file mode 100644 index 00000000000..4989f5f8795 --- /dev/null +++ b/api-ref/source/v3/qos-specs-v3-qos-specs.inc @@ -0,0 +1,315 @@ +.. -*- rst -*- + +=================================================== +Quality of service (QoS) specifications (qos-specs) +=================================================== + +Administrators only, depending on policy settings. + +Creates, lists, shows details for, associates, disassociates, sets +keys, unsets keys, and deletes quality of service (QoS) +specifications. + + +Disassociate a QoS specification from all associations +====================================================== + +.. rest_method:: GET /v3/{tenant_id}/qos-specs/{qos_id}/disassociate_all + +Disassociates a QoS specification from all associations. + +Error response codes:202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - qos_id: qos_id + + +Unset keys in a QoS specification +================================= + +.. rest_method:: PUT /v3/{tenant_id}/qos-specs/{qos_id}/delete_keys + +Unsets keys in a QoS specification. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - keys: keys + - tenant_id: tenant_id + - qos_id: qos_id + +Request Example +--------------- + +.. literalinclude:: ./samples/qos-unset-request.json + :language: javascript + + + +Response Example +---------------- + +.. literalinclude:: ./samples/qos-unset-response.json + :language: javascript + + +Get all associations for a QoS specification +============================================ + +.. rest_method:: GET /v3/{tenant_id}/qos-specs/{qos_id}/associations + +Lists all associations for a QoS specification. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - qos_id: qos_id + + +Response Example +---------------- + +.. literalinclude:: ./samples/qos-show-response.json + :language: javascript + + +Associate QoS specification with a volume type +============================================== + +.. rest_method:: GET /v3/{tenant_id}/qos-specs/{qos_id}/associate + +Associates a QoS specification with a volume type. + +Error response codes:202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - qos_id: qos_id + + +Disassociate QoS specification from a volume type +================================================= + +.. rest_method:: GET /v3/{tenant_id}/qos-specs/{qos_id}/disassociate + +Disassociates a QoS specification from a volume type. + +Error response codes:202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - qos_id: qos_id + + +Show a QoS specification details +================================ + +.. rest_method:: GET /v3/{tenant_id}/qos-specs/{qos_id} + +Shows details for a QoS specification. + + +Normal response codes: 200 +Error response codes:413,405,404,403,401,400,503, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - qos_id: qos_id + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - name: name + - links: links + - id: id + - qos_specs: qos_specs + - consumer: consumer + - specs: specs + + +Response Example +---------------- + +.. literalinclude:: ./samples/qos-show-response.json + :language: javascript + + +Set keys in a QoS specification +=============================== + +.. rest_method:: PUT /v3/{tenant_id}/qos-specs/{qos_id} + +Sets keys in a QoS specification. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - qos_specs: qos_specs + - specs: specs + - tenant_id: tenant_id + - qos_id: qos_id + +Request Example +--------------- + +.. literalinclude:: ./samples/qos-update-request.json + :language: javascript + + +Response Example +---------------- + +.. literalinclude:: ./samples/qos-update-response.json + :language: javascript + + +Delete a QoS specification +========================== + +.. rest_method:: DELETE /v3/{tenant_id}/qos-specs/{qos_id} + +Deletes a QoS specification. + +Error response codes:202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - qos_id: qos_id + - force: force + + +Create a QoS specification +========================== + +.. rest_method:: POST /v3/{tenant_id}/qos-specs + +Creates a QoS specification. + +Specify one or more key and value pairs in the request body. + +Error response codes:202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - qos_specs: qos_specs + - consumer: consumer + - name: name + - tenant_id: tenant_id + +Request Example +--------------- + +.. literalinclude:: ./samples/qos-create-request.json + :language: javascript + + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - name: name + - links: links + - id: id + - qos_specs: qos_specs + - consumer: consumer + - specs: specs + + +List QoS Specifications +======================= + +.. rest_method:: GET /v3/{tenant_id}/qos-specs + +Lists quality of service (QoS) specifications. + + +Normal response codes: 200 +Error response codes:300, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - sort_key: sort_key + - sort_dir: sort_dir + - limit: limit + - marker: marker + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - specs: specs + - qos_specs: qos_specs + - consumer: consumer + - id: id + - name: name + + +Response Example +---------------- + +.. literalinclude:: ./samples/qos-list-response.json + :language: javascript diff --git a/api-ref/source/v3/quota-sets.inc b/api-ref/source/v3/quota-sets.inc new file mode 100644 index 00000000000..0b95918db7f --- /dev/null +++ b/api-ref/source/v3/quota-sets.inc @@ -0,0 +1,407 @@ +.. -*- rst -*- + +==================================== +Quota sets extension (os-quota-sets) +==================================== + +Administrators only, depending on policy settings. + +Shows, updates, and deletes quotas for a tenant. + + +Show quotas for a user +====================== + +.. rest_method:: GET /v3/{admin_tenant_id}/os-quota-sets/{tenant_id}/{user_id} + +Enables an admin user to show quotas for a tenant and user. + + +Normal response codes: 200 +Error response codes: + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - user_id: user_id + - admin_tenant_id: admin_tenant_id + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - injected_file_content_bytes: injected_file_content_bytes + - metadata_items: metadata_items + - reserved: reserved + - in_use: in_use + - ram: ram + - floating_ips: floating_ips + - key_pairs: key_pairs + - injected_file_path_bytes: injected_file_path_bytes + - instances: instances + - security_group_rules: security_group_rules + - injected_files: injected_files + - quota_set: quota_set + - cores: cores + - fixed_ips: fixed_ips + - id: id + - security_groups: security_groups + +Response Example +---------------- + +.. literalinclude:: ./samples/quotas-update-response.json + :language: javascript + + +Update quotas for a user +======================== + +.. rest_method:: PUT /v3/{admin_tenant_id}/os-quota-sets/{tenant_id}/{user_id} + +Updates quotas for a tenant and user. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - injected_file_content_bytes: injected_file_content_bytes + - metadata_items: metadata_items + - reserved: reserved + - in_use: in_use + - ram: ram + - floating_ips: floating_ips + - key_pairs: key_pairs + - injected_file_path_bytes: injected_file_path_bytes + - instances: instances + - security_group_rules: security_group_rules + - injected_files: injected_files + - quota_set: quota_set + - cores: cores + - fixed_ips: fixed_ips + - id: id + - security_groups: security_groups + - tenant_id: tenant_id + - user_id: user_id + - admin_tenant_id: admin_tenant_id + +Request Example +--------------- + +.. literalinclude:: ./samples/quotas-update-request.json + :language: javascript + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - injected_file_content_bytes: injected_file_content_bytes + - metadata_items: metadata_items + - reserved: reserved + - in_use: in_use + - ram: ram + - floating_ips: floating_ips + - key_pairs: key_pairs + - injected_file_path_bytes: injected_file_path_bytes + - instances: instances + - security_group_rules: security_group_rules + - injected_files: injected_files + - quota_set: quota_set + - cores: cores + - fixed_ips: fixed_ips + - id: id + - security_groups: security_groups + +Response Example +---------------- + +.. literalinclude:: ./samples/quotas-update-response.json + :language: javascript + +Delete quotas for a user +======================== + +.. rest_method:: DELETE /v3/{admin_tenant_id}/os-quota-sets/{tenant_id}/{user_id} + +Deletes quotas for a user so that the quotas revert to default values. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - user_id: user_id + - admin_tenant_id: admin_tenant_id + +Response Example +---------------- + +.. literalinclude:: ./samples/quotas-delete-response.json + :language: javascript + + +Show quotas for a tenant +======================== + +.. rest_method:: GET /v3/{admin_tenant_id}/os-quota-sets/{tenant_id} + +Shows quotas for a tenant. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - admin_tenant_id: admin_tenant_id + - usage: usage + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - injected_file_content_bytes: injected_file_content_bytes + - metadata_items: metadata_items + - reserved: reserved + - in_use: in_use + - ram: ram + - floating_ips: floating_ips + - key_pairs: key_pairs + - injected_file_path_bytes: injected_file_path_bytes + - instances: instances + - security_group_rules: security_group_rules + - injected_files: injected_files + - quota_set: quota_set + - cores: cores + - fixed_ips: fixed_ips + - id: id + - security_groups: security_groups + + +Response Example +---------------- + +.. literalinclude:: ./samples/quotas-show-response.json + :language: javascript + +Update quotas for a tenant +========================== + +.. rest_method:: PUT /v3/{admin_tenant_id}/os-quota-sets/{tenant_id} + +Updates quotas for a tenant. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - injected_file_content_bytes: injected_file_content_bytes + - metadata_items: metadata_items + - reserved: reserved + - in_use: in_use + - ram: ram + - floating_ips: floating_ips + - key_pairs: key_pairs + - injected_file_path_bytes: injected_file_path_bytes + - instances: instances + - security_group_rules: security_group_rules + - injected_files: injected_files + - quota_set: quota_set + - cores: cores + - fixed_ips: fixed_ips + - id: id + - security_groups: security_groups + - tenant_id: tenant_id + - admin_tenant_id: admin_tenant_id + +Request Example +--------------- + +.. literalinclude:: ./samples/quotas-update-request.json + :language: javascript + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - injected_file_content_bytes: injected_file_content_bytes + - metadata_items: metadata_items + - reserved: reserved + - in_use: in_use + - ram: ram + - floating_ips: floating_ips + - key_pairs: key_pairs + - injected_file_path_bytes: injected_file_path_bytes + - instances: instances + - security_group_rules: security_group_rules + - injected_files: injected_files + - quota_set: quota_set + - cores: cores + - fixed_ips: fixed_ips + - id: id + - security_groups: security_groups + +Response Example +---------------- + +.. literalinclude:: ./samples/quotas-update-response.json + :language: javascript + +Delete quotas for a tenant +========================== + +.. rest_method:: DELETE /v3/{admin_tenant_id}/os-quota-sets/{tenant_id} + +Deletes quotas for a tenant so the quotas revert to default values. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - admin_tenant_id: admin_tenant_id + +Response Example +---------------- + +.. literalinclude:: ./samples/quotas-delete-response.json + :language: javascript + +Show quota details for a user +============================= + +.. rest_method:: GET /v3/{admin_tenant_id}/os-quota-sets/{tenant_id}/detail/{user_id} + +Shows details for quotas for a tenant and user. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - user_id: user_id + - admin_tenant_id: admin_tenant_id + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - injected_file_content_bytes: injected_file_content_bytes + - metadata_items: metadata_items + - reserved: reserved + - in_use: in_use + - ram: ram + - floating_ips: floating_ips + - key_pairs: key_pairs + - injected_file_path_bytes: injected_file_path_bytes + - instances: instances + - security_group_rules: security_group_rules + - injected_files: injected_files + - quota_set: quota_set + - cores: cores + - fixed_ips: fixed_ips + - id: id + - security_groups: security_groups + +Response Example +---------------- + +.. literalinclude:: ./samples/quotas-update-response.json + :language: javascript + + +Get default quotas for a tenant +=============================== + +.. rest_method:: GET /v3/{tenant_id}/os-quota-sets/defaults + +Gets default quotas for a tenant. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - injected_file_content_bytes: injected_file_content_bytes + - metadata_items: metadata_items + - reserved: reserved + - in_use: in_use + - ram: ram + - floating_ips: floating_ips + - key_pairs: key_pairs + - injected_file_path_bytes: injected_file_path_bytes + - instances: instances + - security_group_rules: security_group_rules + - injected_files: injected_files + - quota_set: quota_set + - cores: cores + - fixed_ips: fixed_ips + - id: id + - security_groups: security_groups + + +Response Example +---------------- + +.. literalinclude:: ./samples/quotas-show-defaults-response.json + :language: javascript diff --git a/api-ref/source/v3/samples/backend-capabilities-response.json b/api-ref/source/v3/samples/backend-capabilities-response.json new file mode 100644 index 00000000000..a72a238156c --- /dev/null +++ b/api-ref/source/v3/samples/backend-capabilities-response.json @@ -0,0 +1,33 @@ +{ + "namespace": "OS::Storage::Capabilities::fake", + "vendor_name": "OpenStack", + "volume_backend_name": "lvm", + "pool_name": "pool", + "driver_version": "2.0.0", + "storage_protocol": "iSCSI", + "display_name": "Capabilities of Cinder LVM driver", + "description": "These are volume type options provided by Cinder LVM driver, blah, blah.", + "visibility": "public", + "properties": { + "compression": { + "title": "Compression", + "description": "Enables compression.", + "type": "boolean" + }, + "qos": { + "title": "QoS", + "description": "Enables QoS.", + "type": "boolean" + }, + "replication": { + "title": "Replication", + "description": "Enables replication.", + "type": "boolean" + }, + "thin_provisioning": { + "title": "Thin Provisioning", + "description": "Sets thin provisioning.", + "type": "boolean" + } + } +} diff --git a/api-ref/source/v3/samples/backup-create-request.json b/api-ref/source/v3/samples/backup-create-request.json new file mode 100644 index 00000000000..c7f8a74d5db --- /dev/null +++ b/api-ref/source/v3/samples/backup-create-request.json @@ -0,0 +1,9 @@ +{ + "backup": { + "container": null, + "description": null, + "name": "backup001", + "volume_id": "64f5d2fb-d836-4063-b7e2-544d5c1ff607", + "incremental": true + } +} diff --git a/api-ref/source/v3/samples/backup-create-response.json b/api-ref/source/v3/samples/backup-create-response.json new file mode 100644 index 00000000000..815327fcd79 --- /dev/null +++ b/api-ref/source/v3/samples/backup-create-response.json @@ -0,0 +1,16 @@ +{ + "backup": { + "id": "deac8b8c-35c9-4c71-acaa-889c2d5d5c8e", + "links": [ + { + "href": "http://localhost:8776/v3/c95fc3e4afe248a49a28828f286a7b38/backups/deac8b8c-35c9-4c71-acaa-889c2d5d5c8e", + "rel": "self" + }, + { + "href": "http://localhost:8776/c95fc3e4afe248a49a28828f286a7b38/backups/deac8b8c-35c9-4c71-acaa-889c2d5d5c8e", + "rel": "bookmark" + } + ], + "name": "backup001" + } +} diff --git a/api-ref/source/v3/samples/backup-force-delete-request.json b/api-ref/source/v3/samples/backup-force-delete-request.json new file mode 100644 index 00000000000..5c56464d919 --- /dev/null +++ b/api-ref/source/v3/samples/backup-force-delete-request.json @@ -0,0 +1,3 @@ +{ + "os-force_delete": {} +} diff --git a/api-ref/source/v3/samples/backup-record-export-response.json b/api-ref/source/v3/samples/backup-record-export-response.json new file mode 100644 index 00000000000..8783eeda0ea --- /dev/null +++ b/api-ref/source/v3/samples/backup-record-export-response.json @@ -0,0 +1,6 @@ +{ + "backup-record": { + "backup_service": "cinder.backup.drivers.swift", + "backup_url": "eyJzdGF0" + } +} diff --git a/api-ref/source/v3/samples/backup-record-import-request.json b/api-ref/source/v3/samples/backup-record-import-request.json new file mode 100644 index 00000000000..8783eeda0ea --- /dev/null +++ b/api-ref/source/v3/samples/backup-record-import-request.json @@ -0,0 +1,6 @@ +{ + "backup-record": { + "backup_service": "cinder.backup.drivers.swift", + "backup_url": "eyJzdGF0" + } +} diff --git a/api-ref/source/v3/samples/backup-record-import-response.json b/api-ref/source/v3/samples/backup-record-import-response.json new file mode 100644 index 00000000000..1d6f1798b63 --- /dev/null +++ b/api-ref/source/v3/samples/backup-record-import-response.json @@ -0,0 +1,16 @@ +{ + "backup": { + "id": "deac8b8c-35c9-4c71-acaa-889c2d5d5c8e", + "links": [ + { + "href": "http://localhost:8776/v3/c95fc3e4afe248a49a28828f286a7b38/backups/deac8b8c-35c9-4c71-acaa-889c2d5d5c8e", + "rel": "self" + }, + { + "href": "http://localhost:8776/c95fc3e4afe248a49a28828f286a7b38/backups/deac8b8c-35c9-4c71-acaa-889c2d5d5c8e", + "rel": "bookmark" + } + ], + "name": null + } +} diff --git a/api-ref/source/v3/samples/backup-restore-request.json b/api-ref/source/v3/samples/backup-restore-request.json new file mode 100644 index 00000000000..2ccb7e516be --- /dev/null +++ b/api-ref/source/v3/samples/backup-restore-request.json @@ -0,0 +1,6 @@ +{ + "restore": { + "name": "vol-01", + "volume_id": "64f5d2fb-d836-4063-b7e2-544d5c1ff607" + } +} diff --git a/api-ref/source/v3/samples/backup-restore-response.json b/api-ref/source/v3/samples/backup-restore-response.json new file mode 100644 index 00000000000..a344ea56cdc --- /dev/null +++ b/api-ref/source/v3/samples/backup-restore-response.json @@ -0,0 +1,6 @@ +{ + "restore": { + "backup_id": "2ef47aee-8844-490c-804d-2a8efe561c65", + "volume_id": "795114e8-7489-40be-a978-83797f2c1dd3" + } +} diff --git a/api-ref/source/v3/samples/backup-show-response.json b/api-ref/source/v3/samples/backup-show-response.json new file mode 100644 index 00000000000..c4fe0ffc4e5 --- /dev/null +++ b/api-ref/source/v3/samples/backup-show-response.json @@ -0,0 +1,27 @@ +{ + "backup": { + "availability_zone": "az1", + "container": "volumebackups", + "created_at": "2013-04-02T10:35:27.000000", + "description": null, + "fail_reason": null, + "id": "2ef47aee-8844-490c-804d-2a8efe561c65", + "links": [ + { + "href": "http://localhost:8776/v1/c95fc3e4afe248a49a28828f286a7b38/backups/2ef47aee-8844-490c-804d-2a8efe561c65", + "rel": "self" + }, + { + "href": "http://localhost:8776/c95fc3e4afe248a49a28828f286a7b38/backups/2ef47aee-8844-490c-804d-2a8efe561c65", + "rel": "bookmark" + } + ], + "name": "backup001", + "object_count": 22, + "size": 1, + "status": "available", + "volume_id": "e5185058-943a-4cb4-96d9-72c184c337d6", + "is_incremental": true, + "has_dependent_backups": false + } +} diff --git a/api-ref/source/v3/samples/backups-list-detailed-response.json b/api-ref/source/v3/samples/backups-list-detailed-response.json new file mode 100644 index 00000000000..d729ada6848 --- /dev/null +++ b/api-ref/source/v3/samples/backups-list-detailed-response.json @@ -0,0 +1,54 @@ +{ + "backups": [ + { + "availability_zone": "az1", + "container": "volumebackups", + "created_at": "2013-04-02T10:35:27.000000", + "description": null, + "fail_reason": null, + "id": "2ef47aee-8844-490c-804d-2a8efe561c65", + "links": [ + { + "href": "http://localhost:8776/v1/c95fc3e4afe248a49a28828f286a7b38/backups/2ef47aee-8844-490c-804d-2a8efe561c65", + "rel": "self" + }, + { + "href": "http://localhost:8776/c95fc3e4afe248a49a28828f286a7b38/backups/2ef47aee-8844-490c-804d-2a8efe561c65", + "rel": "bookmark" + } + ], + "name": "backup001", + "object_count": 22, + "size": 1, + "status": "available", + "volume_id": "e5185058-943a-4cb4-96d9-72c184c337d6", + "is_incremental": true, + "has_dependent_backups": false + }, + { + "availability_zone": "az1", + "container": "volumebackups", + "created_at": "2013-04-02T10:21:48.000000", + "description": null, + "fail_reason": null, + "id": "4dbf0ec2-0b57-4669-9823-9f7c76f2b4f8", + "links": [ + { + "href": "http://localhost:8776/v1/c95fc3e4afe248a49a28828f286a7b38/backups/4dbf0ec2-0b57-4669-9823-9f7c76f2b4f8", + "rel": "self" + }, + { + "href": "http://localhost:8776/c95fc3e4afe248a49a28828f286a7b38/backups/4dbf0ec2-0b57-4669-9823-9f7c76f2b4f8", + "rel": "bookmark" + } + ], + "name": "backup002", + "object_count": 22, + "size": 1, + "status": "available", + "volume_id": "e5185058-943a-4cb4-96d9-72c184c337d6", + "is_incremental": true, + "has_dependent_backups": false + } + ] +} diff --git a/api-ref/source/v3/samples/backups-list-response.json b/api-ref/source/v3/samples/backups-list-response.json new file mode 100644 index 00000000000..8dd7d785abd --- /dev/null +++ b/api-ref/source/v3/samples/backups-list-response.json @@ -0,0 +1,32 @@ +{ + "backups": [ + { + "id": "2ef47aee-8844-490c-804d-2a8efe561c65", + "links": [ + { + "href": "http://localhost:8776/v1/c95fc3e4afe248a49a28828f286a7b38/backups/2ef47aee-8844-490c-804d-2a8efe561c65", + "rel": "self" + }, + { + "href": "http://localhost:8776/c95fc3e4afe248a49a28828f286a7b38/backups/2ef47aee-8844-490c-804d-2a8efe561c65", + "rel": "bookmark" + } + ], + "name": "backup001" + }, + { + "id": "4dbf0ec2-0b57-4669-9823-9f7c76f2b4f8", + "links": [ + { + "href": "http://localhost:8776/v1/c95fc3e4afe248a49a28828f286a7b38/backups/4dbf0ec2-0b57-4669-9823-9f7c76f2b4f8", + "rel": "self" + }, + { + "href": "http://localhost:8776/c95fc3e4afe248a49a28828f286a7b38/backups/4dbf0ec2-0b57-4669-9823-9f7c76f2b4f8", + "rel": "bookmark" + } + ], + "name": "backup002" + } + ] +} diff --git a/api-ref/source/v3/samples/cgsnapshots-create-request.json b/api-ref/source/v3/samples/cgsnapshots-create-request.json new file mode 100644 index 00000000000..36d6f45374e --- /dev/null +++ b/api-ref/source/v3/samples/cgsnapshots-create-request.json @@ -0,0 +1,10 @@ +{ + "cgsnapshot": { + "consistencygroup_id": "6f519a48-3183-46cf-a32f-41815f814546", + "name": "firstcg", + "description": "first consistency group", + "user_id": "6f519a48-3183-46cf-a32f-41815f814444", + "project_id": "6f519a48-3183-46cf-a32f-41815f815555", + "status": "creating" + } +} diff --git a/api-ref/source/v3/samples/cgsnapshots-create-response.json b/api-ref/source/v3/samples/cgsnapshots-create-response.json new file mode 100644 index 00000000000..6d24a97f134 --- /dev/null +++ b/api-ref/source/v3/samples/cgsnapshots-create-response.json @@ -0,0 +1,6 @@ +{ + "cgsnapshot": { + "id": "6f519a48-3183-46cf-a32f-41815f816666", + "name": "firstcg" + } +} diff --git a/api-ref/source/v3/samples/cgsnapshots-list-detailed-response.json b/api-ref/source/v3/samples/cgsnapshots-list-detailed-response.json new file mode 100644 index 00000000000..93ad12870a9 --- /dev/null +++ b/api-ref/source/v3/samples/cgsnapshots-list-detailed-response.json @@ -0,0 +1,20 @@ +{ + "cgsnapshots": [ + { + "id": "6f519a48-3183-46cf-a32f-41815f813986", + "consistencygroup_id": "6f519a48-3183-46cf-a32f-41815f814444", + "status": "available", + "created_at": "2015-09-16T09:28:52.000000", + "name": "my-cg1", + "description": "my first consistency group" + }, + { + "id": "aed36625-a6d7-4681-ba59-c7ba3d18c148", + "consistencygroup_id": "aed36625-a6d7-4681-ba59-c7ba3d18dddd", + "status": "error", + "created_at": "2015-09-16T09:31:15.000000", + "name": "my-cg2", + "description": "Edited description" + } + ] +} diff --git a/api-ref/source/v3/samples/cgsnapshots-list-response.json b/api-ref/source/v3/samples/cgsnapshots-list-response.json new file mode 100644 index 00000000000..726aa803abb --- /dev/null +++ b/api-ref/source/v3/samples/cgsnapshots-list-response.json @@ -0,0 +1,12 @@ +{ + "cgsnapshots": [ + { + "id": "6f519a48-3183-46cf-a32f-41815f813986", + "name": "my-cg1" + }, + { + "id": "aed36625-a6d7-4681-ba59-c7ba3d18c148", + "name": "my-cg2" + } + ] +} diff --git a/api-ref/source/v3/samples/cgsnapshots-show-response.json b/api-ref/source/v3/samples/cgsnapshots-show-response.json new file mode 100644 index 00000000000..632a5afbad5 --- /dev/null +++ b/api-ref/source/v3/samples/cgsnapshots-show-response.json @@ -0,0 +1,10 @@ +{ + "cgsnapshot": { + "id": "6f519a48-3183-46cf-a32f-41815f813986", + "consistencygroup_id": "6f519a48-3183-46cf-a32f-41815f814444", + "status": "available", + "created_at": "2015-09-16T09:28:52.000000", + "name": "my-cg1", + "description": "my first consistency group" + } +} diff --git a/api-ref/source/v3/samples/consistency-group-create-from-src-request.json b/api-ref/source/v3/samples/consistency-group-create-from-src-request.json new file mode 100644 index 00000000000..ad25c5d0221 --- /dev/null +++ b/api-ref/source/v3/samples/consistency-group-create-from-src-request.json @@ -0,0 +1,11 @@ +{ + "consistencygroup-from-src": { + "name": "firstcg", + "description": "first consistency group", + "cgsnapshot_id": "6f519a48-3183-46cf-a32f-41815f813986", + "source_cgid": "6f519a48-3183-46cf-a32f-41815f814546", + "user_id": "6f519a48-3183-46cf-a32f-41815f815555", + "project_id": "6f519a48-3183-46cf-a32f-41815f814444", + "status": "creating" + } +} diff --git a/api-ref/source/v3/samples/consistency-group-create-request.json b/api-ref/source/v3/samples/consistency-group-create-request.json new file mode 100644 index 00000000000..8c9fbc2b050 --- /dev/null +++ b/api-ref/source/v3/samples/consistency-group-create-request.json @@ -0,0 +1,8 @@ +{ + "consistencygroup": { + "name": "firstcg", + "description": "first consistency group", + "volume_types": "type1,type2", + "availability_zone": "az0" + } +} diff --git a/api-ref/source/v3/samples/consistency-group-create-response.json b/api-ref/source/v3/samples/consistency-group-create-response.json new file mode 100644 index 00000000000..15a5ec02a60 --- /dev/null +++ b/api-ref/source/v3/samples/consistency-group-create-response.json @@ -0,0 +1,11 @@ +{ + "consistencygroup": { + "status": "error", + "description": "first consistency group", + "availability_zone": "az0", + "created_at": "2016-08-19T19:32:19.000000", + "volume_types": ["type1", "type2"], + "id": "63d1a274-de38-4384-a97e-475306777027", + "name": "firstcg" + } +} diff --git a/api-ref/source/v3/samples/consistency-group-delete-request.json b/api-ref/source/v3/samples/consistency-group-delete-request.json new file mode 100644 index 00000000000..8ad8745e7bc --- /dev/null +++ b/api-ref/source/v3/samples/consistency-group-delete-request.json @@ -0,0 +1,5 @@ +{ + "consistencygroup": { + "force": false + } +} diff --git a/api-ref/source/v3/samples/consistency-group-show-response.json b/api-ref/source/v3/samples/consistency-group-show-response.json new file mode 100644 index 00000000000..3cbb87d741b --- /dev/null +++ b/api-ref/source/v3/samples/consistency-group-show-response.json @@ -0,0 +1,13 @@ +{ + "consistencygroup": { + "id": "6f519a48-3183-46cf-a32f-41815f813986", + "status": "available", + "availability_zone": "az1", + "created_at": "2015-09-16T09:28:52.000000", + "name": "my-cg1", + "description": "my first consistency group", + "volume_types": [ + "123456" + ] + } +} diff --git a/api-ref/source/v3/samples/consistency-group-show-response.xml b/api-ref/source/v3/samples/consistency-group-show-response.xml new file mode 100644 index 00000000000..a9d2b4dd9ea --- /dev/null +++ b/api-ref/source/v3/samples/consistency-group-show-response.xml @@ -0,0 +1,14 @@ + + + + + "123456" + + + diff --git a/api-ref/source/v3/samples/consistency-group-update-request.json b/api-ref/source/v3/samples/consistency-group-update-request.json new file mode 100644 index 00000000000..94546551611 --- /dev/null +++ b/api-ref/source/v3/samples/consistency-group-update-request.json @@ -0,0 +1,8 @@ +{ + "consistencygroup": { + "name": "my_cg", + "description": "My consistency group", + "add_volumes": "volume-uuid-1,volume-uuid-2", + "remove_volumes": "volume-uuid-8,volume-uuid-9" + } +} diff --git a/api-ref/source/v3/samples/consistency-groups-list-detailed-response.json b/api-ref/source/v3/samples/consistency-groups-list-detailed-response.json new file mode 100644 index 00000000000..618c65882bc --- /dev/null +++ b/api-ref/source/v3/samples/consistency-groups-list-detailed-response.json @@ -0,0 +1,26 @@ +{ + "consistencygroups": [ + { + "id": "6f519a48-3183-46cf-a32f-41815f813986", + "status": "available", + "availability_zone": "az1", + "created_at": "2015-09-16T09:28:52.000000", + "name": "my-cg1", + "description": "my first consistency group", + "volume_types": [ + "123456" + ] + }, + { + "id": "aed36625-a6d7-4681-ba59-c7ba3d18c148", + "status": "error", + "availability_zone": "az2", + "created_at": "2015-09-16T09:31:15.000000", + "name": "my-cg2", + "description": "Edited description", + "volume_types": [ + "234567" + ] + } + ] +} diff --git a/api-ref/source/v3/samples/consistency-groups-list-detailed-response.xml b/api-ref/source/v3/samples/consistency-groups-list-detailed-response.xml new file mode 100644 index 00000000000..bed4f625663 --- /dev/null +++ b/api-ref/source/v3/samples/consistency-groups-list-detailed-response.xml @@ -0,0 +1,25 @@ + + + + + "123456" + + + + + "234567" + + + diff --git a/api-ref/source/v3/samples/consistency-groups-list-response.json b/api-ref/source/v3/samples/consistency-groups-list-response.json new file mode 100644 index 00000000000..a53863f4372 --- /dev/null +++ b/api-ref/source/v3/samples/consistency-groups-list-response.json @@ -0,0 +1,12 @@ +{ + "consistencygroups": [ + { + "id": "6f519a48-3183-46cf-a32f-41815f813986", + "name": "my-cg1" + }, + { + "id": "aed36625-a6d7-4681-ba59-c7ba3d18c148", + "name": "my-cg2" + } + ] +} diff --git a/api-ref/source/v3/samples/extensions-list-response.json b/api-ref/source/v3/samples/extensions-list-response.json new file mode 100644 index 00000000000..9ae83518c36 --- /dev/null +++ b/api-ref/source/v3/samples/extensions-list-response.json @@ -0,0 +1,212 @@ +{ + "extensions": [ + { + "updated": "2013-04-18T00:00:00+00:00", + "name": "SchedulerHints", + "links": [], + "namespace": "http://docs.openstack.org/block-service/ext/scheduler-hints/api/v3", + "alias": "OS-SCH-HNT", + "description": "Pass arbitrary key/value pairs to the scheduler." + }, + { + "updated": "2011-06-29T00:00:00+00:00", + "name": "Hosts", + "links": [], + "namespace": "http://docs.openstack.org/volume/ext/hosts/api/v1.1", + "alias": "os-hosts", + "description": "Admin-only host administration." + }, + { + "updated": "2011-11-03T00:00:00+00:00", + "name": "VolumeTenantAttribute", + "links": [], + "namespace": "http://docs.openstack.org/volume/ext/volume_tenant_attribute/api/v1", + "alias": "os-vol-tenant-attr", + "description": "Expose the internal project_id as an attribute of a volume." + }, + { + "updated": "2011-08-08T00:00:00+00:00", + "name": "Quotas", + "links": [], + "namespace": "http://docs.openstack.org/volume/ext/quotas-sets/api/v1.1", + "alias": "os-quota-sets", + "description": "Quota management support." + }, + { + "updated": "2011-08-24T00:00:00+00:00", + "name": "TypesManage", + "links": [], + "namespace": "http://docs.openstack.org/volume/ext/types-manage/api/v1", + "alias": "os-types-manage", + "description": "Types manage support." + }, + { + "updated": "2013-07-10T00:00:00+00:00", + "name": "VolumeEncryptionMetadata", + "links": [], + "namespace": "http://docs.openstack.org/volume/ext/os-volume-encryption-metadata/api/v1", + "alias": "os-volume-encryption-metadata", + "description": "Volume encryption metadata retrieval support." + }, + { + "updated": "2012-12-12T00:00:00+00:00", + "name": "Backups", + "links": [], + "namespace": "http://docs.openstack.org/volume/ext/backups/api/v1", + "alias": "backups", + "description": "Backups support." + }, + { + "updated": "2013-07-16T00:00:00+00:00", + "name": "SnapshotActions", + "links": [], + "namespace": "http://docs.openstack.org/volume/ext/snapshot-actions/api/v1.1", + "alias": "os-snapshot-actions", + "description": "Enable snapshot manager actions." + }, + { + "updated": "2012-05-31T00:00:00+00:00", + "name": "VolumeActions", + "links": [], + "namespace": "http://docs.openstack.org/volume/ext/volume-actions/api/v1.1", + "alias": "os-volume-actions", + "description": "Enable volume actions\n " + }, + { + "updated": "2013-10-03T00:00:00+00:00", + "name": "UsedLimits", + "links": [], + "namespace": "http://docs.openstack.org/volume/ext/used-limits/api/v1.1", + "alias": "os-used-limits", + "description": "Provide data on limited resources that are being used." + }, + { + "updated": "2012-05-31T00:00:00+00:00", + "name": "VolumeUnmanage", + "links": [], + "namespace": "http://docs.openstack.org/volume/ext/volume-unmanage/api/v1.1", + "alias": "os-volume-unmanage", + "description": "Enable volume unmanage operation." + }, + { + "updated": "2011-11-03T00:00:00+00:00", + "name": "VolumeHostAttribute", + "links": [], + "namespace": "http://docs.openstack.org/volume/ext/volume_host_attribute/api/v1", + "alias": "os-vol-host-attr", + "description": "Expose host as an attribute of a volume." + }, + { + "updated": "2013-07-01T00:00:00+00:00", + "name": "VolumeTypeEncryption", + "links": [], + "namespace": "http://docs.openstack.org/volume/ext/volume-type-encryption/api/v1", + "alias": "encryption", + "description": "Encryption support for volume types." + }, + { + "updated": "2013-06-27T00:00:00+00:00", + "name": "AvailabilityZones", + "links": [], + "namespace": "http://docs.openstack.org/volume/ext/os-availability-zone/api/v1", + "alias": "os-availability-zone", + "description": "Describe Availability Zones." + }, + { + "updated": "2013-08-02T00:00:00+00:00", + "name": "Qos_specs_manage", + "links": [], + "namespace": "http://docs.openstack.org/volume/ext/qos-specs/api/v1", + "alias": "qos-specs", + "description": "QoS specs support." + }, + { + "updated": "2011-08-24T00:00:00+00:00", + "name": "TypesExtraSpecs", + "links": [], + "namespace": "http://docs.openstack.org/volume/ext/types-extra-specs/api/v1", + "alias": "os-types-extra-specs", + "description": "Type extra specs support." + }, + { + "updated": "2013-08-08T00:00:00+00:00", + "name": "VolumeMigStatusAttribute", + "links": [], + "namespace": "http://docs.openstack.org/volume/ext/volume_mig_status_attribute/api/v1", + "alias": "os-vol-mig-status-attr", + "description": "Expose migration_status as an attribute of a volume." + }, + { + "updated": "2012-08-13T00:00:00+00:00", + "name": "CreateVolumeExtension", + "links": [], + "namespace": "http://docs.openstack.org/volume/ext/image-create/api/v1", + "alias": "os-image-create", + "description": "Allow creating a volume from an image in the Create Volume v1 API." + }, + { + "updated": "2014-01-10T00:00:00-00:00", + "name": "ExtendedServices", + "links": [], + "namespace": "http://docs.openstack.org/volume/ext/extended_services/api/v3", + "alias": "os-extended-services", + "description": "Extended services support." + }, + { + "updated": "2012-06-19T00:00:00+00:00", + "name": "ExtendedSnapshotAttributes", + "links": [], + "namespace": "http://docs.openstack.org/volume/ext/extended_snapshot_attributes/api/v1", + "alias": "os-extended-snapshot-attributes", + "description": "Extended SnapshotAttributes support." + }, + { + "updated": "2012-12-07T00:00:00+00:00", + "name": "VolumeImageMetadata", + "links": [], + "namespace": "http://docs.openstack.org/volume/ext/volume_image_metadata/api/v1", + "alias": "os-vol-image-meta", + "description": "Show image metadata associated with the volume." + }, + { + "updated": "2012-03-12T00:00:00+00:00", + "name": "QuotaClasses", + "links": [], + "namespace": "http://docs.openstack.org/volume/ext/quota-classes-sets/api/v1.1", + "alias": "os-quota-class-sets", + "description": "Quota classes management support." + }, + { + "updated": "2013-05-29T00:00:00+00:00", + "name": "VolumeTransfer", + "links": [], + "namespace": "http://docs.openstack.org/volume/ext/volume-transfer/api/v1.1", + "alias": "os-volume-transfer", + "description": "Volume transfer management support." + }, + { + "updated": "2014-02-10T00:00:00+00:00", + "name": "VolumeManage", + "links": [], + "namespace": "http://docs.openstack.org/volume/ext/os-volume-manage/api/v1", + "alias": "os-volume-manage", + "description": "Allows existing backend storage to be 'managed' by Cinder." + }, + { + "updated": "2012-08-25T00:00:00+00:00", + "name": "AdminActions", + "links": [], + "namespace": "http://docs.openstack.org/volume/ext/admin-actions/api/v1.1", + "alias": "os-admin-actions", + "description": "Enable admin actions." + }, + { + "updated": "2012-10-28T00:00:00-00:00", + "name": "Services", + "links": [], + "namespace": "http://docs.openstack.org/volume/ext/services/api/v3", + "alias": "os-services", + "description": "Services support." + } + ] +} diff --git a/api-ref/source/v3/samples/extensions-list-response.xml b/api-ref/source/v3/samples/extensions-list-response.xml new file mode 100644 index 00000000000..969efec6b5c --- /dev/null +++ b/api-ref/source/v3/samples/extensions-list-response.xml @@ -0,0 +1,165 @@ + + + + Pass arbitrary key/value pairs to the + scheduler. + + + Admin-only host administration. + + + Expose the internal project_id as an attribute of + a volume. + + + Quota management support. + + + Types manage support. + + + Volume encryption metadata retrieval + support. + + + Backups support. + + + Enable snapshot manager actions. + + + Enable volume actions + + + Provide data on limited resources that are being + used. + + + Enable volume unmanage operation. + + + Expose host as an attribute of a + volume. + + + Encryption support for volume + types. + + + Describe Availability Zones. + + + QoS specs support. + + + Type extra specs support. + + + Expose migration_status as an attribute of a + volume. + + + Allow creating a volume from an image in the + Create Volume v1 API. + + + Extended services support. + + + Extended SnapshotAttributes + support. + + + Show image metadata associated with the + volume. + + + Quota classes management support. + + + Volume transfer management support. + + + Allows existing back end storage to be 'managed' + by cinder. + + + Enable admin actions. + + + Services support. + + diff --git a/api-ref/source/v3/samples/host-attach-request.json b/api-ref/source/v3/samples/host-attach-request.json new file mode 100644 index 00000000000..01d0644513c --- /dev/null +++ b/api-ref/source/v3/samples/host-attach-request.json @@ -0,0 +1,5 @@ +{ + "os-attach": { + "host_name": "my_host" + } +} diff --git a/api-ref/source/v3/samples/image-metadata-show-request.json b/api-ref/source/v3/samples/image-metadata-show-request.json new file mode 100644 index 00000000000..f84e8261dd9 --- /dev/null +++ b/api-ref/source/v3/samples/image-metadata-show-request.json @@ -0,0 +1,18 @@ +{ + "volume": { + "host": "geraint-VirtualBox", + "ref": { + "source-volume-name": "existingLV", + "source-volume-id": "1234" + }, + "name": "New Volume", + "availability_zone": "az2", + "description": "Volume imported from existingLV", + "volume_type": null, + "bootable": true, + "metadata": { + "key1": "value1", + "key2": "value2" + } + } +} diff --git a/api-ref/source/v3/samples/image-metadata-show-response.json b/api-ref/source/v3/samples/image-metadata-show-response.json new file mode 100644 index 00000000000..a53976b9cba --- /dev/null +++ b/api-ref/source/v3/samples/image-metadata-show-response.json @@ -0,0 +1,33 @@ +{ + "volume": { + "status": "creating", + "user_id": "eae1472b5fc5496998a3d06550929e7e", + "attachments": [], + "links": [ + { + "href": "http://10.0.2.15:8776/v3/87c8522052ca4eed98bc672b4c1a3ddb/volumes/23cf872b-c781-4cd4-847d-5f2ec8cbd91c", + "rel": "self" + }, + { + "href": "http://10.0.2.15:8776/87c8522052ca4eed98bc672b4c1a3ddb/volumes/23cf872b-c781-4cd4-847d-5f2ec8cbd91c", + "rel": "bookmark" + } + ], + "availability_zone": "az2", + "bootable": "false", + "encrypted": "false", + "created_at": "2014-07-18T00:12:54.000000", + "description": "Volume imported from existingLV", + "os-vol-tenant-attr:tenant_id": "87c8522052ca4eed98bc672b4c1a3ddb", + "volume_type": null, + "name": "New Volume", + "source_volid": null, + "snapshot_id": null, + "metadata": { + "key2": "value2", + "key1": "value1" + }, + "id": "23cf872b-c781-4cd4-847d-5f2ec8cbd91c", + "size": 0 + } +} diff --git a/api-ref/source/v3/samples/limits-show-response.json b/api-ref/source/v3/samples/limits-show-response.json new file mode 100644 index 00000000000..38d0ccd3c1b --- /dev/null +++ b/api-ref/source/v3/samples/limits-show-response.json @@ -0,0 +1,17 @@ +{ + "limits": { + "rate": [], + "absolute": { + "totalSnapshotsUsed": 0, + "maxTotalBackups": 10, + "maxTotalVolumeGigabytes": 1000, + "maxTotalSnapshots": 10, + "maxTotalBackupGigabytes": 1000, + "totalBackupGigabytesUsed": 0, + "maxTotalVolumes": 10, + "totalVolumesUsed": 0, + "totalBackupsUsed": 0, + "totalGigabytesUsed": 0 + } + } +} diff --git a/api-ref/source/v3/samples/limits-show-response.xml b/api-ref/source/v3/samples/limits-show-response.xml new file mode 100644 index 00000000000..0f932b074d7 --- /dev/null +++ b/api-ref/source/v3/samples/limits-show-response.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + diff --git a/api-ref/source/v3/samples/pools-list-detailed-response.json b/api-ref/source/v3/samples/pools-list-detailed-response.json new file mode 100644 index 00000000000..3fc28a2992f --- /dev/null +++ b/api-ref/source/v3/samples/pools-list-detailed-response.json @@ -0,0 +1,30 @@ +{ + "pools": [ + { + "name": "pool1", + "capabilities": { + "updated": "2014-10-28T00:00:00-00:00", + "total_capacity": 1024, + "free_capacity": 100, + "volume_backend_name": "pool1", + "reserved_percentage": 0, + "driver_version": "1.0.0", + "storage_protocol": "iSCSI", + "QoS_support": false + } + }, + { + "name": "pool2", + "capabilities": { + "updated": "2014-10-28T00:00:00-00:00", + "total_capacity": 512, + "free_capacity": 200, + "volume_backend_name": "pool2", + "reserved_percentage": 0, + "driver_version": "1.0.1", + "storage_protocol": "iSER", + "QoS_support": true + } + } + ] +} diff --git a/api-ref/source/v3/samples/qos-create-request.json b/api-ref/source/v3/samples/qos-create-request.json new file mode 100644 index 00000000000..c0db909bd69 --- /dev/null +++ b/api-ref/source/v3/samples/qos-create-request.json @@ -0,0 +1,7 @@ +{ + "qos_specs": { + "availability": "100", + "name": "reliability-spec", + "numberOfFailures": "0" + } +} diff --git a/api-ref/source/v3/samples/qos-create-request.xml b/api-ref/source/v3/samples/qos-create-request.xml new file mode 100644 index 00000000000..ac772236cac --- /dev/null +++ b/api-ref/source/v3/samples/qos-create-request.xml @@ -0,0 +1,2 @@ + + diff --git a/api-ref/source/v3/samples/qos-create-response.json b/api-ref/source/v3/samples/qos-create-response.json new file mode 100644 index 00000000000..d743bb5453b --- /dev/null +++ b/api-ref/source/v3/samples/qos-create-response.json @@ -0,0 +1,21 @@ +{ + "qos_specs": { + "specs": { + "numberOfFailures": "0", + "availability": "100" + }, + "consumer": "back-end", + "name": "reliability-spec", + "id": "599ef437-1c99-42ec-9fc6-239d0519fef1" + }, + "links": [ + { + "href": "http://23.253.248.171:8776/v3/bab7d5c60cd041a0a36f7c4b6e1dd978/qos_specs/599ef437-1c99-42ec-9fc6-239d0519fef1", + "rel": "self" + }, + { + "href": "http://23.253.248.171:8776/bab7d5c60cd041a0a36f7c4b6e1dd978/qos_specs/599ef437-1c99-42ec-9fc6-239d0519fef1", + "rel": "bookmark" + } + ] +} diff --git a/api-ref/source/v3/samples/qos-create-response.xml b/api-ref/source/v3/samples/qos-create-response.xml new file mode 100644 index 00000000000..b2393248699 --- /dev/null +++ b/api-ref/source/v3/samples/qos-create-response.xml @@ -0,0 +1,9 @@ + + + + + 0 + 100 + + + diff --git a/api-ref/source/v3/samples/qos-list-response.json b/api-ref/source/v3/samples/qos-list-response.json new file mode 100644 index 00000000000..92f2a6216ed --- /dev/null +++ b/api-ref/source/v3/samples/qos-list-response.json @@ -0,0 +1,22 @@ +{ + "qos_specs": [ + { + "specs": { + "availability": "100", + "numberOfFailures": "0" + }, + "consumer": "back-end", + "name": "reliability-spec", + "id": "0388d6c6-d5d4-42a3-b289-95205c50dd15" + }, + { + "specs": { + "delay": "0", + "throughput": "100" + }, + "consumer": "back-end", + "name": "performance-spec", + "id": "ecfc6e2e-7117-44a4-8eec-f84d04f531a8" + } + ] +} diff --git a/api-ref/source/v3/samples/qos-list-response.xml b/api-ref/source/v3/samples/qos-list-response.xml new file mode 100644 index 00000000000..c77e7847ff3 --- /dev/null +++ b/api-ref/source/v3/samples/qos-list-response.xml @@ -0,0 +1,19 @@ + + + + + 100 + 0 + + + + + 0 + 100 + + + diff --git a/api-ref/source/v3/samples/qos-show-response.json b/api-ref/source/v3/samples/qos-show-response.json new file mode 100644 index 00000000000..6cf22c817d6 --- /dev/null +++ b/api-ref/source/v3/samples/qos-show-response.json @@ -0,0 +1,21 @@ +{ + "qos_specs": { + "specs": { + "availability": "100", + "numberOfFailures": "0" + }, + "consumer": "back-end", + "name": "reliability-spec", + "id": "0388d6c6-d5d4-42a3-b289-95205c50dd15" + }, + "links": [ + { + "href": "http://23.253.228.211:8776/v3/e1cf63117ae74309a5bcc2002a23be8b/qos_specs/0388d6c6-d5d4-42a3-b289-95205c50dd15", + "rel": "self" + }, + { + "href": "http://23.253.228.211:8776/e1cf63117ae74309a5bcc2002a23be8b/qos_specs/0388d6c6-d5d4-42a3-b289-95205c50dd15", + "rel": "bookmark" + } + ] +} diff --git a/api-ref/source/v3/samples/qos-show-response.xml b/api-ref/source/v3/samples/qos-show-response.xml new file mode 100644 index 00000000000..7aee8126ce8 --- /dev/null +++ b/api-ref/source/v3/samples/qos-show-response.xml @@ -0,0 +1,11 @@ + + + + + 100 + 0 + + + diff --git a/api-ref/source/v3/samples/qos-unset-request.json b/api-ref/source/v3/samples/qos-unset-request.json new file mode 100644 index 00000000000..4193b73921a --- /dev/null +++ b/api-ref/source/v3/samples/qos-unset-request.json @@ -0,0 +1,5 @@ +{ + "keys": [ + "key1" + ] +} diff --git a/api-ref/source/v3/samples/qos-unset-request.xml b/api-ref/source/v3/samples/qos-unset-request.xml new file mode 100644 index 00000000000..c6f10f9f37b --- /dev/null +++ b/api-ref/source/v3/samples/qos-unset-request.xml @@ -0,0 +1,4 @@ + + + + diff --git a/api-ref/source/v3/samples/qos-unset-response.json b/api-ref/source/v3/samples/qos-unset-response.json new file mode 100644 index 00000000000..e69de29bb2d diff --git a/api-ref/source/v3/samples/qos-update-request.json b/api-ref/source/v3/samples/qos-update-request.json new file mode 100644 index 00000000000..1d398770584 --- /dev/null +++ b/api-ref/source/v3/samples/qos-update-request.json @@ -0,0 +1,5 @@ +{ + "qos_specs": { + "delay": "1" + } +} diff --git a/api-ref/source/v3/samples/qos-update-request.xml b/api-ref/source/v3/samples/qos-update-request.xml new file mode 100644 index 00000000000..78524c7cadb --- /dev/null +++ b/api-ref/source/v3/samples/qos-update-request.xml @@ -0,0 +1,2 @@ + + diff --git a/api-ref/source/v3/samples/qos-update-response.json b/api-ref/source/v3/samples/qos-update-response.json new file mode 100644 index 00000000000..1d398770584 --- /dev/null +++ b/api-ref/source/v3/samples/qos-update-response.json @@ -0,0 +1,5 @@ +{ + "qos_specs": { + "delay": "1" + } +} diff --git a/api-ref/source/v3/samples/qos-update-response.xml b/api-ref/source/v3/samples/qos-update-response.xml new file mode 100644 index 00000000000..ed8dd0578d9 --- /dev/null +++ b/api-ref/source/v3/samples/qos-update-response.xml @@ -0,0 +1,4 @@ + + + + diff --git a/api-ref/source/v3/samples/qos_show_response.json b/api-ref/source/v3/samples/qos_show_response.json new file mode 100644 index 00000000000..4a5d9db6aae --- /dev/null +++ b/api-ref/source/v3/samples/qos_show_response.json @@ -0,0 +1,9 @@ +{ + "qos_associations": [ + { + "association_type": "volume_type", + "name": "reliability-type", + "id": "a12983c2-83bd-4afa-be9f-ad796573ead6" + } + ] +} diff --git a/api-ref/source/v3/samples/qos_show_response.xml b/api-ref/source/v3/samples/qos_show_response.xml new file mode 100644 index 00000000000..e208b8a2085 --- /dev/null +++ b/api-ref/source/v3/samples/qos_show_response.xml @@ -0,0 +1,6 @@ + + + + diff --git a/api-ref/source/v3/samples/quotas-defaults-show-response.xml b/api-ref/source/v3/samples/quotas-defaults-show-response.xml new file mode 100644 index 00000000000..76a9292c137 --- /dev/null +++ b/api-ref/source/v3/samples/quotas-defaults-show-response.xml @@ -0,0 +1,15 @@ + + + 20 + -1 + 10 + 10240 + 255 + 5 + 10 + 100 + 128 + 51200 + 20 + 10 + diff --git a/api-ref/source/v3/samples/quotas-delete-response.json b/api-ref/source/v3/samples/quotas-delete-response.json new file mode 100644 index 00000000000..e69de29bb2d diff --git a/api-ref/source/v3/samples/quotas-show-defaults-response.json b/api-ref/source/v3/samples/quotas-show-defaults-response.json new file mode 100644 index 00000000000..6c267112cea --- /dev/null +++ b/api-ref/source/v3/samples/quotas-show-defaults-response.json @@ -0,0 +1,7 @@ +{ + "quota_set": { + "gigabytes": 5, + "snapshots": 10, + "volumes": 20 + } +} diff --git a/api-ref/source/v3/samples/quotas-show-defaults-response.xml b/api-ref/source/v3/samples/quotas-show-defaults-response.xml new file mode 100644 index 00000000000..b63b30b08f7 --- /dev/null +++ b/api-ref/source/v3/samples/quotas-show-defaults-response.xml @@ -0,0 +1,6 @@ + + + 5 + 10 + 20 + diff --git a/api-ref/source/v3/samples/quotas-show-response.json b/api-ref/source/v3/samples/quotas-show-response.json new file mode 100644 index 00000000000..6c267112cea --- /dev/null +++ b/api-ref/source/v3/samples/quotas-show-response.json @@ -0,0 +1,7 @@ +{ + "quota_set": { + "gigabytes": 5, + "snapshots": 10, + "volumes": 20 + } +} diff --git a/api-ref/source/v3/samples/quotas-show-response.xml b/api-ref/source/v3/samples/quotas-show-response.xml new file mode 100644 index 00000000000..b63b30b08f7 --- /dev/null +++ b/api-ref/source/v3/samples/quotas-show-response.xml @@ -0,0 +1,6 @@ + + + 5 + 10 + 20 + diff --git a/api-ref/source/v3/samples/quotas-update-request.json b/api-ref/source/v3/samples/quotas-update-request.json new file mode 100644 index 00000000000..9ab32c11ca5 --- /dev/null +++ b/api-ref/source/v3/samples/quotas-update-request.json @@ -0,0 +1,5 @@ +{ + "quota_set": { + "snapshots": 45 + } +} diff --git a/api-ref/source/v3/samples/quotas-update-request.xml b/api-ref/source/v3/samples/quotas-update-request.xml new file mode 100644 index 00000000000..ccf34efa0ab --- /dev/null +++ b/api-ref/source/v3/samples/quotas-update-request.xml @@ -0,0 +1,4 @@ + + + 45 + diff --git a/api-ref/source/v3/samples/quotas-update-response.json b/api-ref/source/v3/samples/quotas-update-response.json new file mode 100644 index 00000000000..9ab32c11ca5 --- /dev/null +++ b/api-ref/source/v3/samples/quotas-update-response.json @@ -0,0 +1,5 @@ +{ + "quota_set": { + "snapshots": 45 + } +} diff --git a/api-ref/source/v3/samples/quotas-update-response.xml b/api-ref/source/v3/samples/quotas-update-response.xml new file mode 100644 index 00000000000..b63b30b08f7 --- /dev/null +++ b/api-ref/source/v3/samples/quotas-update-response.xml @@ -0,0 +1,6 @@ + + + 5 + 10 + 20 + diff --git a/api-ref/source/v3/samples/quotas-user-show-detailed-response.json b/api-ref/source/v3/samples/quotas-user-show-detailed-response.json new file mode 100644 index 00000000000..79609eb84a3 --- /dev/null +++ b/api-ref/source/v3/samples/quotas-user-show-detailed-response.json @@ -0,0 +1,19 @@ +{ + "quota_set": { + "gigabytes": { + "in_use": 100, + "limit": -1, + "reserved": 0 + }, + "snapshots": { + "in_use": 12, + "limit": -1, + "reserved": 0 + }, + "volumes": { + "in_use": 1, + "limit": -1, + "reserved": 0 + } + } +} diff --git a/api-ref/source/v3/samples/quotas-user-show-response.json b/api-ref/source/v3/samples/quotas-user-show-response.json new file mode 100644 index 00000000000..6c267112cea --- /dev/null +++ b/api-ref/source/v3/samples/quotas-user-show-response.json @@ -0,0 +1,7 @@ +{ + "quota_set": { + "gigabytes": 5, + "snapshots": 10, + "volumes": 20 + } +} diff --git a/api-ref/source/v3/samples/quotas-user-show-response.xml b/api-ref/source/v3/samples/quotas-user-show-response.xml new file mode 100644 index 00000000000..b63b30b08f7 --- /dev/null +++ b/api-ref/source/v3/samples/quotas-user-show-response.xml @@ -0,0 +1,6 @@ + + + 5 + 10 + 20 + diff --git a/api-ref/source/v3/samples/snapshot-create-request.json b/api-ref/source/v3/samples/snapshot-create-request.json new file mode 100644 index 00000000000..3c0fe5d888f --- /dev/null +++ b/api-ref/source/v3/samples/snapshot-create-request.json @@ -0,0 +1,8 @@ +{ + "snapshot": { + "name": "snap-001", + "description": "Daily backup", + "volume_id": "5aa119a8-d25b-45a7-8d1b-88e127885635", + "force": true + } +} diff --git a/api-ref/source/v3/samples/snapshot-create-request.xml b/api-ref/source/v3/samples/snapshot-create-request.xml new file mode 100644 index 00000000000..2b56fde55da --- /dev/null +++ b/api-ref/source/v3/samples/snapshot-create-request.xml @@ -0,0 +1,5 @@ + + diff --git a/api-ref/source/v3/samples/snapshot-create-response.json b/api-ref/source/v3/samples/snapshot-create-response.json new file mode 100644 index 00000000000..d8901e88dec --- /dev/null +++ b/api-ref/source/v3/samples/snapshot-create-response.json @@ -0,0 +1,12 @@ +{ + "snapshot": { + "status": "creating", + "description": "Daily backup", + "created_at": "2013-02-25T03:56:53.081642", + "metadata": {}, + "volume_id": "5aa119a8-d25b-45a7-8d1b-88e127885635", + "size": 1, + "id": "ffa9bc5e-1172-4021-acaf-cdcd78a9584d", + "name": "snap-001" + } +} diff --git a/api-ref/source/v3/samples/snapshot-create-response.xml b/api-ref/source/v3/samples/snapshot-create-response.xml new file mode 100644 index 00000000000..1f72e69934c --- /dev/null +++ b/api-ref/source/v3/samples/snapshot-create-response.xml @@ -0,0 +1,7 @@ + + + + diff --git a/api-ref/source/v3/samples/snapshot-metadata-show-response.json b/api-ref/source/v3/samples/snapshot-metadata-show-response.json new file mode 100644 index 00000000000..cbfe4ef7a8e --- /dev/null +++ b/api-ref/source/v3/samples/snapshot-metadata-show-response.json @@ -0,0 +1,5 @@ +{ + "metadata": { + "name": "test" + } +} diff --git a/api-ref/source/v3/samples/snapshot-metadata-show-response.xml b/api-ref/source/v3/samples/snapshot-metadata-show-response.xml new file mode 100644 index 00000000000..f62f5b6b9c3 --- /dev/null +++ b/api-ref/source/v3/samples/snapshot-metadata-show-response.xml @@ -0,0 +1,4 @@ + + + test + diff --git a/api-ref/source/v3/samples/snapshot-metadata-update-request.json b/api-ref/source/v3/samples/snapshot-metadata-update-request.json new file mode 100644 index 00000000000..4373b0018da --- /dev/null +++ b/api-ref/source/v3/samples/snapshot-metadata-update-request.json @@ -0,0 +1,5 @@ +{ + "metadata": { + "key": "v2" + } +} diff --git a/api-ref/source/v3/samples/snapshot-metadata-update-request.xml b/api-ref/source/v3/samples/snapshot-metadata-update-request.xml new file mode 100644 index 00000000000..ceeb8f0314b --- /dev/null +++ b/api-ref/source/v3/samples/snapshot-metadata-update-request.xml @@ -0,0 +1,4 @@ + + + v2 + diff --git a/api-ref/source/v3/samples/snapshot-metadata-update-response.json b/api-ref/source/v3/samples/snapshot-metadata-update-response.json new file mode 100644 index 00000000000..4373b0018da --- /dev/null +++ b/api-ref/source/v3/samples/snapshot-metadata-update-response.json @@ -0,0 +1,5 @@ +{ + "metadata": { + "key": "v2" + } +} diff --git a/api-ref/source/v3/samples/snapshot-metadata-update-response.xml b/api-ref/source/v3/samples/snapshot-metadata-update-response.xml new file mode 100644 index 00000000000..6d00cdef115 --- /dev/null +++ b/api-ref/source/v3/samples/snapshot-metadata-update-response.xml @@ -0,0 +1,4 @@ + + + v2 + diff --git a/api-ref/source/v3/samples/snapshot-show-response.json b/api-ref/source/v3/samples/snapshot-show-response.json new file mode 100644 index 00000000000..25a8c6c9def --- /dev/null +++ b/api-ref/source/v3/samples/snapshot-show-response.json @@ -0,0 +1,14 @@ +{ + "snapshot": { + "status": "available", + "os-extended-snapshot-attributes:progress": "100%", + "description": "Daily backup", + "created_at": "2013-02-25T04:13:17.000000", + "metadata": {}, + "volume_id": "5aa119a8-d25b-45a7-8d1b-88e127885635", + "os-extended-snapshot-attributes:project_id": "0c2eba2c5af04d3f9e9d0d410b371fde", + "size": 1, + "id": "2bb856e1-b3d8-4432-a858-09e4ce939389", + "name": "snap-001" + } +} diff --git a/api-ref/source/v3/samples/snapshot-show-response.xml b/api-ref/source/v3/samples/snapshot-show-response.xml new file mode 100644 index 00000000000..5863aa554f4 --- /dev/null +++ b/api-ref/source/v3/samples/snapshot-show-response.xml @@ -0,0 +1,11 @@ + + + + diff --git a/api-ref/source/v3/samples/snapshot-update-request.json b/api-ref/source/v3/samples/snapshot-update-request.json new file mode 100644 index 00000000000..0e08957178e --- /dev/null +++ b/api-ref/source/v3/samples/snapshot-update-request.json @@ -0,0 +1,6 @@ +{ + "snapshot": { + "name": "snap-002", + "description": "This is yet, another snapshot." + } +} diff --git a/api-ref/source/v3/samples/snapshot-update-request.xml b/api-ref/source/v3/samples/snapshot-update-request.xml new file mode 100644 index 00000000000..670f6e68231 --- /dev/null +++ b/api-ref/source/v3/samples/snapshot-update-request.xml @@ -0,0 +1,4 @@ + + diff --git a/api-ref/source/v3/samples/snapshot-update-response.json b/api-ref/source/v3/samples/snapshot-update-response.json new file mode 100644 index 00000000000..a2fa2779393 --- /dev/null +++ b/api-ref/source/v3/samples/snapshot-update-response.json @@ -0,0 +1,11 @@ +{ + "snapshot": { + "created_at": "2013-02-20T08:11:34.000000", + "description": "This is yet, another snapshot", + "name": "snap-002", + "id": "4b502fcb-1f26-45f8-9fe5-3b9a0a52eaf2", + "size": 1, + "status": "available", + "volume_id": "2402b902-0b7a-458c-9c07-7435a826f794" + } +} diff --git a/api-ref/source/v3/samples/snapshot-update-response.xml b/api-ref/source/v3/samples/snapshot-update-response.xml new file mode 100644 index 00000000000..1d09541c78c --- /dev/null +++ b/api-ref/source/v3/samples/snapshot-update-response.xml @@ -0,0 +1,14 @@ + + + + diff --git a/api-ref/source/v3/samples/snapshots-list-detailed-response.json b/api-ref/source/v3/samples/snapshots-list-detailed-response.json new file mode 100644 index 00000000000..463b98ec12d --- /dev/null +++ b/api-ref/source/v3/samples/snapshots-list-detailed-response.json @@ -0,0 +1,18 @@ +{ + "snapshots": [ + { + "status": "available", + "metadata": { + "name": "test" + }, + "os-extended-snapshot-attributes:progress": "100%", + "name": "test-volume-snapshot", + "volume_id": "173f7b48-c4c1-4e70-9acc-086b39073506", + "os-extended-snapshot-attributes:project_id": "bab7d5c60cd041a0a36f7c4b6e1dd978", + "created_at": "2015-11-29T02:25:51.000000", + "size": 1, + "id": "b1323cda-8e4b-41c1-afc5-2fc791809c8c", + "description": "volume snapshot" + } + ] +} diff --git a/api-ref/source/v3/samples/snapshots-list-detailed-response.xml b/api-ref/source/v3/samples/snapshots-list-detailed-response.xml new file mode 100644 index 00000000000..2114e0069ca --- /dev/null +++ b/api-ref/source/v3/samples/snapshots-list-detailed-response.xml @@ -0,0 +1,16 @@ + + + + + test + + + diff --git a/api-ref/source/v3/samples/snapshots-list-response.json b/api-ref/source/v3/samples/snapshots-list-response.json new file mode 100644 index 00000000000..8d7e4973acb --- /dev/null +++ b/api-ref/source/v3/samples/snapshots-list-response.json @@ -0,0 +1,16 @@ +{ + "snapshots": [ + { + "status": "available", + "metadata": { + "name": "test" + }, + "name": "test-volume-snapshot", + "volume_id": "173f7b48-c4c1-4e70-9acc-086b39073506", + "created_at": "2015-11-29T02:25:51.000000", + "size": 1, + "id": "b1323cda-8e4b-41c1-afc5-2fc791809c8c", + "description": "volume snapshot" + } + ] +} diff --git a/api-ref/source/v3/samples/snapshots-list-response.xml b/api-ref/source/v3/samples/snapshots-list-response.xml new file mode 100644 index 00000000000..654189455fb --- /dev/null +++ b/api-ref/source/v3/samples/snapshots-list-response.xml @@ -0,0 +1,13 @@ + + + + + test + + + diff --git a/api-ref/source/v3/samples/user-quotas-show-response.json b/api-ref/source/v3/samples/user-quotas-show-response.json new file mode 100644 index 00000000000..239c64d23d4 --- /dev/null +++ b/api-ref/source/v3/samples/user-quotas-show-response.json @@ -0,0 +1,17 @@ +{ + "quota_set": { + "cores": 20, + "fixed_ips": -1, + "floating_ips": 10, + "id": "fake_tenant", + "injected_file_content_bytes": 10240, + "injected_file_path_bytes": 255, + "injected_files": 5, + "instances": 10, + "key_pairs": 100, + "metadata_items": 128, + "ram": 51200, + "security_group_rules": 20, + "security_groups": 10 + } +} diff --git a/api-ref/source/v3/samples/user-quotas-show-response.xml b/api-ref/source/v3/samples/user-quotas-show-response.xml new file mode 100644 index 00000000000..76a9292c137 --- /dev/null +++ b/api-ref/source/v3/samples/user-quotas-show-response.xml @@ -0,0 +1,15 @@ + + + 20 + -1 + 10 + 10240 + 255 + 5 + 10 + 100 + 128 + 51200 + 20 + 10 + diff --git a/api-ref/source/v3/samples/user-quotas-update-request.json b/api-ref/source/v3/samples/user-quotas-update-request.json new file mode 100644 index 00000000000..6e5195f9ac8 --- /dev/null +++ b/api-ref/source/v3/samples/user-quotas-update-request.json @@ -0,0 +1,6 @@ +{ + "quota_set": { + "force": true, + "instances": 9 + } +} diff --git a/api-ref/source/v3/samples/user-quotas-update-request.xml b/api-ref/source/v3/samples/user-quotas-update-request.xml new file mode 100644 index 00000000000..dd58ed24d0c --- /dev/null +++ b/api-ref/source/v3/samples/user-quotas-update-request.xml @@ -0,0 +1,5 @@ + + + true + 9 + diff --git a/api-ref/source/v3/samples/user-quotas-update-response.json b/api-ref/source/v3/samples/user-quotas-update-response.json new file mode 100644 index 00000000000..5539332927e --- /dev/null +++ b/api-ref/source/v3/samples/user-quotas-update-response.json @@ -0,0 +1,16 @@ +{ + "quota_set": { + "cores": 20, + "floating_ips": 10, + "fixed_ips": -1, + "injected_file_content_bytes": 10240, + "injected_file_path_bytes": 255, + "injected_files": 5, + "instances": 9, + "key_pairs": 100, + "metadata_items": 128, + "ram": 51200, + "security_group_rules": 20, + "security_groups": 10 + } +} diff --git a/api-ref/source/v3/samples/user-quotas-update-response.xml b/api-ref/source/v3/samples/user-quotas-update-response.xml new file mode 100644 index 00000000000..43c36c7da31 --- /dev/null +++ b/api-ref/source/v3/samples/user-quotas-update-response.xml @@ -0,0 +1,15 @@ + + + 20 + 10 + -1 + 10240 + 255 + 5 + 9 + 100 + 128 + 51200 + 20 + 10 + diff --git a/api-ref/source/v3/samples/version-show-response.json b/api-ref/source/v3/samples/version-show-response.json new file mode 100644 index 00000000000..06ba84d077d --- /dev/null +++ b/api-ref/source/v3/samples/version-show-response.json @@ -0,0 +1,33 @@ +{ + "version": { + "status": "CURRENT", + "updated": "2012-01-04T11:33:21Z", + "media-types": [ + { + "base": "application/xml", + "type": "application/vnd.openstack.volume+xml;version=1" + }, + { + "base": "application/json", + "type": "application/vnd.openstack.volume+json;version=1" + } + ], + "id": "v1.0", + "links": [ + { + "href": "http://23.253.228.211:8776/v1/", + "rel": "self" + }, + { + "href": "http://jorgew.github.com/block-storage-api/content/os-block-storage-1.0.pdf", + "type": "application/pdf", + "rel": "describedby" + }, + { + "href": "http://docs.rackspacecloud.com/servers/api/v1.1/application.wadl", + "type": "application/vnd.sun.wadl+xml", + "rel": "describedby" + } + ] + } +} diff --git a/api-ref/source/v3/samples/version-show-response.xml b/api-ref/source/v3/samples/version-show-response.xml new file mode 100644 index 00000000000..aa42257291a --- /dev/null +++ b/api-ref/source/v3/samples/version-show-response.xml @@ -0,0 +1,87 @@ + + + + v1.0 + + + http://docs.openstack.org/ + describedby + text/html + + + http://23.253.248.171:8776/v1/ + self + + + + + application/json + application/vnd.openstack.volume+json;version=1 + + + application/xml + application/vnd.openstack.volume+xml;version=1 + + + + DEPRECATED + 2014-06-28T12:20:21Z + + + + v2.0 + + + http://docs.openstack.org/ + describedby + text/html + + + http://23.253.248.171:8776/v2/ + self + + + + + application/json + application/vnd.openstack.volume+json;version=1 + + + application/xml + application/vnd.openstack.volume+xml;version=1 + + + + SUPPORTED + 2014-06-28T12:20:21Z + + + + v3.0 + + + http://docs.openstack.org/ + describedby + text/html + + + http://23.253.248.171/v3/ + self + + + + + application/json + application/vnd.openstack.volume+json;version=1 + + + application/xml + application/vnd.openstack.volume+xml;version=1 + + + 3.0 + CURRENT + 2016-02-08T12:20:21Z + 3.0 + + diff --git a/api-ref/source/v3/samples/version-v3-show-response.json b/api-ref/source/v3/samples/version-v3-show-response.json new file mode 100644 index 00000000000..870e484bfd5 --- /dev/null +++ b/api-ref/source/v3/samples/version-v3-show-response.json @@ -0,0 +1,88 @@ +{ + "versions": [ + { + "id": "v1.0", + "links": [ + { + "href": "http://docs.openstack.org/", + "rel": "describedby", + "type": "text/html" + }, + { + "href": "http://23.253.248.171:8776/v1/", + "rel": "self" + } + ], + "media-types": [ + { + "base": "application/json", + "type": "application/vnd.openstack.volume+json;version=1" + }, + { + "base": "application/xml", + "type": "application/vnd.openstack.volume+xml;version=1" + } + ], + "min_version": "", + "status": "DEPRECATED", + "updated": "2014-06-28T12:20:21Z", + "version": "" + }, + { + "id": "v2.0", + "links": [ + { + "href": "http://docs.openstack.org/", + "rel": "describedby", + "type": "text/html" + }, + { + "href": "http://23.253.248.171:8776/v2/", + "rel": "self" + } + ], + "media-types": [ + { + "base": "application/json", + "type": "application/vnd.openstack.volume+json;version=1" + }, + { + "base": "application/xml", + "type": "application/vnd.openstack.volume+xml;version=1" + } + ], + "min_version": "", + "status": "SUPPORTED", + "updated": "2014-06-28T12:20:21Z", + "version": "" + }, + { + "id": "v3.0", + "links": [ + { + "href": "http://docs.openstack.org/", + "rel": "describedby", + "type": "text/html" + }, + { + "href": "http://23.253.248.171:8776/v3/", + "rel": "self" + } + ], + "media-types": [ + { + "base": "application/json", + "type": "application/vnd.openstack.volume+json;version=1" + }, + { + "base": "application/xml", + "type": "application/vnd.openstack.volume+xml;version=1" + } + ], + "min_version": "3.0", + "status": "CURRENT", + "updated": "2016-02-08T12:20:21Z", + "version": "3.0" + } + ] +} diff --git a/api-ref/source/v3/samples/versions-response.json b/api-ref/source/v3/samples/versions-response.json new file mode 100644 index 00000000000..d8a0c6a63c7 --- /dev/null +++ b/api-ref/source/v3/samples/versions-response.json @@ -0,0 +1,76 @@ +{ + "versions": [ + { + "status": "DEPRECATED", + "updated": "2014-06-28T12:20:21Z", + "links": [ + { + "href": "http://docs.openstack.org/", + "type": "text/html", + "rel": "describedby" + }, + { + "href": "http://10.0.2.15:8776/v1/", + "rel": "self" + } + ], + "min_version": "", + "version": "", + "media-types": [ + { + "base": "application/json", + "type": "application/vnd.openstack.volume+json;version=1" + } + ], + "id": "v1.0" + }, + { + "status": "SUPPORTED", + "updated": "2014-06-28T12:20:21Z", + "links": [ + { + "href": "http://docs.openstack.org/", + "type": "text/html", + "rel": "describedby" + }, + { + "href": "http://10.0.2.15:8776/v2/", + "rel": "self" + } + ], + "min_version": "", + "version": "", + "media-types": [ + { + "base": "application/json", + "type": "application/vnd.openstack.volume+json;version=1" + } + ], + "id": "v2.0" + }, + { + "status": "CURRENT", + "updated": "2016-02-08T12:20:21Z", + "links": [ + { + "href": "http://docs.openstack.org/", + "type": "text/html", + "rel": "describedby" + }, + { + "href": "http://10.0.2.15:8776/v3/", + "rel": "self" + } + ], + "min_version": "3.0", + "version": "{Current_Max_Version}", + "media-types": [ + { + "base": "application/json", + "type": "application/vnd.openstack.volume+json;version=1" + } + ], + "id": "v3.0" + } + ] +} diff --git a/api-ref/source/v3/samples/versions-response.xml b/api-ref/source/v3/samples/versions-response.xml new file mode 100644 index 00000000000..a09fac7165b --- /dev/null +++ b/api-ref/source/v3/samples/versions-response.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/api-ref/source/v3/samples/volume-attach-request.json b/api-ref/source/v3/samples/volume-attach-request.json new file mode 100644 index 00000000000..a779f9fbf71 --- /dev/null +++ b/api-ref/source/v3/samples/volume-attach-request.json @@ -0,0 +1,6 @@ +{ + "os-attach": { + "instance_uuid": "95D9EF50-507D-11E5-B970-0800200C9A66", + "mountpoint": "/dev/vdc" + } +} diff --git a/api-ref/source/v3/samples/volume-create-request.json b/api-ref/source/v3/samples/volume-create-request.json new file mode 100644 index 00000000000..2aab202523f --- /dev/null +++ b/api-ref/source/v3/samples/volume-create-request.json @@ -0,0 +1,22 @@ +{ + "volume": { + "size": 10, + "availability_zone": null, + "source_volid": null, + "description": null, + "multiattach ": false, + "snapshot_id": null, + "name": null, + "imageRef": null, + "volume_type": null, + "metadata": {}, + "source_replica": null, + "consistencygroup_id": null + }, + "OS-SCH-HNT:scheduler_hints": { + "same_host": [ + "a0cf03a5-d921-4877-bb5c-86d26cf818e1", + "8c19174f-4220-44f0-824a-cd1eeef10287" + ] + } +} diff --git a/api-ref/source/v3/samples/volume-create-request.xml b/api-ref/source/v3/samples/volume-create-request.xml new file mode 100644 index 00000000000..5b655e92e9f --- /dev/null +++ b/api-ref/source/v3/samples/volume-create-request.xml @@ -0,0 +1,5 @@ + + diff --git a/api-ref/source/v3/samples/volume-create-response.json b/api-ref/source/v3/samples/volume-create-response.json new file mode 100644 index 00000000000..57441f030a4 --- /dev/null +++ b/api-ref/source/v3/samples/volume-create-response.json @@ -0,0 +1,34 @@ +{ + "volume": { + "status": "creating", + "migration_status": null, + "user_id": "0eea4eabcf184061a3b6db1e0daaf010", + "attachments": [], + "links": [ + { + "href": "http://23.253.248.171:8776/v3/bab7d5c60cd041a0a36f7c4b6e1dd978/volumes/6edbc2f4-1507-44f8-ac0d-eed1d2608d38", + "rel": "self" + }, + { + "href": "http://23.253.248.171:8776/bab7d5c60cd041a0a36f7c4b6e1dd978/volumes/6edbc2f4-1507-44f8-ac0d-eed1d2608d38", + "rel": "bookmark" + } + ], + "availability_zone": "nova", + "bootable": "false", + "encrypted": false, + "created_at": "2015-11-29T03:01:44.000000", + "description": null, + "updated_at": null, + "volume_type": "lvmdriver-1", + "name": "test-volume-attachments", + "replication_status": "disabled", + "consistencygroup_id": null, + "source_volid": null, + "snapshot_id": null, + "multiattach": false, + "metadata": {}, + "id": "6edbc2f4-1507-44f8-ac0d-eed1d2608d38", + "size": 2 + } +} diff --git a/api-ref/source/v3/samples/volume-create-response.xml b/api-ref/source/v3/samples/volume-create-response.xml new file mode 100644 index 00000000000..9be3c5e3943 --- /dev/null +++ b/api-ref/source/v3/samples/volume-create-response.xml @@ -0,0 +1,11 @@ + + + + + diff --git a/api-ref/source/v3/samples/volume-extend-request.json b/api-ref/source/v3/samples/volume-extend-request.json new file mode 100644 index 00000000000..a051cb3cb1c --- /dev/null +++ b/api-ref/source/v3/samples/volume-extend-request.json @@ -0,0 +1,5 @@ +{ + "os-extend": { + "new_size": 3 + } +} diff --git a/api-ref/source/v3/samples/volume-force-detach-request.json b/api-ref/source/v3/samples/volume-force-detach-request.json new file mode 100644 index 00000000000..277849d8cd6 --- /dev/null +++ b/api-ref/source/v3/samples/volume-force-detach-request.json @@ -0,0 +1,8 @@ +{ + "os-force_detach": { + "attachment_id": "d8777f54-84cf-4809-a679-468ffed56cf1", + "connector": { + "initiator": "iqn.2012-07.org.fake:01" + } + } +} diff --git a/api-ref/source/v3/samples/volume-image-metadata-set-request.json b/api-ref/source/v3/samples/volume-image-metadata-set-request.json new file mode 100644 index 00000000000..1f2be3d6efd --- /dev/null +++ b/api-ref/source/v3/samples/volume-image-metadata-set-request.json @@ -0,0 +1,10 @@ +{ + "os-set_image_metadata": { + "metadata": { + "image_id": "521752a6-acf6-4b2d-bc7a-119f9148cd8c", + "image_name": "image", + "kernel_id": "155d900f-4e14-4e4c-a73d-069cbf4541e6", + "ramdisk_id": "somedisk" + } + } +} diff --git a/api-ref/source/v3/samples/volume-image-metadata-unset-request.json b/api-ref/source/v3/samples/volume-image-metadata-unset-request.json new file mode 100644 index 00000000000..49d3295c5ae --- /dev/null +++ b/api-ref/source/v3/samples/volume-image-metadata-unset-request.json @@ -0,0 +1,5 @@ +{ + "os-unset_image_metadata": { + "key": "ramdisk_id" + } +} diff --git a/api-ref/source/v3/samples/volume-manage-request.json b/api-ref/source/v3/samples/volume-manage-request.json new file mode 100644 index 00000000000..36321478437 --- /dev/null +++ b/api-ref/source/v3/samples/volume-manage-request.json @@ -0,0 +1,18 @@ +{ + "volume": { + "host": "geraint-VirtualBox", + "ref": { + "source-name": "existingLV", + "source-id": "1234" + }, + "name": "New Volume", + "availability_zone": "az2", + "description": "Volume imported from existingLV", + "volume_type": null, + "bootable": true, + "metadata": { + "key1": "value1", + "key2": "value2" + } + } +} diff --git a/api-ref/source/v3/samples/volume-manage-response.json b/api-ref/source/v3/samples/volume-manage-response.json new file mode 100644 index 00000000000..a53976b9cba --- /dev/null +++ b/api-ref/source/v3/samples/volume-manage-response.json @@ -0,0 +1,33 @@ +{ + "volume": { + "status": "creating", + "user_id": "eae1472b5fc5496998a3d06550929e7e", + "attachments": [], + "links": [ + { + "href": "http://10.0.2.15:8776/v3/87c8522052ca4eed98bc672b4c1a3ddb/volumes/23cf872b-c781-4cd4-847d-5f2ec8cbd91c", + "rel": "self" + }, + { + "href": "http://10.0.2.15:8776/87c8522052ca4eed98bc672b4c1a3ddb/volumes/23cf872b-c781-4cd4-847d-5f2ec8cbd91c", + "rel": "bookmark" + } + ], + "availability_zone": "az2", + "bootable": "false", + "encrypted": "false", + "created_at": "2014-07-18T00:12:54.000000", + "description": "Volume imported from existingLV", + "os-vol-tenant-attr:tenant_id": "87c8522052ca4eed98bc672b4c1a3ddb", + "volume_type": null, + "name": "New Volume", + "source_volid": null, + "snapshot_id": null, + "metadata": { + "key2": "value2", + "key1": "value1" + }, + "id": "23cf872b-c781-4cd4-847d-5f2ec8cbd91c", + "size": 0 + } +} diff --git a/api-ref/source/v3/samples/volume-metadata-create-request.json b/api-ref/source/v3/samples/volume-metadata-create-request.json new file mode 100644 index 00000000000..1ff9aae2788 --- /dev/null +++ b/api-ref/source/v3/samples/volume-metadata-create-request.json @@ -0,0 +1,5 @@ +{ + "metadata": { + "name": "metadata0" + } +} diff --git a/api-ref/source/v3/samples/volume-metadata-create-response.json b/api-ref/source/v3/samples/volume-metadata-create-response.json new file mode 100644 index 00000000000..1ff9aae2788 --- /dev/null +++ b/api-ref/source/v3/samples/volume-metadata-create-response.json @@ -0,0 +1,5 @@ +{ + "metadata": { + "name": "metadata0" + } +} diff --git a/api-ref/source/v3/samples/volume-metadata-show-response.json b/api-ref/source/v3/samples/volume-metadata-show-response.json new file mode 100644 index 00000000000..5937a866595 --- /dev/null +++ b/api-ref/source/v3/samples/volume-metadata-show-response.json @@ -0,0 +1,3 @@ +{ + "metadata": {} +} diff --git a/api-ref/source/v3/samples/volume-metadata-show-response.xml b/api-ref/source/v3/samples/volume-metadata-show-response.xml new file mode 100644 index 00000000000..ba106077a94 --- /dev/null +++ b/api-ref/source/v3/samples/volume-metadata-show-response.xml @@ -0,0 +1,2 @@ + + diff --git a/api-ref/source/v3/samples/volume-metadata-update-request.json b/api-ref/source/v3/samples/volume-metadata-update-request.json new file mode 100644 index 00000000000..4d96ad8484a --- /dev/null +++ b/api-ref/source/v3/samples/volume-metadata-update-request.json @@ -0,0 +1,5 @@ +{ + "metadata": { + "name": "metadata1" + } +} diff --git a/api-ref/source/v3/samples/volume-metadata-update-request.xml b/api-ref/source/v3/samples/volume-metadata-update-request.xml new file mode 100644 index 00000000000..ceeb8f0314b --- /dev/null +++ b/api-ref/source/v3/samples/volume-metadata-update-request.xml @@ -0,0 +1,4 @@ + + + v2 + diff --git a/api-ref/source/v3/samples/volume-metadata-update-response.json b/api-ref/source/v3/samples/volume-metadata-update-response.json new file mode 100644 index 00000000000..4d96ad8484a --- /dev/null +++ b/api-ref/source/v3/samples/volume-metadata-update-response.json @@ -0,0 +1,5 @@ +{ + "metadata": { + "name": "metadata1" + } +} diff --git a/api-ref/source/v3/samples/volume-metadata-update-response.xml b/api-ref/source/v3/samples/volume-metadata-update-response.xml new file mode 100644 index 00000000000..6d00cdef115 --- /dev/null +++ b/api-ref/source/v3/samples/volume-metadata-update-response.xml @@ -0,0 +1,4 @@ + + + v2 + diff --git a/api-ref/source/v3/samples/volume-show-response.json b/api-ref/source/v3/samples/volume-show-response.json new file mode 100644 index 00000000000..c17556186fe --- /dev/null +++ b/api-ref/source/v3/samples/volume-show-response.json @@ -0,0 +1,33 @@ +{ + "volume": { + "status": "available", + "attachments": [], + "links": [ + { + "href": "http://localhost:8776/v3/0c2eba2c5af04d3f9e9d0d410b371fde/volumes/5aa119a8-d25b-45a7-8d1b-88e127885635", + "rel": "self" + }, + { + "href": "http://localhost:8776/0c2eba2c5af04d3f9e9d0d410b371fde/volumes/5aa119a8-d25b-45a7-8d1b-88e127885635", + "rel": "bookmark" + } + ], + "availability_zone": "nova", + "bootable": "false", + "os-vol-host-attr:host": "ip-10-168-107-25", + "source_volid": null, + "snapshot_id": null, + "id": "5aa119a8-d25b-45a7-8d1b-88e127885635", + "description": "Super volume.", + "name": "vol-002", + "created_at": "2013-02-25T02:40:21.000000", + "volume_type": "None", + "os-vol-tenant-attr:tenant_id": "0c2eba2c5af04d3f9e9d0d410b371fde", + "size": 1, + "os-volume-replication:driver_data": null, + "os-volume-replication:extended_status": null, + "metadata": { + "contents": "not junk" + } + } +} diff --git a/api-ref/source/v3/samples/volume-show-response.xml b/api-ref/source/v3/samples/volume-show-response.xml new file mode 100644 index 00000000000..17632dfcb80 --- /dev/null +++ b/api-ref/source/v3/samples/volume-show-response.xml @@ -0,0 +1,19 @@ + + + + + not junk + + diff --git a/api-ref/source/v3/samples/volume-status-reset-request.json b/api-ref/source/v3/samples/volume-status-reset-request.json new file mode 100644 index 00000000000..506b610190a --- /dev/null +++ b/api-ref/source/v3/samples/volume-status-reset-request.json @@ -0,0 +1,7 @@ +{ + "os-reset_status": { + "status": "available", + "attach_status": "detached", + "migration_status": "migrating" + } +} diff --git a/api-ref/source/v3/samples/volume-transfer-accept-request.json b/api-ref/source/v3/samples/volume-transfer-accept-request.json new file mode 100644 index 00000000000..3399f1e0ca4 --- /dev/null +++ b/api-ref/source/v3/samples/volume-transfer-accept-request.json @@ -0,0 +1,5 @@ +{ + "accept": { + "auth_key": "9266c59563c84664" + } +} diff --git a/api-ref/source/v3/samples/volume-transfer-accept-response.json b/api-ref/source/v3/samples/volume-transfer-accept-response.json new file mode 100644 index 00000000000..ab4604dd149 --- /dev/null +++ b/api-ref/source/v3/samples/volume-transfer-accept-response.json @@ -0,0 +1,17 @@ +{ + "transfer": { + "id": "cac5c677-73a9-4288-bb9c-b2ebfb547377", + "name": "first volume transfer", + "volume_id": "894623a6-e901-4312-aa06-4275e6321cce", + "links": [ + { + "href": "http://localhost/v3/firstproject/volumes/1", + "rel": "self" + }, + { + "href": "http://localhost/firstproject/volumes/1", + "rel": "bookmark" + } + ] + } +} diff --git a/api-ref/source/v3/samples/volume-transfer-create-request.json b/api-ref/source/v3/samples/volume-transfer-create-request.json new file mode 100644 index 00000000000..f517b7498de --- /dev/null +++ b/api-ref/source/v3/samples/volume-transfer-create-request.json @@ -0,0 +1,6 @@ +{ + "transfer": { + "volume_id": "c86b9af4-151d-4ead-b62c-5fb967af0e37", + "name": "first volume" + } +} diff --git a/api-ref/source/v3/samples/volume-transfer-create-response.json b/api-ref/source/v3/samples/volume-transfer-create-response.json new file mode 100644 index 00000000000..7f0e9e2c5d4 --- /dev/null +++ b/api-ref/source/v3/samples/volume-transfer-create-response.json @@ -0,0 +1,19 @@ +{ + "transfer": { + "id": "1a7059f5-8ed7-45b7-8d05-2811e5d09f24", + "created_at": "2015-02-25T03:56:53.081642", + "name": "first volume", + "volume_id": "c86b9af4-151d-4ead-b62c-5fb967af0e37", + "auth_key": "9266c59563c84664", + "links": [ + { + "href": "http://localhost/v3/firstproject/volumes/3", + "rel": "self" + }, + { + "href": "http://localhost/firstproject/volumes/3", + "rel": "bookmark" + } + ] + } +} diff --git a/api-ref/source/v3/samples/volume-transfer-show-response.json b/api-ref/source/v3/samples/volume-transfer-show-response.json new file mode 100644 index 00000000000..366e5472511 --- /dev/null +++ b/api-ref/source/v3/samples/volume-transfer-show-response.json @@ -0,0 +1,18 @@ +{ + "transfer": { + "id": "cac5c677-73a9-4288-bb9c-b2ebfb547377", + "created_at": "2015-02-25T03:56:53.081642", + "name": "first volume transfer", + "volume_id": "894623a6-e901-4312-aa06-4275e6321cce", + "links": [ + { + "href": "http://localhost/v3/firstproject/volumes/1", + "rel": "self" + }, + { + "href": "http://localhost/firstproject/volumes/1", + "rel": "bookmark" + } + ] + } +} diff --git a/api-ref/source/v3/samples/volume-transfers-list-detailed-response.json b/api-ref/source/v3/samples/volume-transfers-list-detailed-response.json new file mode 100644 index 00000000000..52ba78bc022 --- /dev/null +++ b/api-ref/source/v3/samples/volume-transfers-list-detailed-response.json @@ -0,0 +1,36 @@ +{ + "transfers": [ + { + "id": "cac5c677-73a9-4288-bb9c-b2ebfb547377", + "created_at": "2015-02-25T03:56:53.081642", + "name": "first volume transfer", + "volume_id": "894623a6-e901-4312-aa06-4275e6321cce", + "links": [ + { + "href": "http://localhost/v3/firstproject/volumes/1", + "rel": "self" + }, + { + "href": "http://localhost/firstproject/volumes/1", + "rel": "bookmark" + } + ] + }, + { + "id": "f26c0dee-d20d-4e80-8dee-a8d91b9742a1", + "created_at": "2015-03-25T03:56:53.081642", + "name": "second volume transfer", + "volume_id": "673db275-379f-41af-8371-e1652132b4c1", + "links": [ + { + "href": "http://localhost/v3/firstproject/volumes/2", + "rel": "self" + }, + { + "href": "http://localhost/firstproject/volumes/2", + "rel": "bookmark" + } + ] + } + ] +} diff --git a/api-ref/source/v3/samples/volume-transfers-list-response.json b/api-ref/source/v3/samples/volume-transfers-list-response.json new file mode 100644 index 00000000000..66a2db54e5b --- /dev/null +++ b/api-ref/source/v3/samples/volume-transfers-list-response.json @@ -0,0 +1,34 @@ +{ + "transfers": [ + { + "id": "cac5c677-73a9-4288-bb9c-b2ebfb547377", + "name": "first volume transfer", + "volume_id": "894623a6-e901-4312-aa06-4275e6321cce", + "links": [ + { + "href": "http://localhost/v3/firstproject/volumes/1", + "rel": "self" + }, + { + "href": "http://localhost/firstproject/volumes/1", + "rel": "bookmark" + } + ] + }, + { + "id": "f26c0dee-d20d-4e80-8dee-a8d91b9742a1", + "name": "second volume transfer", + "volume_id": "673db275-379f-41af-8371-e1652132b4c1", + "links": [ + { + "href": "http://localhost/v3/firstproject/volumes/2", + "rel": "self" + }, + { + "href": "http://localhost/firstproject/volumes/2", + "rel": "bookmark" + } + ] + } + ] +} diff --git a/api-ref/source/v3/samples/volume-type-access-add-request.json b/api-ref/source/v3/samples/volume-type-access-add-request.json new file mode 100644 index 00000000000..b7481edbbf3 --- /dev/null +++ b/api-ref/source/v3/samples/volume-type-access-add-request.json @@ -0,0 +1,5 @@ +{ + "addProjectAccess": { + "project": "f270b245cb11498ca4031deb7e141cfa" + } +} diff --git a/api-ref/source/v3/samples/volume-type-access-add-request.xml b/api-ref/source/v3/samples/volume-type-access-add-request.xml new file mode 100644 index 00000000000..fdf06a0c2c1 --- /dev/null +++ b/api-ref/source/v3/samples/volume-type-access-add-request.xml @@ -0,0 +1,4 @@ + + + "f270b245cb11498ca4031deb7e141cfa" + diff --git a/api-ref/source/v3/samples/volume-type-access-delete-request.json b/api-ref/source/v3/samples/volume-type-access-delete-request.json new file mode 100644 index 00000000000..144997bfcc0 --- /dev/null +++ b/api-ref/source/v3/samples/volume-type-access-delete-request.json @@ -0,0 +1,5 @@ +{ + "removeProjectAccess": { + "project": "f270b245cb11498ca4031deb7e141cfa" + } +} diff --git a/api-ref/source/v3/samples/volume-type-access-delete-request.xml b/api-ref/source/v3/samples/volume-type-access-delete-request.xml new file mode 100644 index 00000000000..dcde1b2e4e7 --- /dev/null +++ b/api-ref/source/v3/samples/volume-type-access-delete-request.xml @@ -0,0 +1,4 @@ + + + "f270b245cb11498ca4031deb7e141cfa" + diff --git a/api-ref/source/v3/samples/volume-type-access-list-response.json b/api-ref/source/v3/samples/volume-type-access-list-response.json new file mode 100644 index 00000000000..afcffb0810b --- /dev/null +++ b/api-ref/source/v3/samples/volume-type-access-list-response.json @@ -0,0 +1,6 @@ +{ + "volume_type_access": { + "volume_type_id": "3c67e124-39ad-4ace-a507-8bb7bf510c26", + "project_id": "f270b245cb11498ca4031deb7e141cfa" + } +} diff --git a/api-ref/source/v3/samples/volume-type-create-request.json b/api-ref/source/v3/samples/volume-type-create-request.json new file mode 100644 index 00000000000..13d86bfdf5b --- /dev/null +++ b/api-ref/source/v3/samples/volume-type-create-request.json @@ -0,0 +1,10 @@ +{ + "volume_type": { + "name": "vol-type-001", + "description": "volume type 0001", + "os-volume-type-access:is_public": true, + "extra_specs": { + "capabilities": "gpu" + } + } +} diff --git a/api-ref/source/v3/samples/volume-type-show-request.json b/api-ref/source/v3/samples/volume-type-show-request.json new file mode 100644 index 00000000000..a91f2e94d63 --- /dev/null +++ b/api-ref/source/v3/samples/volume-type-show-request.json @@ -0,0 +1,9 @@ +{ + "volume_type": { + "id": "289da7f8-6440-407c-9fb4-7db01ec49164", + "name": "vol-type-001", + "extra_specs": { + "capabilities": "gpu" + } + } +} diff --git a/api-ref/source/v3/samples/volume-type-show-request.xml b/api-ref/source/v3/samples/volume-type-show-request.xml new file mode 100644 index 00000000000..1c4291d08f1 --- /dev/null +++ b/api-ref/source/v3/samples/volume-type-show-request.xml @@ -0,0 +1,8 @@ + + + + gpu + + diff --git a/api-ref/source/v3/samples/volume-type-show-response.json b/api-ref/source/v3/samples/volume-type-show-response.json new file mode 100644 index 00000000000..7a0420f201a --- /dev/null +++ b/api-ref/source/v3/samples/volume-type-show-response.json @@ -0,0 +1,11 @@ +{ + "volume_type": { + "id": "6685584b-1eac-4da6-b5c3-555430cf68ff", + "name": "vol-type-001", + "description": "volume type 001", + "is_public": "true", + "extra_specs": { + "capabilities": "gpu" + } + } +} diff --git a/api-ref/source/v3/samples/volume-type-show-response.xml b/api-ref/source/v3/samples/volume-type-show-response.xml new file mode 100644 index 00000000000..f5935c74a1b --- /dev/null +++ b/api-ref/source/v3/samples/volume-type-show-response.xml @@ -0,0 +1,9 @@ + + + + gpu + + diff --git a/api-ref/source/v3/samples/volume-type-update-request.json b/api-ref/source/v3/samples/volume-type-update-request.json new file mode 100644 index 00000000000..8bdc5befb3b --- /dev/null +++ b/api-ref/source/v3/samples/volume-type-update-request.json @@ -0,0 +1,10 @@ +{ + "volume_type": { + "name": "vol-type-001", + "description": "volume type 0001", + "is_public": true, + "extra_specs": { + "capabilities": "gpu" + } + } +} diff --git a/api-ref/source/v3/samples/volume-types-list-response.json b/api-ref/source/v3/samples/volume-types-list-response.json new file mode 100644 index 00000000000..1d72f923e23 --- /dev/null +++ b/api-ref/source/v3/samples/volume-types-list-response.json @@ -0,0 +1,16 @@ +{ + "volume_types": [ + { + "extra_specs": { + "capabilities": "gpu" + }, + "id": "6685584b-1eac-4da6-b5c3-555430cf68ff", + "name": "SSD" + }, + { + "extra_specs": {}, + "id": "8eb69a46-df97-4e41-9586-9a40a7533803", + "name": "SATA" + } + ] +} diff --git a/api-ref/source/v3/samples/volume-types-list-response.xml b/api-ref/source/v3/samples/volume-types-list-response.xml new file mode 100644 index 00000000000..e227787da51 --- /dev/null +++ b/api-ref/source/v3/samples/volume-types-list-response.xml @@ -0,0 +1,11 @@ + + + + + gpu + + + + diff --git a/api-ref/source/v3/samples/volume-unmanage-request.json b/api-ref/source/v3/samples/volume-unmanage-request.json new file mode 100644 index 00000000000..a75950bb9e0 --- /dev/null +++ b/api-ref/source/v3/samples/volume-unmanage-request.json @@ -0,0 +1,3 @@ +{ + "os-unmanage": {} +} diff --git a/api-ref/source/v3/samples/volume-update-request.json b/api-ref/source/v3/samples/volume-update-request.json new file mode 100644 index 00000000000..8e52dacb6d4 --- /dev/null +++ b/api-ref/source/v3/samples/volume-update-request.json @@ -0,0 +1,6 @@ +{ + "volume": { + "name": "vol-003", + "description": "This is yet, another volume." + } +} diff --git a/api-ref/source/v3/samples/volume-update-request.xml b/api-ref/source/v3/samples/volume-update-request.xml new file mode 100644 index 00000000000..d03ed193032 --- /dev/null +++ b/api-ref/source/v3/samples/volume-update-request.xml @@ -0,0 +1,4 @@ + + diff --git a/api-ref/source/v3/samples/volume-update-response.json b/api-ref/source/v3/samples/volume-update-response.json new file mode 100644 index 00000000000..1fc925e915a --- /dev/null +++ b/api-ref/source/v3/samples/volume-update-response.json @@ -0,0 +1,36 @@ +{ + "volume": { + "status": "available", + "migration_status": null, + "user_id": "0eea4eabcf184061a3b6db1e0daaf010", + "attachments": [], + "links": [ + { + "href": "http://localhost:8776/v3/0c2eba2c5af04d3f9e9d0d410b371fde/volumes/5aa119a8-d25b-45a7-8d1b-88e127885635", + "rel": "self" + }, + { + "href": "http://localhost:8776/0c2eba2c5af04d3f9e9d0d410b371fde/volumes/5aa119a8-d25b-45a7-8d1b-88e127885635", + "rel": "bookmark" + } + ], + "availability_zone": "nova", + "bootable": "false", + "encrypted": false, + "created_at": "2015-11-29T03:01:44.000000", + "description": "This is yet, another volume.", + "updated_at": null, + "volume_type": "lvmdriver-1", + "name": "vol-003", + "replication_status": "disabled", + "consistencygroup_id": null, + "source_volid": null, + "snapshot_id": null, + "multiattach": false, + "metadata": { + "contents": "not junk" + }, + "id": "5aa119a8-d25b-45a7-8d1b-88e127885635", + "size": 1 + } +} diff --git a/api-ref/source/v3/samples/volume-update-response.xml b/api-ref/source/v3/samples/volume-update-response.xml new file mode 100644 index 00000000000..0524361acba --- /dev/null +++ b/api-ref/source/v3/samples/volume-update-response.xml @@ -0,0 +1,13 @@ + + + + + not junk + + diff --git a/api-ref/source/v3/samples/volumes-list-detailed-response.json b/api-ref/source/v3/samples/volumes-list-detailed-response.json new file mode 100644 index 00000000000..28768fd30e9 --- /dev/null +++ b/api-ref/source/v3/samples/volumes-list-detailed-response.json @@ -0,0 +1,102 @@ +{ + "volumes": [ + { + "migration_status": null, + "attachments": [ + { + "server_id": "f4fda93b-06e0-4743-8117-bc8bcecd651b", + "attachment_id": "3b4db356-253d-4fab-bfa0-e3626c0b8405", + "host_name": null, + "volume_id": "6edbc2f4-1507-44f8-ac0d-eed1d2608d38", + "device": "/dev/vdb", + "id": "6edbc2f4-1507-44f8-ac0d-eed1d2608d38" + } + ], + "links": [ + { + "href": "http://23.253.248.171:8776/v3/bab7d5c60cd041a0a36f7c4b6e1dd978/volumes/6edbc2f4-1507-44f8-ac0d-eed1d2608d38", + "rel": "self" + }, + { + "href": "http://23.253.248.171:8776/bab7d5c60cd041a0a36f7c4b6e1dd978/volumes/6edbc2f4-1507-44f8-ac0d-eed1d2608d38", + "rel": "bookmark" + } + ], + "availability_zone": "nova", + "os-vol-host-attr:host": "difleming@lvmdriver-1#lvmdriver-1", + "encrypted": false, + "os-volume-replication:extended_status": null, + "replication_status": "disabled", + "snapshot_id": null, + "id": "6edbc2f4-1507-44f8-ac0d-eed1d2608d38", + "size": 2, + "user_id": "32779452fcd34ae1a53a797ac8a1e064", + "os-vol-tenant-attr:tenant_id": "bab7d5c60cd041a0a36f7c4b6e1dd978", + "os-vol-mig-status-attr:migstat": null, + "metadata": { + "readonly": false, + "attached_mode": "rw" + }, + "status": "in-use", + "description": null, + "multiattach": true, + "os-volume-replication:driver_data": null, + "source_volid": null, + "consistencygroup_id": null, + "os-vol-mig-status-attr:name_id": null, + "name": "test-volume-attachments", + "bootable": "false", + "created_at": "2015-11-29T03:01:44.000000", + "volume_type": "lvmdriver-1" + }, + { + "migration_status": null, + "attachments": [], + "links": [ + { + "href": "http://23.253.248.171:8776/v3/bab7d5c60cd041a0a36f7c4b6e1dd978/volumes/173f7b48-c4c1-4e70-9acc-086b39073506", + "rel": "self" + }, + { + "href": "http://23.253.248.171:8776/bab7d5c60cd041a0a36f7c4b6e1dd978/volumes/173f7b48-c4c1-4e70-9acc-086b39073506", + "rel": "bookmark" + } + ], + "availability_zone": "nova", + "os-vol-host-attr:host": "difleming@lvmdriver-1#lvmdriver-1", + "encrypted": false, + "os-volume-replication:extended_status": null, + "replication_status": "disabled", + "snapshot_id": null, + "id": "173f7b48-c4c1-4e70-9acc-086b39073506", + "size": 1, + "user_id": "32779452fcd34ae1a53a797ac8a1e064", + "os-vol-tenant-attr:tenant_id": "bab7d5c60cd041a0a36f7c4b6e1dd978", + "os-vol-mig-status-attr:migstat": null, + "metadata": {}, + "status": "available", + "volume_image_metadata": { + "kernel_id": "8a55f5f1-78f7-4477-8168-977d8519342c", + "checksum": "eb9139e4942121f22bbc2afc0400b2a4", + "min_ram": "0", + "ramdisk_id": "5f6bdf8a-92db-4988-865b-60bdd808d9ef", + "disk_format": "ami", + "image_name": "cirros-0.3.4-x86_64-uec", + "image_id": "b48c53e1-9a96-4a5a-a630-2e74ec54ddcc", + "container_format": "ami", + "min_disk": "0", + "size": "25165824" + }, + "description": "", + "multiattach": false, + "os-volume-replication:driver_data": null, + "source_volid": null, + "consistencygroup_id": null, + "os-vol-mig-status-attr:name_id": null, + "name": "test-volume", + "bootable": "true", + "created_at": "2015-11-29T02:25:18.000000", + "volume_type": "lvmdriver-1" + } + ] +} diff --git a/api-ref/source/v3/samples/volumes-list-detailed-response.xml b/api-ref/source/v3/samples/volumes-list-detailed-response.xml new file mode 100644 index 00000000000..36bbffd0ab8 --- /dev/null +++ b/api-ref/source/v3/samples/volumes-list-detailed-response.xml @@ -0,0 +1,31 @@ + + + + + + junk + + + + + + not junk + + + diff --git a/api-ref/source/v3/samples/volumes-list-response.json b/api-ref/source/v3/samples/volumes-list-response.json new file mode 100644 index 00000000000..eb4ebafa103 --- /dev/null +++ b/api-ref/source/v3/samples/volumes-list-response.json @@ -0,0 +1,32 @@ +{ + "volumes": [ + { + "id": "45baf976-c20a-4894-a7c3-c94b7376bf55", + "links": [ + { + "href": "http://localhost:8776/v3/0c2eba2c5af04d3f9e9d0d410b371fde/volumes/45baf976-c20a-4894-a7c3-c94b7376bf55", + "rel": "self" + }, + { + "href": "http://localhost:8776/0c2eba2c5af04d3f9e9d0d410b371fde/volumes/45baf976-c20a-4894-a7c3-c94b7376bf55", + "rel": "bookmark" + } + ], + "name": "vol-004" + }, + { + "id": "5aa119a8-d25b-45a7-8d1b-88e127885635", + "links": [ + { + "href": "http://localhost:8776/v3/0c2eba2c5af04d3f9e9d0d410b371fde/volumes/5aa119a8-d25b-45a7-8d1b-88e127885635", + "rel": "self" + }, + { + "href": "http://localhost:8776/0c2eba2c5af04d3f9e9d0d410b371fde/volumes/5aa119a8-d25b-45a7-8d1b-88e127885635", + "rel": "bookmark" + } + ], + "name": "vol-003" + } + ] +} diff --git a/api-ref/source/v3/samples/volumes-list-response.xml b/api-ref/source/v3/samples/volumes-list-response.xml new file mode 100644 index 00000000000..024608615ad --- /dev/null +++ b/api-ref/source/v3/samples/volumes-list-response.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + diff --git a/api-ref/source/v3/volume-manage.inc b/api-ref/source/v3/volume-manage.inc new file mode 100644 index 00000000000..9bd5cb7c622 --- /dev/null +++ b/api-ref/source/v3/volume-manage.inc @@ -0,0 +1,50 @@ +.. -*- rst -*- + +========================================== +Volume manage extension (os-volume-manage) +========================================== + +Creates volumes by using existing storage instead of allocating new +storage. + + +Manage an existing volume +========================= + +.. rest_method:: POST /v3/{tenant_id}/os-volume-manage + +Creates a Block Storage volume by using existing storage rather than allocating new storage. + +The caller must specify a reference to an existing storage volume +in the ref parameter in the request. Although each storage driver +might interpret this reference differently, the driver should +accept a reference structure that contains either a source-id +or source-name element, if possible. + +The API chooses the size of the volume by rounding up the size of +the existing storage volume to the next gibibyte (GiB). + +Error response codes:202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - description: description + - availability_zone: availability_zone + - bootable: bootable + - volume_type: volume_type + - name: name + - volume: volume + - host: host + - ref: ref + - metadata: metadata + - tenant_id: tenant_id + +Request Example +--------------- + +.. literalinclude:: ./samples/volume-manage-request.json + :language: javascript diff --git a/api-ref/source/v3/volume-type-access.inc b/api-ref/source/v3/volume-type-access.inc new file mode 100644 index 00000000000..699c9ad42d2 --- /dev/null +++ b/api-ref/source/v3/volume-type-access.inc @@ -0,0 +1,103 @@ +.. -*- rst -*- + +============================ +Volume type access (volumes) +============================ + +Private volume type access to project. + +By default, volumes types are public. To create a private volume +type, set the ``is_public`` boolean field to ``false`` at volume +type creation time. To control access to a private volume type, +user needs to add a project to or remove a project from the volume +type. Private volume types without projects are only accessible by +users with the administrative role and context. + + +Add private volume type access to project +========================================= + +.. rest_method:: POST /v3/{tenant_id}/types/{volume_type}/action + +Adds private volume type access to a project. + +Error response codes:202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - project: project + - tenant_id: tenant_id + - volume_type: volume_type + +Request Example +--------------- + +.. literalinclude:: ./samples/volume-type-access-add-request.json + :language: javascript + + +Remove private volume type access from project +============================================== + +.. rest_method:: POST /v3/{tenant_id}/types/{volume_type}/action + +Removes private volume type access from a project. + +Error response codes:202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - project: project + - tenant_id: tenant_id + - volume_type: volume_type + +Request Example +--------------- + +.. literalinclude:: ./samples/volume-type-access-delete-request.json + :language: javascript + + +List private volume type access detail +====================================== + +.. rest_method:: GET /v3/{tenant_id}/types/{volume_type}/os-volume-type-access + +Lists project IDs that have access to private volume type. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - volume_type: volume_type + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - project_id: project_id + + + +Response Example +---------------- + +.. literalinclude:: ./samples/volume-type-access-list-response.json + :language: javascript diff --git a/api-ref/source/v3/volumes-v3-extensions.inc b/api-ref/source/v3/volumes-v3-extensions.inc new file mode 100644 index 00000000000..8b7014f63e4 --- /dev/null +++ b/api-ref/source/v3/volumes-v3-extensions.inc @@ -0,0 +1,52 @@ +.. -*- rst -*- + +=========================== +API extensions (extensions) +=========================== + + + + +List Known API extensions +========================= + +.. rest_method:: GET /v3/{tenant_id}/extensions + +Lists Block Storage API extensions. + + +Normal response codes: 200 +Error response codes:300, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - updated: updated + - description: description + - links: links + - namespace: namespace + - alias: alias + - name: name + + + + +Response Example +---------------- + +.. literalinclude:: ./samples/extensions-list-response.json + :language: javascript + + + diff --git a/api-ref/source/v3/volumes-v3-snapshots.inc b/api-ref/source/v3/volumes-v3-snapshots.inc new file mode 100644 index 00000000000..15edefa22dd --- /dev/null +++ b/api-ref/source/v3/volumes-v3-snapshots.inc @@ -0,0 +1,359 @@ +.. -*- rst -*- + +============================ +Volume snapshots (snapshots) +============================ + +A snapshot is a point-in-time copy of the data that a volume +contains. + +When you create, list, or delete snapshots, these status values are +possible: + +**Snapshot statuses** + ++----------------+-------------------------------------+ +| Status | Description | ++----------------+-------------------------------------+ +| creating | The snapshot is being created. | ++----------------+-------------------------------------+ +| available | The snapshot is ready to use. | ++----------------+-------------------------------------+ +| deleting | The snapshot is being deleted. | ++----------------+-------------------------------------+ +| error | A snapshot creation error occurred. | ++----------------+-------------------------------------+ +| error_deleting | A snapshot deletion error occurred. | ++----------------+-------------------------------------+ + + +List snapshots and details +========================== + +.. rest_method:: GET /v3/{tenant_id}/snapshots/detail + +Lists all Block Storage snapshots, with details, that the tenant can access. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - status: status + - os-extended-snapshot-attributes:progress: os-extended-snapshot-attributes:progress + - description: description + - created_at: created_at + - name: name + - volume_id: volume_id + - os-extended-snapshot-attributes:project_id: os-extended-snapshot-attributes:project_id + - size: size + - id: id + - metadata: metadata + +Response Example +---------------- + +.. literalinclude:: ./samples/snapshots-list-detailed-response.json + :language: javascript + + +Create a snapshot +================= + +.. rest_method:: POST /v3/{tenant_id}/snapshots + +Creates a volume snapshot, which is a point-in-time, complete copy of a volume. You can create a volume from a snapshot. + +Error response codes:202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - snapshot: snapshot + - volume_id: volume_id + - force: force + - description: description + - name: name + - tenant_id: tenant_id + +Request Example +--------------- + +.. literalinclude:: ./samples/snapshot-create-request.json + :language: javascript + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - status: status + - description: description + - created_at: created_at + - name: name + - snapshot: snapshot + - volume_id: volume_id + - metadata: metadata + - id: id + - size: size + + +List accessible snapshots +========================= + +.. rest_method:: GET /v3/{tenant_id}/snapshots + +Lists all Block Storage snapshots, with summary information, that the tenant can access. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - sort_key: sort_key + - sort_dir: sort_dir + - limit: limit + - marker: marker + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - status: status + - description: description + - created_at: created_at + - name: name + - volume_id: volume_id + - metadata: metadata + - id: id + - size: size + +Response Example +---------------- + +.. literalinclude:: ./samples/snapshots-list-response.json + :language: javascript + + +Show a snapshot's metadata +========================== + +.. rest_method:: GET /v3/{tenant_id}/snapshots/{snapshot_id}/metadata + +Shows metadata for a snapshot. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - snapshot_id: snapshot_id + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - status: status + - os-extended-snapshot-attributes:progress: os-extended-snapshot-attributes:progress + - description: description + - created_at: created_at + - name: name + - snapshot: snapshot + - volume_id: volume_id + - os-extended-snapshot-attributes:project_id: os-extended-snapshot-attributes:project_id + - size: size + - id: id + - metadata: metadata + +Response Example +---------------- + +.. literalinclude:: ./samples/snapshot-metadata-show-response.json + :language: javascript + + +Update a snapshot's metadata +============================ + +.. rest_method:: PUT /v3/{tenant_id}/snapshots/{snapshot_id}/metadata + +Updates metadata for a snapshot. + +Replaces metadata items that match keys. Does not modify items that +are not in the request. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - metadata: metadata + - tenant_id: tenant_id + - snapshot_id: snapshot_id + +Request Example +--------------- + +.. literalinclude:: ./samples/snapshot-metadata-update-request.json + :language: javascript + + +Response Example +---------------- + +.. literalinclude:: ./samples/snapshot-metadata-update-response.json + :language: javascript + + +Show a snapshot's details +========================= + +.. rest_method:: GET /v3/{tenant_id}/snapshots/{snapshot_id} + +Shows details for a snapshot. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - snapshot_id: snapshot_id + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - status: status + - os-extended-snapshot-attributes:progress: os-extended-snapshot-attributes:progress + - description: description + - created_at: created_at + - name: name + - snapshot: snapshot + - volume_id: volume_id + - os-extended-snapshot-attributes:project_id: os-extended-snapshot-attributes:project_id + - size: size + - id: id + - metadata: metadata + +Response Example +---------------- + +.. literalinclude:: ./samples/snapshot-show-response.json + :language: javascript + + +Update a snapshot +================= + +.. rest_method:: PUT /v3/{tenant_id}/snapshots/{snapshot_id} + +Updates a snapshot. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - snapshot: snapshot + - description: description + - name: name + - tenant_id: tenant_id + - snapshot_id: snapshot_id + +Request Example +--------------- + +.. literalinclude:: ./samples/snapshot-update-request.json + :language: javascript + + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - status: status + - description: description + - created_at: created_at + - name: name + - snapshot: snapshot + - volume_id: volume_id + - metadata: metadata + - id: id + - size: size + +Response Example +---------------- + +.. literalinclude:: ./samples/snapshot-update-response.json + :language: javascript + + +Delete a snapshot +================= + +.. rest_method:: DELETE /v3/{tenant_id}/snapshots/{snapshot_id} + +Deletes a snapshot. + +Error response codes:202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - snapshot_id: snapshot_id diff --git a/api-ref/source/v3/volumes-v3-types.inc b/api-ref/source/v3/volumes-v3-types.inc new file mode 100644 index 00000000000..1f55c5fac2d --- /dev/null +++ b/api-ref/source/v3/volumes-v3-types.inc @@ -0,0 +1,273 @@ +.. -*- rst -*- + +==================== +Volume types (types) +==================== + + +Update a volume type +==================== + +.. rest_method:: PUT /v3/{tenant_id}/types/{volume_type_id} + +Updates a volume type. + +To create an environment with multiple-storage back ends, you must +specify a volume type. The API spawns Block Storage volume back +ends as children to ``cinder-volume``, and keys them from a unique +queue. The API names the back ends ``cinder-volume.HOST.BACKEND``. +For example, ``cinder-volume.ubuntu.lvmdriver``. When you create a +volume, the scheduler chooses an appropriate back end for the +volume type to handle the request. + +For information about how to use volume types to create multiple- +storage back ends, see `Configure multiple-storage back ends +`_. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - volume_type: volume_type + - volume_type_id: volume_type_id + - tenant_id: tenant_id + +Request Example +--------------- + +.. literalinclude:: ./samples/volume-type-update-request.json + :language: javascript + + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - is_public: is_public + - extra_specs: extra_specs + - description: description + - volume_type: volume_type + - name: name + +Response Example +---------------- + +.. literalinclude:: ./samples/volume-type-show-response.json + :language: javascript + + +Update extra specs for volume type +================================== + +.. rest_method:: PUT /v3/{tenant_id}/types/{volume_type_id} + +Updates the extra specifications that are assigned to a volume type. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - extra_specs: extra_specs + - volume_type: volume_type + - volume_type_id: volume_type_id + - tenant_id: tenant_id + +Request Example +--------------- + +.. literalinclude:: ./samples/volume-type-update-request.json + :language: javascript + + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - is_public: is_public + - extra_specs: extra_specs + - description: description + - volume_type: volume_type + - name: name + + +Response Example +---------------- + +.. literalinclude:: ./samples/volume-type-show-response.json + :language: javascript + + +Show volume type detail +======================= + +.. rest_method:: GET /v3/{tenant_id}/types/{volume_type_id} + +Shows details for a volume type. + + +Normal response codes: 200 +Error response codes: + +Request +------- + +.. rest_parameters:: parameters.yaml + + - volume_type_id: volume_type_id + - tenant_id: tenant_id + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - is_public: is_public + - extra_specs: extra_specs + - description: description + - volume_type: volume_type + - name: name + + +Response Example +---------------- + +.. literalinclude:: ./samples/volume-type-show-response.json + :language: javascript + + +Delete a volume type +==================== + +.. rest_method:: DELETE /v3/{tenant_id}/types/{volume_type_id} + +Deletes a volume type. + +Error response codes:202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - volume_type_id: volume_type_id + - tenant_id: tenant_id + + +List all volume types +===================== + +.. rest_method:: GET /v3/{tenant_id}/types + +Lists volume types. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - sort_key: sort_key + - sort_dir: sort_dir + - limit: limit + - marker: marker + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - volume_types: volume_types + - extra_specs: extra_specs + - name: name + - volume_type: volume_type + +Response Example +---------------- + +.. literalinclude:: ./samples/volume-types-list-response.json + :language: javascript + + +Create a volume type +==================== + +.. rest_method:: POST /v3/{tenant_id}/types + +Creates a volume type. + +To create an environment with multiple-storage back ends, you must +specify a volume type. Block Storage volume back ends are spawned +as children to ``cinder-volume``, and they are keyed from a unique +queue. They are named ``cinder-volume.HOST.BACKEND``. For example, +``cinder-volume.ubuntu.lvmdriver``. When a volume is created, the +scheduler chooses an appropriate back end to handle the request +based on the volume type. + +For information about how to use volume types to create multiple- +storage back ends, see `Configure multiple-storage back ends +`_. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - volume_type: volume_type + - tenant_id: tenant_id + +Request Example +--------------- + +.. literalinclude:: ./samples/volume-type-create-request.json + :language: javascript + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - is_public: is_public + - extra_specs: extra_specs + - description: description + - volume_type: volume_type + - name: name + + +Response Example +---------------- + +.. literalinclude:: ./samples/volume-type-show-response.json + :language: javascript + diff --git a/api-ref/source/v3/volumes-v3-versions.inc b/api-ref/source/v3/volumes-v3-versions.inc new file mode 100644 index 00000000000..b190bc9cf5d --- /dev/null +++ b/api-ref/source/v3/volumes-v3-versions.inc @@ -0,0 +1,67 @@ +.. -*- rst -*- + +============ +API versions +============ + + + + +List Known API versions +======================= + +.. rest_method:: GET / + +Lists information for all Block Storage API versions. + + +Normal response codes: 200 +Error response codes:300, + + +Request +------- + + +Response Example +---------------- + +.. literalinclude:: ./samples/versions-response.json + :language: javascript + + + + +Show API v3 details +=================== + +.. rest_method:: GET /v3 + +Shows details for Block Storage API v3. + + +Normal response codes: 200 +Error response codes:203, + + +Request +------- + + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - location: location + + + +Response Example +---------------- + +.. literalinclude:: ./samples/version-v3-show-response.json + :language: javascript + + diff --git a/api-ref/source/v3/volumes-v3-volumes-actions.inc b/api-ref/source/v3/volumes-v3-volumes-actions.inc new file mode 100644 index 00000000000..b26084c09e4 --- /dev/null +++ b/api-ref/source/v3/volumes-v3-volumes-actions.inc @@ -0,0 +1,269 @@ +.. -*- rst -*- + +================================ +Volume actions (volumes, action) +================================ + +Extends the size of, resets statuses for, sets image metadata for, +and removes image metadata from a volume. Attaches a volume to a +server, detaches a volume from a server, and removes a volume from +Block Storage management without actually removing the back-end +storage object associated with it. + + +Extend a volume size +==================== + +.. rest_method:: POST /v3/{tenant_id}/volumes/{volume_id}/action + +Extends the size of a volume to a requested size, in gibibytes (GiB). Specify the ``os-extend`` action in the request body. + +Preconditions + +- Volume status must be ``available``. + +- Sufficient amount of storage must exist to extend the volume. + +- The user quota must have sufficient volume storage. + +Troubleshooting + +- An ``error_extending`` volume status indicates that the request + failed. Ensure that you meet the preconditions and retry the + request. If the request fails again, investigate the storage back + end. + +Error response codes:202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - os-extend: os-extend + - new_size: new_size + - tenant_id: tenant_id + - volume_id: volume_id + +Request Example +--------------- + +.. literalinclude:: ./samples/volume-extend-request.json + :language: javascript + + + + + + + +Reset a volume's statuses +========================= + +.. rest_method:: POST /v3/{tenant_id}/volumes/{volume_id}/action + +Resets the status, attach status, and migration status for a volume. Specify the ``os-reset_status`` action in the request body. + +Error response codes:202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - status: status + - migration_status: migration_status + - os-reset_status: os-reset_status + - attach_status: attach_status + - tenant_id: tenant_id + - volume_id: volume_id + +Request Example +--------------- + +.. literalinclude:: ./samples/volume-status-reset-request.json + :language: javascript + + + + + + + +Set image metadata for a volume +=============================== + +.. rest_method:: POST /v3/{tenant_id}/volumes/{volume_id}/action + +Sets the image metadata for a volume. Specify the ``os-set_image_metadata`` action in the request body. + +Error response codes:202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - os-set_image_metadata: os-set_image_metadata + - metadata: metadata + - tenant_id: tenant_id + - volume_id: volume_id + +Request Example +--------------- + +.. literalinclude:: ./samples/volume-image-metadata-set-request.json + :language: javascript + + + + + + + +Remove image metadata from a volume +=================================== + +.. rest_method:: POST /v3/{tenant_id}/volumes/{volume_id}/action + +Removes image metadata, by key, from a volume. Specify the ``os-unset_image_metadata`` action in the request body and the ``key`` for the metadata key and value pair that you want to remove. + +Error response codes:202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - os-unset_image_metadata: os-unset_image_metadata + - key: key + - tenant_id: tenant_id + - volume_id: volume_id + +Request Example +--------------- + +.. literalinclude:: ./samples/volume-image-metadata-unset-request.json + :language: javascript + + + + + + + +Attach volume to a server +========================= + +.. rest_method:: POST /v3/{tenant_id}/volumes/{volume_id}/action + +Attaches a volume to a server. Specify the ``os-attach`` action in the request body. + +Preconditions + +- Volume status must be ``available``. + +- You should set ``instance_uuid`` or ``host_name``. + +Error response codes:202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - instance_uuid: instance_uuid + - mountpoint: mountpoint + - host_name: host_name + - os-attach: os-attach + - tenant_id: tenant_id + - volume_id: volume_id + +Request Example +--------------- + +.. literalinclude:: ./samples/volume-attach-request.json + :language: javascript + + + + + + + +Unmanage a volume +================= + +.. rest_method:: POST /v3/{tenant_id}/volumes/{volume_id}/action + +Removes a volume from Block Storage management without removing the back-end storage object that is associated with it. Specify the ``os-unmanage`` action in the request body. + +Preconditions + +- Volume status must be ``available``. + +Error response codes:202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - os-unmanage: os-unmanage + - tenant_id: tenant_id + - volume_id: volume_id + +Request Example +--------------- + +.. literalinclude:: ./samples/volume-unmanage-request.json + :language: javascript + + + + + + + +Force detach a volume +===================== + +.. rest_method:: POST /v3/{tenant_id}/volumes/{volume_id}/action + +Forces a volume to detach. Specify the ``os-force_detach`` action in the request body. + +Rolls back an unsuccessful detach operation after you disconnect +the volume. + +Error response codes:202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - connector: connector + - attachment_id: attachment_id + - os-force_detach: os-force_detach + - tenant_id: tenant_id + - volume_id: volume_id + +Request Example +--------------- + +.. literalinclude:: ./samples/volume-force-detach-request.json + :language: javascript + + + + + + + diff --git a/api-ref/source/v3/volumes-v3-volumes.inc b/api-ref/source/v3/volumes-v3-volumes.inc new file mode 100644 index 00000000000..abfabb7a474 --- /dev/null +++ b/api-ref/source/v3/volumes-v3-volumes.inc @@ -0,0 +1,570 @@ +.. -*- rst -*- + +================= +Volumes (volumes) +================= + +A volume is a detachable block storage device similar to a USB hard +drive. You can attach a volume to one instance at a time. + +The ``snapshot_id`` and ``source_volid`` parameters specify the ID +of the snapshot or volume from which this volume originates. If the +volume was not created from a snapshot or source volume, these +values are null. + +When you create, list, update, or delete volumes, the possible +status values are: + +**Volume statuses** + ++------------------+--------------------------------------------------------+ +| Status | Description | ++------------------+--------------------------------------------------------+ +| creating | The volume is being created. | ++------------------+--------------------------------------------------------+ +| available | The volume is ready to attach to an instance. | ++------------------+--------------------------------------------------------+ +| attaching | The volume is attaching to an instance. | ++------------------+--------------------------------------------------------+ +| in-use | The volume is attached to an instance. | ++------------------+--------------------------------------------------------+ +| deleting | The volume is being deleted. | ++------------------+--------------------------------------------------------+ +| error | A volume creation error occurred. | ++------------------+--------------------------------------------------------+ +| error_deleting | A volume deletion error occurred. | ++------------------+--------------------------------------------------------+ +| backing-up | The volume is being backed up. | ++------------------+--------------------------------------------------------+ +| restoring-backup | A backup is being restored to the volume. | ++------------------+--------------------------------------------------------+ +| error_restoring | A backup restoration error occurred. | ++------------------+--------------------------------------------------------+ +| error_extending | An error occurred while attempting to extend a volume. | ++------------------+--------------------------------------------------------+ + + +List accessbile volumes with details +==================================== + +.. rest_method:: GET /v3/{tenant_id}/volumes/detail + +Lists all Block Storage volumes, with details, that the tenant can access. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - sort: sort + - limit: limit + - marker: marker + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - migration_status: migration_status + - attachments: attachments + - links: links + - availability_zone: availability_zone + - os-vol-host-attr:host: os-vol-host-attr:host + - encrypted: encrypted + - updated_at: updated_at + - os-volume-replication:extended_status: os-volume-replication:extended_status + - replication_status: replication_status + - snapshot_id: snapshot_id + - id: id + - size: size + - user_id: user_id + - os-vol-tenant-attr:tenant_id: os-vol-tenant-attr:tenant_id + - os-vol-mig-status-attr:migstat: os-vol-mig-status-attr:migstat + - metadata: metadata + - status: status + - description: description + - multiattach: multiattach + - source_volid: source_volid + - consistencygroup_id: consistencygroup_id + - os-vol-mig-status-attr:name_id: os-vol-mig-status-attr:name_id + - name: name + - bootable: bootable + - created_at: created_at + - os-volume-replication:driver_data: os-volume-replication:driver_data + - volumes: volumes + - volume_type: volume_type + + + +Response Example +---------------- + +.. literalinclude:: ./samples/volumes-list-detailed-response.json + :language: javascript + + + + +Create a volume +=============== + +.. rest_method:: POST /v3/{tenant_id}/volumes + +Creates a volume. + +To create a bootable volume, include the UUID of the image from +which you want to create the volume in the ``imageRef`` attribute +in the request body. + +Preconditions + +- You must have enough volume storage quota remaining to create a + volume of size requested. + +Asynchronous Postconditions + +- With correct permissions, you can see the volume status as + ``available`` through API calls. + +- With correct access, you can see the created volume in the storage + system that OpenStack Block Storage manages. + +Troubleshooting + +- If volume status remains ``creating`` or shows another error + status, the request failed. Ensure you meet the preconditions + then investigate the storage back end. + +- Volume is not created in the storage system that OpenStack Block + Storage manages. + +- The storage node needs enough free storage space to match the size + of the volume creation request. + +Error response codes:202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - size: size + - description: description + - imageRef: imageRef + - multiattach: multiattach + - availability_zone: availability_zone + - source_volid: source_volid + - name: name + - volume: volume + - consistencygroup_id: consistencygroup_id + - volume_type: volume_type + - snapshot_id: snapshot_id + - OS-SCH-HNT:scheduler_hints: OS-SCH-HNT:scheduler_hints + - source_replica: source_replica + - metadata: metadata + - tenant_id: tenant_id + +Request Example +--------------- + +.. literalinclude:: ./samples/volume-create-request.json + :language: javascript + + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - migration_status: migration_status + - attachments: attachments + - links: links + - availability_zone: availability_zone + - encrypted: encrypted + - updated_at: updated_at + - replication_status: replication_status + - snapshot_id: snapshot_id + - id: id + - size: size + - user_id: user_id + - metadata: metadata + - status: status + - description: description + - multiattach: multiattach + - source_volid: source_volid + - volume: volume + - consistencygroup_id: consistencygroup_id + - name: name + - bootable: bootable + - created_at: created_at + - volume_type: volume_type + + + + + +List accessible volumes +======================= + +.. rest_method:: GET /v3/{tenant_id}/volumes + +Lists summary information for all Block Storage volumes that the tenant can access. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - sort: sort + - limit: limit + - marker: marker + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - volumes: volumes + - id: id + - links: links + - name: name + + + +Response Example +---------------- + +.. literalinclude:: ./samples/volumes-list-response.json + :language: javascript + + + + +Show a volume's details +======================= + +.. rest_method:: GET /v3/{tenant_id}/volumes/{volume_id} + +Shows details for a volume. + +Preconditions + +- The volume must exist. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - volume_id: volume_id + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - migration_status: migration_status + - attachments: attachments + - links: links + - availability_zone: availability_zone + - os-vol-host-attr:host: os-vol-host-attr:host + - encrypted: encrypted + - updated_at: updated_at + - os-volume-replication:extended_status: os-volume-replication:extended_status + - replication_status: replication_status + - snapshot_id: snapshot_id + - id: id + - size: size + - user_id: user_id + - os-vol-tenant-attr:tenant_id: os-vol-tenant-attr:tenant_id + - os-vol-mig-status-attr:migstat: os-vol-mig-status-attr:migstat + - metadata: metadata + - status: status + - description: description + - multiattach: multiattach + - source_volid: source_volid + - volume: volume + - consistencygroup_id: consistencygroup_id + - os-vol-mig-status-attr:name_id: os-vol-mig-status-attr:name_id + - name: name + - bootable: bootable + - created_at: created_at + - os-volume-replication:driver_data: os-volume-replication:driver_data + - volume_type: volume_type + + + +Response Example +---------------- + +.. literalinclude:: ./samples/volume-show-response.json + :language: javascript + + + + +Update a volume +=============== + +.. rest_method:: PUT /v3/{tenant_id}/volumes/{volume_id} + +Updates a volume. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - volume: volume + - description: description + - name: name + - metadata: metadata + - tenant_id: tenant_id + - volume_id: volume_id + +Request Example +--------------- + +.. literalinclude:: ./samples/volume-update-request.json + :language: javascript + + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - migration_status: migration_status + - attachments: attachments + - links: links + - availability_zone: availability_zone + - encrypted: encrypted + - updated_at: updated_at + - replication_status: replication_status + - snapshot_id: snapshot_id + - id: id + - size: size + - user_id: user_id + - metadata: metadata + - status: status + - description: description + - multiattach: multiattach + - source_volid: source_volid + - volume: volume + - consistencygroup_id: consistencygroup_id + - name: name + - bootable: bootable + - created_at: created_at + - volume_type: volume_type + + + +Response Example +---------------- + +.. literalinclude:: ./samples/volume-update-response.json + :language: javascript + + + + +Delete a volume +=============== + +.. rest_method:: DELETE /v3/{tenant_id}/volumes/{volume_id} + +Deletes a volume. + +Preconditions + +- Volume status must be ``available``, ``in-use``, ``error``, or + ``error_restoring``. + +- You cannot already have a snapshot of the volume. + +- You cannot delete a volume that is in a migration. + +Asynchronous Postconditions + +- The volume is deleted in volume index. + +- The volume managed by OpenStack Block Storage is deleted in + storage node. + +Troubleshooting + +- If volume status remains in ``deleting`` or becomes + ``error_deleting`` the request failed. Ensure you meet the + preconditions then investigate the storage back end. + +- The volume managed by OpenStack Block Storage is not deleted from + the storage system. + +Error response codes:202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - volume_id: volume_id + + + + + + +Create metadata for volume +========================== + +.. rest_method:: POST /v3/{tenant_id}/volumes/{volume_id}/metadata + +Creates metadata for a volume. + +Error response codes:202, + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - metadata: metadata + - tenant_id: tenant_id + - volume_id: volume_id + +Request Example +--------------- + +.. literalinclude:: ./samples/volume-metadata-create-request.json + :language: javascript + + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - metadata: metadata + + + + + +Show a volume's metadata +======================== + +.. rest_method:: GET /v3/{tenant_id}/volumes/{volume_id}/metadata + +Shows metadata for a volume. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - tenant_id: tenant_id + - volume_id: volume_id + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - metadata: metadata + + + +Response Example +---------------- + +.. literalinclude:: ./samples/volume-metadata-show-response.json + :language: javascript + + + + +Update a volume's metadata +========================== + +.. rest_method:: PUT /v3/{tenant_id}/volumes/{volume_id}/metadata + +Updates metadata for a volume. + +Replaces metadata items that match keys. Does not modify items that +are not in the request. + + +Normal response codes: 200 +Error response codes: + + +Request +------- + +.. rest_parameters:: parameters.yaml + + - metadata: metadata + - tenant_id: tenant_id + - volume_id: volume_id + +Request Example +--------------- + +.. literalinclude:: ./samples/volume-metadata-update-request.json + :language: javascript + + + +Response Parameters +------------------- + +.. rest_parameters:: parameters.yaml + + - metadata: metadata + + + +Response Example +---------------- + +.. literalinclude:: ./samples/volume-metadata-update-response.json + :language: javascript