如何声明其内容取决于cookbook文件的Chef文件资源?

JB.*_*JB. 3 chef-infra

我需要一个文件fileC部署这是其它两个文件的串联fileAfileB.在我当前的设置中,所有三个文件都在cookbook中,声明为Cookbook文件资源.

但感觉多余.我想将更大的文件声明为另外两个文件的函数.

什么fileC时候第一次需要,我通过声明文件资源的内容为"运气好" IO.read(file1) + IO.read(file2).但是,一旦配方被部署到一个新的节点出现故障,因为fileAfileB不存在在编译时.

我试图访问底层Ruby对象的有关可以部署cookbook的信息.但是我看的越多,我就越不相信我的Chef/Ruby知识水平是可能的.资源↔供应商差距似乎太宽.

我想避免使用这种cat fileA fileB >fileC解决方案,原因如下:将来,我可能需要从需要A/B的节点中删除需要C的节点.

有关如何解决冗余问题的任何想法?

Jos*_*ald 5

如果你使用了模板,我想你可以逃脱它.例如

template "/var/tmp/fileC.txt" do
   source "fileC.erb"
   variables(:included_files => ["/var/tmp/file1.txt", "/var/tmp/file2.txt"])
end
Run Code Online (Sandbox Code Playgroud)

然后在你的模板中

<% @included_files.each { |file|  %>
<%= File.read(file) %>    
<% } %>
Run Code Online (Sandbox Code Playgroud)