我在hiera.yaml中添加了这样的层次结构
- "nodes/%{::certname}"
- "locations/{::location}.yaml"
- "groups/%{::group}.yaml"
- common
对于节点,我知道hiera通过节点资源查找它们。但是它如何适用于地点或团体?我需要创建自定义事实吗?如果是的话,我该如何分配这个事实。我可以在site.pp的节点定义中这样做吗?
node example.com{
::location = "new york"
::group = "mailer" ... }
答案 0 :(得分:0)
对于节点,我知道hiera通过节点查找它们 资源。
我不能肯定我理解你的意思,但我认为你有误会。
但是它如何用于位置或群组?
Hiera interpolation插入Puppet变量的值和/或某些插值函数的结果。 certname
,location
和group
在这方面是相同的,但是certname
变量是Puppet根据代理提供的用于标识自身的证书自动提供的。 (虽然它们也使用证书名称,但它们与节点块和节点终端节点完全正交。)
我需要 创建自定义事实?
您可以这样做,因为代理提供的所有事实都可以作为顶级Puppet变量使用。由Hiera插值的变量不必从事实中派生,但是在执行需要它们的Hiera查找之前,确实需要定义它们,并且从目录构建器开始评估站点清单之前就可以使用事实。
如果是的话,我该如何分配该事实。
这完全是how you implement the fact的问题。
我可以在site.pp [?]的节点定义中做到这一点吗?
您不能在节点块中设置事实,但是可以设置节点范围和顶级范围变量,然后这些变量将可供Hiera进行插值。对于节点作用域,语法如下所示:
node example.com{
$location = "new york"
$group = "mailer"
# ...
}
对于顶级作用域来说是相同的,只是在节点块之外。另外,您可以通过external node classifier定义顶级变量(除其他外)。