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

Puppet - Обновление пакетов при установке репо

Я пытаюсь получить марионетку (0,25,5-1.el5) обновлять уже установленный пакет при установке нового репозитория yum.

В базовом образе по умолчанию установлен пакет X версии 1.1. В доступных репозиториях версия 1.1. самый последний. Я устанавливаю новое репо, в котором доступен пакет X версии 1.8. Я бы хотел, чтобы установка нового репо и обновление пакета X происходили одновременно. У меня есть следующий код:

class repo {
  yumrepo { "foorepo":
    descr    => 'the foo repo',
    baseurl  => 'http://path.to.foo/repos/centos/5/',
    enabled  => 1,
    gpgcheck => 0,
  }
}

class package_x {
  package { "package_x":
    provider => "yum",
    ensure   => "latest",
    require  => Yumrepo["foorepo"]
  }
}

где узел определяется как:

node default {
  include repo
  include package_x
}

Я вижу, что когда я запускаю его, первый время, марионетка распознает, что необходимо установить новое репо, но, поскольку пакет уже доступен в текущем репо, предполагает, что package_x уже находится в Последняя версия. Если я запустил второй time, тогда он сможет распознать, что это новое репо означает, что package_x необходимо обновить до версии 1.8.

Я играл с поставить в известность и подписываться параметры, но они кажутся неприменимыми к классу. Похоже, что Puppet оценивает необходимые обновления по сравнению с текущей настройкой и, следовательно, должен применить новое репо, прежде чем он сможет «узнать», что доступна новая версия package_x.

Мне не хватает простого решения этой проблемы с зависимостями? Кто-нибудь нашел установку, которая позволила бы этому типу зависимости принудительно обновить пакет?

Спасибо.

Насколько я понимаю, это именно то, что этапы для - они позволяют группировать и упорядочивать выполнение классов. Я использую «этапы» для обновления и настройки APT на серверах Debian, что должно быть очень похоже на то, что вы собираетесь делать с YUM.

Прежде всего, вы объявляете стадию «yum» на верхнем уровне (над «узлами»), чтобы классы на стадии «yum» выполнялись раньше, чем «main»:

stage { 'yum' : before => Stage['main'] }

Затем вы назначаете этап на классы. Вы можете сделать это прямо в определении вашего узла:

node default {
  class { 'repo' : stage => yum }
  include package_x
}

Поведение, которое вы описываете, не является моим собственным опытом. Запустите марионетку вручную, с помощью --debug:

puppetd --debug --test

В этом режиме он отображает каждую выполняемую команду. Он должен показать команду, которую он использует, чтобы проверить, является ли пакет последней версией, чтобы вы могли проверить, что это за команда и когда она выполняется.

У меня мало опыта работы с серверами с помощью Yum, но при использовании apt-get (Debian) необходимо выполнить команду для обновить список пакетов после обновления списка источников (эквивалент репозиториев yum). Итак, в моих конфигурациях обновления списка источников уведомляют exec об обновлении списка пакетов, а новые пакеты зависят от указанного (только обновления) exec.