Поваренная книга шеф-повара - скопировать полный каталог из файлов / местоположения по умолчанию в кулинарной книге в новое место

Я начинающий шеф-повар. Может кто-нибудь, пожалуйста, сообщите, если есть способ скопировать каталог в кулинарной 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"
]

Но мне это не очень пригодится

Другие вопросы по тегам