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

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

Используя марионетку, я хочу обновлять пакеты на своих серверах (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.