Merge "Tear down of os-disk-config part 2"
This commit is contained in:
commit
974b158f4f
@ -17,7 +17,6 @@
|
|||||||
from oslo_utils import strutils
|
from oslo_utils import strutils
|
||||||
from webob import exc
|
from webob import exc
|
||||||
|
|
||||||
from nova.api.openstack.compute.schemas import disk_config
|
|
||||||
from nova.api.openstack import extensions
|
from nova.api.openstack import extensions
|
||||||
from nova.api.openstack import wsgi
|
from nova.api.openstack import wsgi
|
||||||
from nova.i18n import _
|
from nova.i18n import _
|
||||||
@ -81,42 +80,3 @@ class DiskConfig(extensions.V21APIExtensionBase):
|
|||||||
|
|
||||||
def get_resources(self):
|
def get_resources(self):
|
||||||
return []
|
return []
|
||||||
|
|
||||||
def _extend_server(self, server_dict, create_kwargs):
|
|
||||||
"""Extends server create/update/rebuild/resize.
|
|
||||||
|
|
||||||
This extends the server create/update/rebuild/resize
|
|
||||||
operations to add disk_config into the mix. Because all these
|
|
||||||
methods act similarly a common method is used.
|
|
||||||
|
|
||||||
"""
|
|
||||||
if API_DISK_CONFIG in server_dict:
|
|
||||||
api_value = server_dict[API_DISK_CONFIG]
|
|
||||||
internal_value = disk_config_from_api(api_value)
|
|
||||||
create_kwargs[INTERNAL_DISK_CONFIG] = internal_value
|
|
||||||
|
|
||||||
# Extend server for the 4 extended points
|
|
||||||
def server_create(self, server_dict, create_kwargs, body_deprecated):
|
|
||||||
self._extend_server(server_dict, create_kwargs)
|
|
||||||
|
|
||||||
def server_update(self, server_dict, update_kwargs):
|
|
||||||
self._extend_server(server_dict, update_kwargs)
|
|
||||||
|
|
||||||
def server_rebuild(self, server_dict, rebuild_kwargs):
|
|
||||||
self._extend_server(server_dict, rebuild_kwargs)
|
|
||||||
|
|
||||||
def server_resize(self, server_dict, resize_kwargs):
|
|
||||||
self._extend_server(server_dict, resize_kwargs)
|
|
||||||
|
|
||||||
# Extend schema for the 4 extended points
|
|
||||||
def get_server_create_schema(self, version):
|
|
||||||
return disk_config.server_create
|
|
||||||
|
|
||||||
def get_server_update_schema(self, version):
|
|
||||||
return disk_config.server_create
|
|
||||||
|
|
||||||
def get_server_rebuild_schema(self, version):
|
|
||||||
return disk_config.server_create
|
|
||||||
|
|
||||||
def get_server_resize_schema(self, version):
|
|
||||||
return disk_config.server_create
|
|
||||||
|
@ -1,20 +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.
|
|
||||||
|
|
||||||
server_create = {
|
|
||||||
'OS-DCF:diskConfig': {
|
|
||||||
'type': 'string',
|
|
||||||
'enum': ['AUTO', 'MANUAL']
|
|
||||||
}
|
|
||||||
}
|
|
@ -42,7 +42,8 @@ base_create = {
|
|||||||
},
|
},
|
||||||
'additionalProperties': False,
|
'additionalProperties': False,
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
'OS-DCF:diskConfig': parameter_types.disk_config,
|
||||||
},
|
},
|
||||||
'required': ['name', 'flavorRef'],
|
'required': ['name', 'flavorRef'],
|
||||||
'additionalProperties': False,
|
'additionalProperties': False,
|
||||||
@ -70,6 +71,7 @@ base_update = {
|
|||||||
'type': 'object',
|
'type': 'object',
|
||||||
'properties': {
|
'properties': {
|
||||||
'name': parameter_types.name,
|
'name': parameter_types.name,
|
||||||
|
'OS-DCF:diskConfig': parameter_types.disk_config,
|
||||||
},
|
},
|
||||||
'additionalProperties': False,
|
'additionalProperties': False,
|
||||||
},
|
},
|
||||||
@ -98,6 +100,7 @@ base_rebuild = {
|
|||||||
'adminPass': parameter_types.admin_password,
|
'adminPass': parameter_types.admin_password,
|
||||||
'metadata': parameter_types.metadata,
|
'metadata': parameter_types.metadata,
|
||||||
'preserve_ephemeral': parameter_types.boolean,
|
'preserve_ephemeral': parameter_types.boolean,
|
||||||
|
'OS-DCF:diskConfig': parameter_types.disk_config
|
||||||
},
|
},
|
||||||
'required': ['imageRef'],
|
'required': ['imageRef'],
|
||||||
'additionalProperties': False,
|
'additionalProperties': False,
|
||||||
@ -123,6 +126,7 @@ base_resize = {
|
|||||||
'type': 'object',
|
'type': 'object',
|
||||||
'properties': {
|
'properties': {
|
||||||
'flavorRef': parameter_types.flavor_ref,
|
'flavorRef': parameter_types.flavor_ref,
|
||||||
|
'OS-DCF:diskConfig': parameter_types.disk_config,
|
||||||
},
|
},
|
||||||
'required': ['flavorRef'],
|
'required': ['flavorRef'],
|
||||||
'additionalProperties': False,
|
'additionalProperties': False,
|
||||||
|
@ -29,6 +29,7 @@ from webob import exc
|
|||||||
|
|
||||||
from nova.api.openstack import api_version_request
|
from nova.api.openstack import api_version_request
|
||||||
from nova.api.openstack import common
|
from nova.api.openstack import common
|
||||||
|
from nova.api.openstack.compute import disk_config
|
||||||
from nova.api.openstack.compute.schemas import servers as schema_servers
|
from nova.api.openstack.compute.schemas import servers as schema_servers
|
||||||
from nova.api.openstack.compute.views import servers as views_servers
|
from nova.api.openstack.compute.views import servers as views_servers
|
||||||
from nova.api.openstack import extensions
|
from nova.api.openstack import extensions
|
||||||
@ -54,6 +55,16 @@ LOG = logging.getLogger(__name__)
|
|||||||
authorize = extensions.os_compute_authorizer(ALIAS)
|
authorize = extensions.os_compute_authorizer(ALIAS)
|
||||||
|
|
||||||
|
|
||||||
|
def translate_attributes(server_dict, server_kwargs):
|
||||||
|
# Disk config
|
||||||
|
# Translate create kwargs to internal representation
|
||||||
|
auto_disk_config_raw = server_dict.pop("OS-DCF:diskConfig", None)
|
||||||
|
if auto_disk_config_raw is not None:
|
||||||
|
auto_disk_config = disk_config.disk_config_from_api(
|
||||||
|
auto_disk_config_raw)
|
||||||
|
server_kwargs['auto_disk_config'] = auto_disk_config
|
||||||
|
|
||||||
|
|
||||||
class ServersController(wsgi.Controller):
|
class ServersController(wsgi.Controller):
|
||||||
"""The Server API base controller class for the OpenStack API."""
|
"""The Server API base controller class for the OpenStack API."""
|
||||||
|
|
||||||
@ -63,8 +74,6 @@ class ServersController(wsgi.Controller):
|
|||||||
|
|
||||||
EXTENSION_UPDATE_NAMESPACE = 'nova.api.v21.extensions.server.update'
|
EXTENSION_UPDATE_NAMESPACE = 'nova.api.v21.extensions.server.update'
|
||||||
|
|
||||||
EXTENSION_RESIZE_NAMESPACE = 'nova.api.v21.extensions.server.resize'
|
|
||||||
|
|
||||||
_view_builder_class = views_servers.ViewBuilderV21
|
_view_builder_class = views_servers.ViewBuilderV21
|
||||||
|
|
||||||
schema_server_create = schema_servers.base_create
|
schema_server_create = schema_servers.base_create
|
||||||
@ -184,17 +193,6 @@ class ServersController(wsgi.Controller):
|
|||||||
if not list(self.update_extension_manager):
|
if not list(self.update_extension_manager):
|
||||||
LOG.debug("Did not find any server update extensions")
|
LOG.debug("Did not find any server update extensions")
|
||||||
|
|
||||||
# Look for implementation of extension point of server resize
|
|
||||||
self.resize_extension_manager = \
|
|
||||||
stevedore.enabled.EnabledExtensionManager(
|
|
||||||
namespace=self.EXTENSION_RESIZE_NAMESPACE,
|
|
||||||
check_func=_check_load_extension('server_resize'),
|
|
||||||
invoke_on_load=True,
|
|
||||||
invoke_kwds={"extension_info": self.extension_info},
|
|
||||||
propagate_map_exceptions=True)
|
|
||||||
if not list(self.resize_extension_manager):
|
|
||||||
LOG.debug("Did not find any server resize extensions")
|
|
||||||
|
|
||||||
# Look for API schema of server create extension
|
# Look for API schema of server create extension
|
||||||
self.create_schema_manager = \
|
self.create_schema_manager = \
|
||||||
stevedore.enabled.EnabledExtensionManager(
|
stevedore.enabled.EnabledExtensionManager(
|
||||||
@ -255,20 +253,6 @@ class ServersController(wsgi.Controller):
|
|||||||
else:
|
else:
|
||||||
LOG.debug("Did not find any server rebuild schemas")
|
LOG.debug("Did not find any server rebuild schemas")
|
||||||
|
|
||||||
# Look for API schema of server resize extension
|
|
||||||
self.resize_schema_manager = \
|
|
||||||
stevedore.enabled.EnabledExtensionManager(
|
|
||||||
namespace=self.EXTENSION_RESIZE_NAMESPACE,
|
|
||||||
check_func=_check_load_extension('get_server_resize_schema'),
|
|
||||||
invoke_on_load=True,
|
|
||||||
invoke_kwds={"extension_info": self.extension_info},
|
|
||||||
propagate_map_exceptions=True)
|
|
||||||
if list(self.resize_schema_manager):
|
|
||||||
self.resize_schema_manager.map(self._resize_extension_schema,
|
|
||||||
self.schema_server_resize, '2.1')
|
|
||||||
else:
|
|
||||||
LOG.debug("Did not find any server resize schemas")
|
|
||||||
|
|
||||||
@extensions.expected_errors((400, 403))
|
@extensions.expected_errors((400, 403))
|
||||||
def index(self, req):
|
def index(self, req):
|
||||||
"""Returns a list of server names and ids for a given user."""
|
"""Returns a list of server names and ids for a given user."""
|
||||||
@ -583,6 +567,8 @@ class ServersController(wsgi.Controller):
|
|||||||
|
|
||||||
availability_zone = create_kwargs.pop("availability_zone", None)
|
availability_zone = create_kwargs.pop("availability_zone", None)
|
||||||
|
|
||||||
|
translate_attributes(server_dict, create_kwargs)
|
||||||
|
|
||||||
target = {
|
target = {
|
||||||
'project_id': context.project_id,
|
'project_id': context.project_id,
|
||||||
'user_id': context.user_id,
|
'user_id': context.user_id,
|
||||||
@ -758,12 +744,6 @@ class ServersController(wsgi.Controller):
|
|||||||
|
|
||||||
handler.server_rebuild(rebuild_dict, rebuild_kwargs)
|
handler.server_rebuild(rebuild_dict, rebuild_kwargs)
|
||||||
|
|
||||||
def _resize_extension_point(self, ext, resize_dict, resize_kwargs):
|
|
||||||
handler = ext.obj
|
|
||||||
LOG.debug("Running _resize_extension_point for %s", ext.obj)
|
|
||||||
|
|
||||||
handler.server_resize(resize_dict, resize_kwargs)
|
|
||||||
|
|
||||||
def _update_extension_point(self, ext, update_dict, update_kwargs):
|
def _update_extension_point(self, ext, update_dict, update_kwargs):
|
||||||
handler = ext.obj
|
handler = ext.obj
|
||||||
LOG.debug("Running _update_extension_point for %s", ext.obj)
|
LOG.debug("Running _update_extension_point for %s", ext.obj)
|
||||||
@ -796,13 +776,6 @@ class ServersController(wsgi.Controller):
|
|||||||
schema = handler.get_server_rebuild_schema(version)
|
schema = handler.get_server_rebuild_schema(version)
|
||||||
rebuild_schema['properties']['rebuild']['properties'].update(schema)
|
rebuild_schema['properties']['rebuild']['properties'].update(schema)
|
||||||
|
|
||||||
def _resize_extension_schema(self, ext, resize_schema, version):
|
|
||||||
handler = ext.obj
|
|
||||||
LOG.debug("Running _resize_extension_schema for %s", ext.obj)
|
|
||||||
|
|
||||||
schema = handler.get_server_resize_schema(version)
|
|
||||||
resize_schema['properties']['resize']['properties'].update(schema)
|
|
||||||
|
|
||||||
def _delete(self, context, req, instance_uuid):
|
def _delete(self, context, req, instance_uuid):
|
||||||
authorize(context, action='delete')
|
authorize(context, action='delete')
|
||||||
instance = self._get_server(context, req, instance_uuid)
|
instance = self._get_server(context, req, instance_uuid)
|
||||||
@ -840,6 +813,8 @@ class ServersController(wsgi.Controller):
|
|||||||
self.update_extension_manager.map(self._update_extension_point,
|
self.update_extension_manager.map(self._update_extension_point,
|
||||||
body['server'], update_dict)
|
body['server'], update_dict)
|
||||||
|
|
||||||
|
translate_attributes(body['server'], update_dict)
|
||||||
|
|
||||||
instance = self._get_server(ctxt, req, id, is_detail=True)
|
instance = self._get_server(ctxt, req, id, is_detail=True)
|
||||||
try:
|
try:
|
||||||
# NOTE(mikal): this try block needs to stay because save() still
|
# NOTE(mikal): this try block needs to stay because save() still
|
||||||
@ -1003,10 +978,7 @@ class ServersController(wsgi.Controller):
|
|||||||
flavor_ref = str(resize_dict["flavorRef"])
|
flavor_ref = str(resize_dict["flavorRef"])
|
||||||
|
|
||||||
resize_kwargs = {}
|
resize_kwargs = {}
|
||||||
|
translate_attributes(resize_dict, resize_kwargs)
|
||||||
if list(self.resize_extension_manager):
|
|
||||||
self.resize_extension_manager.map(self._resize_extension_point,
|
|
||||||
resize_dict, resize_kwargs)
|
|
||||||
|
|
||||||
self._resize(req, id, flavor_ref, **resize_kwargs)
|
self._resize(req, id, flavor_ref, **resize_kwargs)
|
||||||
|
|
||||||
@ -1041,6 +1013,8 @@ class ServersController(wsgi.Controller):
|
|||||||
self.rebuild_extension_manager.map(self._rebuild_extension_point,
|
self.rebuild_extension_manager.map(self._rebuild_extension_point,
|
||||||
rebuild_dict, rebuild_kwargs)
|
rebuild_dict, rebuild_kwargs)
|
||||||
|
|
||||||
|
translate_attributes(rebuild_dict, rebuild_kwargs)
|
||||||
|
|
||||||
for request_attribute, instance_attribute in attr_map.items():
|
for request_attribute, instance_attribute in attr_map.items():
|
||||||
try:
|
try:
|
||||||
if request_attribute == 'name':
|
if request_attribute == 'name':
|
||||||
|
@ -357,6 +357,10 @@ volume_size = {
|
|||||||
'maximum': db.MAX_INT
|
'maximum': db.MAX_INT
|
||||||
}
|
}
|
||||||
|
|
||||||
|
disk_config = {
|
||||||
|
'type': 'string',
|
||||||
|
'enum': ['AUTO', 'MANUAL']
|
||||||
|
}
|
||||||
|
|
||||||
flavor_param_positive = copy.deepcopy(volume_size)
|
flavor_param_positive = copy.deepcopy(volume_size)
|
||||||
|
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
import base64
|
import base64
|
||||||
import collections
|
import collections
|
||||||
import copy
|
|
||||||
import datetime
|
import datetime
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
@ -35,11 +34,9 @@ import webob
|
|||||||
from nova.api.openstack import api_version_request
|
from nova.api.openstack import api_version_request
|
||||||
from nova.api.openstack import common
|
from nova.api.openstack import common
|
||||||
from nova.api.openstack import compute
|
from nova.api.openstack import compute
|
||||||
from nova.api.openstack.compute import disk_config
|
|
||||||
from nova.api.openstack.compute import extension_info
|
from nova.api.openstack.compute import extension_info
|
||||||
from nova.api.openstack.compute import ips
|
from nova.api.openstack.compute import ips
|
||||||
from nova.api.openstack.compute import keypairs
|
from nova.api.openstack.compute import keypairs
|
||||||
from nova.api.openstack.compute.schemas import servers as servers_schema
|
|
||||||
from nova.api.openstack.compute import servers
|
from nova.api.openstack.compute import servers
|
||||||
from nova.api.openstack.compute import views
|
from nova.api.openstack.compute import views
|
||||||
from nova.api.openstack import extensions
|
from nova.api.openstack import extensions
|
||||||
@ -4138,95 +4135,6 @@ class FakeExt(extensions.V21APIExtensionBase):
|
|||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
||||||
class TestServersExtensionPoint(test.NoDBTestCase):
|
|
||||||
def setUp(self):
|
|
||||||
super(TestServersExtensionPoint, self).setUp()
|
|
||||||
CONF.set_override('extensions_whitelist', ['os-disk-config'],
|
|
||||||
'osapi_v21')
|
|
||||||
self.stubs.Set(disk_config, 'DiskConfig', FakeExt)
|
|
||||||
|
|
||||||
def _test_load_extension_point(self, name):
|
|
||||||
setattr(FakeExt, 'server_%s' % name,
|
|
||||||
FakeExt.fake_extension_point)
|
|
||||||
ext_info = extension_info.LoadedExtensionInfo()
|
|
||||||
controller = servers.ServersController(extension_info=ext_info)
|
|
||||||
self.assertEqual(
|
|
||||||
'os-disk-config',
|
|
||||||
list(getattr(controller,
|
|
||||||
'%s_extension_manager' % name))[0].obj.alias)
|
|
||||||
delattr(FakeExt, 'server_%s' % name)
|
|
||||||
|
|
||||||
def test_load_update_extension_point(self):
|
|
||||||
self._test_load_extension_point('update')
|
|
||||||
|
|
||||||
def test_load_rebuild_extension_point(self):
|
|
||||||
self._test_load_extension_point('rebuild')
|
|
||||||
|
|
||||||
def test_load_create_extension_point(self):
|
|
||||||
self._test_load_extension_point('create')
|
|
||||||
|
|
||||||
def test_load_resize_extension_point(self):
|
|
||||||
self._test_load_extension_point('resize')
|
|
||||||
|
|
||||||
|
|
||||||
class TestServersExtensionSchema(test.NoDBTestCase):
|
|
||||||
def setUp(self):
|
|
||||||
super(TestServersExtensionSchema, self).setUp()
|
|
||||||
CONF.set_override('extensions_whitelist', ['os-disk-config'],
|
|
||||||
'osapi_v21')
|
|
||||||
self.stubs.Set(disk_config, 'DiskConfig', FakeExt)
|
|
||||||
|
|
||||||
def _test_load_extension_schema(self, name):
|
|
||||||
setattr(FakeExt, 'get_server_%s_schema' % name,
|
|
||||||
FakeExt.fake_schema_extension_point)
|
|
||||||
ext_info = extension_info.LoadedExtensionInfo()
|
|
||||||
controller = servers.ServersController(extension_info=ext_info)
|
|
||||||
self.assertTrue(hasattr(controller, '%s_schema_manager' % name))
|
|
||||||
|
|
||||||
delattr(FakeExt, 'get_server_%s_schema' % name)
|
|
||||||
return getattr(controller, 'schema_server_%s' % name)
|
|
||||||
|
|
||||||
def test_load_create_extension_point(self):
|
|
||||||
# The expected is the schema combination of base and keypairs
|
|
||||||
# because of the above extensions_whitelist.
|
|
||||||
expected_schema = copy.deepcopy(servers_schema.base_create)
|
|
||||||
expected_schema['properties']['server']['properties'].update(
|
|
||||||
FakeExt.fake_schema)
|
|
||||||
|
|
||||||
actual_schema = self._test_load_extension_schema('create')
|
|
||||||
self.assertEqual(expected_schema, actual_schema)
|
|
||||||
|
|
||||||
def test_load_update_extension_point(self):
|
|
||||||
# keypair extension does not contain update_server() and
|
|
||||||
# here checks that any extension is not added to the schema.
|
|
||||||
expected_schema = copy.deepcopy(servers_schema.base_update)
|
|
||||||
expected_schema['properties']['server']['properties'].update(
|
|
||||||
FakeExt.fake_schema)
|
|
||||||
|
|
||||||
actual_schema = self._test_load_extension_schema('update')
|
|
||||||
self.assertEqual(expected_schema, actual_schema)
|
|
||||||
|
|
||||||
def test_load_rebuild_extension_point(self):
|
|
||||||
# keypair extension does not contain rebuild_server() and
|
|
||||||
# here checks that any extension is not added to the schema.
|
|
||||||
expected_schema = copy.deepcopy(servers_schema.base_rebuild)
|
|
||||||
expected_schema['properties']['rebuild']['properties'].update(
|
|
||||||
FakeExt.fake_schema)
|
|
||||||
|
|
||||||
actual_schema = self._test_load_extension_schema('rebuild')
|
|
||||||
self.assertEqual(expected_schema, actual_schema)
|
|
||||||
|
|
||||||
def test_load_resize_extension_point(self):
|
|
||||||
# keypair extension does not contain resize_server() and
|
|
||||||
# here checks that any extension is not added to the schema.
|
|
||||||
expected_schema = copy.deepcopy(servers_schema.base_resize)
|
|
||||||
expected_schema['properties']['resize']['properties'].update(
|
|
||||||
FakeExt.fake_schema)
|
|
||||||
|
|
||||||
actual_schema = self._test_load_extension_schema('resize')
|
|
||||||
self.assertEqual(expected_schema, actual_schema)
|
|
||||||
|
|
||||||
|
|
||||||
# TODO(alex_xu): There isn't specified file for ips extension. Most of
|
# TODO(alex_xu): There isn't specified file for ips extension. Most of
|
||||||
# unittest related to ips extension is in this file. So put the ips policy
|
# unittest related to ips extension is in this file. So put the ips policy
|
||||||
# enforcement tests at here until there is specified file for ips extension.
|
# enforcement tests at here until there is specified file for ips extension.
|
||||||
|
@ -160,7 +160,6 @@ nova.api.v21.extensions.server.create =
|
|||||||
block_device_mapping = nova.api.openstack.compute.block_device_mapping:BlockDeviceMapping
|
block_device_mapping = nova.api.openstack.compute.block_device_mapping:BlockDeviceMapping
|
||||||
block_device_mapping_v1 = nova.api.openstack.compute.block_device_mapping_v1:BlockDeviceMappingV1
|
block_device_mapping_v1 = nova.api.openstack.compute.block_device_mapping_v1:BlockDeviceMappingV1
|
||||||
config_drive = nova.api.openstack.compute.config_drive:ConfigDrive
|
config_drive = nova.api.openstack.compute.config_drive:ConfigDrive
|
||||||
disk_config = nova.api.openstack.compute.disk_config:DiskConfig
|
|
||||||
keypairs_create = nova.api.openstack.compute.keypairs:Keypairs
|
keypairs_create = nova.api.openstack.compute.keypairs:Keypairs
|
||||||
multiple_create = nova.api.openstack.compute.multiple_create:MultipleCreate
|
multiple_create = nova.api.openstack.compute.multiple_create:MultipleCreate
|
||||||
personality = nova.api.openstack.compute.personality:Personality
|
personality = nova.api.openstack.compute.personality:Personality
|
||||||
@ -170,16 +169,11 @@ nova.api.v21.extensions.server.create =
|
|||||||
|
|
||||||
nova.api.v21.extensions.server.rebuild =
|
nova.api.v21.extensions.server.rebuild =
|
||||||
access_ips = nova.api.openstack.compute.access_ips:AccessIPs
|
access_ips = nova.api.openstack.compute.access_ips:AccessIPs
|
||||||
disk_config = nova.api.openstack.compute.disk_config:DiskConfig
|
|
||||||
personality = nova.api.openstack.compute.personality:Personality
|
personality = nova.api.openstack.compute.personality:Personality
|
||||||
preserve_ephemeral_rebuild = nova.api.openstack.compute.preserve_ephemeral_rebuild:PreserveEphemeralRebuild
|
preserve_ephemeral_rebuild = nova.api.openstack.compute.preserve_ephemeral_rebuild:PreserveEphemeralRebuild
|
||||||
|
|
||||||
nova.api.v21.extensions.server.update =
|
nova.api.v21.extensions.server.update =
|
||||||
access_ips = nova.api.openstack.compute.access_ips:AccessIPs
|
access_ips = nova.api.openstack.compute.access_ips:AccessIPs
|
||||||
disk_config = nova.api.openstack.compute.disk_config:DiskConfig
|
|
||||||
|
|
||||||
nova.api.v21.extensions.server.resize =
|
|
||||||
disk_config = nova.api.openstack.compute.disk_config:DiskConfig
|
|
||||||
|
|
||||||
nova.api.v21.test_extensions =
|
nova.api.v21.test_extensions =
|
||||||
basic = nova.tests.unit.api.openstack.compute.basic:Basic
|
basic = nova.tests.unit.api.openstack.compute.basic:Basic
|
||||||
|
Loading…
x
Reference in New Issue
Block a user