Chef cookbook - 将完整目录从 cookbook 中的 files/default 位置复制到新位置

Chef cookbook - copy complete directory from files/default location in cookbook to a new location

我是 Chef 的初学者。任何人都可以建议是否有办法将食谱的 files/default 目录中的目录复制到不同的位置。

例如我有一个目录结构,其中 a.txtb.txtfiles/ 目录中,如下 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 目录。

不太可能,因为 cookbook_file 使用校验和来比较现有文件和新文件,因此每个文件都需要一个唯一的 cookbook_file 资源。

AFAIK 没有 "good/clean" 复制食谱中包含的所有文件的方法。

为了创建多个文件,您可以应用简单的 ruby 逻辑来遍历这些文件:

['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 所说的)。

P.S。 files/default/ 中的 default/ 部分是可选的,因为几个 Chef 版本。

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

我面临着类似的问题,ATM 最接近我的解决方案是在食谱中 run_context.cookbook_collection[<cookbook-name>].file_filenames 是一个数组,其中包含 [=13= 下所有文件的目标完整路径]

例如在我的目录配置中是这样的:

files/
  default/
     foo.txt
     bar.txt
     baz/foo.txt

它returns一个像

这样的目录
[
  "/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"
]

但这对我来说用处不大