summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVishvananda Ishaya <vishvananda@gmail.com>2012-08-03 19:31:48 -0700
committerVishvananda Ishaya <vishvananda@gmail.com>2012-08-09 08:00:48 -0700
commit2640f81754126c9d3ecd668eb99fb006f68b709b (patch)
treef9c157f95ed976f4c7a9040eac439180a1eeb65d
parentd0189e777097a3adc5cf030123adfc24c67d14b4 (diff)
Key block_device_mapping off of volume extension
partially implements blueprint disable-server-extensions Instead of creating a child controller for boot from volume, key the post parameter of of the os-volumes extension. Change-Id: I0dd233c2ae12a09d6fc59c49042c2f8b83f3fdba
-rw-r--r--nova/api/openstack/compute/contrib/volumes.py11
-rw-r--r--nova/api/openstack/compute/servers.py11
-rw-r--r--nova/tests/api/openstack/compute/test_servers.py41
3 files changed, 37 insertions, 26 deletions
diff --git a/nova/api/openstack/compute/contrib/volumes.py b/nova/api/openstack/compute/contrib/volumes.py
index 8dc16fcdc..e566a95f7 100644
--- a/nova/api/openstack/compute/contrib/volumes.py
+++ b/nova/api/openstack/compute/contrib/volumes.py
@@ -19,7 +19,6 @@ import webob
from webob import exc
from nova.api.openstack import common
-from nova.api.openstack.compute import servers
from nova.api.openstack import extensions
from nova.api.openstack import wsgi
from nova.api.openstack import xmlutil
@@ -428,13 +427,6 @@ class VolumeAttachmentController(object):
return {'volumeAttachments': results}
-class BootFromVolumeController(servers.Controller):
- """The boot from volume API controller for the OpenStack API."""
-
- def _get_block_device_mapping(self, data):
- return data.get('block_device_mapping')
-
-
def _translate_snapshot_detail_view(context, vol):
"""Maps keys for snapshots details view."""
@@ -597,8 +589,7 @@ class Volumes(extensions.ExtensionDescriptor):
collection_name='servers'))
resources.append(res)
- controller = BootFromVolumeController(self.ext_mgr)
- res = extensions.ResourceExtension('os-volumes_boot', controller,
+ res = extensions.ResourceExtension('os-volumes_boot',
inherits='servers')
resources.append(res)
diff --git a/nova/api/openstack/compute/servers.py b/nova/api/openstack/compute/servers.py
index d70323cbf..6756338d8 100644
--- a/nova/api/openstack/compute/servers.py
+++ b/nova/api/openstack/compute/servers.py
@@ -375,13 +375,6 @@ class Controller(wsgi.Controller):
raise exc.HTTPNotFound()
return servers
- def _get_block_device_mapping(self, data):
- """Get block_device_mapping from 'server' dictionary.
-
- Overridden by volumes controller.
- """
- return None
-
def _add_instance_faults(self, ctxt, instances):
faults = self.compute_api.get_instance_faults(ctxt, instances)
if faults is not None:
@@ -654,7 +647,9 @@ class Controller(wsgi.Controller):
availability_zone = server_dict.get('availability_zone')
- block_device_mapping = self._get_block_device_mapping(server_dict)
+ block_device_mapping = None
+ if self.ext_mgr.is_loaded('os-volumes'):
+ block_device_mapping = server_dict.get('block_device_mapping')
ret_resv_id = server_dict.get('return_reservation_id', False)
diff --git a/nova/tests/api/openstack/compute/test_servers.py b/nova/tests/api/openstack/compute/test_servers.py
index e482ca812..edd53446a 100644
--- a/nova/tests/api/openstack/compute/test_servers.py
+++ b/nova/tests/api/openstack/compute/test_servers.py
@@ -1748,13 +1748,11 @@ class ServersControllerCreateTest(test.TestCase):
fakes.stub_out_key_pair_funcs(self.stubs, have_key_pair=False)
self._test_create_instance()
- def _test_create_security_group(self, group):
+ def _test_create_extra(self, params):
image_uuid = 'c905cedb-7281-47e4-8a62-f26bc5fc4c77'
- body = dict(server=dict(
- name='server_test', imageRef=image_uuid, flavorRef=2,
- metadata={'hello': 'world', 'open': 'stack'},
- security_groups=[{'name': group}],
- personality={}))
+ server = dict(name='server_test', imageRef=image_uuid, flavorRef=2)
+ server.update(params)
+ body = dict(server=server)
req = fakes.HTTPRequest.blank('/v2/fake/servers')
req.method = 'POST'
req.body = jsonutils.dumps(body)
@@ -1764,6 +1762,7 @@ class ServersControllerCreateTest(test.TestCase):
def test_create_instance_with_security_group_enabled(self):
self.ext_mgr.extensions = {'os-security-groups': 'fake'}
group = 'foo'
+ params = {'security_groups': [{'name': group}]}
old_create = nova.compute.api.API.create
def create(*args, **kwargs):
@@ -1771,10 +1770,11 @@ class ServersControllerCreateTest(test.TestCase):
return old_create(*args, **kwargs)
self.stubs.Set(nova.compute.api.API, 'create', create)
- self._test_create_security_group(group)
+ self._test_create_extra(params)
def test_create_instance_with_security_group_disabled(self):
group = 'foo'
+ params = {'security_groups': [{'name': group}]}
old_create = nova.compute.api.API.create
def create(*args, **kwargs):
@@ -1785,7 +1785,32 @@ class ServersControllerCreateTest(test.TestCase):
return old_create(*args, **kwargs)
self.stubs.Set(nova.compute.api.API, 'create', create)
- self._test_create_security_group(group)
+ self._test_create_extra(params)
+
+ def test_create_instance_with_volumes_enabled(self):
+ self.ext_mgr.extensions = {'os-volumes': 'fake'}
+ bdm = [{'device_name': 'foo'}]
+ params = {'block_device_mapping': bdm}
+ old_create = nova.compute.api.API.create
+
+ def create(*args, **kwargs):
+ self.assertEqual(kwargs['block_device_mapping'], bdm)
+ return old_create(*args, **kwargs)
+
+ self.stubs.Set(nova.compute.api.API, 'create', create)
+ self._test_create_extra(params)
+
+ def test_create_instance_with_volumes_disabled(self):
+ bdm = [{'device_name': 'foo'}]
+ params = {'block_device_mapping': bdm}
+ old_create = nova.compute.api.API.create
+
+ def create(*args, **kwargs):
+ self.assertEqual(kwargs['block_device_mapping'], None)
+ return old_create(*args, **kwargs)
+
+ self.stubs.Set(nova.compute.api.API, 'create', create)
+ self._test_create_extra(params)
def test_create_instance_with_access_ip(self):
# proper local hrefs must start with 'http://localhost/v2/'