我将所有节点保存在一个文件site.pp中 – 但是当我添加更多节点时,维护它们非常困难。
导入指令看起来非常有前途,但正如我理解的文档,有必要每次改变时重新启动puppermaster。 对我来说这是不可接受的。
有没有其他方法可以做到这一点? 而不是使用大的评论来分离节点/组。 现在我只使用rdoc。
我会很高兴与任何build议:-)
我目前的木偶目录结构如下所示:
我使用git / rsync来部署puppetconfiguration,只覆盖已更改的文件。
我有一个site.pp ,看起来像这样:
import "nodes/*.pp"
并在manifests/
所以我有一个"workstations.pp" "webservers.pp"等节点的集合。
在清单之外定义您的节点。 我build议extlookup的继任者,Hiera,但真正的任何外部节点分类器就足以将您的节点数据移出清单。
这是处理节点定义的推荐方式 – 从文档 :
大多数情况下,大多数用户应该使用类似include的声明并在其外部数据中设置参数值。 但是,与早期版本的Puppet兼容可能需要妥协。
Hiera包含在Puppet 3.0中 – 需要在旧版本中单独安装。 要设置Hiera来处理您的节点定义,您可能需要按照以下步骤进行操作:
site.pp(整件事):
hiera_include(classes)
hiera.yaml:
:backends: - yaml :hierarchy: - %{clientcert} - os-%{osfamily} - common :yaml: :datadir: /etc/puppet/hieradata # A good alternative if you want different node data based on environments: #:datadir: /etc/puppet/environments/%{environment}/hieradata :puppet: :datasource: data
现在,Puppet会在/etc/puppet/hieradata中查看你的节点上的数据。 假设你有一个你想要的ntp类,并且只需要一个特定节点上的apache类:
/etc/puppet/hieradata/common.yaml:
classes: - ntp
/etc/puppet/hieradata/nodename.example.com.yaml:
classes: - apache
此数组是聚合的 – nodename.example.com节点将从公用文件中获取ntp类,并从其自己的文件中获取apache类。
Hiera还为您处理您的class级参数。 假设你有你的apache类期望一个port参数:
class apache ( $port ) { ...
您也可以在您的Hiera数据文件中进行设置。 如果你想它默认为端口80 ..
/etc/puppet/hieradata/common.yaml:
classes: - ntp apache::port: 80
但是你想覆盖nodename.example.com ,将其设置为8080:
/etc/puppet/hieradata/nodename.example.com.yaml:
classes: - apache apache::port: 8080
或者,您可以使用hiera.yaml文件中的os-%{osfamily}来设置基于给定节点事实的设置 – 在这种情况下osfamily事实。
/etc/puppet/hieradata/os-debian.yaml:
apache::package_name: apache2
/etc/puppet/hieradata/os-redhat.yaml:
apache::package_name: httpd
(请注意,如果您运行的是早于3.0的版本,参数查找行为有点不同, 请参阅此处了解详细信息 )
这样,您就可以在不同的范围(所有节点,基于事实的一些节点,或者一个特定的节点),在不同的文件中设置包含的类和参数/variables设置。