Puppet - 在 Hiera 配置中使用节点范围变量

Puppet - Using node scope variables in Hiera config

我正在尝试在我的 hiera.yaml 配置中使用节点范围变量,这显然应该相对简单,但它对我不起作用 Lol

与 hiera.yaml 这样:

---
:backends:
    - yaml
:yaml:
    :datadir: /etc/puppet/hieradata
:hierarchy:
    - nodes/%{::hostname}
    - builds/%{build}
    - common

我的 site.pp 是这样的:

hiera_include('classes')
node 'mynode' {
    $build = special
}

和其他 yaml 文件,

common.yaml:

---
classes:
    - first_class
    - second_class

builds/special.yaml:

---
classes:
    - third_class

我希望 'mynode' 在 puppet 代理刷新时得到 'third_class',但它没有,并且没有给出错误。

运行 hiera 命令给出了正确的(我认为)输出:

$ hiera classes
["first_class","second_class"]
$ hiera classes build=special
["third_class"]

有什么明显的地方我做错了吗?

%{::hostname} 有效。如果我添加 nodes/mynode.yaml,该配置将被拾取。

经过几个小时的摸索,在 puppetlabs 上报告了一个文档错误(我现在已经关闭了它,哈哈)并且几乎完全放弃了这个想法并只是创建了一个自定义事实,我发现这是一个如此简单的修复......这是有道理的...

基本上我需要做的就是将我的 site.pp 更改为:

hiera_include('classes')
node 'mynode' {
    $build = special
}

至:

node 'mynode' {
    $build = special
    hiera_include('classes')
}

现在很有意义,因为如您所见,我需要在设置节点范围变量后调用 hiera_include

请注意(正如我刚刚发现的那样),如果您在顶层有 hiera_include('classes') 并且您在多个 yaml 文件中设置 类 参数,它只会使用 common.yaml.

中设置的参数

可能是最烦人的事情是,通过我所有的反复试验,我确实在某个时候把 hiera_include 放在节点声明中,我只是没有把它放在变量 Lol[=15 之后=]