summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-08-10 23:04:48 +0000
committerGerrit Code Review <review@openstack.org>2012-08-10 23:04:48 +0000
commitfaa0b5e88bba74437599ff3e7f250b6eb359339f (patch)
tree94cca9fa86b459eb3f7a41cf6178f41f8af8c009
parentb962f98a18a4070ae859b8a98b4169e37db6fa69 (diff)
parent0bfbce95c8bb867d8e8d27cb7c7429465cc88f15 (diff)
Merge changes I7aef0ebe,I0dd233c2
* changes: Key user_data in create server off of extension Key block_device_mapping off of volume extension
-rw-r--r--nova/api/openstack/compute/contrib/user_data.py27
-rw-r--r--nova/api/openstack/compute/contrib/volumes.py11
-rw-r--r--nova/api/openstack/compute/servers.py15
-rw-r--r--nova/tests/api/openstack/compute/test_extensions.py1
-rw-r--r--nova/tests/api/openstack/compute/test_servers.py66
5 files changed, 93 insertions, 27 deletions
diff --git a/nova/api/openstack/compute/contrib/user_data.py b/nova/api/openstack/compute/contrib/user_data.py
new file mode 100644
index 000000000..debd1176e
--- /dev/null
+++ b/nova/api/openstack/compute/contrib/user_data.py
@@ -0,0 +1,27 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2012 OpenStack LLC.
+#
+# 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
+
+from nova.api.openstack import extensions
+
+
+class User_data(extensions.ExtensionDescriptor):
+ """Add user_data to the Create Server v1.1 API"""
+
+ name = "UserData"
+ alias = "os-user-data"
+ namespace = ("http://docs.openstack.org/compute/ext/"
+ "userdata/api/v1.1")
+ updated = "2012-08-07T00:00:00+00:00"
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..b378d4139 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:
@@ -649,12 +642,16 @@ class Controller(wsgi.Controller):
# optional openstack extensions:
key_name = server_dict.get('key_name')
- user_data = server_dict.get('user_data')
+ user_data = None
+ if self.ext_mgr.is_loaded('os-user-data'):
+ user_data = server_dict.get('user_data')
self._validate_user_data(user_data)
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_extensions.py b/nova/tests/api/openstack/compute/test_extensions.py
index ebecb3ce6..48875dd3d 100644
--- a/nova/tests/api/openstack/compute/test_extensions.py
+++ b/nova/tests/api/openstack/compute/test_extensions.py
@@ -184,6 +184,7 @@ class ExtensionControllerTest(ExtensionTestCase):
"ServerDiagnostics",
"ServerStartStop",
"SimpleTenantUsage",
+ "UserData",
"VirtualInterfaces",
"Volumes",
"VolumeTypes",
diff --git a/nova/tests/api/openstack/compute/test_servers.py b/nova/tests/api/openstack/compute/test_servers.py
index e482ca812..6e81d99bc 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,57 @@ 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_user_data_enabled(self):
+ self.ext_mgr.extensions = {'os-user-data': 'fake'}
+ user_data = 'fake'
+ params = {'user_data': user_data}
+ old_create = nova.compute.api.API.create
+
+ def create(*args, **kwargs):
+ self.assertEqual(kwargs['user_data'], user_data)
+ return old_create(*args, **kwargs)
+
+ self.stubs.Set(nova.compute.api.API, 'create', create)
+ self._test_create_extra(params)
+
+ def test_create_instance_with_user_data_disabled(self):
+ user_data = 'fake'
+ params = {'user_data': user_data}
+ old_create = nova.compute.api.API.create
+
+ def create(*args, **kwargs):
+ self.assertEqual(kwargs['user_data'], 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/'