111 lines
3.0 KiB
ReStructuredText
111 lines
3.0 KiB
ReStructuredText
..
|
|
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
|
License.
|
|
|
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
|
|
|
============================
|
|
Support Cinder API version 2
|
|
============================
|
|
|
|
https://blueprints.launchpad.net/heat/+spec/support-cinder-api-v2
|
|
|
|
This specification proposes to add support for the second version of the Cinder
|
|
API, which brings useful improvements and will soon replace version one.
|
|
|
|
|
|
Problem description
|
|
===================
|
|
|
|
Currently Heat uses only version 1 of Cinder API to create volumes. Version
|
|
two, however, brings useful features such as scheduler hints, more consistent
|
|
responses, caching, filtering, etc.
|
|
|
|
Also, Cinder is deprecating API version 1 in favor of 2 [1], which has been
|
|
available in devstack since Havana. Supporting both would make switching
|
|
easier for users.
|
|
|
|
The new API provides [2]:
|
|
|
|
* More consistent properties like 'name', 'description', etc.
|
|
* New methods (set_metadata, promote, retype, set_bootable, etc.)
|
|
* Additional options in existing methods (such as the use of scheduler hints).
|
|
* Caching data between controllers instead of multiple database hits.
|
|
* Filtering when listing information on volumes, snapshots and backups.
|
|
|
|
Use cases:
|
|
|
|
* As a developer I want to be able to pass scheduler hints to Cinder when
|
|
creating volumes, in order to choose back-ends more precisely.
|
|
* As a deployer I don't want to have to choose which Cinder API version to use.
|
|
Let Heat autodiscover the latest and use it.
|
|
|
|
|
|
Proposed change
|
|
===============
|
|
|
|
Add new methods to CinderClientPlugin:
|
|
|
|
* discover_api_versions()
|
|
To query Keystone for 'volume' and 'volumev2' services.
|
|
* api_version()
|
|
To get the Cinder API version currently used by Heat (this value will be set
|
|
to latest available one).
|
|
|
|
The client returned by CinderClientPlugin._create() will be made depending on
|
|
api_version().
|
|
|
|
Six cinderclient methods are currently used within Heat:
|
|
|
|
* volumes.get(), volumes.extend(), backups.create() and restores.restore() that
|
|
won't be affected by this change;
|
|
* volumes.create() and volume.update() that use arguments that differ depending
|
|
on the Cinder API version: (display_name, display_description) for v1 and
|
|
(name, description) for v2.
|
|
|
|
The proposed implementation will not change current OS::Cinder::Volume
|
|
properties, since they already are 'name' and 'description' (as in new API
|
|
version).
|
|
|
|
Alternatives
|
|
------------
|
|
|
|
Wait for Cinder API v1 to be deprecated and switch abruptly to v2.
|
|
|
|
|
|
Implementation
|
|
==============
|
|
|
|
Assignee(s)
|
|
-----------
|
|
|
|
Primary assignee:
|
|
adrien-verge
|
|
|
|
Milestones
|
|
----------
|
|
|
|
Target Milestone for completion:
|
|
Kilo-1
|
|
|
|
Work Items
|
|
----------
|
|
|
|
* Discover the latest Cinder API version using Keystone.
|
|
* Create the correct Cinder client using the latest available API.
|
|
* Use correct arguments for volumes.create() and volume.update() depending on
|
|
the used API.
|
|
|
|
|
|
Dependencies
|
|
============
|
|
|
|
None
|
|
|
|
|
|
References
|
|
==========
|
|
|
|
* [1]: https://wiki.openstack.org/wiki/CinderAPIv2
|
|
* [2]: https://github.com/openstack/nova-specs/blob/master/specs/juno/support-cinderclient-v2.rst
|