首页 > 解决方案 > 将节点分配给特定的层次结构

问题描述

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

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

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

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

标签: puppethierafacter

解决方案


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

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

但它如何适用于地点或团体?

Hiera 插值插入 Puppet 变量的值和/或某些插值函数的结果。 certname, location, 和group在这方面是相同的,但certname变量是由 Puppet 自动提供的,基于代理提供的证书来标识自己。(这与节点块和节点终端完全正交,尽管它们也使用证书名称。)

我需要创建自定义事实吗?

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

如果是的话,我怎样才能给节点分配这个事实。

这完全是你如何实现 fact的问题。

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

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

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

对于顶级范围,它是相同的,只是在节点块之外。或者,您可以通过外部节点分类器定义顶级范围变量(除其他外)。


推荐阅读