ansible_mitogen: Fix errant ModuleNotFoundError blacklist exceptions

Current module whitelist/blacklist behaviour is to reject any module not on
the whitelist if the whitelist is populated. Adding `ansible` and
`ansible_mitogen` to the whitelist effectively blocklisted every other Python
module/package, negating much of the benefit of Mitogen.

Fixes #1011
pull/1012/head
Alex Willmer 1 year ago
parent ec212a10d8
commit 823ee9023d

@ -33,13 +33,9 @@ jobs:
# NOTE: this hangs when ran in Ubuntu 18.04 # NOTE: this hangs when ran in Ubuntu 18.04
Van_27_210: Van_27_210:
tox.env: py27-mode_localhost-ansible2.10 tox.env: py27-mode_localhost-ansible2.10-strategy_linear
STRATEGY: linear
ANSIBLE_SKIP_TAGS: resource_intensive
Van_27_4: Van_27_4:
tox.env: py27-mode_localhost-ansible4 tox.env: py27-mode_localhost-ansible4-strategy_linear
STRATEGY: linear
ANSIBLE_SKIP_TAGS: resource_intensive
- job: Linux - job: Linux
pool: pool:

@ -185,9 +185,6 @@ def _setup_responder(responder):
Configure :class:`mitogen.master.ModuleResponder` to only permit Configure :class:`mitogen.master.ModuleResponder` to only permit
certain packages, and to generate custom responses for certain modules. certain packages, and to generate custom responses for certain modules.
""" """
responder.whitelist_prefix('ansible')
responder.whitelist_prefix('ansible_mitogen')
# Ansible 2.3 is compatible with Python 2.4 targets, however # Ansible 2.3 is compatible with Python 2.4 targets, however
# ansible/__init__.py is not. Instead, executor/module_common.py writes # ansible/__init__.py is not. Instead, executor/module_common.py writes
# out a 2.4-compatible namespace package for unknown reasons. So we # out a 2.4-compatible namespace package for unknown reasons. So we

@ -29,6 +29,8 @@
tags: playbook_semantics tags: playbook_semantics
- import_playbook: process/all.yml - import_playbook: process/all.yml
tags: process tags: process
- import_playbook: responder/all.yml
tags: responder
- import_playbook: runner/all.yml - import_playbook: runner/all.yml
tags: runner tags: runner
- import_playbook: ssh/all.yml - import_playbook: ssh/all.yml

@ -0,0 +1 @@
- import_playbook: imports.yml

@ -0,0 +1,23 @@
- name: integration/responder/imports.yml
hosts: test-targets
tasks:
- meta: end_play
when: not is_mitogen
- name: Import pure Python module via Ansible module
mitogen_plain_old_add:
x: 2
y: 2
register: mitogen_plain_old_add_result
- name: Import binary module via Responder
custom_python_run_script:
script: |
import lxml
register: binary_module_result
- name: Import missing module via Responder
custom_python_run_script:
script: |
import does_not_exist
register: missing_module_result

@ -0,0 +1,36 @@
#!/usr/bin/env python
DOCUMENTATION = '''
module: mitogen_plain_old_add
options:
x: {type: int, required: true}
y: {type: int, required: true}
author:
- Alex Willmer (@moreati)
'''
RETURN = '''
total: {type: int, returned: always, sample: 42}
'''
from ansible.module_utils.basic import AnsibleModule
import plain_old_module
def main():
module = AnsibleModule(
argument_spec={
'x': {'type': int, 'required': True},
'x': {'type': int, 'required': True},
},
supports_check_mode=True,
)
result = {
'changed': False,
'total': plain_old_module.add(module.params['x'], module.params['y']),
}
module.exit_json(**result)
if __name__ == '__main__':
main()

@ -35,6 +35,8 @@ os.environ['PATH'] = '%s%s%s' % (
os.environ['PATH'], os.environ['PATH'],
) )
os.environ['PYTHONPATH'] = os.path.join(GIT_BASEDIR, 'tests', 'data')
extra = { extra = {
'is_mitogen': os.environ.get('ANSIBLE_STRATEGY', '').startswith('mitogen'), 'is_mitogen': os.environ.get('ANSIBLE_STRATEGY', '').startswith('mitogen'),
'git_basedir': GIT_BASEDIR, 'git_basedir': GIT_BASEDIR,

Loading…
Cancel
Save