我有一个目录结构(示例数据),我想从 Chef 配方中复制它。似乎唯一的方法是明确创建每个单独的目录和文件:
directory "/mnt/data/experiment1/dataset1" do
recursive true
only_if { node.chef_environment == "dev" }
end
directory "/mnt/data/experiment1/dataset2" do
recursive true
only_if { node.chef_environment == "dev" }
end
directory "/mnt/data/experiment2/dataset1" do
recursive true
only_if { node.chef_environment == "dev" }
end
directory "/mnt/data/experiment1/dataset2" do
recursive true
only_if { node.chef_environment == "dev" }
end
cookbook_file "/mnt/data/experiment1/dataset1/testfile1.txt" do
owner "atom"
group "atom"
mode "0644"
source "sampledata/experiment1/dataset1/testfile1.txt"
only_if { node.chef_environment == "dev"}
end
...
有没有办法简单地从食谱中递归复制整个目录结构?在配方中指定每个文件的名称似乎多余且容易出错(即,如果我们将文件添加到树中但忘记在配方中引用它,它将不会被复制。)
我猜想一个解决方法就是找出所有 chef 文件在目标机器上的复制位置,然后执行这个操作,cp -r
但是有没有更简洁的方法呢?
或者我的做法是错误的?
答案1
为什么不使用remote_directory
资源。它就是为此而设计的。
答案2
file_cache_path将告诉您食谱在目标机器上的位置
因此,您只需将 file_cache_path 中的 cookbook 目录同步到目标位置即可。您可以使用cp -r
ruby_block 执行此操作文件实用程序#cp_r或者其他一些我还没想到的聪明做法。