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

我正在尝试在我的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

建立/ special.yaml:

---
classes:
    - third_class

我希望’mynode’在刷新木偶代理时获得’third_class’,但它没有,并且没有错误.

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

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

有没有明显的事情我在这里做错了?

%{:: hostname}有效.如果我添加nodes / mynode.yaml,则会选择该配置.

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

基本上我需要做的就是改变我的site.pp:

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

至:

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

它现在很有意义,因为正如你所看到的,我需要在设置node-scope变量后调用hiera_include.

(尽管我刚刚发现),如果你在顶层有hiera_include(‘classes’)并且你在多个yaml文件中设置一个类参数,那么它只会使用common.yaml中设置的参数. .

可能是最烦人的事情,就是通过我所有的试验和错误,我在某些时候把hiera_include放在节点声明中,我只是没有把它放在变量Lol之后

点赞