我正在尝试包含 puppet 模块(https://github.com/puppetlabs/puppetlabs-puppet/blob/master/manifests/init.pp) 在我自己的通用模板模块中。但只master => true
为我的主节点设置。但我收到此错误:
err: Could not retrieve catalog from remote server: Error 400 on SERVER: Only subclasses can override parameters at /etc/puppet/modules/template/manifests/puppetmaster.pp:5 on node puppet1.mydomain.com
我的常用模板如下:
类模板::common { 包括 ssh 包括用户::基础设施 包括用户::系统 包括包::common 班级 { ‘傀儡’: puppet_server => 'puppet.mydomain.com', } }
这包含在我的所有节点(包括我的 puppetmaster)中,其中还包括此模板:
类模板::puppetmaster 继承 puppet { 包括 mysql::server 包括 myfirewall::defaults 类['puppet'] { master +> true }
我希望能够让我的 Puppet Master 安装主控位和代理(已被继承)。但我宁愿不必为每个节点定义 Puppet 资源,这样我就可以为 Puppet Master 提供同一类的单独资源。
有什么好办法可以解决这个问题?
答案1
回答如何实现这一功能的元问题,如果您使用 Passenger 来运行 Puppet Master(如果您的系统规模不限,则应该这样做),那么有一个简单的解决方法,即使用 puppetlabs 模块。您只需将一个名为 /etc/puppet/puppetmaster.conf 的新文件和一些其他配置放入名为 puppetmaster 的新模块中,然后将此行添加到 config.ru
ARGV << "--config=/etc/puppet/puppetmaster.conf"
您可以使用 puppetlabs 模块中的部分逻辑,但如果您不介意将每一项配置都作为参数,那么只需推送文件或不太复杂的模板可能会更简单。然后在作为主节点的节点上包含 puppetmaster,您就设置好了。您还可以修改现有的 puppetlabs 来执行上述操作。
针对最初的问题,Hiera 可能是最简单的解决方案。在 init.pp 中使用它
$master = hiera('puppet_master','false'),
然后为需要它的机器设置 puppet_master: true。我个人更喜欢第一种方法。