summaryrefslogtreecommitdiffstats
path: root/test/integration/targets/collections/collection_root_user/ansible_collections/testns/testcoll/plugins/action/plugin_lookup.py
blob: 3fa41e8f5f7b171cd6a4aa792a52f153675192d4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type

from ansible.plugins.action import ActionBase
from ansible.plugins import loader


class ActionModule(ActionBase):
    TRANSFERS_FILES = False
    _VALID_ARGS = frozenset(('type', 'name'))

    def run(self, tmp=None, task_vars=None):
        if task_vars is None:
            task_vars = dict()

        result = super(ActionModule, self).run(None, task_vars)

        plugin_type = self._task.args.get('type')
        name = self._task.args.get('name')

        result = dict(changed=False, collection_list=self._task.collections)

        if all([plugin_type, name]):
            attr_name = '{0}_loader'.format(plugin_type)

            typed_loader = getattr(loader, attr_name, None)

            if not typed_loader:
                return (dict(failed=True, msg='invalid plugin type {0}'.format(plugin_type)))

            context = typed_loader.find_plugin_with_context(name, collection_list=self._task.collections)

            if not context.resolved:
                result['plugin_path'] = None
                result['redirect_list'] = []
            else:
                result['plugin_path'] = context.plugin_resolved_path
                result['redirect_list'] = context.redirect_list

        return result