在 Chef 中复制整个目录结构

在 Chef 中复制整个目录结构

我有一个目录结构(示例数据),我想从 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资源。它就是为此而设计的。

看:https://docs.chef.io/resource_remote_directory.html

答案2

file_cache_path将告诉您食谱在目标机器上的位置

因此,您只需将 file_cache_path 中的 cookbook 目录同步到目标位置即可。您可以使用cp -rruby​​_block 执行此操作文件实用程序#cp_r或者其他一些我还没想到的聪明做法。

相关内容