'handler for package operations'

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

    self._supports_check_mode = True
    self._supports_async = True
    result = super(ActionModule, self).run(tmp, task_vars)
    module = self._task.args.get('use', 'auto')
    if (module == 'auto'):
        try:
            if self._task.delegate_to:
                module = self._templar.template(("{{hostvars['%s']['ansible_facts']['ansible_pkg_mgr']}}" % self._task.delegate_to))
            else:
                module = self._templar.template('{{ansible_facts["ansible_pkg_mgr"]}}')
        except:
            pass
    if (module == 'auto'):
        facts = self._execute_module(module_name='setup', module_args=dict(filter='ansible_pkg_mgr', gather_subset='!all'), task_vars=task_vars)
        display.debug(('Facts    %s' % facts))
        module = facts.get('ansible_facts', {}).get('ansible_pkg_mgr', 'auto')
    if (module != 'auto'):
        if (module not in self._shared_loader_obj.module_loader):
            result['failed'] = True
            result['msg'] = ('Could    not    find    a    module    for    %s.' % module)
        else:
            new_module_args = self._task.args.copy()
            if ('use' in new_module_args):
                del new_module_args['use']
            display.vvvv(('Running    %s' % module))
            result.update(self._execute_module(module_name=module, module_args=new_module_args, task_vars=task_vars, wrap_async=self._task.async))
    else:
        result['failed'] = True
        result['msg'] = 'Could    not    detect    which    package    manager    to    use.    Try    gathering    facts    or    setting    the    "use"    option.'
    return result
