我有一个目录结构(示例数据),我想从 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
...
有没有办法简单地从食谱中递归复制整个目录结构?在配方中指定每个文件的名称似乎是多余的并且容易出错(即,如果我们将一个文件添加到树中但忘记在配方中引用它,它将不会被复制。)
我想一个 hack 解决方法是找出所有厨师文件被复制到目标机器上的位置,然后做一个cp -r
但有没有更干净的东西?
还是我以错误的方式解决这个问题?
为什么不使用
remote_directory
资源。它正是为此而设计的。请参阅:https ://docs.chef.io/resource_remote_directory.html
file_cache_path会告诉你食谱在目标机器上的位置
因此,您只需要将 file_cache_path 中的食谱目录同步到目标位置。您可以使用
cp -r
、使用 FileUtils #cp_r的 ruby_block或其他一些我没有想到的聪明之处来做到这一点。