在傀儡层次结构中使用knockout_prefix



我想使用deep_merge选项knockout_prefix从 puppet 中的 hiera 数组中删除条目。

# upper hierarchy
---
  foo:
    - a
    - b
    - c
# lower hierarchy
---
  foo:
    - '--b'
    - y
    - z
# expected result
foo => [a,c,y,z]

我正在使用当前的木偶 4.x PC1 安装。根据官方文档的Hiera层次结构配置是

[...] my hierarchy stuff omitted
:merge_behavior: deeper
:deep_merge_options:
  :knockout_prefix: '--'

我的系统应正确配置以使用此功能:

$ hiera -v
3.0.6
$ /opt/puppetlabs/puppet/bin/gem list --local
*** LOCAL GEMS ***
activemodel (4.2.5)
activesupport (4.2.5)
bigdecimal (1.2.4)
builder (3.2.2)
bundler (1.10.6)
deep_merge (1.0.1)
facter (3.1.4)
[...]

我在这里犯了什么错误?

> 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 应该抛出错误。

如果您改为执行数组合并查找( $result = hiera_array('foo') ),那么您的挖空前缀无关紧要。 在这种情况下,hiera 会从每个层次结构级别(这些应该是数组或字符串)中形成指定键的值数组,将其展平,并删除重复项。 在数据上,其结果应该是一个六元素数组,['a', 'b', 'c', '--b', 'y', 'z'] .

当然,还有普通的优先级查找,您可以从自动数据绑定或显式调用hiera('foo')中获得。 假设"上层层次结构"是指具有更高优先级的层次结构,则该查找的结果将是['a', 'b', 'c']

我知道

我会在几年内来,而且木偶版本迟到了,但我最近想到了尝试这个,但在其他地方找不到解决方案。请注意,不是直接等同于淘汰赛:它是列表的傀儡运行时操作,并且不服从条目的分层顺序。也就是说,如果您在权重最低的 hiera 条目处"敲掉"一个值,它仍将在链条的上游被"敲出"。

这是我的木偶类中的代码,假设问题中的foo hiera:

# Make an array of all of the items that start with `--`
#  (i.e., those that will be knocked out)
$_foo_knockout = $foo.filter |$item| { $item =~ /^--/ }
# Make a new array of items that:
#  * don't directly match an item in the knockout list
#  * don't match an item in the knockout list when prefixed with `--`
$_foo_filtered = $foo.filter |$item| {
  !($item in $_foo_knockout or "--${ex}" in $_foo_knockout)
}

使用示例 hiera,这将导致

$foo => ['a','b','c','--b','y','z']
$_foo_filtered => ['a','c','y','z']

笔记:

  • 经过hiera = 3.5.0puppet = 6.7.2测试
  • 数组unique合并
  • 重申可以从层次结构的任何级别剔除项目

相关内容

  • 没有找到相关文章

最新更新