如何创建一般菜谱,允许用户指定将被复制的cookbook_file的位置?我想这个文件是一个可覆盖的属性。
例如:创建一个nginx cookbook,用户可以在其中指定SSL文件的位置,以便它可以将这些文件复制到服务器的正确目录中。
答案 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