如何在 Puppet 中为一个包添加多个操作系统检查

如何在 Puppet 中为一个包添加多个操作系统检查

我有 CentOS、5.8、5.7、6.1、6.3、4.7 Ubuntu、Debian 等服务器。我希望所有服务器上都安装 nrpe。我面临的问题是,当我编写 puppet 代码来确保 packe nrpe 时,它​​在 Centos 6+ 上运行良好,但当它在 centos 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",
    }
}

我怎样才能对我所需要的进行嵌套检查?

谢谢

答案1

内联、嵌套的 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):

答案2

您可以使用 facter 和一些 if/else 条件来告诉 Puppet 您想要将哪个类应用于每个版本的 CentOS。

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

(只需使用您的操作系统版本,而不是所提供示例中的操作系统)。

相关内容