从 Puppet 模板调用 Puppet 函数?

从 Puppet 模板调用 Puppet 函数?

从 0.24.8 开始,Puppet 模板可以调用 Puppet 函数吗?

我可以通过调用清单中的函数、将返回值分配给变量,然后使用模板中的 lookupvar(‘variable’) 来获得类似的功能,但我想省去中间人。

答案1

在模板中,您可以访问一个作用域对象。您可以在 Puppet 清单中访问的所有函数都可以通过该作用域对象访问,尽管不能通过相同的名称访问。将其添加"function_"到函数名称的开头。例如,在这里我在一个模板中包含了另一个模板:<%= scope.function_template("template2.erb") %>

http://reductivelabs.com/trac/puppet/wiki/PuppetTemplating有关于模板内部范围对象的出色文档。有关模板和函数的真正详细信息,您可以查看内部lib/puppet/parser/templatewrapper.rblib/puppet/parser/functions.rb

答案2

让我也把这个问题延伸到自定义函数基本上,你可以以与内置函数相同的方式调用自定义函数(使用 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

答案3

我不完全确定你所说的 Puppet 函数是什么意思,但是 puppet 模板是嵌入的 Ruby,所以你可以在模板中执行在 Ruby 中可以执行的任何操作。

相关内容