人偶-使用Hiera哈希返回的深度合并查找default_value

时间:2019-07-10 08:15:57

标签: merge puppet lookup hiera

我正在尝试将查找'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',他=>'她'}

实际结果(仅返回hiera哈希):

{foo =>'nobar',this =>'then'}

更新:

我使用下面的代码。仍然对是否有更好的解决方案感兴趣。

class test (

$stuff = {
foo  => 'bar',
this => 'that',
him  => 'her'
},
Hash     $result = deep_merge($stuff, lookup('test::my_hash')),

){

notice($result)

}

1 个答案:

答案 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)
}