Конфигурационный файл обновления шеф-повара

#chef-infra

#шеф-повар-инфра

Вопрос:

У меня есть кулинарная книга шеф-повара, которая устанавливает nginx и устанавливает пользовательский файл nginx.conf. По сути, это та же поваренная книга в Opscode, и для установки файла используется cookbook_file.

Если я внесу изменения в файл conf, а затем повторно запущу кулинарную книгу с помощью chef, файл конфигурации не будет обновлен. Это похоже на ошибку — я делаю что-то не так?

Комментарии:

1. Используете ли вы chef-client or chef-solo ? Если chef-client , загрузили ли вы новую кулинарную книгу на сервер chef с помощью knife cookbook upload ?

Ответ №1:

В chef порядок команд в рецепте соответствует порядку выполнения. если вы сохранили template для nginx.conf и он появляется после вашей cookbook_file команды, сгенерированный шаблон перезапишет ваш файл.

например

 # cookbook file
cookbook_file "#{node[:nginx][:dir]}/nginx.conf" do
  source "my_nginx.conf"
  mode 0644
  owner "root"
  group "root"
end

# template
template "nginx.conf" do
  path "#{node[:nginx][:dir]}/nginx.conf"
  source "nginx.conf.erb"
  owner "root"
  group "root"
  mode 0644
  notifies :reload, "service[nginx]"
end
  

template Это привело бы к перезаписи файла, установленного cookbook_file .

Комментарии:

1. Этот ответ точен и идеален.

Ответ №2:

В ходе тестирования я обнаружил, что если вы :create_if_missing установили, это не приведет к обновлению файла, если его содержимое изменилось. Установите :create , и это произойдет.