Ruby

在 Chef 中複製整個目錄結構

  • August 24, 2016

我有一個要從 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

...

有沒有辦法簡單地從食譜中遞歸複製整個目錄結構?在配方中指定每個文件的名稱似乎是多餘的並且容易出錯(即,如果我們將文件添加到樹中但忘記在配方中引用它,它將不會被複製。)

我想一個黑客解決方法是找出所有廚師文件被複製到目標機器上的位置並做一個cp -r但是有更清潔的東西嗎?

還是我以錯誤的方式解決這個問題?

為什麼不使用remote_directory資源。它正是為此而設計的。

請參閱:https ://docs.chef.io/resource_remote_directory.html

file_cache_path會告訴你說明書在目標機器上的位置

因此,您只需將 fi​​le_cache_path 中的食譜目錄同步到您的目標位置。您可以使用 FileUtils #cp_rcp -r使用ruby​​_block或其他一些我沒有想到的聰明來做到這一點。

引用自:https://serverfault.com/questions/428970