diff --git a/changelogs/fragments/3660-a_module-tombstone.yml b/changelogs/fragments/3660-a_module-tombstone.yml new file mode 100644 index 0000000000..d2408d4a26 --- /dev/null +++ b/changelogs/fragments/3660-a_module-tombstone.yml @@ -0,0 +1,2 @@ +bugfixes: + - "a_module test plugin - fix crash when testing a module name that was tombstoned (https://github.com/ansible-collections/community.general/pull/3660)." diff --git a/plugins/test/a_module.py b/plugins/test/a_module.py index ad57cda792..36c13ffabd 100644 --- a/plugins/test/a_module.py +++ b/plugins/test/a_module.py @@ -7,6 +7,11 @@ __metaclass__ = type from ansible.plugins.loader import action_loader, module_loader +try: + from ansible.errors import AnsiblePluginRemovedError +except ImportError: + AnsiblePluginRemovedError = Exception + def a_module(term): """ @@ -14,14 +19,17 @@ def a_module(term): - 'community.general.ufw' is community.general.a_module - 'community.general.does_not_exist' is not community.general.a_module """ - for loader in (action_loader, module_loader): - data = loader.find_plugin(term) - # Ansible 2.9 returns a tuple - if isinstance(data, tuple): - data = data[0] - if data is not None: - return True - return False + try: + for loader in (action_loader, module_loader): + data = loader.find_plugin(term) + # Ansible 2.9 returns a tuple + if isinstance(data, tuple): + data = data[0] + if data is not None: + return True + return False + except AnsiblePluginRemovedError: + return False class TestModule(object): diff --git a/tests/integration/targets/test_a_module/runme.yml b/tests/integration/targets/test_a_module/runme.yml index 9f7618341a..1175bef20c 100644 --- a/tests/integration/targets/test_a_module/runme.yml +++ b/tests/integration/targets/test_a_module/runme.yml @@ -23,3 +23,15 @@ # Local collection module (that exist or not) - "'testns.testcoll.collection_module' is community.general.a_module" - "'testns.testcoll.foobar' is not community.general.a_module" + + - name: Test a_module in case of routing + assert: + that: + # Redirected module + - "'ufw' is community.general.a_module" + # Redirected module where target collection does not exist + # (the target collection must not have been installed in CI!) + - "'onyx_pfc_interface' is not community.general.a_module" + # Tombstoned module + - "'community.general.docker_image_facts' is not community.general.a_module" + when: ansible_version.string is version('2.10.0', '>=')