我是厨师和食谱的新手。我正在创建一本食谱,我想在文件末尾附加一些内容(文本)。目前,我正在使用:
file "#{node['dir']}/#{params[:name]}.txt" do
content "my full text"
end
但我必须始终在“内容”中附加旧内容,因为它会覆盖。还有另一种附加内容的方法吗?
谢谢你
我是厨师和食谱的新手。我正在创建一本食谱,我想在文件末尾附加一些内容(文本)。目前,我正在使用:
file "#{node['dir']}/#{params[:name]}.txt" do
content "my full text"
end
但我必须始终在“内容”中附加旧内容,因为它会覆盖。还有另一种附加内容的方法吗?
谢谢你
请不要使用直接 Ruby 来执行此操作。Chef 中有一个名为FileEdit的内置类将为您处理此问题。具体来说,您可能想要insert_line_if_no_match
.
如果你愿意,你可以使用直接的 ruby 代码吗
open('myfile.out', 'a') do |f|
f << "and again ...\n"
end
如果您愿意,可以在 ruby_block 提供程序中完成。此链接描述了如何使用该类型的块
另一种选择是读入您的文件内容,然后将其与当前块中的更新字符串连接起来?
如果您只使用 ruby 代码,那么在检查任何依赖项之前,厨师将在您的食谱加载时编写内容。绝对不会在收敛期间。
红宝石和厨师的组合就可以了。
file = File.open(#{node['dir']}/#{params[:name]}.txt, "rb")
existingContents = file.read
newContents = existingContents + "my full text"
file "#{node['dir']}/#{params[:name]}.txt" do
content newContents
end
所以想法是在加载时构建字符串,将该字符串传递给厨师,让厨师在收敛期间的正确阶段更改内容。