From ab02a2a2166ce4ad39711451eb8b5057a8ff99cd Mon Sep 17 00:00:00 2001 From: Zane Bitter Date: Wed, 9 Dec 2015 22:02:28 +0000 Subject: [PATCH] Load template files only from their known source Change-Id: I845e7d23c73242a4a4c9c40599690ab705c75caa --- heat/engine/environment.py | 15 ++++++++++++--- heat/engine/resources/template_resource.py | 9 --------- heat/tests/test_provider_template.py | 6 +++++- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/heat/engine/environment.py b/heat/engine/environment.py index e521059..83b546b 100644 --- a/heat/engine/environment.py +++ b/heat/engine/environment.py @@ -156,10 +156,19 @@ class TemplateResourceInfo(ResourceInfo): def get_class(self, files=None): from heat.engine.resources import template_resource + if files and self.template_name in files: + data = files[self.template_name] + else: + if self.user_resource: + allowed_schemes = template_resource.REMOTE_SCHEMES + else: + allowed_schemes = template_resource.LOCAL_SCHEMES + data = template_resource.TemplateResource.get_template_file( + self.template_name, + allowed_schemes) env = self.registry.environment - return template_resource.generate_class(str(self.name), - self.template_name, - env, files=files) + return template_resource.generate_class_from_template(str(self.name), + data, env) def get_class_to_instantiate(self): from heat.engine.resources import template_resource diff --git a/heat/engine/resources/template_resource.py b/heat/engine/resources/template_resource.py index 7dea82d..d785fc8 100644 --- a/heat/engine/resources/template_resource.py +++ b/heat/engine/resources/template_resource.py @@ -31,15 +31,6 @@ REMOTE_SCHEMES = ('http', 'https') LOCAL_SCHEMES = ('file',) -def generate_class(name, template_name, env, files=None): - data = None - if files is not None: - data = files.get(template_name) - if data is None: - data = TemplateResource.get_template_file(template_name, LOCAL_SCHEMES) - return generate_class_from_template(name, data, env) - - def generate_class_from_template(name, data, env): tmpl = template.Template(template_format.parse(data)) props, attrs = TemplateResource.get_schemas(tmpl, env.param_defaults) diff --git a/heat/tests/test_provider_template.py b/heat/tests/test_provider_template.py index a657855..7e48f34 100644 --- a/heat/tests/test_provider_template.py +++ b/heat/tests/test_provider_template.py @@ -665,7 +665,11 @@ class ProviderTemplateTest(common.HeatTestCase): env_str = {'resource_registry': {'resources': {'fred': { "OS::ResourceType": test_templ_name}}}} - env = environment.Environment(env_str) + global_env = environment.Environment({}, user_env=False) + global_env.load(env_str) + with mock.patch('heat.engine.resources._environment', + global_env): + env = environment.Environment({}) cls = env.get_class('OS::ResourceType', 'fred') self.assertNotEqual(template_resource.TemplateResource, cls) self.assertTrue(issubclass(cls, template_resource.TemplateResource)) -- 2.1.0