我正在尝试在我自己的通用模板模块中包含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
我的常见模板如下所示:
class template :: common {
包括ssh
包括用户::基础设施
包括用户::系统
包括packages :: common
class {
“傀儡”:
puppet_server =>'puppet.mydomain.com',
}
}
这包括在我的所有节点(包括我的木偶大师),其中也包括这个模板:
class template :: puppetmaster inherits puppet {
包括mysql :: server
包括myfirewall :: defaults
class['puppet'] {master +> true}
我希望能够让我的木偶大师安装主位和代理(已经inheritance)。 但我宁愿不必为每个节点定义puppet资源,这样我就可以为我的木偶大师拥有一个单独的资源。
什么是解决这个问题的好方法?
回答你如何做这个工作的元问题,如果你使用Passenger来运行你的Puppet master,如果你有一个任意大小的系统,你应该这样做,这个puppetlabs模块的疯狂是一个简单的解决方法。 你只需要放一个名为/etc/puppet/puppetmaster.conf的新文件,或者在一个叫做puppetmaster的新模块中添加一些其他的configuration文件,并且把这行添加到config.ru
ARGV << "--config=/etc/puppet/puppetmaster.conf"
你可以使用puppetlabs模块中的一些逻辑,但是如果你不关心把每一个configuration都作为一个参数,那么推送一个文件或者更简单的模板可能会更简单。 然后在主控节点上包含puppetmaster,然后设置。 您也可以修改现有的puppetlabs来完成上述操作。
解决原来的问题,Hiera可能是最简单的解决scheme。 在init.pp中使用这个
$master = hiera('puppet_master','false'),
然后设置puppet_master:真正的需要它的机器。 我个人偏好是第一种方法。