summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Prince <dan.prince@rackspace.com>2011-03-17 09:55:41 -0400
committerDan Prince <dan.prince@rackspace.com>2011-03-17 09:55:41 -0400
commit732633c93f8d8cf71875d2caf096c9efbcf9dbce (patch)
tree0f64d48c1c693608bae44654d75e0ef3029494dd
parent699abfe9e645ddbc854b42725247ab8fcd61517e (diff)
downloadnova-732633c93f8d8cf71875d2caf096c9efbcf9dbce.tar.gz
nova-732633c93f8d8cf71875d2caf096c9efbcf9dbce.tar.xz
nova-732633c93f8d8cf71875d2caf096c9efbcf9dbce.zip
Update the Openstack API to handle case where personality is set but
null in the request to create a server.
-rw-r--r--nova/api/openstack/servers.py5
-rw-r--r--nova/tests/api/openstack/test_servers.py13
2 files changed, 16 insertions, 2 deletions
diff --git a/nova/api/openstack/servers.py b/nova/api/openstack/servers.py
index 3ecd4fb01..bf21ed17f 100644
--- a/nova/api/openstack/servers.py
+++ b/nova/api/openstack/servers.py
@@ -220,6 +220,11 @@ class Controller(wsgi.Controller):
underlying compute service.
"""
injected_files = []
+
+ # NOTE(dprince): handle case where 'personality: null' is in JSON req
+ if not personality:
+ return injected_files
+
for item in personality:
try:
path = item['path']
diff --git a/nova/tests/api/openstack/test_servers.py b/nova/tests/api/openstack/test_servers.py
index 03e00af2a..230c9d03c 100644
--- a/nova/tests/api/openstack/test_servers.py
+++ b/nova/tests/api/openstack/test_servers.py
@@ -943,11 +943,13 @@ class TestServerInstanceCreation(test.TestCase):
server['name'] = 'new-server-test'
server['imageId'] = 1
server['flavorId'] = 1
- if personality_files is not None:
+ if personality_files:
personalities = []
for path, contents in personality_files:
personalities.append({'path': path, 'contents': contents})
server['personality'] = personalities
+ else:
+ server['personality'] = None
return {'server': server}
def _get_create_request_json(self, body_dict):
@@ -976,7 +978,7 @@ class TestServerInstanceCreation(test.TestCase):
for item in metadata.iteritems():
body_parts.append('<meta key="%s">%s</meta>' % item)
body_parts.append('</metadata>')
- if 'personality' in server:
+ if 'personality' in server and server['personality'] is not None:
personalities = server['personality']
body_parts.append('<personality>')
for file in personalities:
@@ -1093,6 +1095,13 @@ class TestServerInstanceCreation(test.TestCase):
self.assertEquals(response.status_int, 400)
self.assertEquals(injected_files, None)
+ def test_create_instance_with_null_personality(self):
+ personality = None
+ request, response, injected_files = \
+ self._create_instance_with_personality_json(personality)
+ self.assertEquals(response.status_int, 200)
+ self.assertEquals(injected_files, [])
+
def test_create_instance_with_three_personalities(self):
files = [
('/etc/sudoers', 'ALL ALL=NOPASSWD: ALL\n'),