我想使用deep_merge选项knockout_prefix从puppet中的hiera数组中删除条目。
— FOO: - 一个 - b - C
— FOO: - ‘ - b’ …
knockout_prefix 用于敲除特定键而不是数组中的值,就像你所拥有的那样。使用您的代码作为示例,这将是
knockout_prefix
# upper hierarchy --- lookup_options: foo: merge: strategy: deep knockout_prefix: '--' foo: a: a b: b c: c # lower hierarchy --- foo: b: -- y: y z: z # expected result foo = { 'a' => 'a', 'c' => 'c', 'y' => 'y', 'z' => 'z' }
Hiera 3合并行为适用于 哈希合并查找 。与键关联的值 'foo' 在您的数据中是数组,而不是哈希,因此哈希合并不适用于它们。如果您尝试对它们进行哈希合并查找( 即 $result = hiera_hash('foo') )然后Hiera应该抛出一个错误。
'foo'
$result = hiera_hash('foo')
如果你改为执行 数组合并查找 ( 即 $result = hiera_array('foo') )然后你的淘汰赛前缀是无关紧要的。在这种情况下,hiera从每个层次结构级别(这些都应该是数组或字符串)形成指定键的值的数组,展平它,并删除重复项。在您的数据上,结果应该是一个六元素数组, ['a', 'b', 'c', '--b', 'y', 'z'] 。
$result = hiera_array('foo')
['a', 'b', 'c', '--b', 'y', 'z']
当然,还有普通的优先级查找,您可以从自动数据绑定或显式调用 hiera('foo') 。假设“上层”意味着具有更高优先级的那个,那么该查找的结果将是 ['a', 'b', 'c'] 。
hiera('foo')
['a', 'b', 'c']