Puppet - 返回 hiera 哈希的深度合并查找 default_value
Puppet - deep merge lookup default_value with hiera hash returned
我正在尝试将查找 'default_value' 或 'default_values_hash' 与从查找返回的散列深度合并。它不会合并,并且 default_value 只有在根本找不到 hiera 标题时才会生效。我无法在此处设置资源默认值,因为稍后会处理返回的值,而不是实际的资源键。
我尝试了多种变体,包括 'default_value'、'default_values_hash'。我正在寻找一种方法来在清单中设置一个默认哈希值,并让它与 hiera 深度合并以创建一个更大的哈希值。
清单:
class test (
Hash $result = lookup('test::my_hash', {merge => 'deep', default_values_hash => {foo => 'bar', this => 'that', him => 'her'}}),
){
notice($result)
}
include test
希拉:
---
test::my_hash:
foo: 'nobar'
this: 'then'
期望的结果(深度合并):
{ foo => 'nobar', this => 'then', him => 'her' }
实际结果(returns 仅 hiera 哈希):
{ foo => 'nobar', 这 => 'then' }
更新:
我用下面的代码让它工作。如果有人有更好的解决方案,仍然感兴趣。
class test (
$stuff = {
foo => 'bar',
this => 'that',
him => 'her'
},
Hash $result = deep_merge($stuff, lookup('test::my_hash')),
){
notice($result)
}
不幸的是,这就是 lookup
的工作方式。仅当未找到其他值时才使用默认值。 documentation for the default in lookup
表示
If present, lookup returns this when it can’t find a normal value. Default values are never merged with found values.
您使用 stdlib
中的 deep_merge
函数的版本似乎是最佳解决方案。
class foo {
$default_foo_attribute = {
foo => 'bar',
this => 'that',
him => 'her',
}
$attribute = deep_merge($default_foo_attribute,
lookup('foo::attribute',
Hash[String, String],
'deep',
{})
notice($attribute)
}
我正在尝试将查找 'default_value' 或 'default_values_hash' 与从查找返回的散列深度合并。它不会合并,并且 default_value 只有在根本找不到 hiera 标题时才会生效。我无法在此处设置资源默认值,因为稍后会处理返回的值,而不是实际的资源键。
我尝试了多种变体,包括 'default_value'、'default_values_hash'。我正在寻找一种方法来在清单中设置一个默认哈希值,并让它与 hiera 深度合并以创建一个更大的哈希值。
清单:
class test (
Hash $result = lookup('test::my_hash', {merge => 'deep', default_values_hash => {foo => 'bar', this => 'that', him => 'her'}}),
){
notice($result)
}
include test
希拉:
---
test::my_hash:
foo: 'nobar'
this: 'then'
期望的结果(深度合并):
{ foo => 'nobar', this => 'then', him => 'her' }
实际结果(returns 仅 hiera 哈希):
{ foo => 'nobar', 这 => 'then' }
更新:
我用下面的代码让它工作。如果有人有更好的解决方案,仍然感兴趣。
class test (
$stuff = {
foo => 'bar',
this => 'that',
him => 'her'
},
Hash $result = deep_merge($stuff, lookup('test::my_hash')),
){
notice($result)
}
不幸的是,这就是 lookup
的工作方式。仅当未找到其他值时才使用默认值。 documentation for the default in lookup
表示
If present, lookup returns this when it can’t find a normal value. Default values are never merged with found values.
您使用 stdlib
中的 deep_merge
函数的版本似乎是最佳解决方案。
class foo {
$default_foo_attribute = {
foo => 'bar',
this => 'that',
him => 'her',
}
$attribute = deep_merge($default_foo_attribute,
lookup('foo::attribute',
Hash[String, String],
'deep',
{})
notice($attribute)
}