Chef cookbook - 将完整目录从cookbook中的文件/默认位置复制到新位置

时间:2016-05-17 03:01:02

标签: chef

我是厨师的初学者。任何人都可以建议是否有办法将cookbook的files/default目录中的目录复制到其他位置。

E.g。我在a.txt目录中有一个包含文件b.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如何处理cookbook中标准文件夹中的文件' s { {1}}目录。

4 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:2)

有AFAIK没有&#34;好/干净&#34;复制食谱中包含的所有文件的方法。

为了创建多个文件,您可以应用简单的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。 default/中的files/default/部分是可选的,因为有几个Chef版本。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

我正面临着类似的问题,而ATM接近解决方案的原因是,在配方run_context.cookbook_collection[<cookbook-name>].file_filenames中,一个数组包含<cookbook>/files下所有文件的目标完整路径。 / p>

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

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"
]

但这对我不是很有用