Поваренная книга шеф-повара - скопировать полный каталог из файлов / местоположения по умолчанию в кулинарной книге в новое место
Я начинающий шеф-повар. Может кто-нибудь, пожалуйста, сообщите, если есть способ скопировать каталог в кулинарной files/default
каталог в другое место.
Например, у меня есть структура каталогов с файлами a.txt
а также b.txt
в files/
каталог следующим образом cookbook_name/files/default/folder-name/[a.txt,b.txt]
, Я хочу, чтобы оба файла были локацией /home/user/work/somelocation/folder-name/[a.txt,b.txt]
Я попробовал ресурс cookbook_file следующим образом:
cookbook_file '/home/user/work/somelocation/' do
source ['folder-name']
mode "0644"
action :create
end
а также
cookbook_file '/home/user/work/somelocation/' do
source ['folder-name/a.txt',''folder-name/b.txt'']
mode "0644"
action :create
end
Мне известны другие способы копирования файлов между произвольными каталогами с помощью циклического просмотра, но я хотел бы знать, существует ли более элегантный способ обработки каталогов, аналогичный тому, как cookbook_file обрабатывает файлы из стандартных папок внутри поваренной книги. files/default
каталог.
3 ответа
remote_directory позволяет скопировать весь каталог в любое место по вашему выбору. Например:
remote_directory "/etc/some_target_directory" do
source 'local_directory' # <-- this is your directory in files/default/local_directory
files_owner 'root'
files_group 'root'
files_mode '0750'
action :create
recursive true
end
Дополнительная информация: https://docs.chef.io/resource_remote_directory.html
У AFAIK нет "хорошего / чистого" способа скопировать все файлы, содержащиеся в кулинарной книге.
Чтобы создать несколько файлов, вы можете применить простую рубиновую логику для зацикливания этих файлов:
['a.txt', 'b.txt'].each do |file|
cookbook_file "/home/user/work/somelocation/#{file}" do
source "folder-name/#{file}"
mode "0644"
end
end
Это создаст несколько cookbook_file
ресурсы (о чем jamesgaddum).
PS default/
участие в files/default/
не является обязательным, поскольку пара версий Chef.
Вряд ли как cookbook_file
использует контрольную сумму для сравнения существующего и нового файла, поэтому требует уникального cookbook_file
ресурс для каждого.
Я столкнулся с аналогичной проблемой, и банкомат, близкий к решению, которое у меня есть, - это то, что в рецепте run_context.cookbook_collection[<cookbook-name>].file_filenames
представляет собой массив с полным путем в месте назначения для всех файлов в <cookbook>/files
например, в моей конфигурации для такого каталога:
files/
default/
foo.txt
bar.txt
baz/foo.txt
Он возвращает каталог вроде
[
"/opt/kitchen/cache/cookbooks/cookbook/files/default/foo.txt",
"/opt/kitchen/cache/cookbooks/cookbook/files/default/bar.txt",
"/opt/kitchen/cache/cookbooks/cookbook/files/default/baz/foo.txt"
]
Но мне это не очень пригодится