Merge "Load template files only from their known source"
This commit is contained in:
commit
59db61110c
@ -156,10 +156,19 @@ class TemplateResourceInfo(ResourceInfo):
|
||||
|
||||
def get_class(self, files=None):
|
||||
from heat.engine.resources import template_resource
|
||||
env = self.registry.environment
|
||||
return template_resource.generate_class(str(self.name),
|
||||
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,
|
||||
env, files=files)
|
||||
allowed_schemes)
|
||||
env = self.registry.environment
|
||||
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
|
||||
|
@ -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)
|
||||
|
@ -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))
|
||||
|
Loading…
Reference in New Issue
Block a user