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
This commit is contained in:
Alexey I. Froloff 2014-12-18 15:19:05 +03:00
parent 4f59f773e4
commit 2ad3009f35
2 changed files with 10 additions and 1 deletions

View File

@ -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)

View File

@ -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)