summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSean Dague <sdague@linux.vnet.ibm.com>2012-08-10 15:39:55 -0400
committerSean Dague <sdague@linux.vnet.ibm.com>2012-08-10 17:07:54 -0400
commit13d25ed7dc0005f89a0522eff3bf5e5cda30fb07 (patch)
treeec584c0999ee8183eb5567d6ef73eaded001c3e5
parent38561c758dd0699fa31d17222bd06c06f4a28168 (diff)
downloadnova-13d25ed7dc0005f89a0522eff3bf5e5cda30fb07.tar.gz
nova-13d25ed7dc0005f89a0522eff3bf5e5cda30fb07.tar.xz
nova-13d25ed7dc0005f89a0522eff3bf5e5cda30fb07.zip
Don't accept key_name if not enabled
partially implements blueprint disable-server-extensions moves filling out key_name variable behind conditional only used when os-keypairs is enabled. Adds unit tests to ensure this behaves as expected (Remove debugging that was left in) Change-Id: I87ce041c2093c93a1a2456ef51357593e9de0681
-rw-r--r--nova/api/openstack/compute/servers.py5
-rw-r--r--nova/tests/api/openstack/compute/test_servers.py35
2 files changed, 39 insertions, 1 deletions
diff --git a/nova/api/openstack/compute/servers.py b/nova/api/openstack/compute/servers.py
index 25a7e55e8..8f3e47eb8 100644
--- a/nova/api/openstack/compute/servers.py
+++ b/nova/api/openstack/compute/servers.py
@@ -641,7 +641,10 @@ class Controller(wsgi.Controller):
raise exc.HTTPBadRequest(explanation=msg)
# optional openstack extensions:
- key_name = server_dict.get('key_name')
+ key_name = None
+ if self.ext_mgr.is_loaded('os-keypairs'):
+ key_name = server_dict.get('key_name')
+
user_data = None
if self.ext_mgr.is_loaded('os-user-data'):
user_data = server_dict.get('user_data')
diff --git a/nova/tests/api/openstack/compute/test_servers.py b/nova/tests/api/openstack/compute/test_servers.py
index 2a3f2a3df..2117825f9 100644
--- a/nova/tests/api/openstack/compute/test_servers.py
+++ b/nova/tests/api/openstack/compute/test_servers.py
@@ -1840,6 +1840,41 @@ class ServersControllerCreateTest(test.TestCase):
self.stubs.Set(nova.compute.api.API, 'create', create)
self._test_create_extra(params)
+ def test_create_instance_with_keypairs_enabled(self):
+ self.ext_mgr.extensions = {'os-keypairs': 'fake'}
+ key_name = 'green'
+
+ params = {'key_name': key_name}
+ old_create = nova.compute.api.API.create
+
+ # NOTE(sdague): key pair goes back to the database,
+ # so we need to stub it out for tests
+ def key_pair_get(context, user_id, name):
+ return {'public_key': 'FAKE_KEY',
+ 'fingerprint': 'FAKE_FINGERPRINT',
+ 'name': name}
+
+ def create(*args, **kwargs):
+ self.assertEqual(kwargs['key_name'], key_name)
+ return old_create(*args, **kwargs)
+
+ self.stubs.Set(nova.db, 'key_pair_get', key_pair_get)
+ self.stubs.Set(nova.compute.api.API, 'create', create)
+ self._test_create_extra(params)
+
+ def test_create_instance_with_keypairs_disabled(self):
+ key_name = 'green'
+
+ params = {'key_name': key_name}
+ old_create = nova.compute.api.API.create
+
+ def create(*args, **kwargs):
+ self.assertEqual(kwargs['key_name'], 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_availability_zone_enabled(self):
self.ext_mgr.extensions = {'os-availability-zone': 'fake'}
availability_zone = 'fake'