Revision e7603faf
Added by Marek Hulán over 7 years ago
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
Fixes #18227 - clean up variables after rendering