Search code examples
rubychef-infracidr

use Chef file.insert_line_if_no_match method for CIDR address


I am trying to use file.insert_line_if_no_match for CIDR address:

attributes/default.rb:

default["chefclustercidr"]["ip"] = "a.b.c.d/24"

recipe/default.rb

ruby_block "chef-backend.rb" do
block do
  file = Chef::Util::FileEdit.new("/etc/chef-backend/chef-backend.rb")
  file.insert_line_if_no_match("/publish_address/" , "publish_address i#{node['chefclusterbe1']['ip']}")
  file.insert_line_if_no_match("/postgresql/" , "postgresql.md5_auth_cidr_addresses = ["samehost", "samenet", "#{node['chefclustercidr']['ip']}/24"]")
  file.write_file
  end
end

but getting ruby syntax error $ruby -c default.rb

default.rb:95: syntax error, unexpected tIDENTIFIER, expecting ')'
th_cidr_addresses = ["samehost", "samenet","#{node['chefclus
                              ^
default.rb:95: syntax error, unexpected tIDENTIFIER, expecting keyword_end
resses = ["samehost", "samenet","#{node['chefclustercidr']['
                              ^
default.rb:99: syntax error, unexpected keyword_end, expecting end-of-input

Solution

  • FileEdit is an internal class and using it from recipe code is NOT SUPPORTED. Do not use it. Period.

    That said, the problem is you have unescaped double quotes in your string.