Puppet-在Hiera配置中使用节点作用域变量

Puppet-在Hiera配置中使用节点作用域变量,puppet,hiera,Puppet,Hiera,我试图在hiera.yaml配置中使用一个节点作用域变量,这显然应该相对简单,但它不适合我Lol 使用hiera.yaml,如下所示: --- :backends: - yaml :yaml: :datadir: /etc/puppet/hieradata :hierarchy: - nodes/%{::hostname} - builds/%{build} - common 和my site.pp类似: hiera_include('classes')

我试图在hiera.yaml配置中使用一个节点作用域变量,这显然应该相对简单,但它不适合我Lol

使用hiera.yaml,如下所示:

---
:backends:
    - yaml
:yaml:
    :datadir: /etc/puppet/hieradata
:hierarchy:
    - nodes/%{::hostname}
    - builds/%{build}
    - common
和my site.pp类似:

hiera_include('classes')
node 'mynode' {
    $build = special
}
和其他yaml文件

common.yaml:

---
classes:
    - first_class
    - second_class
builds/special.yaml:

---
classes:
    - third_class
当puppet代理刷新时,我希望“mynode”获得“第三类”,但它没有,并且没有给出任何错误

运行hiera命令可以得到正确的(我认为)输出:

有没有什么明显的事情表明我做错了


%{::hostname}
可以工作。如果我添加nodes/mynode.yaml,这个配置就会被选中。

经过几个小时的挠头,在puppetlabs上报告了一个文档错误(我现在关闭了它Lol),几乎完全放弃了这个想法,只是创建了一个自定义事实,我发现这是一个非常简单的修复。。。这是有道理的

基本上,我所需要做的就是将我的site.pp从:

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

现在这很有意义,因为正如您所看到的,在设置node scope变量之后,我需要调用
hiera\u include

不过需要注意的是(正如我刚刚发现的那样),如果您在顶层有
hiera_include('classes')
,并且您在多个yaml文件中设置了一个classes参数,那么它将只使用common.yaml中设置的参数


可能最烦人的事情是,通过我所有的尝试和错误,我在某个点上把
hiera\u include
放在节点声明中,我只是没有把它放在文档中的变量Lol之后:“hiera\u include函数使用数组合并查找来检索类数组”,所以结果你们应该有三门课。我想,因为第一个文件不存在,所以你得到的结果是一个空数组。哇,尽管你的评论真的没有什么意义,但它一定是让我的大脑过度兴奋了,因为我想我找到了答案。。。我会确认一下,然后很快寄出去
hiera_include('classes')
node 'mynode' {
    $build = special
}
node 'mynode' {
    $build = special
    hiera_include('classes')
}