Могу ли я использовать подстановочные знаки в марионеточном пакете, чтобы обеспечить несколько версий выпуска
Используя puppet, я хочу обновлять пакеты на своих (серверах 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.
Есть короткий / чистый способ решить эту проблему или мне нужно написать отдельные правила, зависящие от версии выпуска ОС.
Я искал решение, но ничего не нашел по этому конкретному вопросу.
Любое предложение или ссылка на соответствующий пример будет принята с благодарностью.
3 ответа
Вы должны установить переменную с помощью оператора 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-пакетов в определенных версиях, а затем используйте puppet для управления конфигурацией блокировки версий.
Для некоторых других обходных путей см. Этот связанный вопрос.
На самом деле, я смог использовать подстановочный знак для установки конкретной версии 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.