puppet apt-get update только один раз, прежде чем что-либо еще?

Я знаю основы заказа в puppet для запуска apt-get update перед определенным пакетом, но хотел бы указать, что apt-get update должен запускаться только один раз, а затем выполнять остальную часть файла puppet. Это возможно?

Все перечисленные способы здесь должны либо запускайте apt-get перед каждым пакетом, либо используйте стрелки, либо требуйте указать каждый пакет.


person isimmons    schedule 17.07.2013    source источник


Ответы (2)


Вот моя рекомендация из этого списка:

exec { "apt-update":
    command => "/usr/bin/apt-get update"
}

Exec["apt-update"] -> Package <| |>

Это гарантирует, что exec запускается перед любым пакетом, а не перед каждым пакетом. На самом деле, любой ресурс в puppet будет выполняться не более одного раза за каждый запуск puppet.

Но если вы хотите, чтобы exec выполнялся перед ЛЮБЫМ типом ресурса, я думаю, вы могли бы сделать что-то вроде:

exec { "apt-update":
    command => "/usr/bin/apt-get update",
    before  => Stage["main"],
}

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

Я надеюсь, что это помогает.

person Sekm    schedule 17.07.2013
comment
Спасибо Сэкм. Я неправильно понимал, как это работает, и думал, что если есть, например, 5 пакетов, то apt-get update будет запускаться 5 раз. Спасибо за объяснение, а также за второй вариант, так как он может пригодиться для других вещей. - person isimmons; 17.07.2013

С модулем puppetlabs-apt должно быть достаточно определить зависимость от модуля для любого пакета, который будет быть установлен:

Class['apt'] -> Package<| |>

Это предполагает базовую конфигурацию apt, например:

class { 'apt':
    update => {
      frequency => 'daily',
    },
    purge => {
      'sources.list' => false,
      'sources.list.d' => true,
    },
  }
person Tombart    schedule 13.05.2016
comment
Это лучший ответ; это тот, который рекомендуется в документации Puppet, и он позволяет избежать необходимости вручную указывать команду для выполнения. - person David Ehrmann; 28.12.2016