Используя марионетку, я хочу обновлять пакеты на своих серверах (CentOS 5 и 6) контролируемым образом. Поэтому я не хочу использовать ensure=>latest
скорее ensure=>3.0.1-1
.
Пример:
class puppet::installation inherits puppet {
package { "puppet":
ensure => "3.0.1-1",
}
}
Обновление работает нормально, но марионеточный агент продолжает жаловаться на разницу:
/Stage[main]/Puppet::Installation/Package[puppet]/ensure: current_value 3.0.1-1.el6, should be 3.0.1-1 (noop)
Я могу решить эту проблему, изменив правило обеспечения на 3.0.1-1.el6
но это не будет работать на CentOS 5.
Есть ли простой / простой способ решить эту проблему, или мне нужно написать отдельные правила, зависящие от версии ОС.
Я искал решение, но не нашел ничего, относящегося к этому конкретному вопросу.
Приветствуются любые предложения или ссылки на соответствующий пример.
Вам нужно будет установить переменную с помощью оператора case, примерно так:
class puppet::installation inherits puppet {
case $::operatingsystemrelease {
'5': { $puppet_ver = '3.0.1-1'}
default: { $puppet_ver = '3.0.1-1.el6'}
}
package { 'puppet':
ensure => $puppet_ver,
}
}
Однако для такой логики лучше использовать файл params.pp. Читайте о params.pp здесь: http://www.example42.com/?q=understandExample42PuppetModules
В Puppet пока нет никаких функций для этого (хотя им это действительно нужно).
Вы можете использовать yum-versionlock
yum, чтобы заблокировать определенные пакеты RPM в определенных версиях, а затем использовать марионетку для управления конфигурацией блокировки версий.
Для некоторых других обходных путей см. этот связанный вопрос.
Фактически, я смог использовать подстановочный знак для установки определенной версии Python независимо от операционной системы. Код моего пакета для python выглядит следующим образом.
package {
"python-dev": ensure => "2.7.3*";
"python-setuptools": ensure => installed;
"python-pip": ensure => installed;
"libxml2-dev": ensure => installed;
"libxslt-dev": ensure => installed;
}
Используя 2.7.3 * в качестве версии обеспечения, он установил python 2.7.3-0ubuntu2.2 на мою бродячую виртуальную машину. Я использую Puppet версии 2.7.19.