File: mitogen_action_script.py

package info (click to toggle)
python-mitogen 0.3.26-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 6,456 kB
  • sloc: python: 22,134; sh: 183; makefile: 74; perl: 19; ansic: 18
file content (56 lines) | stat: -rw-r--r-- 1,281 bytes parent folder | download | duplicates (4)
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# I am an Ansible action plug-in. I run the script provided in the parameter in
# the context of the action.

import sys

from ansible.plugins.action import ActionBase

try:
    long
except NameError:
    long = int

try:
    unicode
except NameError:
    unicode = str

try:
    bytes
except NameError:
    bytes = str


def execute(s, gbls, lcls):
    if sys.version_info > (3,):
        exec(s, gbls, lcls)
    else:
        exec('exec s in gbls, lcls')


class ActionModule(ActionBase):
    def run(self, tmp=None, task_vars=None):
        super(ActionModule, self).run(tmp=tmp, task_vars=task_vars)

        lcls = {}
        # Capture keys to remove later, including any crap Python adds.
        execute('pass', globals(), lcls)
        lcls['self'] = self
        # Old mitogen_action_script used explicit result dict.
        lcls['result'] = lcls

        pre_keys = list(lcls)
        execute(self._task.args['script'], globals(), lcls)

        for key in pre_keys:
            del lcls[key]
        for key in list(lcls):
            if not isinstance(lcls[key],
                              (unicode, bytes, int, long, dict, list, tuple,
                              bool)):
                del lcls[key]
        return lcls


if __name__ == '__main__':
    main()