如何从Puppet函数中读取Hiera值?

时间:2014-08-15 10:48:49

标签: ruby puppet hiera

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

  • 检查是否定义了一个facter变量。如果没有,
  • 从Hiera读取变量的值。如果没有,
  • 使用默认值。

我已经设法使用此if条件在我的Puppet脚本中执行此操作。

  # 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
  }

但是我想避免重复这个,如果我希望以这种方式解析的每个变量的条件,因此想到编写格式为get_args('foo', 'default_value')的新Puppet函数,它将从

  1. 如果它存在的话,
  2. 一个hiera变量,或
  3. 只需返回default_value
  4. 我知道我可以使用lookupvar从ruby函数中读取一个因素。如何从我的Puppet ruby​​函数中读取hiera变量?

1 个答案:

答案 0 :(得分: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