From 2ad3009f3595e701a866f265263ca3a0a8ef09dc Mon Sep 17 00:00:00 2001 From: "Alexey I. Froloff" Date: Thu, 18 Dec 2014 15:19:05 +0300 Subject: [PATCH] Do not treat empty key_name as None When running instance, empty ("") key_name is treated as None and keypair lookup does not happen. However, empty string is written to key_name field in instance's database record. When horizon renders instance info, it looks up keypair if key_name is not None. Having empty string in this property generates error and instance info is not displayed. Change-Id: Ib67b124e6480f3435d31c983f1bfca769899c8e7 Closes-Bug: #1403544 --- nova/compute/api.py | 2 +- nova/tests/unit/api/openstack/compute/test_servers.py | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/nova/compute/api.py b/nova/compute/api.py index 704de35db1d0..d1b510cc41b4 100644 --- a/nova/compute/api.py +++ b/nova/compute/api.py @@ -822,7 +822,7 @@ class API(base.Base): config_drive = self._check_config_drive(config_drive) - if key_data is None and key_name: + if key_data is None and key_name is not None: key_pair = objects.KeyPair.get_by_name(context, context.user_id, key_name) diff --git a/nova/tests/unit/api/openstack/compute/test_servers.py b/nova/tests/unit/api/openstack/compute/test_servers.py index c3efb5e98398..a43ed1c8a8ee 100644 --- a/nova/tests/unit/api/openstack/compute/test_servers.py +++ b/nova/tests/unit/api/openstack/compute/test_servers.py @@ -2289,6 +2289,15 @@ class ServersControllerCreateTest(test.TestCase): self.assertRaises(webob.exc.HTTPBadRequest, self.controller.create, self.req, self.body) + @mock.patch('nova.compute.api.API.create', + side_effect=exception.KeypairNotFound(name='', + user_id=1)) + def test_create_instance_empty_key_name(self, mock_create): + self.body['server']['key_name'] = '' + self.req.body = jsonutils.dumps(self.body) + self.assertRaises(webob.exc.HTTPBadRequest, + self.controller.create, self.req, self.body) + def test_create_instance_valid_key_name(self): self.body['server']['key_name'] = 'key' self.req.body = jsonutils.dumps(self.body)