    # File lib/chef/resource.rb, line 427
        def run_action(action)
          if Chef::Config[:verbose_logging] || Chef::Log.level == :debug
            # This can be noisy
            Chef::Log.info("Processing #{self} action #{action} (#{defined_at})")
          end

          # ensure that we don't leave @updated_by_last_action set to true
          # on accident
          updated_by_last_action(false)

          begin
            return if should_skip?

            provider = Chef::Platform.provider_for_resource(self)
            provider.load_current_resource
            provider.send("action_#{action}")
          rescue => e
            if ignore_failure
              Chef::Log.error("#{self} (#{defined_at}) had an error: #{e.message}")
            else
              Chef::Log.error("#{self} (#{defined_at}) has had an error")
              new_exception = e.exception("#{self} (#{defined_at}) had an error: #{e.class.name}: #{e.message}")
              new_exception.set_backtrace(e.backtrace)
              raise new_exception
            end
          end
        end