从Puppet模板调用Puppet函数?

从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有关于模板内的范围对象的很好的文档&#x3002; 关于模板和函数的深入信息,你可以看看lib/puppet/parser/templatewrapper.rblib/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中的模板中做任何事情。