From 13d25ed7dc0005f89a0522eff3bf5e5cda30fb07 Mon Sep 17 00:00:00 2001 From: Sean Dague Date: Fri, 10 Aug 2012 15:39:55 -0400 Subject: 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 --- nova/api/openstack/compute/servers.py | 5 +++- nova/tests/api/openstack/compute/test_servers.py | 35 ++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) 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' -- cgit