You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mitogen/tests/ansible/lib/action/mitogen_action_script.py

57 lines
1.3 KiB
Python

# 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()