diff options
author | Jenkins <jenkins@review.openstack.org> | 2015-06-14 23:13:17 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2015-06-14 23:13:17 +0000 |
commit | 6f948fbf0cf960e55e122720b1b429fbe20d442d (patch) | |
tree | fad453ccd6f81ac5a21e33845c3aa037c715f763 | |
parent | fbc370a63918e1bfc1b46725dcf27886056afa08 (diff) | |
parent | 6a117f3930049d37b03770e2cb1c94a9795a08e0 (diff) | |
download | heat-6f948fbf0cf960e55e122720b1b429fbe20d442d.tar.gz |
Merge "Add env storing for loaded environments" into stable/juno
-rw-r--r-- | heat/engine/environment.py | 9 | ||||
-rw-r--r-- | heat/engine/resources/template_resource.py | 3 | ||||
-rw-r--r-- | heat/tests/test_environment.py | 21 |
3 files changed, 33 insertions, 0 deletions
diff --git a/heat/engine/environment.py b/heat/engine/environment.py index 383b6a38b..edee06f0f 100644 --- a/heat/engine/environment.py +++ b/heat/engine/environment.py @@ -290,6 +290,15 @@ class ResourceRegistry(object): resource_name) if ((registry_type is None or isinstance(match, registry_type)) and (accept_fn is None or accept_fn(info))): + # NOTE(prazumovsky): if resource_type defined in outer env + # there is a risk to lose it due to h-eng restarting, so + # store it to local env (exclude ClassResourceInfo because it + # loads from resources; TemplateResourceInfo handles by + # template_resource module). + if (match and not match.user_resource and + not isinstance(info, (TemplateResourceInfo, + ClassResourceInfo))): + self._register_info([resource_type], info) return match def get_class(self, resource_type, resource_name=None, accept_fn=None): diff --git a/heat/engine/resources/template_resource.py b/heat/engine/resources/template_resource.py index 816919fe0..509f3caad 100644 --- a/heat/engine/resources/template_resource.py +++ b/heat/engine/resources/template_resource.py @@ -65,6 +65,7 @@ class TemplateResource(stack_resource.StackResource): '.template are supported')) else: self.template_name = tri.template_name + self.resource_type = tri.name if tri.user_resource: self.allowed_schemes = ('http', 'https') else: @@ -170,6 +171,8 @@ class TemplateResource(stack_resource.StackResource): if t_data is not None: self.stack.t.files[self.template_name] = t_data + self.stack.env.register_class(self.resource_type, + self.template_name) return t_data if reported_excp is None: reported_excp = ValueError(_('Unknown error retrieving %s') % diff --git a/heat/tests/test_environment.py b/heat/tests/test_environment.py index edd5b6d60..d4c4bf975 100644 --- a/heat/tests/test_environment.py +++ b/heat/tests/test_environment.py @@ -255,6 +255,27 @@ class EnvironmentDuplicateTest(common.HeatTestCase): env.get_resource_info('OS::Test::Dummy', 'my_fip')) + def test_env_register_while_get_resource_info(self): + env_test = {u'resource_registry': { + u'OS::Test::Dummy': self.resource_type}} + env = environment.Environment() + env.load(env_test) + env.get_resource_info('OS::Test::Dummy') + self.assertEqual({'OS::Test::Dummy': self.resource_type, + 'resources': {}}, + env.user_env_as_dict().get( + environment_format.RESOURCE_REGISTRY)) + + env_test = {u'resource_registry': { + u'resources': {u'test': {u'OS::Test::Dummy': self.resource_type}}}} + env.load(env_test) + env.get_resource_info('OS::Test::Dummy') + self.assertEqual({u'OS::Test::Dummy': self.resource_type, + 'resources': {u'test': {u'OS::Test::Dummy': + self.resource_type}}}, + env.user_env_as_dict().get( + environment_format.RESOURCE_REGISTRY)) + class GlobalEnvLoadingTest(common.HeatTestCase): |