Как перехватить операцию Chef::Util::FileEdit.new в режиме почему запуска
Я хочу иметь собственный ресурс для редактирования файла, как это делает ресурс "crontab".
Ниже мой пользовательский ресурс, который выполняет эту работу, но в режиме "почему выполняется" он не показывает, какую строку он будет добавлять или удалять.
resource_name :super_tab
provides :super_tab
property :command, String, name_property: true
property :path, String, required: true
property :allowed_user, String, required: true
property :uid, String, default: 'root'
action :add do
ruby_block "edit super.tab" do
block do
supertab = Chef::Util::FileEdit.new("/etc/super.tab")
supertab.search_file_delete_line(/^#{command} /)
supertab.insert_line_if_no_match(/^#{command} /, "#{command} #{path} #{allowed_user} uid=#{uid}")
supertab.write_file
end
end
end
1 ответ
1) Не используйте FileEdit. Это внутренний API в Chef и не считается пригодным для публичного использования.
2) Особая проблема заключается в том, что ресурсы ruby_block не запускаются во время Whyrun, поскольку у нас нет способа предотвратить их побочные эффекты.