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

Как сделать так, чтобы марионетка запускала все службы в конце запуска каталога?

Puppet имеет тенденцию запускать зависимые службы, особенно при настройке совершенно нового сервера с нуля, как только все их зависимости удовлетворены. Иногда это приводит к тому, что службы запускаются излишне слишком рано, в то время как установка других пакетов (не зависящих от службы) все еще выполняется.

Есть ли какое-либо однострочное определение или рецепт, который автоматически заставит все службы запускаться / обновляться в конце всего запуска каталога? Я пытался выяснить, если этапы выполнения могут быть использованы, но, как я понимаю, это потребует, чтобы все определения служб были явно определены до «последней» стадии.


Обновление 1: Немного предыстории к моему вопросу. Puppet во время начальной настройки узла работает довольно интенсивно и, таким образом, резервирует ресурсы довольно небольшой виртуальной машины (в моем случае Vagrant на машине разработчика). Когда фаза настройки дошла до того, что некоторые службы, в моем случае фоновые рабочие процессы, были готовы, Puppet запускает их, и рабочие начинают получать задания из очереди. Эта рабочая нагрузка замедляет все еще продолжающийся процесс настройки узла Puppet, а также Puppet замедляет рабочих, пока не будет завершена вся настройка и ящик не перейдет в стабильное состояние.

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

Я бы не советовал глобальный перезапуск. Скорее используйте марионеточные зависимости.

Что-то вроде:

service { 'first':
      ensure    => running,
      enable    => true,
    }

service { 'second':
      ensure    => running,
      enable    => true,
      subscribe => Service['first']
}

Вы этого не сделаете.

Это совсем не то, что должна делать марионетка, и хотя вы, вероятно, можете придумать способ сделать это, это совсем не хорошая идея. Если все, что вы хотите добиться, - это то, что службы не должны замедлять работу марионетки (что я также считаю довольно отсталым, я бы предпочел, чтобы это было наоборот), почему бы не научить ваши службы расслабляться, если марионетка работает, пока они получают началось?

Один из способов добиться этого -

  1. Оформите подписку, как указано выше.
  2. Использовать метапараметр стадии.

Вы можете назначить это значение по умолчанию для типа ресурса Service через

Service { stage => last }

Если вы определите это в вашем node.pp, он будет применяться ко всем узлам, или вы можете определить его для каждого узла.