我有一本安装 nginx 并安装自定义 nginx.conf 文件的厨师食谱。它在 Opscode 上基本上是相同的说明书,并使用 cookbook_file 来安装文件。
如果我对 conf 文件进行更改,然后使用 chef 重新运行说明书,则配置文件不会更新。这似乎是一个错误——我做错了什么吗?
我有一本安装 nginx 并安装自定义 nginx.conf 文件的厨师食谱。它在 Opscode 上基本上是相同的说明书,并使用 cookbook_file 来安装文件。
如果我对 conf 文件进行更改,然后使用 chef 重新运行说明书,则配置文件不会更新。这似乎是一个错误——我做错了什么吗?
在 chef 中,recipe 中的命令顺序就是执行顺序。如果您保留template
fornginx.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
.
在测试中我发现如果你:create_if_missing
设置了它,如果它的内容发生了变化,它不会更新文件。设置:create
它会的。