Механизм перезапуска службы в шеф-поваре

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

Посмотрим конкретно на nginx и предположим, что мы используем сервер шеф-повара, а не chef-solo (я не знаю, имеет ли это значение).

У меня есть это (например) в рецепте:

template '/etc/nginx/nginx.conf' do
  source 'nginx.cfg.erb'
  owner "root"
  group "root"
  mode 00755
  notifies :reload, "service[nginx]", :delayed
end

Бит notifies :reload означает, что он запускает перезагрузку, а :delayed означает, что это произойдет в конце прогона chef-client. Как это работает за кулисами? У меня возникают проблемы после выполнения потока.

Где-то chef-client должен запускать service nginx reload или что-то в этом направлении. Где и как это определено?

Ответ 1

notifies отправляет уведомление другому ресурсу шеф-повара, чтобы что-то сделать.

В вашем примере он сообщает ресурсу service[nginx] :reload. service[nginx] - это service ресурс, name которого nginx.

Чтобы это сработало, в какой-то момент в node run_list должно было быть объявлено service[nginx]. В противном случае шеф-повар сделает ошибку. Обычно это делается вручную в рецепте пользователем или через зависимость (скажем, application или nginx кулинарные книги).

Точно так же, как Chef запускает команду reload, зависит от того, как был объявлен ресурс service[nginx], но обычно он зависит от базовой операционной системы (что одна из красот использования такого инструмента, как эта, - она ​​абстрагирует многие детали нижнего уровня от вас и позволяют использовать один и тот же код на нескольких платформах).

В разделе Синтаксис документации service вы найдете следующее:

  • Служба
  • сообщает шеф-клиенту использовать один из следующих поставщиков во время работы chef-client: Chef::Provider::Service::Init, Chef::Provider::Service::Init::Debian, Chef::Provider::Service::Upstart, Chef::Provider::Service::Init::Freebsd, Chef::Provider::Service::Init::Gentoo, Chef::Provider::Service::Init::Redhat, Chef::Provider::Service::Solaris, Chef::Provider::Service::Windows или Chef::Provider::Service::Macosx. Шеф-клиент обнаружит платформу в начале прогона на основе данных, собранных Ohai. После того, как платформа будет идентифицирована, клиент-шеф-повар определит правильного поставщика.

Ответ 2

Функциональность описана в шеф-поваре.

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