从木偶代码(或"puppet lookup" cmd)访问多个嵌套的 hiera 值



这可能是一个非常简单的问题,但是似乎很难在互联网上搜索答案,或者至少我花了太多时间。

如何使用lookup()或更好的方式从hieradata文件(下(访问或直接从所有foo::bar值中访问或列出列表?

---
foo::bar:
    'some uniq name':
        baz: 12345
        ...
    'another uniq name':
        baz: 54321
        ...

因此,如果可以使用通配符,关键路径看起来像这样 -> foo::bar::*::baz.

这需要使用lookup函数,lambda迭代器和哈希语法符号,因此实际上并不容易,尽管代码可能使其看起来如此。

我们需要迭代foo::bar哈希中键的值。我们可以从此开始:

lookup(foo::bar, Hash).each |String $key, Hash $value| {
  # first $key is 'some uniq name' string
  # first $value is 'some uniq name' hash
}

现在,我们需要访问每个嵌套哈希内部的bar密钥的值。我们可以通过普通语法来实现这一点,以访问哈希内的键值:

lookup(foo::bar, Hash).each |String $key, Hash $value| {
  $value['baz'] # first value is 12345
}

但是,我们需要将这些值存储在变量中,以便将它们保留在退出lambda范围后被丢弃。因此,我们需要让一个变量存储lambda迭代器的返回值,并使用返回修改的数组的lambda迭代器:

$bazes = lookup(foo::bar, Hash).map |String $key, Hash $value| {
  $value['baz']
}

因此,实现了存储Hieradata内所有baz值的数组(或列表(的目标。尽管代码很短,但可以说并不那么简单。

有用的文档 -

查找:https://puppet.com/docs/puppet/5.2/hiera_use_function.html
lambda Iterator map:https://puppet.com/docs/puppet/5.3/function.html#map
访问哈希值:https://puppet.com/docs/puppet/5.3/lang_data_hash.html#accessing-values-values

相关内容

  • 没有找到相关文章

最新更新