Могу ли я использовать подстановочные знаки в марионеточном пакете, чтобы обеспечить несколько версий выпуска

Используя 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.

Другие вопросы по тегам