У меня есть смесь 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
(Просто используйте свою версию ОС вместо ОС в приведенном примере).