Merge server create schema for user data extension

As nova extensions has been deprecated already and goal is to
merge all scattered code into main controller side.
Currently schema and request/response extended code are there
among all extensions.

This commit merge the schema part of create server for user data
extensions.

Also this commit removes the logic of appending the extensions
schema as this is the last extensions schema to merge.

Partially implements: blueprint api-extensions-merge-rocky

Change-Id: I692a048b3a8da4e912e000b47da977dda466348b
This commit is contained in:
ghanshyam 2018-06-27 18:03:18 +03:00
parent 1f677061fa
commit de03b832ad
4 changed files with 31 additions and 115 deletions

View File

@ -14,7 +14,6 @@
import copy
from nova.api.openstack.compute.schemas import user_data
from nova.api.validation import parameter_types
from nova.api.validation.parameter_types import multi_params
from nova.objects import instance
@ -210,6 +209,11 @@ base_create = {
'additionalProperties': False,
}
},
'user_data': {
'type': 'string',
'format': 'base64',
'maxLength': 65535
}
},
'required': ['name', 'flavorRef'],
'additionalProperties': False,
@ -232,6 +236,12 @@ base_create_v20['properties']['server']['properties'][
base_create_v20['properties']['server']['properties'][
'security_groups']['items']['properties']['name'] = (
parameter_types.name_with_leading_trailing_spaces)
base_create_v20['properties']['server']['properties'][
'user_data'] = {
'oneOf': [{'type': 'string', 'format': 'base64', 'maxLength': 65535},
{'type': 'null'},
],
}
base_create_v219 = copy.deepcopy(base_create)
base_create_v219['properties']['server'][
@ -410,7 +420,7 @@ base_rebuild_v257 = copy.deepcopy(base_rebuild_v254)
base_rebuild_v257['properties']['rebuild']['properties'].pop('personality')
base_rebuild_v257['properties']['rebuild']['properties']['user_data'] = ({
'oneOf': [
user_data.common_user_data,
{'type': 'string', 'format': 'base64', 'maxLength': 65535},
{'type': 'null'}
]
})

View File

@ -1,34 +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.
common_user_data = {
'type': 'string',
'format': 'base64',
'maxLength': 65535
}
server_create = {
'user_data': common_user_data
}
server_create_v20 = {
'user_data': {
'oneOf': [
common_user_data,
{'type': 'null'},
],
},
}

View File

@ -66,36 +66,6 @@ class ServersController(wsgi.Controller):
_view_builder_class = views_servers.ViewBuilder
schema_server_create = schema_servers.base_create
schema_server_update = schema_servers.base_update
schema_server_rebuild = schema_servers.base_rebuild
schema_server_create_v20 = schema_servers.base_create_v20
schema_server_update_v20 = schema_servers.base_update_v20
schema_server_rebuild_v20 = schema_servers.base_rebuild_v20
schema_server_create_v219 = schema_servers.base_create_v219
schema_server_update_v219 = schema_servers.base_update_v219
schema_server_rebuild_v219 = schema_servers.base_rebuild_v219
schema_server_rebuild_v254 = schema_servers.base_rebuild_v254
schema_server_rebuild_v257 = schema_servers.base_rebuild_v257
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_v242 = schema_servers.base_create_v242
schema_server_create_v252 = schema_servers.base_create_v252
schema_server_create_v257 = schema_servers.base_create_v257
schema_server_create_v263 = schema_servers.base_create_v263
schema_server_rebuild_v263 = schema_servers.base_rebuild_v263
# NOTE(alex_xu): Please do not add more items into this list. This list
# should be removed in the future.
schema_func_list = [
user_data.get_server_create_schema,
]
# NOTE(alex_xu): Please do not add more items into this list. This list
# should be removed in the future.
server_create_func_list = [
@ -127,19 +97,6 @@ class ServersController(wsgi.Controller):
super(ServersController, self).__init__(**kwargs)
self.compute_api = compute.API()
# TODO(alex_xu): The final goal is that merging all of
# extended json-schema into server main json-schema.
self._create_schema(self.schema_server_create_v263, '2.63')
self._create_schema(self.schema_server_create_v257, '2.57')
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_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_v219, '2.19')
self._create_schema(self.schema_server_create, '2.1')
self._create_schema(self.schema_server_create_v20, '2.0')
@wsgi.expected_errors((400, 403))
@validation.query_schema(schema_servers.query_params_v226, '2.26')
@validation.query_schema(schema_servers.query_params_v21, '2.1', '2.25')
@ -452,16 +409,16 @@ class ServersController(wsgi.Controller):
@wsgi.response(202)
@wsgi.expected_errors((400, 403, 409))
@validation.schema(schema_server_create_v20, '2.0', '2.0')
@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.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_v242, '2.42', '2.51')
@validation.schema(schema_server_create_v252, '2.52', '2.56')
@validation.schema(schema_server_create_v257, '2.57', '2.62')
@validation.schema(schema_server_create_v263, '2.63')
@validation.schema(schema_servers.base_create_v20, '2.0', '2.0')
@validation.schema(schema_servers.base_create, '2.1', '2.18')
@validation.schema(schema_servers.base_create_v219, '2.19', '2.31')
@validation.schema(schema_servers.base_create_v232, '2.32', '2.32')
@validation.schema(schema_servers.base_create_v233, '2.33', '2.36')
@validation.schema(schema_servers.base_create_v237, '2.37', '2.41')
@validation.schema(schema_servers.base_create_v242, '2.42', '2.51')
@validation.schema(schema_servers.base_create_v252, '2.52', '2.56')
@validation.schema(schema_servers.base_create_v257, '2.57', '2.62')
@validation.schema(schema_servers.base_create_v263, '2.63')
def create(self, req, body):
"""Creates a new server for a given user."""
context = req.environ['nova.context']
@ -681,14 +638,6 @@ class ServersController(wsgi.Controller):
for func in self.server_create_func_list:
func(server_dict, create_kwargs, req_body)
def _create_schema(self, create_schema, version):
for schema_func in self.schema_func_list:
self._create_schema_by_func(create_schema, version, schema_func)
def _create_schema_by_func(self, create_schema, version, schema_func):
schema = schema_func(version)
create_schema['properties']['server']['properties'].update(schema)
def _delete(self, context, req, instance_uuid):
instance = self._get_server(context, req, instance_uuid)
context.can(server_policies.SERVERS % 'delete',
@ -706,9 +655,9 @@ class ServersController(wsgi.Controller):
self.compute_api.delete(context, instance)
@wsgi.expected_errors(404)
@validation.schema(schema_server_update_v20, '2.0', '2.0')
@validation.schema(schema_server_update, '2.1', '2.18')
@validation.schema(schema_server_update_v219, '2.19')
@validation.schema(schema_servers.base_update_v20, '2.0', '2.0')
@validation.schema(schema_servers.base_update, '2.1', '2.18')
@validation.schema(schema_servers.base_update_v219, '2.19')
def update(self, req, id, body):
"""Update server then pass on to version-specific controller."""
@ -899,12 +848,12 @@ class ServersController(wsgi.Controller):
@wsgi.response(202)
@wsgi.expected_errors((400, 403, 404, 409))
@wsgi.action('rebuild')
@validation.schema(schema_server_rebuild_v20, '2.0', '2.0')
@validation.schema(schema_server_rebuild, '2.1', '2.18')
@validation.schema(schema_server_rebuild_v219, '2.19', '2.53')
@validation.schema(schema_server_rebuild_v254, '2.54', '2.56')
@validation.schema(schema_server_rebuild_v257, '2.57', '2.62')
@validation.schema(schema_server_rebuild_v263, '2.63')
@validation.schema(schema_servers.base_rebuild_v20, '2.0', '2.0')
@validation.schema(schema_servers.base_rebuild, '2.1', '2.18')
@validation.schema(schema_servers.base_rebuild_v219, '2.19', '2.53')
@validation.schema(schema_servers.base_rebuild_v254, '2.54', '2.56')
@validation.schema(schema_servers.base_rebuild_v257, '2.57', '2.62')
@validation.schema(schema_servers.base_rebuild_v263, '2.63')
def _action_rebuild(self, req, id, body):
"""Rebuild an instance with the given attributes."""
rebuild_dict = body['rebuild']

View File

@ -12,9 +12,6 @@
# License for the specific language governing permissions and limitations
# under the License.
from nova.api.openstack.compute.schemas import user_data as schema_user_data
ATTRIBUTE_NAME = 'user_data'
@ -22,9 +19,3 @@ ATTRIBUTE_NAME = 'user_data'
# parameter as this is placed to handle scheduler_hint extension for V2.1.
def server_create(server_dict, create_kwargs, body_deprecated_param):
create_kwargs['user_data'] = server_dict.get(ATTRIBUTE_NAME)
def get_server_create_schema(version):
if version == '2.0':
return schema_user_data.server_create_v20
return schema_user_data.server_create