summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjaypipes@gmail.com <>2011-03-16 19:02:17 +0000
committerTarmac <>2011-03-16 19:02:17 +0000
commit7dbda7ca270ee5109f307be3d0f1fb7c0336ce21 (patch)
tree1d3683f4d904ab682463aed5412ded401ecf6279
parent9fa74cdae1dcf94586ddb7924c044cb26112b67b (diff)
parent663c1726d9a96540b8fd729223fcb34d7cf3cdf7 (diff)
downloadnova-7dbda7ca270ee5109f307be3d0f1fb7c0336ce21.tar.gz
nova-7dbda7ca270ee5109f307be3d0f1fb7c0336ce21.tar.xz
nova-7dbda7ca270ee5109f307be3d0f1fb7c0336ce21.zip
Keypairs are not required in the OpenStack API; don't require them!
This cleans up some weirdness from the original branch (https://code.launchpad.net/~justin-fathomdb/nova/bug732204/+merge/53359) with justin's LP username in r804.
-rw-r--r--nova/api/openstack/servers.py14
-rw-r--r--nova/tests/api/openstack/fakes.py11
-rw-r--r--nova/tests/api/openstack/test_servers.py10
3 files changed, 27 insertions, 8 deletions
diff --git a/nova/api/openstack/servers.py b/nova/api/openstack/servers.py
index dc28a0782..47ed254ec 100644
--- a/nova/api/openstack/servers.py
+++ b/nova/api/openstack/servers.py
@@ -146,10 +146,14 @@ class Controller(wsgi.Controller):
return faults.Fault(exc.HTTPUnprocessableEntity())
context = req.environ['nova.context']
+
+ key_name = None
+ key_data = None
key_pairs = auth_manager.AuthManager.get_key_pairs(context)
- if not key_pairs:
- raise exception.NotFound(_("No keypairs defined"))
- key_pair = key_pairs[0]
+ if key_pairs:
+ key_pair = key_pairs[0]
+ key_name = key_pair['name']
+ key_data = key_pair['public_key']
image_id = common.get_image_id_from_image_hash(self._image_service,
context, env['server']['imageId'])
@@ -174,8 +178,8 @@ class Controller(wsgi.Controller):
ramdisk_id=ramdisk_id,
display_name=env['server']['name'],
display_description=env['server']['name'],
- key_name=key_pair['name'],
- key_data=key_pair['public_key'],
+ key_name=key_name,
+ key_data=key_data,
metadata=metadata,
onset_files=env.get('onset_files', []))
diff --git a/nova/tests/api/openstack/fakes.py b/nova/tests/api/openstack/fakes.py
index 7cb974bb2..15f8a5b56 100644
--- a/nova/tests/api/openstack/fakes.py
+++ b/nova/tests/api/openstack/fakes.py
@@ -85,10 +85,17 @@ def wsgi_app(inner_application=None):
return mapper
-def stub_out_key_pair_funcs(stubs):
+def stub_out_key_pair_funcs(stubs, have_key_pair=True):
def key_pair(context, user_id):
return [dict(name='key', public_key='public_key')]
- stubs.Set(nova.db, 'key_pair_get_all_by_user', key_pair)
+
+ def no_key_pair(context, user_id):
+ return []
+
+ if have_key_pair:
+ stubs.Set(nova.db, 'key_pair_get_all_by_user', key_pair)
+ else:
+ stubs.Set(nova.db, 'key_pair_get_all_by_user', no_key_pair)
def stub_out_image_service(stubs):
diff --git a/nova/tests/api/openstack/test_servers.py b/nova/tests/api/openstack/test_servers.py
index 5d7a208e9..ad36fa551 100644
--- a/nova/tests/api/openstack/test_servers.py
+++ b/nova/tests/api/openstack/test_servers.py
@@ -216,7 +216,8 @@ class ServersTest(test.TestCase):
servers = json.loads(res.body)['servers']
self.assertEqual([s['id'] for s in servers], [1, 2])
- def test_create_instance(self):
+ def _test_create_instance_helper(self):
+ """Shared implementation for tests below that create instance"""
def instance_create(context, inst):
return {'id': '1', 'display_name': 'server_test'}
@@ -271,6 +272,13 @@ class ServersTest(test.TestCase):
self.assertEqual(res.status_int, 200)
+ def test_create_instance(self):
+ self._test_create_instance_helper()
+
+ def test_create_instance_no_key_pair(self):
+ fakes.stub_out_key_pair_funcs(self.stubs, have_key_pair=False)
+ self._test_create_instance_helper()
+
def test_update_no_body(self):
req = webob.Request.blank('/v1.0/servers/1')
req.method = 'PUT'