Merge "Fix tag attribute disappearing in 2.33 and 2.37"
This commit is contained in:
commit
1d3ba1beda
|
@ -1174,11 +1174,14 @@ block_device_mapping_v2:
|
|||
"delete_on_termination": true,
|
||||
"tag": "disk1" }]
|
||||
|
||||
Starting in microversion 2.32, the tag is an optional, arbitrary attribute
|
||||
that can be used to assign a tag to the block device. This tag is then
|
||||
exposed to the guest in the metadata API and the config drive and is
|
||||
associated to hardware metadata for that block device, such as bus (ex:
|
||||
SCSI), bus address (ex: 1:0:2:0), and serial.
|
||||
In microversion 2.32, ``tag`` is an optional string attribute that can
|
||||
be used to assign a tag to the block device. This tag is then exposed to
|
||||
the guest in the metadata API and the config drive and is associated to
|
||||
hardware metadata for that block device, such as bus (ex: SCSI), bus
|
||||
address (ex: 1:0:2:0), and serial.
|
||||
|
||||
A bug has caused the ``tag`` attribute to no longer be accepted starting
|
||||
with version 2.33. It has been restored in version 2.42.
|
||||
in: body
|
||||
required: false
|
||||
type: object
|
||||
|
@ -1501,9 +1504,28 @@ device_resp:
|
|||
in: body
|
||||
required: true
|
||||
type: string
|
||||
device_tag:
|
||||
device_tag_bdm:
|
||||
description: |
|
||||
An arbitrary tag.
|
||||
A device role tag that can be applied to a block device. The guest OS of a
|
||||
server that has devices tagged in this manner can access hardware metadata
|
||||
about the tagged devices from the metadata API and on the config drive, if
|
||||
enabled.
|
||||
|
||||
.. note:: Due to a bug, block device tags are accepted in version 2.32 and
|
||||
subsequently starting with version 2.42.
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
min_version: 2.32
|
||||
device_tag_nic:
|
||||
description: |
|
||||
A device role tag that can be applied to a network interface. The guest OS
|
||||
of a server that has devices tagged in this manner can access hardware
|
||||
metadata about the tagged devices from the metadata API and on the config
|
||||
drive, if enabled.
|
||||
|
||||
.. note:: Due to a bug, network interface tags are accepted between 2.32
|
||||
and 2.36 inclusively, and subsequently starting with version 2.42.
|
||||
in: body
|
||||
required: false
|
||||
type: string
|
||||
|
@ -3168,12 +3190,16 @@ networks:
|
|||
object. To provision the server instance with a NIC for an already existing port,
|
||||
specify the port-id in the ``port`` attribute in a ``networks`` object.
|
||||
|
||||
Starting in microversion 2.32, it's possible to optionally assign an
|
||||
arbitrary tag to a virtual network interface, specify the tag attribute in
|
||||
the ``network`` object. An interface's tag is exposed to the guest in the
|
||||
metadata API and the config drive and is associated to hardware metadata
|
||||
for that network interface, such as bus (ex: PCI), bus address (ex:
|
||||
0000:00:02.0), and MAC address.
|
||||
In microversion 2.32, the ``tag`` is an optional string attribute that
|
||||
can be used to assign a tag to a virtual network interface. This tag is
|
||||
then exposed to the guest in the metadata API and the config drive and is
|
||||
associated to hardware metadata for that network interface, such as bus
|
||||
(ex: PCI), bus address (ex: 0000:00:02.0), and MAC address.
|
||||
|
||||
A bug has caused the ``tag`` attribute to no longer be accepted starting
|
||||
with version 2.37. Therefore, network interfaces could only be tagged in
|
||||
versions 2.32 to 2.36 inclusively. Version 2.42 has restored the ``tag``
|
||||
attribute.
|
||||
|
||||
Starting with microversion 2.37, this field is required and the special
|
||||
values *auto* and *none* can be specified for networks. *auto* tells the
|
||||
|
|
|
@ -293,7 +293,7 @@ Request
|
|||
- networks.uuid: network_uuid
|
||||
- networks.port: port
|
||||
- networks.fixed_ip: fixed_ip
|
||||
- networks.tag: device_tag
|
||||
- networks.tag: device_tag_nic
|
||||
- personality: personality
|
||||
- block_device_mapping_v2: block_device_mapping_v2
|
||||
- block_device_mapping_v2.device_name: device_name
|
||||
|
@ -303,7 +303,7 @@ Request
|
|||
- block_device_mapping_v2.guest_format: guest_format
|
||||
- block_device_mapping_v2.boot_index: boot_index
|
||||
- block_device_mapping_v2.uuid: block_device_uuid
|
||||
- block_device_mapping_v2.tag: device_tag
|
||||
- block_device_mapping_v2.tag: device_tag_bdm
|
||||
- config_drive: config_drive
|
||||
- key_name: key_name
|
||||
- os:scheduler_hints: os:scheduler_hints
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"server" : {
|
||||
"name" : "device-tagging-server",
|
||||
"flavorRef" : "http://openstack.example.com/flavors/1",
|
||||
"networks" : [{
|
||||
"uuid" : "ff608d40-75e9-48cb-b745-77bb55b5eaf2",
|
||||
"tag": "nic1"
|
||||
}],
|
||||
"block_device_mapping_v2": [{
|
||||
"uuid": "70a599e0-31e7-49b7-b260-868f441e862b",
|
||||
"source_type": "image",
|
||||
"destination_type": "volume",
|
||||
"boot_index": 0,
|
||||
"volume_size": "1",
|
||||
"tag": "disk1"
|
||||
}]
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"server": {
|
||||
"OS-DCF:diskConfig": "AUTO",
|
||||
"adminPass": "S5wqy9sPYUvU",
|
||||
"id": "97108291-2fd7-4dc2-a909-eaae0306a6a9",
|
||||
"links": [
|
||||
{
|
||||
"href": "http://openstack.example.com/v2.1/6f70656e737461636b20342065766572/servers/97108291-2fd7-4dc2-a909-eaae0306a6a9",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "http://openstack.example.com/6f70656e737461636b20342065766572/servers/97108291-2fd7-4dc2-a909-eaae0306a6a9",
|
||||
"rel": "bookmark"
|
||||
}
|
||||
],
|
||||
"security_groups": [
|
||||
{
|
||||
"name": "default"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
|
@ -19,7 +19,7 @@
|
|||
}
|
||||
],
|
||||
"status": "CURRENT",
|
||||
"version": "2.41",
|
||||
"version": "2.42",
|
||||
"min_version": "2.1",
|
||||
"updated": "2013-07-23T11:33:21Z"
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
}
|
||||
],
|
||||
"status": "CURRENT",
|
||||
"version": "2.41",
|
||||
"version": "2.42",
|
||||
"min_version": "2.1",
|
||||
"updated": "2013-07-23T11:33:21Z"
|
||||
}
|
||||
|
|
|
@ -98,6 +98,10 @@ REST_API_VERSION_HISTORY = """REST API Version History:
|
|||
* 2.39 - Deprecates image-metadata proxy API
|
||||
* 2.40 - Adds simple tenant usage pagination support.
|
||||
* 2.41 - Return uuid attribute for aggregates.
|
||||
* 2.42 - In the context of device tagging at instance boot time,
|
||||
re-introduce the tag attribute that, due to bugs, was lost
|
||||
starting with version 2.33 for block devices and starting with
|
||||
version 2.37 for network interfaces.
|
||||
"""
|
||||
|
||||
# The minimum and maximum versions of the API supported
|
||||
|
@ -106,7 +110,7 @@ REST_API_VERSION_HISTORY = """REST API Version History:
|
|||
# Note(cyeoh): This only applies for the v2.1 API once microversions
|
||||
# support is fully merged. It does not affect the V2 API.
|
||||
_MIN_API_VERSION = "2.1"
|
||||
_MAX_API_VERSION = "2.41"
|
||||
_MAX_API_VERSION = "2.42"
|
||||
DEFAULT_API_VERSION = _MIN_API_VERSION
|
||||
|
||||
# Almost all proxy APIs which related to network, images and baremetal
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
|
||||
from webob import exc
|
||||
|
||||
from nova.api.openstack import api_version_request
|
||||
from nova.api.openstack.compute.schemas import block_device_mapping as \
|
||||
schema_block_device_mapping
|
||||
from nova.api.openstack import extensions
|
||||
|
@ -74,7 +75,16 @@ class BlockDeviceMapping(extensions.V21APIExtensionBase):
|
|||
create_kwargs['legacy_bdm'] = False
|
||||
|
||||
def get_server_create_schema(self, version):
|
||||
if version == '2.32':
|
||||
return schema_block_device_mapping.server_create_v232
|
||||
request_version = api_version_request.APIVersionRequest(version)
|
||||
version_242 = api_version_request.APIVersionRequest('2.42')
|
||||
|
||||
# NOTE(artom) the following conditional was merged as
|
||||
# "if version == '2.32'" The intent all along was to check whether
|
||||
# version was greater than or equal to 2.32. In other words, we wanted
|
||||
# to support tags in versions 2.32 and up, but ended up supporting them
|
||||
# in version 2.32 only. Since we need a new microversion to add request
|
||||
# body attributes, tags have been re-added in version 2.42.
|
||||
if version == '2.32' or request_version >= version_242:
|
||||
return schema_block_device_mapping.server_create_with_tags
|
||||
else:
|
||||
return schema_block_device_mapping.server_create
|
||||
|
|
|
@ -336,6 +336,13 @@ user documentation.
|
|||
with 'nic1' will appear in the metadata along with its bus (PCI), bus address
|
||||
(ex: 0000:00:02.0), MAC address, and tag ('nic1').
|
||||
|
||||
.. note:: A bug has caused the tag attribute to no longer be accepted for
|
||||
networks starting with version 2.37 and for block_device_mapping_v2
|
||||
starting with version 2.33. In other words, networks could only be tagged
|
||||
between versions 2.32 and 2.36 inclusively and block devices only in
|
||||
version 2.32. As of version 2.42 the tag attribute has been restored and
|
||||
both networks and block devices can be tagged again.
|
||||
|
||||
2.33
|
||||
----
|
||||
|
||||
|
@ -344,6 +351,10 @@ user documentation.
|
|||
|
||||
GET /v2.1/{tenant_id}/os-hypervisors?marker={hypervisor_id}&limit={limit}
|
||||
|
||||
In the context of device tagging at server create time, 2.33 also removes the
|
||||
tag attribute from block_device_mapping_v2. This is a bug that is fixed in
|
||||
2.42, in which the tag attribute is reintroduced.
|
||||
|
||||
2.34
|
||||
----
|
||||
|
||||
|
@ -406,6 +417,10 @@ user documentation.
|
|||
Also, the ``uuid`` field in the ``networks`` object in the server create
|
||||
request is now strictly enforced to be in UUID format.
|
||||
|
||||
In the context of device tagging at server create time, 2.37 also removes the
|
||||
tag attribute from networks. This is a bug that is fixed in 2.42, in which
|
||||
the tag attribute is reintroduced.
|
||||
|
||||
2.38 (Maximum in Newton)
|
||||
------------------------
|
||||
|
||||
|
@ -453,3 +468,12 @@ user documentation.
|
|||
`/os-aggregates` endpoint. This attribute is auto-generated upon creation of
|
||||
an aggregate. The `os-aggregates` API resource endpoint remains an
|
||||
administrator-only API.
|
||||
|
||||
2.42
|
||||
----
|
||||
|
||||
In the context of device tagging at server create time, a bug has caused the
|
||||
tag attribute to no longer be accepted for networks starting with version
|
||||
2.37 and for block_device_mapping_v2 starting with version 2.33. Microversion
|
||||
2.42 restores the tag parameter to both networks and block_device_mapping_v2,
|
||||
allowing networks and block devices to be tagged again.
|
||||
|
|
|
@ -69,17 +69,17 @@ server_create = {
|
|||
}
|
||||
}
|
||||
|
||||
block_device_mapping_v232_new_item = {
|
||||
block_device_mapping_with_tags_new_item = {
|
||||
'tag': parameter_types.tag
|
||||
}
|
||||
|
||||
block_device_mapping_v232 = copy.deepcopy(block_device_mapping)
|
||||
block_device_mapping_v232['properties'].update(
|
||||
block_device_mapping_v232_new_item)
|
||||
block_device_mapping_with_tags = copy.deepcopy(block_device_mapping)
|
||||
block_device_mapping_with_tags['properties'].update(
|
||||
block_device_mapping_with_tags_new_item)
|
||||
|
||||
server_create_v232 = {
|
||||
server_create_with_tags = {
|
||||
'block_device_mapping_v2': {
|
||||
'type': 'array',
|
||||
'items': block_device_mapping_v232
|
||||
'items': block_device_mapping_with_tags
|
||||
}
|
||||
}
|
||||
|
|
|
@ -105,6 +105,30 @@ base_create_v237['properties']['server']['properties']['networks'] = {
|
|||
]}
|
||||
|
||||
|
||||
# 2.42 builds on 2.37 and re-introduces the tag field to the list of network
|
||||
# objects.
|
||||
base_create_v242 = copy.deepcopy(base_create_v237)
|
||||
base_create_v242['properties']['server']['properties']['networks'] = {
|
||||
'oneOf': [
|
||||
{'type': 'array',
|
||||
'items': {
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
'fixed_ip': parameter_types.ip_address,
|
||||
'port': {
|
||||
'oneOf': [{'type': 'string', 'format': 'uuid'},
|
||||
{'type': 'null'}]
|
||||
},
|
||||
'uuid': {'type': 'string', 'format': 'uuid'},
|
||||
'tag': parameter_types.tag,
|
||||
},
|
||||
'additionalProperties': False,
|
||||
},
|
||||
},
|
||||
{'type': 'string', 'enum': ['none', 'auto']},
|
||||
]}
|
||||
|
||||
|
||||
base_update = {
|
||||
'type': 'object',
|
||||
'properties': {
|
||||
|
|
|
@ -77,6 +77,7 @@ class ServersController(wsgi.Controller):
|
|||
|
||||
schema_server_create_v232 = schema_servers.base_create_v232
|
||||
schema_server_create_v237 = schema_servers.base_create_v237
|
||||
schema_server_create_v242 = schema_servers.base_create_v242
|
||||
|
||||
@staticmethod
|
||||
def _add_location(robj):
|
||||
|
@ -169,6 +170,9 @@ class ServersController(wsgi.Controller):
|
|||
invoke_kwds={"extension_info": self.extension_info},
|
||||
propagate_map_exceptions=True)
|
||||
if list(self.create_schema_manager):
|
||||
self.create_schema_manager.map(self._create_extension_schema,
|
||||
self.schema_server_create_v242,
|
||||
'2.42')
|
||||
self.create_schema_manager.map(self._create_extension_schema,
|
||||
self.schema_server_create_v237,
|
||||
'2.37')
|
||||
|
@ -517,7 +521,8 @@ class ServersController(wsgi.Controller):
|
|||
@validation.schema(schema_server_create, '2.1', '2.18')
|
||||
@validation.schema(schema_server_create_v219, '2.19', '2.31')
|
||||
@validation.schema(schema_server_create_v232, '2.32', '2.36')
|
||||
@validation.schema(schema_server_create_v237, '2.37')
|
||||
@validation.schema(schema_server_create_v237, '2.37', '2.41')
|
||||
@validation.schema(schema_server_create_v242, '2.42')
|
||||
def create(self, req, body):
|
||||
"""Creates a new server for a given user."""
|
||||
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"server" : {
|
||||
"name" : "device-tagging-server",
|
||||
"flavorRef" : "%(host)s/flavors/1",
|
||||
"networks" : [{
|
||||
"uuid" : "ff608d40-75e9-48cb-b745-77bb55b5eaf2",
|
||||
"tag": "nic1"
|
||||
}],
|
||||
"block_device_mapping_v2": [{
|
||||
"uuid": "%(image_id)s",
|
||||
"source_type": "image",
|
||||
"destination_type": "volume",
|
||||
"boot_index": 0,
|
||||
"volume_size": "1",
|
||||
"tag": "disk1"
|
||||
}]
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"server": {
|
||||
"OS-DCF:diskConfig": "AUTO",
|
||||
"adminPass": "%(password)s",
|
||||
"id": "%(id)s",
|
||||
"links": [
|
||||
{
|
||||
"href": "%(versioned_compute_endpoint)s/servers/%(uuid)s",
|
||||
"rel": "self"
|
||||
},
|
||||
{
|
||||
"href": "%(compute_endpoint)s/servers/%(uuid)s",
|
||||
"rel": "bookmark"
|
||||
}
|
||||
],
|
||||
"security_groups": [
|
||||
{
|
||||
"name": "default"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
|
@ -193,6 +193,15 @@ class ServersSampleJson237Test(ServersSampleBase):
|
|||
self._post_server(use_common_server_api_samples=False)
|
||||
|
||||
|
||||
class ServersSampleJson242Test(ServersSampleBase):
|
||||
microversion = '2.42'
|
||||
sample_dir = 'servers'
|
||||
scenarios = [('v2_42', {'api_major_version': 'v2.1'})]
|
||||
|
||||
def test_servers_post(self):
|
||||
self._post_server(use_common_server_api_samples=False)
|
||||
|
||||
|
||||
class ServersUpdateSampleJsonTest(ServersSampleBase):
|
||||
|
||||
def test_update_server(self):
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
fixes:
|
||||
- |
|
||||
In the context of virtual device role tagging at server create time, the
|
||||
2.42 microversion restores the tag attribute to networks and
|
||||
block_device_mapping_v2. 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
|
||||
could only be tagged in version 2.32 and network interfaces between
|
||||
versions 2.32 and 2.36 inclusively. Starting with 2.42, both network
|
||||
interfaces and block devices can be tagged again.
|
Loading…
Reference in New Issue