Fix tag attribute disappearing
In the context of virtual device role tagging at instance boot time, a bug has caused the tag attribute to no longer be accepted starting with version 2.33 for block_device_mapping_v2 and starting with version 2.37 for networks. In other words, block devices can only be tagged in 2.32 and network interfaces between 2.32 and 2.36 inclusively. This spec introduces a new API microversion that re-adds the tag attribute to both block_device_mapping_v2 and networks. APIImpact Change-Id: I37cec158c6f998143842ad44f739fe2031d75eef Implements: blueprint fix-tag-attribute-disappearing
This commit is contained in:
parent
45a7f0df14
commit
d79a01ff87
|
@ -0,0 +1,208 @@
|
|||
..
|
||||
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||
License.
|
||||
|
||||
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||
|
||||
==============================
|
||||
Fix tag attribute disappearing
|
||||
==============================
|
||||
|
||||
https://blueprints.launchpad.net/nova/+spec/fix-tag-attribute-disappearing
|
||||
|
||||
In the context of virtual device role tagging at instance boot time, a bug [1]_
|
||||
has caused the tag attribute to no longer be accepted starting with version
|
||||
2.33 for block_device_mapping_v2 and starting with version 2.37 for networks.
|
||||
In other words, block devices can only be tagged in 2.32 and network interfaces
|
||||
between 2.32 and 2.36 inclusively. This spec introduces a new API microversion
|
||||
that re-adds the tag attribute to both block_device_mapping_v2 and networks.
|
||||
|
||||
|
||||
Problem description
|
||||
===================
|
||||
|
||||
For block_device_mapping_v2, the problem stems from the use of the equality
|
||||
comparison in [2]_. It causes the Nova API to accept the tag attribute only in
|
||||
microversion 2.32. The intent was of course to support tags in all versions
|
||||
greater than or equal to 2.32, but the implementation mistake was missed by the
|
||||
author, the reviewers, and tests.
|
||||
|
||||
In the case of networks, microversion 2.37 introduced a new choice for the
|
||||
network item in the instance boot request body [3]_. In addition to the
|
||||
previously allowed dictionary containing one of port, uuid or fixed_ip, a new
|
||||
string item - either 'auto' or 'none' - became accepted. When writing the
|
||||
schema for this change, the previous schema had to be copied and included as
|
||||
one of the two choices. It is this copying that introduced the error: the tag
|
||||
item was not copied along with the rest of the schema.
|
||||
|
||||
Use Cases
|
||||
---------
|
||||
|
||||
As an end user, I want block device role tagging to continue working beyond
|
||||
microversion 2.32.
|
||||
|
||||
As an end user, I want network interface role tagging to continue working
|
||||
beyond microversion 2.37.
|
||||
|
||||
Proposed change
|
||||
===============
|
||||
|
||||
This spec proposes to document the bug in api-ref and reno while at the same
|
||||
time reintroducing the tag attribute to both block_device_mapping_v2 and
|
||||
networks in a new API microversion.
|
||||
|
||||
In order to prevent future bugs of the same kind, the microversion will be
|
||||
passed to extensions as an APIVersionRequest object and APIVersionRequest's
|
||||
__eq__ operator will be removed. This will dissuade future code from doing
|
||||
version equality comparisons.
|
||||
|
||||
One of the reasons the original bug was missed is that functional tests are
|
||||
only run on the specific microversion they are concerned with. That is, the
|
||||
tests for 2.32 are only run against 2.32. While having every test class for a
|
||||
new microversion inherit from the test class for the previous microversion (for
|
||||
example, ServersSampleJson232Test inheriting from ServersSampleJson231Test) is
|
||||
wasteful, this spec proposes to run all of the API samples tests against
|
||||
2.latest. This will ensure no accidental breakage at any single point in the
|
||||
microversion timeline.
|
||||
|
||||
Alternatives
|
||||
------------
|
||||
|
||||
Because the tag attribute needs to be reintroduced to the API, a new
|
||||
microversion is necessary, as per Nova project policy. There are therefore no
|
||||
alternatives.
|
||||
|
||||
Data model impact
|
||||
-----------------
|
||||
|
||||
None.
|
||||
|
||||
REST API impact
|
||||
---------------
|
||||
|
||||
This spec impacts only the body of the POST /servers method. The tag attribute
|
||||
is re-added to the networks and block_device_mapping_v2 items.
|
||||
|
||||
Networks example::
|
||||
|
||||
{
|
||||
"server": {
|
||||
"name": "nic-tagging",
|
||||
"imageRef": "70a599e0-31e7-49b7-b260-868f441e862b",
|
||||
"flavorRef": "http://openstack.example.com/flavors/1",
|
||||
"networks": {
|
||||
"uuid": "a0ef4e02-9150-418c-b4cf-cf4a86e92bf1",
|
||||
"tag": "nic1"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Block device mapping example::
|
||||
|
||||
{
|
||||
"server": {
|
||||
"name": "nic-tagging",
|
||||
"imageRef": "70a599e0-31e7-49b7-b260-868f441e862b",
|
||||
"flavorRef": "http://openstack.example.com/flavors/1",
|
||||
"block_device_mapping_v2": [{
|
||||
"boot_index": "0",
|
||||
"uuid": "ac408821-c95a-448f-9292-73986c790911",
|
||||
"source_type": "image",
|
||||
"volume_size": "25",
|
||||
"destination_type": "volume",
|
||||
"delete_on_termination": true,
|
||||
"tag": "disk1"
|
||||
}]
|
||||
}
|
||||
}
|
||||
|
||||
Security impact
|
||||
---------------
|
||||
|
||||
None.
|
||||
|
||||
Notifications impact
|
||||
--------------------
|
||||
|
||||
None.
|
||||
|
||||
Other end user impact
|
||||
---------------------
|
||||
|
||||
Python-novaclient will be updated to work with the disappearance of the tag
|
||||
attribute in 2.33 and 2.37. It will also be updated to use the new microversion
|
||||
that reintroduces the tag attribute.
|
||||
|
||||
Performance Impact
|
||||
------------------
|
||||
|
||||
None.
|
||||
|
||||
Other deployer impact
|
||||
---------------------
|
||||
|
||||
None.
|
||||
|
||||
Developer impact
|
||||
----------------
|
||||
|
||||
None.
|
||||
|
||||
Implementation
|
||||
==============
|
||||
|
||||
Assignee(s)
|
||||
-----------
|
||||
|
||||
Primary assignee:
|
||||
Artom Lifshitz (notartom)
|
||||
|
||||
Other contributors:
|
||||
None
|
||||
|
||||
Work Items
|
||||
----------
|
||||
|
||||
* Implement a new API microversion that reintroduces the tag attribute to
|
||||
networks and block_device_mapping_v2.
|
||||
* When calling extensions, pass the version as an APIVersionRequest object
|
||||
instead of a string.
|
||||
* Run all API samples tests against 2.latest, except where an API feature has
|
||||
been removed.
|
||||
|
||||
Dependencies
|
||||
============
|
||||
|
||||
None.
|
||||
|
||||
Testing
|
||||
=======
|
||||
|
||||
A functional test will be added for the new API microversion. The existing
|
||||
Tempest test [4]_ will be modified to test 2.32 and the new microversion that
|
||||
reintroduces the tag attribute.
|
||||
|
||||
Documentation Impact
|
||||
====================
|
||||
|
||||
The API reference will be updated to document the bug as well as the new API
|
||||
microversion. Release notes will do the same.
|
||||
|
||||
References
|
||||
==========
|
||||
|
||||
.. [1] https://bugs.launchpad.net/nova/+bug/1658571
|
||||
.. [2] https://review.openstack.org/#/c/304510/64/nova/api/openstack/compute/block_device_mapping.py@77
|
||||
.. [3] https://review.openstack.org/#/c/316398/37/nova/api/openstack/compute/schemas/servers.py
|
||||
.. [4] https://review.openstack.org/#/c/305120/
|
||||
|
||||
History
|
||||
=======
|
||||
|
||||
.. list-table:: Revisions
|
||||
:header-rows: 1
|
||||
|
||||
* - Release Name
|
||||
- Description
|
||||
* - Ocata
|
||||
- Introduced
|
Loading…
Reference in New Issue