Может ли кто-нибудь сказать лучший способ заменить строку в Chef

Текущий код рецепта шеф-повара

ruby_block 'replace_line' do
  block do
    file = Chef::Util::FileEdit.new(common_conf)
    file.search_file_replace_line(/fs.type.*/, 'fs.type='+fs_type)
    file.write_file
  end
  only_if { File.exist?(common_conf) }
end

Я получаю следующее предупреждение:

 Running handlers complete
 [0m[2017-09-01T03:22:36-05:00] INFO: Report handlers complete

Deprecated features used!
 Cloning resource attributes for ruby_block[replace_line] from prior resource
[0mPrevious ruby_block[replace_line]: /var/chef/cache/cookbooks/spark_deployer/recipes/execution_component.rb:61:in `from_file'
 [0mCurrent  ruby_block[replace_line]: /var/chef/cache/cookbooks/spark_deployer/recipes/execution_component.rb:70:in `from_file' at 1 location:[0m
     - /var/chef/cache/cookbooks/spark_deployer/recipes/execution_component.rb:70:in `from_file'[0m
   See https://docs.chef.io/deprecations_resource_cloning.html for further details

Может ли кто-нибудь помочь мне написать приведенный выше код лучше?


person Dixon Joseph Dalmeida    schedule 01.09.2017    source источник


Ответы (2)


Вы пытались

Дополнительные сведения см. на странице https://docs.chef.io/deprecations_resource_cloning.html.

как вам ясно сказало сообщение об ошибке? Если да, то вы, вероятно, видели, что до этого рецепта у вас был еще один с точно таким же названием: 'replace_line'. Чтобы решить эту проблему, вы должны переименовать этот рецепт (и, возможно, все ссылки на него) во что-то уникальное, например, скажем:

ruby_block 'replace_line_fs_type' do
person Aleksei Matiushkin    schedule 01.09.2017

Поскольку вы спрашиваете о «лучшем способе», вы можете обратиться к line поваренной книге. Он предоставляет несколько примитивов для редактирования строк, таких как:

append_if_no_line "make sure a line is in some file" do
  path "/some/file"
  line "HI THERE I AM STRING"
end

Лучшим решением было бы управлять всем этим файлом в Chef и либо встроить шаблон в свою книгу рецептов, либо скопировать файл из книги рецептов, либо записать весь файл как часть файла ruby_block. Частично управляемые файлы могут быть опасны.

Кроме того, как говорится в другом ответе, вы полагаетесь на клонирование ресурсов, поскольку у вас есть несколько ресурсов одного и того же имя. Даже если вы переключитесь на кулинарную книгу линии, вы также должны убедиться, что все имена ваших ресурсов уникальны (или объединить все изменения в один ресурс).

person Martin    schedule 01.09.2017
comment
Просто заметка на будущее, поскольку в Chef 13 клонирование ресурсов больше не актуально, поэтому предупреждения исчезли. - person coderanger; 04.09.2017