diff --git a/shade/_normalize.py b/shade/_normalize.py index 3a9608eae..d6deaf8b7 100644 --- a/shade/_normalize.py +++ b/shade/_normalize.py @@ -42,6 +42,34 @@ class Normalizer(object): reasons. ''' + def _normalize_flavors(self, flavors): + """ Normalize a list of flavor objects """ + ret = [] + for flavor in flavors: + ret.append(self._normalize_flavor(flavor)) + return ret + + def _normalize_flavor(self, flavor): + """ Normalize a flavor object """ + flavor.pop('links', None) + flavor.pop('NAME_ATTR', None) + flavor.pop('HUMAN_ID', None) + flavor.pop('human_id', None) + if 'extra_specs' not in flavor: + flavor['extra_specs'] = {} + ephemeral = flavor.pop('OS-FLV-EXT-DATA:ephemeral', 0) + is_public = flavor.pop('os-flavor-access:is_public', True) + disabled = flavor.pop('OS-FLV-DISABLED:disabled', False) + # Make sure both the extension version and a sane version are present + flavor['OS-FLV-DISABLED:disabled'] = disabled + flavor['disabled'] = disabled + flavor['OS-FLV-EXT-DATA:ephemeral'] = ephemeral + flavor['ephemeral'] = ephemeral + flavor['os-flavor-access:is_public'] = is_public + flavor['is_public'] = is_public + + return flavor + def _normalize_images(self, images): ret = [] for image in images: diff --git a/shade/_utils.py b/shade/_utils.py index d701251f6..f4b4e6445 100644 --- a/shade/_utils.py +++ b/shade/_utils.py @@ -457,29 +457,6 @@ def normalize_stacks(stacks): return stacks -def normalize_flavors(flavors): - """ Normalize a list of flavor objects """ - for flavor in flavors: - flavor.pop('links', None) - flavor.pop('NAME_ATTR', None) - flavor.pop('HUMAN_ID', None) - flavor.pop('human_id', None) - if 'extra_specs' not in flavor: - flavor['extra_specs'] = {} - ephemeral = flavor.pop('OS-FLV-EXT-DATA:ephemeral', 0) - is_public = flavor.pop('os-flavor-access:is_public', True) - disabled = flavor.pop('OS-FLV-DISABLED:disabled', False) - # Make sure both the extension version and a sane version are present - flavor['OS-FLV-DISABLED:disabled'] = disabled - flavor['disabled'] = disabled - flavor['OS-FLV-EXT-DATA:ephemeral'] = ephemeral - flavor['ephemeral'] = ephemeral - flavor['os-flavor-access:is_public'] = is_public - flavor['is_public'] = is_public - - return flavors - - def normalize_cluster_templates(cluster_templates): """Normalize Magnum cluster_templates.""" for cluster_template in cluster_templates: diff --git a/shade/openstackcloud.py b/shade/openstackcloud.py index 8de976e37..71077f08d 100644 --- a/shade/openstackcloud.py +++ b/shade/openstackcloud.py @@ -1481,7 +1481,7 @@ class OpenStackCloud(_normalize.Normalizer): 'Fetching extra specs for flavor failed:' ' {msg}'.format(msg=str(e))) - return _utils.normalize_flavors(flavors) + return self._normalize_flavors(flavors) @_utils.cache_on_arguments(should_cache_fn=_no_pending_stacks) def list_stacks(self): diff --git a/shade/operatorcloud.py b/shade/operatorcloud.py index 98dc926ab..6cd825195 100644 --- a/shade/operatorcloud.py +++ b/shade/operatorcloud.py @@ -1493,7 +1493,7 @@ class OperatorCloud(openstackcloud.OpenStackCloud): is_public=is_public) ) - return _utils.normalize_flavors([flavor])[0] + return self._normalize_flavor(flavor) def delete_flavor(self, name_or_id): """Delete a flavor diff --git a/shade/tests/unit/test_caching.py b/shade/tests/unit/test_caching.py index 1c28302d6..78bbf98f3 100644 --- a/shade/tests/unit/test_caching.py +++ b/shade/tests/unit/test_caching.py @@ -292,9 +292,8 @@ class TestMemoryCache(base.TestCase): self.assertEqual([], self.cloud.list_flavors()) fake_flavor = fakes.FakeFlavor('555', 'vanilla', 100) - fake_flavor_dict = _utils.normalize_flavors( - [meta.obj_to_dict(fake_flavor)] - )[0] + fake_flavor_dict = self.cloud._normalize_flavor( + meta.obj_to_dict(fake_flavor)) nova_mock.flavors.list.return_value = [fake_flavor] self.cloud.list_flavors.invalidate(self.cloud) self.assertEqual([fake_flavor_dict], self.cloud.list_flavors())