|
|
|
#!/usr/bin/env python
|
|
|
|
|
|
|
|
import difflib
|
|
|
|
import logging
|
|
|
|
import re
|
|
|
|
import subprocess
|
|
|
|
import tempfile
|
|
|
|
|
|
|
|
|
|
|
|
LOG = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
suffixes = [
|
|
|
|
'-m custom_bash_old_style_module',
|
|
|
|
'-m custom_bash_want_json_module',
|
|
|
|
'-m custom_binary_producing_json',
|
|
|
|
'-m custom_binary_producing_junk',
|
|
|
|
'-m custom_binary_single_null',
|
|
|
|
'-m custom_python_json_args_module',
|
|
|
|
'-m custom_python_new_style_module',
|
|
|
|
'-m custom_python_want_json_module',
|
|
|
|
'-m setup',
|
|
|
|
]
|
|
|
|
|
|
|
|
fixups = [
|
|
|
|
('Shared connection to localhost closed\\.(\r\n)?', ''), # TODO
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
def fixup(s):
|
|
|
|
for regex, to in fixups:
|
|
|
|
s = re.sub(regex, to, s, re.DOTALL|re.M)
|
|
|
|
return s
|
|
|
|
|
|
|
|
|
|
|
|
def run(s):
|
|
|
|
LOG.debug('running: %r', s)
|
|
|
|
with tempfile.NamedTemporaryFile() as fp:
|
|
|
|
# https://www.systutorials.com/docs/linux/man/1-ansible-playbook/#lbAG
|
|
|
|
returncode = subprocess.call(s, stdout=fp, stderr=fp, shell=True)
|
|
|
|
fp.write('\nReturn code: %s\n' % (returncode,))
|
|
|
|
fp.seek(0)
|
|
|
|
return fp.read()
|
|
|
|
|
|
|
|
|
|
|
|
logging.basicConfig(level=logging.DEBUG)
|
|
|
|
|
|
|
|
for suffix in suffixes:
|
|
|
|
ansible = run('ansible localhost %s' % (suffix,))
|
|
|
|
mitogen = run('ANSIBLE_STRATEGY=mitogen ansible localhost %s' % (suffix,))
|
|
|
|
|
|
|
|
diff = list(difflib.unified_diff(
|
|
|
|
a=fixup(ansible).splitlines(),
|
|
|
|
b=fixup(mitogen).splitlines(),
|
|
|
|
fromfile='ansible-output.txt',
|
|
|
|
tofile='mitogen-output.txt',
|
|
|
|
))
|
|
|
|
if diff:
|
|
|
|
print('++ differ! suffix: %r' % (suffix,))
|
|
|
|
for line in diff:
|
|
|
|
print(line)
|
|
|
|
print
|
|
|
|
print
|