如何为puppet中的包添加多个操作系统检查

我有CentOS,5.8,5.7,6.1,6.3,4.7 Ubuntu,Debian,服务器与我的混合。 我希望他们都安装了nrpe。 我面对的问题是,当我写puppet代码来确保packe nrpe,它在Centos 6+上运行正常,但是当它在5.8上运行时,包名是nrpe-nagio,而不是nrpe ..我试过这样做,但无法执行所需的检查。

package { "nrpe": ensure => "installed", name => $operatingsystem ? { Ubuntu => "nagios-nrpe-server", CentOS => "nrpe", { /^5/: { package { "nagios-nrpe": ensure => "installed", } } } Debian => "nagios-nrpe-server", } } 

我怎么能嵌套检查我需要什么?

谢谢

内联,嵌套的case语句是一个不好的方法来做到这一点,并积极阻止在Puppet中(见Puppet Lint文档 )。

更好的方法是(我已经猜到了$::lsbdistrelease因为我没有RH系统 – 你应该运行facter来确定正确的事实,让你的主要版本)。

 $nrpe_package = $::osfamily ? { 'Debian' => 'nagios-nrpe-server' 'RedHat' => $::lsbdistrelease ? { '5' => 'nagios-nrpe', default => 'nrpe', } default => 'nrpe', } package { 'nrpe': ensure => installed, name => $nrpe_package, } 

说明(在适当的情况下,链接到Puppet Lint):

  • 在包定义之外设置variables
  • 包括这两个case语句的默认值
  • 带有::前缀顶级命名空间
  • 对于没有variables的string使用单引号
  • 适当地使用分层/嵌套的情况

你可以使用facter和if / else条件来告诉Puppet你想应用到每个CentOS版本的类。

例如: http : //docs.puppetlabs.com/learning/variables.html#case

(只要使用你的操作系统版本,而不是在提供的例子中的操作系统)。