Avoid KeyError Exception in extract_flavor()

In the function extract_flavor(), if the returned sys_meta
of the instance is empty dict or does not exist then the function
is returned to avoid KeyError Exception.

Change-Id: Ic996cc0ca0303772c4e6a8bbb9f4165ddcdfafff
Closes-Bug: #1226083
This commit is contained in:
Trung Trinh 2015-02-16 21:30:27 +14:00
parent f3fadb5a2b
commit 202a777ae0
3 changed files with 13 additions and 1 deletions

View File

@ -278,6 +278,10 @@ def extract_flavor(instance, prefix=''):
flavor = objects.Flavor()
sys_meta = utils.instance_sys_meta(instance)
if not sys_meta:
return None
for key in system_metadata_flavor_props.keys():
type_key = '%sinstance_type_%s' % (prefix, key)
setattr(flavor, key, sys_meta[type_key])

View File

@ -248,7 +248,8 @@ class ResourceTracker(object):
image_meta = utils.get_image_from_system_metadata(
instance['system_metadata'])
if instance_type['id'] == itype['id']:
if (instance_type is not None and
instance_type['id'] == itype['id']):
numa_topology = hardware.numa_get_constraints(
itype, image_meta)
usage = self._get_usage_dict(

View File

@ -279,6 +279,13 @@ class InstanceTypeToolsTest(test.TestCase):
def test_extract_flavor(self):
self._test_extract_flavor('')
def test_extract_flavor_no_sysmeta(self):
instance = {}
prefix = ''
result = flavors.extract_flavor(instance, prefix)
self.assertIsNone(result)
def test_extract_flavor_prefix(self):
self._test_extract_flavor('foo_')