从人偶代码(或 "puppet lookup" cmd)访问多个嵌套的 hiera 值
Accessing multiple nested hiera values from puppet code (or "puppet lookup" cmd)
这可能是一个很简单的问题,但在网上搜索答案似乎很难,或者至少我花了太多时间在这上面。
如何使用 lookup()
或更好的方式访问 Puppet 模块中 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 迭代器的 return 值,并使用一个 lambda 迭代器 return 修改后的数组:
$bazes = lookup(foo::bar, Hash).map |String $key, Hash $value| {
$value['baz']
}
从而实现了将所有 baz
值存储在 hieradata 中的数组(或如您所说的列表)的目标。代码虽短,但可以说没有那么简单
有用的文档 -
查找:https://puppet.com/docs/puppet/5.2/hiera_use_function.html
lambda 迭代器 map
: https://puppet.com/docs/puppet/5.3/function.html#map
访问哈希值:https://puppet.com/docs/puppet/5.3/lang_data_hash.html#accessing-values
这可能是一个很简单的问题,但在网上搜索答案似乎很难,或者至少我花了太多时间在这上面。
如何使用 lookup()
或更好的方式访问 Puppet 模块中 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 迭代器的 return 值,并使用一个 lambda 迭代器 return 修改后的数组:
$bazes = lookup(foo::bar, Hash).map |String $key, Hash $value| {
$value['baz']
}
从而实现了将所有 baz
值存储在 hieradata 中的数组(或如您所说的列表)的目标。代码虽短,但可以说没有那么简单
有用的文档 -
查找:https://puppet.com/docs/puppet/5.2/hiera_use_function.html
lambda 迭代器 map
: https://puppet.com/docs/puppet/5.3/function.html#map
访问哈希值:https://puppet.com/docs/puppet/5.3/lang_data_hash.html#accessing-values