【发布时间】:2017-02-19 17:21:41
【问题描述】:
我过去经常使用 Puppet,从 0.x 到 1.0 左右,然后换了工作,但现在我又回来了。 Puppet 中的 Hiera 对我来说是新的(还有很多其他的东西)。
我的理解是否正确,基本上不可能根据与 Hiera 匹配的主机名(或证书名称)模式将类分配给节点组?
例如,如果主机类似于“ntp1.foo.com”,我曾经分配 ntp 服务器类。在site.pp 中直接定义node 非常容易,我正试图将这个概念转移到基于Hiera 的世界中。我让 Hiera 分配其他课程,并希望将所有这些作业集中到一个地方。
我发现这样做的唯一方法是通过一些非 Hiera 方式设置参数并使用其在 Hiera 中的值来匹配路径。例如,在我的 enc 脚本中,我导出一个参数,如下所示:
echo "parameters:"
if [ ... ]; do echo " ntpRole: server; else echo " ntpRole: client"; fi
在 Hiera 中,我会做类似的事情:
- "roles/ntp-%{ntpRole}"
我认为人们也可以通过自定义事实来做到这一点。
这行得通,但似乎是个杂牌。有没有更好/推荐的替代方案?
这样做的一个问题是每个节点必须都有一个值(所有东西都被分配了一个 ntp-something 类)。这适用于 NTP,因为所有机器要么是 NTP 客户端,要么是服务器,但对于存在的东西则不然。
例如:Web 服务器角色。有些机器不会是 Web 服务器,所以我不想包含那个类,但对于其他我做的,我真的不想在每个节点的文件中维护它,也不想到处都有空的*-none 角色类(例如web-none 与web-server)。我希望所有名为 www* 或基于其他一些标准的机器加载 roles/web 类。这可以用 Hiera 完成吗?
【问题讨论】:
-
我们为此使用外部自定义事实,因此事实将具有该节点所属角色的逻辑,并且在您的层次结构中,您可以使用该事实来包含角色类。