3

我是厨师和食谱的新手。我正在创建一本食谱,我想在文件末尾附加一些内容(文本)。目前,我正在使用:

file "#{node['dir']}/#{params[:name]}.txt" do
   content "my full text"
end

但我必须始终在“内容”中附加旧内容,因为它会覆盖。还有另一种附加内容的方法吗?

谢谢你

4

3 回答 3

2

请不要使用直接 Ruby 来执行此操作。Chef 中有一个名为FileEdit的内置类将为您处理此问题。具体来说,您可能想要insert_line_if_no_match.

于 2013-12-19T18:58:41.217 回答
1

如果你愿意,你可以使用直接的 ruby​​ 代码吗

open('myfile.out', 'a') do |f|
f << "and again ...\n"
end

如果您愿意,可以在 ruby​​_block 提供程序中完成。此链接描述了如何使用该类型的块

另一种选择是读入您的文件内容,然后将其与当前块中的更新字符串连接起来?

于 2013-12-13T10:48:57.250 回答
1

如果您只使用 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

所以想法是在加载时构建字符串,将该字符串传递给厨师,让厨师在收敛期间的正确阶段更改内容。

于 2014-08-15T05:40:00.917 回答