'Action Plugins should implement this method to perform their
tasks.  Everything else in this base class is a helper method for the
action plugin to do that.
:kwarg tmp: Temporary directory.  Sometimes an action plugin sets up
a temporary directory and then calls another module.  This parameter
allows us to reuse the same directory for both.
:kwarg task_vars: The variables (host vars, group vars, config vars,
etc) associated with this task.
:returns: dictionary of results from the module
Implementors of action modules may find the following variables especially useful:
* Module parameters.  These are stored in self._task.args'

@abstractmethod
def run(self, tmp=None, task_vars=None):

    result = {}
    if (self._task.async and (not self._supports_async)):
        raise AnsibleActionFail('async    is    not    supported    for    this    task.')
    elif (self._play_context.check_mode and (not self._supports_check_mode)):
        raise AnsibleActionSkip('check    mode    is    not    supported    for    this    task.')
    elif (self._task.async and self._play_context.check_mode):
        raise AnsibleActionFail('check    mode    and    async    cannot    be    used    on    same    task.')
    return result
