From de03b832adcf74702c0747ff66ae6aa570538a72 Mon Sep 17 00:00:00 2001 From: ghanshyam Date: Wed, 27 Jun 2018 18:03:18 +0300 Subject: [PATCH] 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 --- nova/api/openstack/compute/schemas/servers.py | 14 ++- .../openstack/compute/schemas/user_data.py | 34 ------- nova/api/openstack/compute/servers.py | 89 ++++--------------- nova/api/openstack/compute/user_data.py | 9 -- 4 files changed, 31 insertions(+), 115 deletions(-) delete mode 100644 nova/api/openstack/compute/schemas/user_data.py diff --git a/nova/api/openstack/compute/schemas/servers.py b/nova/api/openstack/compute/schemas/servers.py index e036672f85..768288725f 100644 --- a/nova/api/openstack/compute/schemas/servers.py +++ b/nova/api/openstack/compute/schemas/servers.py @@ -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'} ] }) diff --git a/nova/api/openstack/compute/schemas/user_data.py b/nova/api/openstack/compute/schemas/user_data.py deleted file mode 100644 index da9e40d742..0000000000 --- a/nova/api/openstack/compute/schemas/user_data.py +++ /dev/null @@ -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'}, - ], - }, -} diff --git a/nova/api/openstack/compute/servers.py b/nova/api/openstack/compute/servers.py index 2cc0174564..c165d86d16 100644 --- a/nova/api/openstack/compute/servers.py +++ b/nova/api/openstack/compute/servers.py @@ -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'] diff --git a/nova/api/openstack/compute/user_data.py b/nova/api/openstack/compute/user_data.py index f89fb03060..f9890bbbfc 100644 --- a/nova/api/openstack/compute/user_data.py +++ b/nova/api/openstack/compute/user_data.py @@ -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