Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 厨师配方文件在匹配后编辑插入线,如果不匹配则插入线_Ruby_Chef Infra_Chef Recipe_Cookbook - Fatal编程技术网

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