mitogen-hq / mitogen

Distributed self-replicating programs in Python
https://mitogen.networkgenomics.com/
BSD 3-Clause "New" or "Revised" License
2.32k stars 197 forks source link

kubectl connection: AttributeError: module 'ansible.plugins.loader' has no attribute 'CONNECTION_OPTIONS' #880

Open moreati opened 2 years ago

moreati commented 2 years ago

Fixing version comparison bugs in #878 has revealed failing tests, including one for kubectl. I believe our loading of ansible plugins is incorrectly implemented for Ansible collections, and or the remapping that Ansible does to allow loading a plugin from a collection, that was previously in Ansible itself.

PLAY [integration/stub_connections/kubectl.yml] ************************************************************************

TASK [custom_python_detect_environment ] *******************************************************************************
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: AttributeError: module 'ansible.plugins.loader' has no attribute 'CONNECTION_OPTIONS'
fatal: [target-debian9-1]: FAILED! => 
  msg: Unexpected failure during module execution.
  stdout: ''
moreati commented 2 years ago

A summarized pprint() of the pertinent variables from ansible_mitogen.plugins.connection.mitogen_kubectl

'_class': get_with_context_result(object=<class 'ansible_collections.community.kubernetes.plugins.connection.kubectl.Connection'>, plugin_load_context=<ansible.plugins.loader.PluginLoadContext object at 0x7faa3f3ca2b0>),
'_class.__module__': 'ansible.plugins.loader',
'kubectl': <module 'ansible.plugins.loader' from '/.../ansible/plugins/loader.py'>,
'sys.modules': {
    ...
    'ansible': <module 'ansible' from '/.../ansible/__init__.py'>,
    ...
    'ansible.plugins': <module 'ansible.plugins' from '/.../ansible/plugins/__init__.py'>,
    'ansible.plugins.action': <module 'ansible.plugins.action' from '/.../ansible/plugins/action/__init__.py'>,
    ...
    'ansible.plugins.action.mitogen_action_script': <module 'ansible.plugins.action.mitogen_action_script' from '/home/alex/src/mitogen2/tests/ansible/lib/action/mitogen_action_script.py'>,
    'ansible.plugins.action.mitogen_get_stack': <module 'ansible.plugins.action.mitogen_get_stack' from '/home/alex/src/mitogen2/ansible_mitogen/plugins/action/mitogen_get_stack.py'>,
    'ansible.plugins.action.mitogen_shutdown_all': <module 'ansible.plugins.action.mitogen_shutdown_all' from '/home/alex/src/mitogen2/tests/ansible/lib/action/mitogen_shutdown_all.py'>,
    ...
    'ansible.plugins.connection': <module 'ansible.plugins.connection' from '/.../ansible/plugins/connection/__init__.py'>,
    'ansible.plugins.connection.local': <module 'ansible.plugins.connection.local' from '/.../ansible/plugins/connection/local.py'>,
    'ansible.plugins.connection.mitogen_kubectl': <module 'ansible.plugins.connection.mitogen_kubectl' from '/home/alex/src/mitogen2/ansible_mitogen/plugins/connection/mitogen_kubectl.py'>,
    'ansible.plugins.connection.mitogen_ssh': <module 'ansible.plugins.connection.mitogen_ssh' from '/home/alex/src/mitogen2/ansible_mitogen/plugins/connection/mitogen_ssh.py'>,
    ...
    'ansible_collections': <module 'ansible_collections' from '<ansible_synthetic_collection_package>'>,
    ...
    'ansible_collections.community': <module 'ansible_collections.community' from '<ansible_synthetic_collection_package>'>,
    ...
    'ansible_collections.community.kubernetes': <module 'ansible_collections.community.kubernetes' from '/.../ansible_collections/community/kubernetes/__synthetic__'>,
    'ansible_collections.community.kubernetes.plugins': <module 'ansible_collections.community.kubernetes.plugins' from '/.../ansible_collections/community/kubernetes/plugins/__synthetic__'>,
    'ansible_collections.community.kubernetes.plugins.connection': <module 'ansible_collections.community.kubernetes.plugins.connection' from '/.../ansible_collections/community/kubernetes/plugins/connection/__synthetic__'>,
    'ansible_collections.community.kubernetes.plugins.connection.kubectl': <module 'ansible_collections.community.kubernetes.plugins.connection.kubectl' from '/.../ansible_collections/community/kubernetes/plugins/connection/kubectl.py'>,
    ...
}