diff options
author | jessicamack <jmack@redhat.com> | 2024-12-16 17:05:21 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-12-16 17:05:21 +0100 |
commit | c1f0a831ffd36ba1288db0959825c7b50ddb27a7 (patch) | |
tree | 06c05d1d2a6d268d2c5aaad02e7043587fe9eba7 | |
parent | Do not fast forward rrule if count is set (#15696) (diff) | |
download | awx-c1f0a831ffd36ba1288db0959825c7b50ddb27a7.tar.xz awx-c1f0a831ffd36ba1288db0959825c7b50ddb27a7.zip |
Pull the correct collection plugin for the product (#15658)
* pull the correct collection plugin for the product
* remove unused import and logging line
* refactor code to load entry points
* reformat method
* lint fix
* renames for clarity and a lint fix
* move function to utils
* move the rest of the code into load_inventory_plugins
* temp - confirm that tests will pass
* revert change caught in merge
* change back requirement
the related PR has been merged
-rw-r--r-- | awx/main/apps.py | 16 | ||||
-rw-r--r-- | awx/main/models/inventory.py | 5 | ||||
-rw-r--r-- | awx/main/tests/functional/test_inventory_source_injectors.py | 3 | ||||
-rw-r--r-- | awx/main/utils/common.py | 5 |
4 files changed, 20 insertions, 9 deletions
diff --git a/awx/main/apps.py b/awx/main/apps.py index 8853a2f50d..3d98963747 100644 --- a/awx/main/apps.py +++ b/awx/main/apps.py @@ -2,11 +2,13 @@ import os from django.apps import AppConfig from django.utils.translation import gettext_lazy as _ -from awx.main.utils.common import bypass_in_test +from awx.main.utils.common import bypass_in_test, load_all_entry_points_for from awx.main.utils.migration import is_database_synchronized from awx.main.utils.named_url_graph import _customize_graph, generate_graph from awx.conf import register, fields +from awx_plugins.interfaces._temporary_private_licensing_api import detect_server_product_name + class MainConfig(AppConfig): name = 'awx.main' @@ -60,6 +62,17 @@ class MainConfig(AppConfig): def load_credential_types_feature(self): return self._load_credential_types_feature() + def load_inventory_plugins(self): + from awx.main.models.inventory import InventorySourceOptions + + is_awx = detect_server_product_name() == 'AWX' + extra_entry_point_groups = () if is_awx else ('inventory.supported',) + entry_points = load_all_entry_points_for(['inventory', *extra_entry_point_groups]) + + for entry_point_name, entry_point in entry_points.items(): + cls = entry_point.load() + InventorySourceOptions.injectors[entry_point_name] = cls + def ready(self): super().ready() @@ -71,3 +84,4 @@ class MainConfig(AppConfig): if not os.environ.get('AWX_SKIP_CREDENTIAL_TYPES_DISCOVER', None): self.load_credential_types_feature() self.load_named_url_feature() + self.load_inventory_plugins() diff --git a/awx/main/models/inventory.py b/awx/main/models/inventory.py index d14e81543d..7c8758f40b 100644 --- a/awx/main/models/inventory.py +++ b/awx/main/models/inventory.py @@ -24,7 +24,6 @@ from django.db.models import Q from rest_framework.exceptions import ParseError from ansible_base.lib.utils.models import prevent_search -from awx_plugins.inventory.plugins import PluginFileInjector # AWX from awx.api.versioning import reverse @@ -1402,7 +1401,3 @@ class CustomInventoryScript(CommonModelNameNotUnique): def get_absolute_url(self, request=None): return reverse('api:inventory_script_detail', kwargs={'pk': self.pk}, request=request) - - -for cls in PluginFileInjector.__subclasses__(): - InventorySourceOptions.injectors[cls.__name__] = cls diff --git a/awx/main/tests/functional/test_inventory_source_injectors.py b/awx/main/tests/functional/test_inventory_source_injectors.py index c7ab3d440c..4c01c0a4fb 100644 --- a/awx/main/tests/functional/test_inventory_source_injectors.py +++ b/awx/main/tests/functional/test_inventory_source_injectors.py @@ -196,9 +196,6 @@ def create_reference_data(source_dir, env, content): @pytest.mark.django_db @pytest.mark.parametrize('this_kind', discover_available_cloud_provider_plugin_names()) def test_inventory_update_injected_content(product_name, this_kind, inventory, fake_credential_factory, mock_me): - if this_kind.endswith('_supported'): - this_kind = this_kind[:-10] - ExecutionEnvironment.objects.create(name='Control Plane EE', managed=True) ExecutionEnvironment.objects.create(name='Default Job EE', managed=False) diff --git a/awx/main/utils/common.py b/awx/main/utils/common.py index 2e517952e5..2f45bb7c8f 100644 --- a/awx/main/utils/common.py +++ b/awx/main/utils/common.py @@ -18,6 +18,7 @@ import contextlib import tempfile import functools from importlib.metadata import version as _get_version +from importlib.metadata import entry_points, EntryPoint # Django from django.core.exceptions import ObjectDoesNotExist, FieldDoesNotExist @@ -1215,3 +1216,7 @@ def cleanup_new_process(func): def unified_job_class_to_event_table_name(job_class): return f'main_{job_class().event_class.__name__.lower()}' + + +def load_all_entry_points_for(entry_point_subsections: list[str], /) -> dict[str, EntryPoint]: + return {ep.name: ep for entry_point_category in entry_point_subsections for ep in entry_points(group=f'awx_plugins.{entry_point_category}')} |