Tom*_*ski 3 linux puppet puppetmaster
我将所有节点保存在一个文件 site.pp 中 - 但是随着我添加越来越多的节点,维护它们变得非常困难。
导入指令看起来很有前途,但据我了解文档,每次发生变化时都必须重新启动 puppermaster。对我来说这是不可接受的。
有没有其他方法可以做到这一点?而不是使用大注释来分隔节点/组。现在我只使用 rdoc。
我会很高兴有任何建议:-)
我当前的 puppet 目录结构如下所示:
我使用 git/rsync 部署 puppet 配置以仅覆盖更改的文件。
我有一个看起来像这样的site.pp:
import "nodes/*.pp"
Run Code Online (Sandbox Code Playgroud)
并有一个nodes/目录manifests/
这样我就有了一组节点"workstations.pp" "webservers.pp"等等..
在清单之外定义您的节点。我推荐 extlookup 的继任者 Hiera,但实际上任何外部节点分类器都足以将您的节点数据移出清单。
这是目前处理节点定义的推荐方法 - 来自文档:
大多数情况下,大多数用户应该使用类似包含的声明并在其外部数据中设置参数值。但是,与早期版本的 Puppet 的兼容性可能需要妥协。
Hiera 包含在 Puppet 3.0 中 - 它需要在旧版本中单独安装。要设置 Hiera 来处理您的节点定义,您需要按照以下方式做一些事情:
site.pp(整个事情):
hiera_include(classes)
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
现在,Puppet 将查看在/etc/puppet/hieradata您的节点上提取数据。假设你有一个ntp你想要的类,一个apache你只想要一个特定节点的类:
/etc/puppet/hieradata/common.yaml:
classes:
- ntp
Run Code Online (Sandbox Code Playgroud)
/etc/puppet/hieradata/nodename.example.com.yaml:
classes:
- apache
Run Code Online (Sandbox Code Playgroud)
这个数组是聚合的——nodename.example.com节点将从ntp公共文件中获取apache类,从自己的文件中获取类。
Hiera 还为您处理类参数。假设您的apache班级需要一个port参数:
class apache ( $port ) {
...
Run Code Online (Sandbox Code Playgroud)
您也可以在 Hiera 数据文件中进行设置。如果您希望它默认为端口 80..
/etc/puppet/hieradata/common.yaml:
classes:
- ntp
apache::port: 80
Run Code Online (Sandbox Code Playgroud)
但是你想覆盖它nodename.example.com,将它设置为 8080:
/etc/puppet/hieradata/nodename.example.com.yaml:
classes:
- apache
apache::port: 8080
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用os-%{osfamily}从hiera.yaml文件基于关于给定节点的事实设置-osfamily在这种情况下的事实。
/etc/puppet/hieradata/os-debian.yaml:
apache::package_name: apache2
Run Code Online (Sandbox Code Playgroud)
/etc/puppet/hieradata/os-redhat.yaml:
apache::package_name: httpd
Run Code Online (Sandbox Code Playgroud)
(请注意,如果您运行的版本早于 3.0,则参数查找行为会有所不同,请参阅此处了解详细信息)
这样,您就可以在不同的文件中设置不同范围(所有节点、某些基于事实的节点或一个特定节点)的包含类和参数/变量设置。