diff options
| author | Sean Dague <sdague@linux.vnet.ibm.com> | 2012-08-10 15:39:55 -0400 |
|---|---|---|
| committer | Sean Dague <sdague@linux.vnet.ibm.com> | 2012-08-10 17:07:54 -0400 |
| commit | 13d25ed7dc0005f89a0522eff3bf5e5cda30fb07 (patch) | |
| tree | ec584c0999ee8183eb5567d6ef73eaded001c3e5 | |
| parent | 38561c758dd0699fa31d17222bd06c06f4a28168 (diff) | |
| download | nova-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.py | 5 | ||||
| -rw-r--r-- | nova/tests/api/openstack/compute/test_servers.py | 35 |
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' |
