Yaml 从puppet代码(或“puppet lookup”cmd)访问多个嵌套hiera值

Yaml 从puppet代码(或“puppet lookup”cmd)访问多个嵌套hiera值,yaml,puppet,hiera,Yaml,Puppet,Hiera,这可能是一个非常简单的问题,但似乎很难在互联网上找到答案,或者至少我花了太多时间在这上面 如何使用lookup()或更好的方式访问或直接列出Puppet模块中hieradata文件(以下)中的所有foo::bar值 --- foo::bar: 'some uniq name': baz: 12345 ... 'another uniq name': baz: 54321 ... 因此,如果可以使用通配符,那么键路

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

如何使用
lookup()
或更好的方式访问或直接列出Puppet模块中
hieradata
文件(以下)中的所有
foo::bar

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

    'another uniq name':
        baz: 54321
        ...

因此,如果可以使用通配符,那么键路径将如下->
foo::bar::*::baz。
这需要使用
lookup
函数、lambda迭代器和哈希语法表示法,因此实际上并不那么容易,尽管代码可能会让它看起来像那样

我们需要迭代
foo::bar
hash中键的值。我们可以通过以下途径开始:

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
值的数组(或列表)的目标。虽然代码很短,但可以说并没有那么简单

有用的文档-

查找:
lambda迭代器
map


访问散列值:

太好了,这正是我搜索的内容:)谢谢!