sh-beta Asked: 2009-07-02 10:30:27 +0800 CST2009-07-02 10:30:27 +0800 CST 2009-07-02 10:30:27 +0800 CST 从 Puppet 模板调用 Puppet 函数? 772 从 0.24.8 开始,Puppet 模板可以调用 Puppet 函数吗? 我可以通过调用清单中的函数,将返回值分配给变量,然后在模板中使用 lookupvar('variable') 来获得类似的功能,但我想去掉中间人。 puppet 3 个回答 Voted Best Answer Jordan Curzon 2009-07-02T13:47:03+08:002009-07-02T13:47:03+08:00 在模板内部,您可以访问范围对象。您可以在 puppet 清单中访问的所有功能都可以通过该范围对象访问,尽管不是通过相同的名称。附加"function_"到函数名称的开头。例如,在这里我将一个模板包含在另一个模板中:<%= scope.function_template("template2.erb") %> http://reductivelabs.com/trac/puppet/wiki/PuppetTemplating有关于模板内范围对象的大量文档。有关模板和函数的真正深入信息,您可以查看内部lib/puppet/parser/templatewrapper.rb和lib/puppet/parser/functions.rb. lzap 2012-04-27T04:35:32+08:002012-04-27T04:35:32+08:00 让我将问题也扩展到自定义函数。基本上,您调用自定义函数的方式与内置函数相同(使用 function_ 前缀),但请确保将所有参数传递到数组中: module Puppet::Parser::Functions newfunction(:namegoeshere, :type => :rvalue) do |args| # ... end end <%= scope.function_namegoeshere(["one","two"]) %> 请注意,在某些 Puppet 版本上,它也可以在没有方括号的情况下工作。更多信息:https ://puppet.com/docs/puppet/latest/functions_ruby_overview.html 另一个重要的事情是Puppet 2.6 或更早版本中存在一个错误(或功能),其中自定义函数不会自动加载到模板范围中。您需要手动加载它们,否则将找不到功能! <% Puppet::Parser::Functions::function('namegoeshere') %> 更多信息:http ://projects.puppetlabs.com/issues/7991 David Pashley 2009-07-02T11:29:13+08:002009-07-02T11:29:13+08:00 我不完全确定你所说的 Puppet 函数是什么意思,但是 puppet 模板是嵌入的 Ruby,所以你可以在模板中做任何你可以在 Ruby 中做的事情。
在模板内部,您可以访问范围对象。您可以在 puppet 清单中访问的所有功能都可以通过该范围对象访问,尽管不是通过相同的名称。附加
"function_"
到函数名称的开头。例如,在这里我将一个模板包含在另一个模板中:<%= scope.function_template("template2.erb") %>
http://reductivelabs.com/trac/puppet/wiki/PuppetTemplating有关于模板内范围对象的大量文档。有关模板和函数的真正深入信息,您可以查看内部
lib/puppet/parser/templatewrapper.rb
和lib/puppet/parser/functions.rb
.让我将问题也扩展到自定义函数。基本上,您调用自定义函数的方式与内置函数相同(使用 function_ 前缀),但请确保将所有参数传递到数组中:
请注意,在某些 Puppet 版本上,它也可以在没有方括号的情况下工作。更多信息:https ://puppet.com/docs/puppet/latest/functions_ruby_overview.html
另一个重要的事情是Puppet 2.6 或更早版本中存在一个错误(或功能),其中自定义函数不会自动加载到模板范围中。您需要手动加载它们,否则将找不到功能!
更多信息:http ://projects.puppetlabs.com/issues/7991
我不完全确定你所说的 Puppet 函数是什么意思,但是 puppet 模板是嵌入的 Ruby,所以你可以在模板中做任何你可以在 Ruby 中做的事情。