Project

General

Profile

« Previous | Next » 

Revision e4ed4a0d

Added by Marek Hulán about 8 years ago

Fixes #14232 - make generic helpers available for global PXE template

View differences:

app/models/provisioning_template.rb
if error_msg.empty?
begin
@profiles = pxe_default_combos
menu = renderer.render_safe(default_template.template, [:default_template_url], {:profiles => @profiles})
allowed_helpers = Foreman::Renderer::ALLOWED_GENERIC_HELPERS + [ :default_template_url ]
menu = renderer.render_safe(default_template.template, allowed_helpers, :profiles => @profiles)
rescue => e
error_msg = _("failed to process template: %s" % e)
end
lib/foreman/renderer.rb
module Foreman
module Renderer
ALLOWED_HELPERS ||= [:foreman_url, :grub_pass, :snippet, :snippets,
:snippet_if_exists, :ks_console, :root_pass,
:media_path, :param_true?, :param_false?, :match, :indent]
ALLOWED_GENERIC_HELPERS ||= [ :foreman_url, :snippet, :snippets, :snippet_if_exists, :indent, :foreman_server_fqdn,
:foreman_server_url ]
ALLOWED_HOST_HELPERS ||= [ :grub_pass, :ks_console, :root_pass,
:media_path, :param_true?, :param_false?, :match ]
ALLOWED_VARIABLES ||= [:arch, :host, :osver, :mediapath, :mediaserver, :static,
:repos, :dynamic, :kernel, :initrd,
:preseed_server, :preseed_path, :provisioning_type]
ALLOWED_HELPERS ||= ALLOWED_GENERIC_HELPERS + ALLOWED_HOST_HELPERS
ALLOWED_VARIABLES ||= [ :arch, :host, :osver, :mediapath, :mediaserver, :static,
:repos, :dynamic, :kernel, :initrd,
:preseed_server, :preseed_path, :provisioning_type ]
def render_safe(template, allowed_methods = [], allowed_vars = {})
if Setting[:safemode_render]
......
:token => (@host.token.value unless @host.try(:token).nil?), :kind => action
end
def foreman_server_fqdn
config = URI.parse(Setting[:foreman_url])
config.host
end
def foreman_server_url
Setting[:foreman_url]
end
# provide embedded snippets support as simple erb templates
def snippets(file)
if Template.where(:name => file, :snippet => true).empty?
......
def unattended_render(template, template_name = nil)
content = template.respond_to?(:template) ? template.template : template
template_name ||= template.respond_to?(:name) ? template.name : 'Unnamed'
allowed_variables = ALLOWED_VARIABLES.reduce({}) do |mapping, var|
mapping.update(var => instance_variable_get("@#{var}"))
end
allowed_variables = allowed_variables_mapping(ALLOWED_VARIABLES)
allowed_variables[:template_name] = template_name
render_safe content, ALLOWED_HELPERS, allowed_variables
end
......
private
# takes variable names array and loads instance variables with the same name like this
# { :name => @name, :another => @another }
def allowed_variables_mapping(variable_names)
variable_names.reduce({}) do |mapping, var|
mapping.update(var => instance_variable_get("@#{var}"))
end
end
def alterator_attributes
@mediapath = @host.operatingsystem.mediumpath @host
@mediaserver = URI(@mediapath).host
test/lib/foreman/renderer_test.rb
assert_nothing_raised(NoMethodError) { foreman_url }
end
test "foreman_server_fqdn returns FQDN from foreman_url Setting" do
assert_equal 'foreman.some.host.fqdn', self.foreman_server_fqdn
end
test "foreman_server_url returns the value from foreman_url Setting" do
assert_equal 'http://foreman.some.host.fqdn', self.foreman_server_url
end
[:normal_renderer, :safemode_renderer].each do |renderer_name|
test "#{renderer_name} is properly configured" do
send "setup_#{renderer_name}"
......
assert ActiveRecord::AssociationRelation::Jail.allowed?(m), "Method #{m} is not available in ActiveRecord::Associations::CollectionProxy::Jail while should be allowed."
end
end
test '#allowed_variables_mapping loads instance variables' do
@whatever_random_name = 'has_value'
assert_equal({ :whatever_random_name => 'has_value' }, allowed_variables_mapping([ :whatever_random_name ]))
end
end

Also available in: Unified diff