我正在尝试将查找'default_value'或'default_values_hash'与查找返回的哈希值进行深度合并。它不会合并,并且如果根本找不到层次结构标题,则default_value仅会生效。我无法在此处设置资源默认值,因为返回的值将在以后处理,而不是实际的资源键。
我尝试了许多变体,包括“ 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
Hiera:
---
test::my_hash:
foo: 'nobar'
this: 'then'
{foo =>'nobar',this =>'then',他=>'她'}
{foo =>'nobar',this =>'then'}
更新:
我使用下面的代码。仍然对是否有更好的解决方案感兴趣。
class test (
$stuff = {
foo => 'bar',
this => 'that',
him => 'her'
},
Hash $result = deep_merge($stuff, lookup('test::my_hash')),
){
notice($result)
}
答案 0 :(得分:2)
不幸的是,lookup
是这样工作的。仅当找不到其他值时才使用默认值。 documentation for the default in lookup
说
(如果存在)查找在找不到正常值时返回此值。默认值永远不会与找到的值合并。
使用deep_merge
中的stdlib
函数的版本似乎是最好的解决方案。
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)
}