我是厨师的初学者。任何人都可以建议是否有办法将cookbook的files/default
目录中的目录复制到其他位置。
E.g。我在a.txt
目录中有一个包含文件b.txt
和files/
的目录结构,如下所示cookbook_name/files/default/folder-name/[a.txt,b.txt]
。我希望他们两个文件都是一个位置/home/user/work/somelocation/folder-name/[a.txt,b.txt]
我尝试了cookbook_file资源如下:
cookbook_file '/home/user/work/somelocation/' do
source ['folder-name']
mode "0644"
action :create
end
和
cookbook_file '/home/user/work/somelocation/' do
source ['folder-name/a.txt',''folder-name/b.txt'']
mode "0644"
action :create
end
我知道通过循环方式在任意目录之间复制文件的其他方法,但我很想知道是否有更优雅的方法来处理目录,类似于cookbook_file如何处理cookbook中标准文件夹中的文件' s { {1}}目录。
答案 0 :(得分:12)
remote_directory 允许您将整个目录复制到您选择的位置。例如:
remote_directory "/etc/some_target_directory" do
source 'local_directory' # <-- this is your directory in files/default/local_directory
files_owner 'root'
files_group 'root'
files_mode '0750'
action :create
recursive true
end
答案 1 :(得分:2)
有AFAIK没有&#34;好/干净&#34;复制食谱中包含的所有文件的方法。
为了创建多个文件,您可以应用简单的ruby逻辑来循环遍历这些文件:
['a.txt', 'b.txt'].each do |file|
cookbook_file "/home/user/work/somelocation/#{file}" do
source "folder-name/#{file}"
mode "0644"
end
end
这将创建多个cookbook_file
资源(@jamesgaddum正在讨论的内容)。
P.S。 default/
中的files/default/
部分是可选的,因为有几个Chef版本。
答案 2 :(得分:1)
不太可能cookbook_file
使用校验和来比较现有文件和新文件,因此每个文件都需要一个唯一的cookbook_file
资源。
答案 3 :(得分:0)
我正面临着类似的问题,而ATM接近解决方案的原因是,在配方run_context.cookbook_collection[<cookbook-name>].file_filenames
中,一个数组包含<cookbook>/files
下所有文件的目标完整路径。 / p>
例如,在我的配置中,像这样的目录:
files/
default/
foo.txt
bar.txt
baz/foo.txt
它返回一个类似的目录
[
"/opt/kitchen/cache/cookbooks/cookbook/files/default/foo.txt",
"/opt/kitchen/cache/cookbooks/cookbook/files/default/bar.txt",
"/opt/kitchen/cache/cookbooks/cookbook/files/default/baz/foo.txt"
]
但这对我不是很有用