summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2015-06-14 23:13:17 +0000
committerGerrit Code Review <review@openstack.org>2015-06-14 23:13:17 +0000
commit6f948fbf0cf960e55e122720b1b429fbe20d442d (patch)
treefad453ccd6f81ac5a21e33845c3aa037c715f763
parentfbc370a63918e1bfc1b46725dcf27886056afa08 (diff)
parent6a117f3930049d37b03770e2cb1c94a9795a08e0 (diff)
downloadheat-6f948fbf0cf960e55e122720b1b429fbe20d442d.tar.gz
Merge "Add env storing for loaded environments" into stable/juno
-rw-r--r--heat/engine/environment.py9
-rw-r--r--heat/engine/resources/template_resource.py3
-rw-r--r--heat/tests/test_environment.py21
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):