Поваренные книги шеф-повара отмечены как выполненные

Я настроил сервер Chef в нашей сети, который я использую для управления несколькими узлами. На этих узлах установлен chef-клиент, выполняющийся как демон каждые X минут.

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

Я знаю, что могу избежать выполнения фрагмента кода или рецепта, который я создаю, как подробно описано здесь: Предотвратить рецепт шеф-повара от выполнения ранее выполненного действия? но будет ли это означать, что я должен изменить любую поваренную книгу, которую я загружаю из репозитория opscode.

Другими словами, возможно ли заставить шеф-сервер (или клиентов) отмечать поваренные книги как "выполненные", как только они выполняются в первый раз?

1 ответ

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

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


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

service "myservice" do
  action :nothing
end

Если рецепт генерирует файл конфигурации для приложения, у вас будет template ресурс, который отправляет уведомление service ресурс:

template "/etc/myapp.conf" do
  notifies :restart, "service[myservice]"
end

template ресурс имеет встроенную логику, так что если существующий myapp.conf файл совпадает с файлом, сгенерированным Chef, тогда Chef не будет запускать уведомление для перезапуска службы.


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

Другие вопросы по тегам