Назад | Перейти на главную страницу

Скопируйте всю структуру каталогов в 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 но есть ли что-нибудь более чистое?

Или я ошибаюсь?

Почему бы не использовать remote_directory ресурс. Он предназначен именно для этого.

Видеть: https://docs.chef.io/resource_remote_directory.html

file_cache_path сообщит вам, где находятся кулинарные книги на целевой машине

Поэтому вам просто нужно синхронизировать каталог вашей кулинарной книги в file_cache_path с вашим целевым местоположением. Вы могли бы сделать это с помощью cp -r, ruby_block с использованием FileUtils # cp_rили какой-то другой ум, о котором я не думал.