从0.24.8开始,Puppet模板可以调用Puppet函数吗?
我可以通过调用清单中的函数,将返回值赋给variables,然后在模板中使用lookupvar('variable')来获得类似的function,但是我想剪掉中间人。
在模板里你可以访问一个范围对象。 您可以在puppet清单中访问的所有function都可以通过该范围对象访问,但不能通过相同的名称访问。 在function名称的开头加上"function_" 。 例如,在这里我包含了另一个模板: <%= scope.function_template("template2.erb") %>
http://reductivelabs.com/trac/puppet/wiki/PuppetTemplating有关于模板内的范围对象的很好的文档。 关于模板和函数的深入信息,你可以看看lib/puppet/parser/templatewrapper.rb和lib/puppet/parser/functions.rb 。
让我把这个问题也扩展到自定义函数 。 基本上,您可以像使用函数_前缀一样调用自定义函数,但要确保将所有parameter passing给一个数组:
module Puppet::Parser::Functions newfunction(:namegoeshere, :type => :rvalue) do |args| # ... end end <%= scope.function_namegoeshere(["one","two"]) %>
请注意,它也适用于一些木偶版本没有方括号。 更多信息: http : //docs.puppetlabs.com/guides/custom_functions.html#referencing-custom-functions-in-templates
另一个重要的事情是在Puppet 2.6或更旧版本中有一个错误 (或function),自定义函数不会自动加载到模板范围中。 你需要手动加载它们,否则function将不会被发现!
<% Puppet::Parser::Functions::function('namegoeshere') %>
更多信息: http : //projects.puppetlabs.com/issues/7991
我不完全确定你的Puppet函数是什么意思,但puppet模板是embedded的Ruby,所以你可以在Ruby中的模板中做任何事情。