Ruby Chef配方中的多个文件替换

时间:2016-12-19 10:01:37

标签: ruby chef

主厨新手在这里,也知道一点Ruby。

我不知道为什么我不能在我正在处理的样本食谱中的文件中写两次。

我的配置文件中有两个模式,我需要替换但是这样做 没有更新这两种模式;只有一个是更新而不是另一个。

ruby_block " Update Config File " do
  block do
    file_name = config_file
    text = File.read(file_name)
    File.write(file_name, text.gsub(search_value, replace_value))
    File.write(file_name, text.gsub(second_search_value, second_replace_value))
  end
  only_if { File.exists?("#{config_file}") }
end

我知道我可以做另一个ruby_block,但我只是想知道我缺少什么来使这项工作。因为我正在编辑同一个文件,所以我只想要一个ruby_block而不是两个。

1 个答案:

答案 0 :(得分:2)

让我们一行一行:

  1. text = File.read(file_name)
  2. 很简单,我们**将文件内容读入text

    1. File.write(file_name, text.gsub(search_value, replace_value))
    2. 我们在原始g中执行了sub小叶text咒语,并将其写入文件

      1. File.write(file_name, text.gsub(second_search_value, second_replace_value))
      2. 我们在原始g中执行了sub小叶text咒语,并将其写入文件

        当你写3时,你当然会覆盖2中的变化。

        一种可能的方法是gsub两次,最后只写一次,但实际上不这样做,做这种改变是脆弱的,随时可能会中断,或者在每次运行时插入更改并打破你的配置。
        让Chef用template

        管理整个文件