Answers:
在模板内部,您可以访问范围对象。您可以在人偶清单中访问的所有功能都可以通过该范围对象访问,尽管不能使用相同的名称。前面加上"function_"
函数名的开头。例如,这里我在另一个模板中包含了一个模板:<%= scope.function_template("template2.erb") %>
http://reductivelabs.com/trac/puppet/wiki/PuppetTemplating具有有关模板内部范围对象的出色文档。有关模板和功能的真正深入信息,您可以查看lib/puppet/parser/templatewrapper.rb
和查阅lib/puppet/parser/functions.rb
。
<%= scope.function_template("sites/$domain/config.erb") %>
<%= scope.function_template("sites/#{domain}/config.erb") %>
。
让我也将问题扩展到自定义函数。基本上,您以与内置函数相同的方式调用自定义函数(使用function_前缀),但是请确保在数组中传递所有参数:
module Puppet::Parser::Functions
newfunction(:namegoeshere, :type => :rvalue) do |args|
# ...
end
end
<%= scope.function_namegoeshere(["one","two"]) %>
请注意,在某些Puppet版本中,也可以在不使用方括号的情况下使用。更多信息:http : //docs.puppetlabs.com/guides/custom_functions.html#referencing-custom-functions-in-templates
另一个重要的事情是Puppet 2.6或更早版本中存在一个错误(或功能),其中自定义功能不会自动加载到模板范围中。您需要手动加载它们,否则将找不到功能!
<% Puppet::Parser::Functions::function('namegoeshere') %>