将节点分配给特定的层次结构层次

时间:2019-03-09 18:36:04

标签: puppet hiera facter

我在hiera.yaml中添加了这样的层次结构

- "nodes/%{::certname}"
- "locations/{::location}.yaml"
- "groups/%{::group}.yaml"
- common

对于节点,我知道hiera通过节点资源查找它们。但是它如何适用于地点或团体?我需要创建自定义事实吗?如果是的话,我该如何分配这个事实。我可以在site.pp的节点定义中这样做吗?

 node example.com{
    ::location = "new york"
    ::group = "mailer"  ... }

1 个答案:

答案 0 :(得分:0)

  

对于节点,我知道hiera通过节点查找它们   资源。

我不能肯定我理解你的意思,但我认为你有误会。

  

但是它如何用于位置或群组?

Hiera interpolation插入Puppet变量的值和/或某些插值函数的结果。 certnamelocationgroup在这方面是相同的,但是certname变量是Puppet根据代理提供的用于标识自身的证书自动提供的。 (虽然它们也使用证书名称,但它们与节点块和节点终端节点完全正交。)

  

我需要   创建自定义事实?

您可以这样做,因为代理提供的所有事实都可以作为顶级Puppet变量使用。由Hiera插值的变量不必从事实中派生,但是在执行需要它们的Hiera查找之前,确实需要定义它们,并且从目录构建器开始评估站点清单之前就可以使用事实。

  

如果是的话,我该如何分配该事实。

这完全是how you implement the fact的问题。

  

我可以在site.pp [?]的节点定义中做到这一点吗?

您不能在节点块中设置事实,但是可以设置节点范围和顶级范围变量,然后这些变量将可供Hiera进行插值。对于节点作用域,语法如下所示:

node example.com{
  $location = "new york"
  $group = "mailer"
  # ...
}

对于顶级作用域来说是相同的,只是在节点块之外。另外,您可以通过external node classifier定义顶级变量(除其他外)。