如何维护site.pp与许多节点?

我将所有节点保存在一个文件site.pp中 – 但是当我添加更多节点时,维护它们非常困难。

导入指令看起来非常有前途,但正如我理解的文档,有必要每次改变时重新启动puppermaster。 对我来说这是不可接受的。

有没有其他方法可以做到这一点? 而不是使用大的评论来分离节点/组。 现在我只使用rdoc。

我会很高兴与任何build议:-)

我目前的木偶目录结构如下所示:

  • 舱单/ site.pp
  • 清单/ extdata /(extlookup)
  • 模块/模块1
  • 模块/模块2
  • 文件/ pubkeys …

我使用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设置。