Как перехватить операцию 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, поскольку у нас нет способа предотвратить их побочные эффекты.

Другие вопросы по тегам