У меня есть структура каталогов (образцы данных), которые я хочу скопировать из рецепта 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
но есть ли что-нибудь более чистое?
Или я ошибаюсь?
Почему бы не использовать remote_directory
ресурс. Он предназначен именно для этого.
file_cache_path сообщит вам, где находятся кулинарные книги на целевой машине
Поэтому вам просто нужно синхронизировать каталог вашей кулинарной книги в file_cache_path с вашим целевым местоположением. Вы могли бы сделать это с помощью cp -r
, ruby_block с использованием FileUtils # cp_rили какой-то другой ум, о котором я не думал.