используйте метод Chef file.insert_line_if_no_match для адреса CIDR - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь использовать file.insert_line_if_no_match для CIDR-адреса:

атрибуты / default.rb:

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

рецепт / 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

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Вместо insert_line_if_no_match вы можете справиться с этим другим способом, используя bash и grep. Я добавил путь к другому вопросу, вы можете посмотреть здесь

вот ресурс 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

вам может понадобиться запустить стиль кулинарии на этом ^

0 голосов
/ 29 августа 2018

FileEdit является внутренним классом и использует его из кода рецепта НЕ ПОДДЕРЖИВАЕТСЯ . Не используйте его. Период.

Тем не менее, проблема в том, что в вашей строке есть двойные кавычки без экранирования.

...