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

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

我正在尝试包含 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。我个人更喜欢第一种方法。

相关内容