Ruby 厨师配方文件在匹配后编辑插入线,如果不匹配则插入线
我想用厨师食谱编辑文件。 该文件现在显示为Ruby 厨师配方文件在匹配后编辑插入线,如果不匹配则插入线,ruby,chef-infra,chef-recipe,cookbook,Ruby,Chef Infra,Chef Recipe,Cookbook,我想用厨师食谱编辑文件。 该文件现在显示为 [attribute1] foo=bar [attribute2] .... 我想把它改成: [attribute1] foo=bar newfoo=newbar [attribute2] .... 因此,基本上,如果文件中不存在一行,我想添加一行,并且我想在该文件的特定行之后添加它 我在Class:Chef::Util::FileEdit下找到了两个选项,这两个选项在这里可能很有用匹配后插入行和不匹配时插入行。但是我想要一个可以同时执行这两个操作
[attribute1]
foo=bar
[attribute2]
....
我想把它改成:
[attribute1]
foo=bar
newfoo=newbar
[attribute2]
....
因此,基本上,如果文件中不存在一行,我想添加一行,并且我想在该文件的特定行之后添加它
我在Class:Chef::Util::FileEdit
下找到了两个选项,这两个选项在这里可能很有用匹配后插入行
和不匹配时插入行
。但是我想要一个可以同时执行这两个操作的选项。如果我在匹配后使用insert\u line,\u,它在第一次运行时有效,但在下一次运行时,即使文件中已经有行,它也会继续添加行。如果文件中不存在行,但我想在该文件的特定行之后添加行,则在文件末尾添加行
我对厨师的食谱有点陌生。有没有解决上述问题的方法?请不要使用FileEdit。它是一个内部API,不用于公共用途。您需要的是行
食谱,特别是替换或添加
自定义资源。请确保非常小心地创建regexp
一般来说,我们不推荐这种管理方式,因为它非常脆弱,很容易被不相关的变化打破。更好的选择是使用模板
资源或类似资源以聚合方式管理整个文件。我建议不要编辑文件,而是覆盖它们。您应该在cookbook中创建一个模板或文件,然后使用template
或cookbook\u file
资源在机器上用cookbook中的文件覆盖该文件
您的配置文件类似于,因此您也可以使用gem从json(数据包)或类似以下属性生成此文件:
chef_gem 'toml-rb' do
compile_time false
end
file '/path/to/file.conf' do
content( lazy do
require 'toml'
"# This file is managed by Chef\n" +
TOML.dump( my_json )
end )
end