web-dev-qa-db-ja.com

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しかし、よりクリーンなものはありますか?

それとも私はこれを間違った方法で行っていますか?

6
Steve Bennett

remote_directoryリソースを使用しないのはなぜですか。それはまさにそのためのものです。

参照: https://docs.chef.io/resource_remote_directory.html

10
Michael Field

file_cache_path は、クックブックがターゲットマシンのどこにあるかを通知します

したがって、file_cache_path内のクックブックのディレクトリをターゲットの場所に同期する必要があります。 cp -rFileUtils#cp_r を使用したRuby_block、または私が考えていない他の賢さ。

1
kgilpin