在Chef中复制整个目录结构

我有一个目录结构(样本数据),我想从厨师食谱中复制。 似乎唯一的方法是明确创build每个单独的目录和文件:

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 ... 

有没有办法简单recursion复制食谱的整个目录结构? 在配方中指定每个文件的名称似乎是多余且容易出错的(例如,如果我们将文件添加到树中,但忘记在配方中引用它,则不会被复制。

我想一个黑客的解决方法是找出所有的厨师文件复制到目标机器上的位置,并做一个cp -r但有什么更清洁?

或者我正在做这个错误的方式?

为什么不使用remote_directory资源。 它的目的就是这个。

请参阅: https : //docs.chef.io/resource_remote_directory.html

file_cache_path会告诉你菜谱在目标机器上的位置

因此,您只需要将您的cookbook在file_cache_path中的目录同步到您的目标位置即可。 你可以用cp -r来做到这一点,使用FileUtils #cp_r的ruby_block ,或者我还没有想到的其他聪明。