Project

General

Profile

« Previous | Next » 

Revision e7603faf

Added by Marek Hulán over 7 years ago

Fixes #18227 - clean up variables after rendering

View differences:

lib/foreman/renderer.rb
@host.params.has_key?(name) && Foreman::Cast.to_bool(@host.params[name]) == false
end
def render_safe(template, allowed_methods = [], allowed_vars = {})
def render_safe(template, allowed_methods = [], allowed_vars = {}, scope_variables = {})
if Setting[:safemode_render]
box = Safemode::Box.new self, allowed_methods
box.eval(ERB.new(template, nil, '-').src, allowed_vars)
box.eval(ERB.new(template, nil, '-').src, allowed_vars.merge(scope_variables))
else
allowed_vars.each { |k,v| instance_variable_set "@#{k}", v }
ERB.new(template, nil, '-').result(binding)
# we need to keep scope variables and reset them after rendering otherwise they would remain
# after snippets are rendered in parent template scope
kept_variables = {}
scope_variables.each { |k,v| kept_variables[k] = instance_variable_get("@#{k}") }
allowed_vars.merge(scope_variables).each { |k,v| instance_variable_set "@#{k}", v }
result = ERB.new(template, nil, '-').result(binding)
scope_variables.each { |k,v| instance_variable_set "@#{k}", kept_variables[k] }
result
end
end
......
end
# accepts either template object or plain string
def unattended_render(template, overridden_name = nil, variables = {})
def unattended_render(template, overridden_name = nil, scope_variables = {})
@template_name = template.respond_to?(:name) ? template.name : (overridden_name || 'Unnamed')
template_logger.info "Rendering template '#{@template_name}'"
raise ::Foreman::Exception.new(N_("Template '%s' is either missing or has an invalid organization or location"), @template_name) if template.nil?
content = template.respond_to?(:template) ? template.template : template
allowed_variables = allowed_variables_mapping(ALLOWED_VARIABLES)
render_safe content, ALLOWED_HELPERS, allowed_variables.merge(variables)
render_safe content, ALLOWED_HELPERS, allowed_variables, scope_variables
end
def unattended_render_to_temp_file(content, prefix = id.to_s, options = {})

Also available in: Unified diff