如何在Chef中编写带有外部cookbook_files的食谱?

时间:2012-12-28 09:52:40

标签: chef

如何创建一般菜谱,允许用户指定将被复制的cookbook_file的位置?我想这个文件是一个可覆盖的属性。

例如:创建一个nginx cookbook,用户可以在其中指定SSL文件的位置,以便它可以将这些文件复制到服务器的正确目录中。

1 个答案:

答案 0 :(得分:3)

如果您希望通过files资源访问该文件,则该文件应位于该食谱的cookbook_file子目录中。如果您想从其他地方获取文件,则需要使用remote_file。 (不要在食谱中设置node[:nginx][:ssl_file_location]。)

cookbook_file filename do
  [...]
  only_if { node[:nginx][:ssl_file_location].nil? }
end

remote_file ::File.join( node[:nginx][:ssl_file_location].to_s, filename ) do
  [...]
  not_if { node[:nginx][:ssl_file_location].nil? }
end

当需要设置ssl_file_location时,他可以创建一个attributes.json文件:

{ "nginx": { "ssl_file_location" : "[my location]" } }

并运行厨师客户:

chef-client --json-attributes attributes.json

修改

如果ssh_files实际上在其他一些食谱中,那么你可以使用cookbook_file,但你必须提供这样的cookbook属性:

cookbook_file filename do
  [...]
  cookbook 'cookbook_name_where_to_look'
end