【问题标题】:Chef update config file厨师更新配置文件
【发布时间】:2014-04-28 23:45:40
【问题描述】:

我有一本安装 nginx 并安装自定义 nginx.conf 文件的厨师食谱。基本上就是 Opscode 上的 Cookbook,使用 cookbook_file 来安装文件。

如果我更改了 conf 文件,然后使用 chef 重新运行说明书,配置文件不会更新。这似乎是一个错误——我做错了什么吗?

【问题讨论】:

  • 您使用的是chef-client 还是chef-solo?如果chef-client,你有没有用knife cookbook upload把新的菜谱上传到厨师服务器?

标签: chef-infra


【解决方案1】:

在 chef 中,recipe 中的命令顺序就是执行顺序。如果您为nginx.conf 保留template 并且它在您的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 设置的文件。

【讨论】:

  • 这个答案很准确。
【解决方案2】:

在测试中,我发现如果您设置了:create_if_missing,如果内容已更改,它将不会更新文件。设置:create就可以了。

【讨论】: