#chef-infra
#шеф-повар-инфра
Вопрос:
У меня есть кулинарная книга шеф-повара, которая устанавливает nginx и устанавливает пользовательский файл nginx.conf. По сути, это та же поваренная книга в Opscode, и для установки файла используется cookbook_file.
Если я внесу изменения в файл conf, а затем повторно запущу кулинарную книгу с помощью chef, файл конфигурации не будет обновлен. Это похоже на ошибку — я делаю что-то не так?
Комментарии:
1. Используете ли вы
chef-client
orchef-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
, и это произойдет.