Chef cookbook - 将完整目录从 cookbook 中的 files/default 位置复制到新位置
Chef cookbook - copy complete directory from files/default location in cookbook to a new location
我是 Chef 的初学者。任何人都可以建议是否有办法将食谱的 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
目录。
不太可能,因为 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
我面临着类似的问题,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"
]
但这对我来说用处不大
我是 Chef 的初学者。任何人都可以建议是否有办法将食谱的 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
目录。
不太可能,因为 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
我面临着类似的问题,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"
]
但这对我来说用处不大