5

我必须编写一个函数,该函数将按顺序执行以下操作来读取变量的值:

  • 检查是否定义了因子变量。如果不,
  • 从 Hiera 读取变量的值。如果不,
  • 使用默认值。

我已经设法在我的 Puppet 脚本中使用这个 if 条件来做到这一点。

  # foo is read from (in order of preference): facter fact, hiera hash, hard coded value
  if $::foo == undef {
     $foo = hiera('foo', 'default_value')
  } else {
     $foo = $::foo
  }

但是我想避免为我希望以这种方式解析的每个变量重复这个 if 条件,因此想到编写一个新的 Puppet 函数,该函数get_args('foo', 'default_value')将返回我的值

  1. 一个事实事实,如果它存在,
  2. 层次变量,或
  3. 刚回来default_value

我知道我可以用来lookupvar从 ruby​​ 函数中读取事实事实。如何从我的 Puppet ruby​​ 函数中读取 hiera 变量?

4

1 回答 1

3

function_您可以使用前缀调用定义的函数。

您已经找到了该lookupvar功能。

把它们放在一起:

module Puppet::Parser::Functions
  newfunction(:get_args, :type => :rvalue) do |args|
    # retrieve variable with the name of the first argument
    variable_value = lookupvar(args[0])
    return variable_value if !variable_value.nil?
    # otherwise, defer to the hiera function
    function_hiera(args)
  end
end
于 2014-08-15T12:08:16.370 回答