Merge "Merge server create schema for BDM v2 extension"
This commit is contained in:
commit
bd7253a9d9
|
@ -17,9 +17,6 @@
|
||||||
|
|
||||||
from webob import exc
|
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 import block_device
|
from nova import block_device
|
||||||
from nova import exception
|
from nova import exception
|
||||||
from nova.i18n import _
|
from nova.i18n import _
|
||||||
|
@ -56,19 +53,3 @@ def server_create(server_dict, create_kwargs, body_deprecated_param):
|
||||||
create_kwargs['block_device_mapping'] = block_device_mapping
|
create_kwargs['block_device_mapping'] = block_device_mapping
|
||||||
# Unset the legacy_bdm flag if we got a block device mapping.
|
# Unset the legacy_bdm flag if we got a block device mapping.
|
||||||
create_kwargs['legacy_bdm'] = False
|
create_kwargs['legacy_bdm'] = False
|
||||||
|
|
||||||
|
|
||||||
def get_server_create_schema(version):
|
|
||||||
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
|
|
||||||
|
|
|
@ -1,87 +0,0 @@
|
||||||
# Copyright 2014 NEC Corporation. All rights reserved.
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
||||||
# not use this file except in compliance with the License. You may obtain
|
|
||||||
# a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
||||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
||||||
# License for the specific language governing permissions and limitations
|
|
||||||
# under the License.
|
|
||||||
|
|
||||||
import copy
|
|
||||||
|
|
||||||
from nova.api.openstack.compute.schemas import servers
|
|
||||||
from nova.api.validation import parameter_types
|
|
||||||
|
|
||||||
|
|
||||||
block_device_mapping_new_item = {
|
|
||||||
# defined in nova/block_device.py:from_api()
|
|
||||||
# NOTE: Client can specify the Id with the combination of
|
|
||||||
# source_type and uuid, or a single attribute like volume_id/
|
|
||||||
# image_id/snapshot_id.
|
|
||||||
'source_type': {
|
|
||||||
'type': 'string',
|
|
||||||
'enum': ['volume', 'image', 'snapshot', 'blank'],
|
|
||||||
},
|
|
||||||
'uuid': {
|
|
||||||
'type': 'string', 'minLength': 1, 'maxLength': 255,
|
|
||||||
'pattern': '^[a-zA-Z0-9._-]*$',
|
|
||||||
},
|
|
||||||
'image_id': parameter_types.image_id,
|
|
||||||
'destination_type': {
|
|
||||||
'type': 'string',
|
|
||||||
'enum': ['local', 'volume'],
|
|
||||||
},
|
|
||||||
# Defined as varchar(255) in column "guest_format" in table
|
|
||||||
# "block_device_mapping"
|
|
||||||
'guest_format': {
|
|
||||||
'type': 'string', 'maxLength': 255,
|
|
||||||
},
|
|
||||||
# Defined as varchar(255) in column "device_type" in table
|
|
||||||
# "block_device_mapping"
|
|
||||||
'device_type': {
|
|
||||||
'type': 'string', 'maxLength': 255,
|
|
||||||
},
|
|
||||||
# Defined as varchar(255) in column "disk_bus" in table
|
|
||||||
# "block_device_mapping"
|
|
||||||
'disk_bus': {
|
|
||||||
'type': 'string', 'maxLength': 255,
|
|
||||||
},
|
|
||||||
# Defined as integer in nova/block_device.py:from_api()
|
|
||||||
# NOTE(mriedem): boot_index=None is also accepted for backward
|
|
||||||
# compatibility with the legacy v2 API.
|
|
||||||
'boot_index': {
|
|
||||||
'type': ['integer', 'string', 'null'],
|
|
||||||
'pattern': '^-?[0-9]+$',
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
block_device_mapping = copy.deepcopy(
|
|
||||||
servers.legacy_block_device_mapping)
|
|
||||||
block_device_mapping['properties'].update(block_device_mapping_new_item)
|
|
||||||
|
|
||||||
server_create = {
|
|
||||||
'block_device_mapping_v2': {
|
|
||||||
'type': 'array',
|
|
||||||
'items': block_device_mapping
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
block_device_mapping_with_tags_new_item = {
|
|
||||||
'tag': parameter_types.tag
|
|
||||||
}
|
|
||||||
|
|
||||||
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_with_tags = {
|
|
||||||
'block_device_mapping_v2': {
|
|
||||||
'type': 'array',
|
|
||||||
'items': block_device_mapping_with_tags
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -46,6 +46,51 @@ legacy_block_device_mapping = {
|
||||||
'additionalProperties': False
|
'additionalProperties': False
|
||||||
}
|
}
|
||||||
|
|
||||||
|
block_device_mapping_v2_new_item = {
|
||||||
|
# defined in nova/block_device.py:from_api()
|
||||||
|
# NOTE: Client can specify the Id with the combination of
|
||||||
|
# source_type and uuid, or a single attribute like volume_id/
|
||||||
|
# image_id/snapshot_id.
|
||||||
|
'source_type': {
|
||||||
|
'type': 'string',
|
||||||
|
'enum': ['volume', 'image', 'snapshot', 'blank'],
|
||||||
|
},
|
||||||
|
'uuid': {
|
||||||
|
'type': 'string', 'minLength': 1, 'maxLength': 255,
|
||||||
|
'pattern': '^[a-zA-Z0-9._-]*$',
|
||||||
|
},
|
||||||
|
'image_id': parameter_types.image_id,
|
||||||
|
'destination_type': {
|
||||||
|
'type': 'string',
|
||||||
|
'enum': ['local', 'volume'],
|
||||||
|
},
|
||||||
|
# Defined as varchar(255) in column "guest_format" in table
|
||||||
|
# "block_device_mapping"
|
||||||
|
'guest_format': {
|
||||||
|
'type': 'string', 'maxLength': 255,
|
||||||
|
},
|
||||||
|
# Defined as varchar(255) in column "device_type" in table
|
||||||
|
# "block_device_mapping"
|
||||||
|
'device_type': {
|
||||||
|
'type': 'string', 'maxLength': 255,
|
||||||
|
},
|
||||||
|
# Defined as varchar(255) in column "disk_bus" in table
|
||||||
|
# "block_device_mapping"
|
||||||
|
'disk_bus': {
|
||||||
|
'type': 'string', 'maxLength': 255,
|
||||||
|
},
|
||||||
|
# Defined as integer in nova/block_device.py:from_api()
|
||||||
|
# NOTE(mriedem): boot_index=None is also accepted for backward
|
||||||
|
# compatibility with the legacy v2 API.
|
||||||
|
'boot_index': {
|
||||||
|
'type': ['integer', 'string', 'null'],
|
||||||
|
'pattern': '^-?[0-9]+$',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
block_device_mapping_v2 = copy.deepcopy(legacy_block_device_mapping)
|
||||||
|
block_device_mapping_v2['properties'].update(block_device_mapping_v2_new_item)
|
||||||
|
|
||||||
base_create = {
|
base_create = {
|
||||||
'type': 'object',
|
'type': 'object',
|
||||||
'properties': {
|
'properties': {
|
||||||
|
@ -85,8 +130,13 @@ base_create = {
|
||||||
'block_device_mapping': {
|
'block_device_mapping': {
|
||||||
'type': 'array',
|
'type': 'array',
|
||||||
'items': legacy_block_device_mapping
|
'items': legacy_block_device_mapping
|
||||||
|
},
|
||||||
|
'block_device_mapping_v2': {
|
||||||
|
'type': 'array',
|
||||||
|
'items': block_device_mapping_v2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
},
|
},
|
||||||
'required': ['name', 'flavorRef'],
|
'required': ['name', 'flavorRef'],
|
||||||
'additionalProperties': False,
|
'additionalProperties': False,
|
||||||
|
@ -108,18 +158,38 @@ base_create_v219 = copy.deepcopy(base_create)
|
||||||
base_create_v219['properties']['server'][
|
base_create_v219['properties']['server'][
|
||||||
'properties']['description'] = parameter_types.description
|
'properties']['description'] = parameter_types.description
|
||||||
|
|
||||||
|
|
||||||
base_create_v232 = copy.deepcopy(base_create_v219)
|
base_create_v232 = copy.deepcopy(base_create_v219)
|
||||||
base_create_v232['properties']['server'][
|
base_create_v232['properties']['server'][
|
||||||
'properties']['networks']['items'][
|
'properties']['networks']['items'][
|
||||||
'properties']['tag'] = parameter_types.tag
|
'properties']['tag'] = parameter_types.tag
|
||||||
|
base_create_v232['properties']['server'][
|
||||||
|
'properties']['block_device_mapping_v2']['items'][
|
||||||
|
'properties']['tag'] = parameter_types.tag
|
||||||
|
|
||||||
|
# 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.
|
||||||
|
|
||||||
|
# NOTE(gmann) Below schema 'base_create_v233' is added (builds on 2.19 schema)
|
||||||
|
# to keep the above mentioned behavior while merging the extension schema code
|
||||||
|
# into server schema file. Below is the ref code where BDM tag was originally
|
||||||
|
# got added for 2.32 microversion *only*.
|
||||||
|
# Ref- https://github.com/openstack/nova/blob/
|
||||||
|
# 9882a60e69a5ab8da314a199a56defc05098b743/nova/api/
|
||||||
|
# openstack/compute/block_device_mapping.py#L71
|
||||||
|
base_create_v233 = copy.deepcopy(base_create_v219)
|
||||||
|
base_create_v233['properties']['server'][
|
||||||
|
'properties']['networks']['items'][
|
||||||
|
'properties']['tag'] = parameter_types.tag
|
||||||
|
|
||||||
# 2.37 builds on 2.32 and makes the following changes:
|
# 2.37 builds on 2.32 and makes the following changes:
|
||||||
# 1. server.networks is required
|
# 1. server.networks is required
|
||||||
# 2. server.networks is now either an enum or a list
|
# 2. server.networks is now either an enum or a list
|
||||||
# 3. server.networks.uuid is now required to be a uuid
|
# 3. server.networks.uuid is now required to be a uuid
|
||||||
base_create_v237 = copy.deepcopy(base_create_v232)
|
base_create_v237 = copy.deepcopy(base_create_v233)
|
||||||
base_create_v237['properties']['server']['required'].append('networks')
|
base_create_v237['properties']['server']['required'].append('networks')
|
||||||
base_create_v237['properties']['server']['properties']['networks'] = {
|
base_create_v237['properties']['server']['properties']['networks'] = {
|
||||||
'oneOf': [
|
'oneOf': [
|
||||||
|
@ -163,6 +233,9 @@ base_create_v242['properties']['server']['properties']['networks'] = {
|
||||||
},
|
},
|
||||||
{'type': 'string', 'enum': ['none', 'auto']},
|
{'type': 'string', 'enum': ['none', 'auto']},
|
||||||
]}
|
]}
|
||||||
|
base_create_v242['properties']['server'][
|
||||||
|
'properties']['block_device_mapping_v2']['items'][
|
||||||
|
'properties']['tag'] = parameter_types.tag
|
||||||
|
|
||||||
|
|
||||||
# 2.52 builds on 2.42 and makes the following changes:
|
# 2.52 builds on 2.42 and makes the following changes:
|
||||||
|
|
|
@ -81,6 +81,7 @@ class ServersController(wsgi.Controller):
|
||||||
schema_server_rebuild_v257 = schema_servers.base_rebuild_v257
|
schema_server_rebuild_v257 = schema_servers.base_rebuild_v257
|
||||||
|
|
||||||
schema_server_create_v232 = schema_servers.base_create_v232
|
schema_server_create_v232 = schema_servers.base_create_v232
|
||||||
|
schema_server_create_v233 = schema_servers.base_create_v233
|
||||||
schema_server_create_v237 = schema_servers.base_create_v237
|
schema_server_create_v237 = schema_servers.base_create_v237
|
||||||
schema_server_create_v242 = schema_servers.base_create_v242
|
schema_server_create_v242 = schema_servers.base_create_v242
|
||||||
schema_server_create_v252 = schema_servers.base_create_v252
|
schema_server_create_v252 = schema_servers.base_create_v252
|
||||||
|
@ -92,7 +93,6 @@ class ServersController(wsgi.Controller):
|
||||||
# NOTE(alex_xu): Please do not add more items into this list. This list
|
# NOTE(alex_xu): Please do not add more items into this list. This list
|
||||||
# should be removed in the future.
|
# should be removed in the future.
|
||||||
schema_func_list = [
|
schema_func_list = [
|
||||||
block_device_mapping.get_server_create_schema,
|
|
||||||
config_drive.get_server_create_schema,
|
config_drive.get_server_create_schema,
|
||||||
keypairs.get_server_create_schema,
|
keypairs.get_server_create_schema,
|
||||||
multiple_create.get_server_create_schema,
|
multiple_create.get_server_create_schema,
|
||||||
|
@ -139,6 +139,7 @@ class ServersController(wsgi.Controller):
|
||||||
self._create_schema(self.schema_server_create_v252, '2.52')
|
self._create_schema(self.schema_server_create_v252, '2.52')
|
||||||
self._create_schema(self.schema_server_create_v242, '2.42')
|
self._create_schema(self.schema_server_create_v242, '2.42')
|
||||||
self._create_schema(self.schema_server_create_v237, '2.37')
|
self._create_schema(self.schema_server_create_v237, '2.37')
|
||||||
|
self._create_schema(self.schema_server_create_v233, '2.33')
|
||||||
self._create_schema(self.schema_server_create_v232, '2.32')
|
self._create_schema(self.schema_server_create_v232, '2.32')
|
||||||
self._create_schema(self.schema_server_create_v219, '2.19')
|
self._create_schema(self.schema_server_create_v219, '2.19')
|
||||||
self._create_schema(self.schema_server_create, '2.1')
|
self._create_schema(self.schema_server_create, '2.1')
|
||||||
|
@ -459,7 +460,8 @@ class ServersController(wsgi.Controller):
|
||||||
@validation.schema(schema_server_create_v20, '2.0', '2.0')
|
@validation.schema(schema_server_create_v20, '2.0', '2.0')
|
||||||
@validation.schema(schema_server_create, '2.1', '2.18')
|
@validation.schema(schema_server_create, '2.1', '2.18')
|
||||||
@validation.schema(schema_server_create_v219, '2.19', '2.31')
|
@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_v232, '2.32', '2.32')
|
||||||
|
@validation.schema(schema_server_create_v233, '2.33', '2.36')
|
||||||
@validation.schema(schema_server_create_v237, '2.37', '2.41')
|
@validation.schema(schema_server_create_v237, '2.37', '2.41')
|
||||||
@validation.schema(schema_server_create_v242, '2.42', '2.51')
|
@validation.schema(schema_server_create_v242, '2.42', '2.51')
|
||||||
@validation.schema(schema_server_create_v252, '2.52', '2.56')
|
@validation.schema(schema_server_create_v252, '2.52', '2.56')
|
||||||
|
|
Loading…
Reference in New Issue