Поваренные книги шеф-повара отмечены как выполненные
Я настроил сервер 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 не будет запускать уведомление для перезапуска службы.
Вам нужно будет определить, происходят ли эти перезапуски из-за того, что вы изменили конфигурацию, или в рецепте есть ошибка, которая приводит к тому, что он всегда перезапускает службу.