EC2: add support for volume and snapshot tags
Implements blueprint ec2-volume-and-snapshot-tags Previously-approved: juno Change-Id: I1891d0f2a7b9189441943445507ab87c035f3108
This commit is contained in:
174
specs/kilo/approved/ec2-volume-and-snapshot-tags.rst
Normal file
174
specs/kilo/approved/ec2-volume-and-snapshot-tags.rst
Normal file
@@ -0,0 +1,174 @@
|
||||
..
|
||||
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||
License.
|
||||
|
||||
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||
|
||||
========================================================
|
||||
Tags support in EC2 API for volumes and volume snapshots
|
||||
========================================================
|
||||
|
||||
https://blueprints.launchpad.net/nova/+spec/ec2-volume-and-snapshot-tags
|
||||
|
||||
Expose volume and volume snapshot metadata as EC2 tags in the EC2 API.
|
||||
|
||||
Problem description
|
||||
===================
|
||||
|
||||
OpenStack's EC2 API has little support for 'tags' (resource metadata).
|
||||
Only instance metadata are exposed in the EC2 API, so a user
|
||||
can create, delete and list only instance metadata. OpenStack Cinder API
|
||||
has support for metadata as well, for both volumes and volume snapshots,
|
||||
and we just need to expose it into the EC2 API. This blueprint aims to
|
||||
do just that.
|
||||
|
||||
Use Cases
|
||||
---------
|
||||
|
||||
As metadata feature is already provided in OpenStack APIs, the end users will
|
||||
now be able to use tags for volumes and volume snapshots. This will increase
|
||||
the parity between OpenStack and EC2 APIs.
|
||||
|
||||
Project Priority
|
||||
----------------
|
||||
|
||||
None
|
||||
|
||||
Proposed change
|
||||
===============
|
||||
|
||||
* EC2 API's 'CreateTags' method only used to work when one is creating
|
||||
tags for an instance resource. After this patch, one will be also
|
||||
able to create tags for volume and volume snapshot resources.
|
||||
|
||||
* A user will be able to call the 'DeleteTags' API to delete any tag
|
||||
associated with a volume or a volume snapshot.
|
||||
|
||||
* While calling the 'DescribeTags' API, tags of volumes and volume
|
||||
snapshots will be listed along with instance tags (provided tags
|
||||
for these resources are present, obviously).
|
||||
|
||||
* Support for specifying volume and volume snapshot IDs, and 'volume'
|
||||
and 'snapshot' as resources as parameters while calling 'DescribeTags'
|
||||
is added.
|
||||
|
||||
* As this is the first time the supported resources for tags are becoming
|
||||
plural in number, the code is made more generic so as to allow addition
|
||||
of further resources easier.
|
||||
|
||||
* Implementation detail: In the DescribeInstances API, user can specify
|
||||
both resource ID and resource type as filters. If the query says filter
|
||||
by resource IDs (vol-00000001 and ami-00000001) and also filter by
|
||||
resource type (instances and volumes), the current implementation takes
|
||||
the intersection of the resources (volumes in this case) and then checks
|
||||
if those resources are implemented.
|
||||
|
||||
Alternatives
|
||||
------------
|
||||
|
||||
Alternative is: EC2 tags be different from volume tags by using scoped keys.
|
||||
So a user creating a tag stack=beta in EC2 API will, in the Cinder API, see
|
||||
it as EC2:stack=beta. This way, a user using the Cinder APIs will be able
|
||||
to clearly see which metadata entries are created using EC2 API and which
|
||||
are created by the OpenStack API.
|
||||
|
||||
I think it makes sense to keep the EC2 API layer as transparent as possible.
|
||||
This means not going with the alternative proposed above. This also falls in
|
||||
line with what we have presently for instance metadata.
|
||||
|
||||
Regarding the implementation detail specified above, an alternative is:
|
||||
Do not allow resource IDs and resource type to be specified in the same
|
||||
query.
|
||||
|
||||
There is no doc of AWS which says such an API call is not allowed (atleast I
|
||||
can't find it). This implementation is easier, but IMO the way in which
|
||||
it is implemented right now gives a better user experience. Probably logging
|
||||
would help if we are dropping out a resource ID or resource type from the
|
||||
query.
|
||||
|
||||
|
||||
Data model impact
|
||||
-----------------
|
||||
|
||||
None
|
||||
|
||||
REST API impact
|
||||
---------------
|
||||
|
||||
Only EC2 API will be affected. Affected API calls are: CreateTags, DeleteTags
|
||||
DescribeTags.
|
||||
|
||||
Security impact
|
||||
---------------
|
||||
|
||||
None
|
||||
|
||||
Notifications impact
|
||||
--------------------
|
||||
|
||||
None
|
||||
|
||||
Other end user impact
|
||||
---------------------
|
||||
|
||||
None
|
||||
|
||||
Performance Impact
|
||||
------------------
|
||||
|
||||
Insignificant. Note that in the case of DescribeTags, as we keep on adding
|
||||
resources, an API call will be made to all of them (e.g. Glance, Cinder, etc)
|
||||
when a DescribeTags call is made without specifying a resource type.
|
||||
|
||||
Other deployer impact
|
||||
---------------------
|
||||
|
||||
None
|
||||
|
||||
Developer impact
|
||||
----------------
|
||||
|
||||
None
|
||||
|
||||
Implementation
|
||||
==============
|
||||
|
||||
Assignee(s)
|
||||
-----------
|
||||
|
||||
Primary assignee:
|
||||
rushiagr (Rushi Agrawal)
|
||||
|
||||
Work Items
|
||||
----------
|
||||
|
||||
* Reorganize EC2 'tags' code to allow addition of new resources
|
||||
* Add support for EC2 tags for volumes
|
||||
* Add support for EC2 tags for volume snapshots
|
||||
|
||||
|
||||
Dependencies
|
||||
============
|
||||
|
||||
None
|
||||
|
||||
|
||||
Testing
|
||||
=======
|
||||
|
||||
Comprehensive unit tests to test the functionality will be written.
|
||||
|
||||
Documentation Impact
|
||||
====================
|
||||
|
||||
EC2 API document should be updated to reflect the changes done to the EC2 API
|
||||
under this blueprint.
|
||||
|
||||
|
||||
References
|
||||
==========
|
||||
|
||||
EC2 API reference:
|
||||
* CreateTags http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreateTags.html
|
||||
* DeleteTags http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteTags.html
|
||||
* DescribeTags http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeTags.html
|
||||
Reference in New Issue
Block a user