Revision e4ed4a0d
Added by Marek Hulán about 8 years ago
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
Fixes #14232 - make generic helpers available for global PXE template