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

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

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

Ответ 1

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

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

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

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

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

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

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

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

Ответ 2

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

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

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

class { 'apt':
    update => {
      frequency => 'daily',
    },
    purge => {
      'sources.list' => false,
      'sources.list.d' => true,
    },
  }