我正在使用 Puppet Dashboard 作为我的 ENC,但我不确定如何引用或使用来自的类和组分类/etc/puppet/manifests/site.pp
。
我在仪表板中定义了两个组:CentOS6
和SLES11
。如果我想在组中包含特定的模块列表CentOS6
,并在组中包含特定的模块列表,我的 site.pp 应该是什么样子SLES11
?
我正在尝试做这样的事情:
# /etc/puppet/manifests/site.pp
node basenode {
include hosts
include ssh::server
include ssh::client
include authentication
include sudo
include syslog
include mail
}
node 'CentOS6' inherits basenode {
include profile
}
node 'SLES11' inherits basenode {
include usrmounts
}
我的模块中有特定于操作系统的案例语句,但有些模块仅适用于某个发行版。所以我想我有两个问题:
- 这是以特定于操作系统的方式应用模块/资源的最佳方法吗?还是上述内容让您想吐?
- 无论 #1 是什么,我仍然很好奇如何在清单中引用仪表板中的类、组和节点。我已阅读外部节点doc,但我没有看到它们与清单如何对应。
谢谢大家。
答案1
您在使用外部节点分类器方面走在正确的道路上。虽然有点难以理解,但一旦您让它工作起来,您就永远不会后悔,我强烈建议您这样做。当我遇到问题时,我去了 Puppet IRC 房间,他们帮助我让它工作起来。
根据操作系统应用不同的模块是可以的。我使用 BSD 和 RHEL 运行 300 多个节点环境,我们做到了。我们没有将操作系统作为节点,而是将其作为自己的类,因为。因此,我们让 ENC 传回类似以下内容的内容,而不是“节点操作系统继承基节点”:
node web-prod-007 { $node_environment="production" include web_server_class # this then inherits basenode include centos6::server # include logging::rsyslog }
...ETC
如何做取决于你希望继承如何工作,如果你想根据操作系统修改 basenode 中的内容,那么让 OS 继承 basenode 是正确的方法。
TLDR,你所做的是正确的,并且研究一下 ENC,因为它们让生活变得更轻松。
编辑:2.我不使用仪表板,所以我不知道。
答案2
好的,我明白这是怎么回事了。Puppet Dashboard 会替换site.pp
,如果你将仪表板设置为你的外部节点分类器 (ENC)。嗯,这并不完全正确,因为您可以同时使用两者:
ENC 可以与 site.pp 中的标准节点定义共存,并且每个源中声明的类都可以有效合并。
据我了解,仪表板课程= 您的 puppet 模块的名称。您可以创建群组将类组合在一起以应用于一组节点。我已经为所有 CentOS 6 服务器设置了一个 CentOS6 组,根据我原始问题中的旧 site.pp,它具有所有课程(模块)我希望我的 CentOS 6 服务器已在其目录中应用。将节点和类添加到组都可以通过仪表板完成。
另一个例子:
site.pp
:
node default {
include iptables
include selinux
include dns
include test
}
将 site.pp 转换为 Puppet Dashboard(屏幕截图):