如何重新定义子类中的参数?

我正在尝试在我自己的通用模板模块中包含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:真正的需要它的机器。 我个人偏好是第一种方法。