使用 Chef file.insert_line_if_no_match 方法获取 CIDR 地址
use Chef file.insert_line_if_no_match method for CIDR address
我正在尝试使用 file.insert_line_if_no_match
作为 CIDR 地址:
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
但出现 ruby 语法错误
$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
FileEdit 是一个内部 class,不支持 在配方代码中使用它。不要使用它。期间.
就是说,问题是您的字符串中有未转义的双引号。
您可以使用bash 和grep 以另一种方式处理它,而不是insert_line_if_no_match
。我在另一个问题中添加了方法你可以看看here
这是 bash 资源,我通常仅在没有匹配项时才将其附加到文件:
bash 'append line(s) to file if it doesnt exist' do
user 'user'
code <<-EOS
cat >>/home/file <<EOL
*.* @@172.167.189.67:514
EOL
EOS
not_if "grep -q 172.167.189.67 /home/file"
end
你可能需要 运行 烹饪风格 ^
我正在尝试使用 file.insert_line_if_no_match
作为 CIDR 地址:
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
但出现 ruby 语法错误 $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
FileEdit 是一个内部 class,不支持 在配方代码中使用它。不要使用它。期间.
就是说,问题是您的字符串中有未转义的双引号。
您可以使用bash 和grep 以另一种方式处理它,而不是insert_line_if_no_match
。我在另一个问题中添加了方法你可以看看here
这是 bash 资源,我通常仅在没有匹配项时才将其附加到文件:
bash 'append line(s) to file if it doesnt exist' do
user 'user'
code <<-EOS
cat >>/home/file <<EOL
*.* @@172.167.189.67:514
EOL
EOS
not_if "grep -q 172.167.189.67 /home/file"
end
你可能需要 运行 烹饪风格 ^