Назад | Перейти на главную страницу

Как добавить несколько проверок ОС для пакета в марионетке

У меня есть смесь CentOS, 5.8, 5.7, 6.1, 6.3, 4.7 Ubuntu, Debian, серверов. Я хочу, чтобы на всех них был установлен nrpe. проблема, с которой я сталкиваюсь, заключается в том, что когда я пишу код марионетки, чтобы гарантировать, что пакет 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",
    }
}

Как я могу иметь вложенные чеки на то, что мне нужно?

Спасибо

Встроенные вложенные операторы 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, где это необходимо):

Вы можете использовать facter и некоторые условия if / else, чтобы указать Puppet, какой класс вы хотите применить к каждой версии CentOS.

Пример : http://docs.puppetlabs.com/learning/variables.html#case

(Просто используйте свою версию ОС вместо ОС в приведенном примере).