    # File lib/chef/provider.rb, line 90
        def run_action(action=nil)
          @action = action unless action.nil?

          # TODO: it would be preferable to get the action to be executed in the
          # constructor...

          # user-defined LWRPs may include unsafe load_current_resource methods that cannot be run in whyrun mode
          if !whyrun_mode? || whyrun_supported?
            load_current_resource
            events.resource_current_state_loaded(@new_resource, @action, @current_resource)
          elsif whyrun_mode? && !whyrun_supported?
            events.resource_current_state_load_bypassed(@new_resource, @action, @current_resource)
          end

          define_resource_requirements
          process_resource_requirements

          # user-defined providers including LWRPs may
          # not include whyrun support - if they don't support it
          # we can't execute any actions while we're running in
          # whyrun mode. Instead we 'fake' whyrun by documenting that
          # we can't execute the action.
          # in non-whyrun mode, this will still cause the action to be
          # executed normally.
          if whyrun_supported? && !requirements.action_blocked?(@action)
            send("action_#{@action}")
          elsif whyrun_mode?
            events.resource_bypassed(@new_resource, @action, self)
          else
            send("action_#{@action}")
          end

          set_updated_status

          cleanup_after_converge
        end