Skip to content

Commit

Permalink
Allow selecting enabled plugins
Browse files Browse the repository at this point in the history
fixes TBA
  • Loading branch information
mdellweg committed Feb 27, 2024
1 parent a373dff commit 3ccf102
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 13 deletions.
1 change: 1 addition & 0 deletions CHANGES/+select_plugins.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Added ``ENABLED_PLUGINS`` option to allow selecting installed plugins to be enabled.
41 changes: 28 additions & 13 deletions pulpcore/app/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,10 @@

from contextlib import suppress
from importlib import import_module
from importlib.metadata import entry_points
from pkg_resources import iter_entry_points
from logging import getLogger
from pathlib import Path
from pkg_resources import iter_entry_points

from cryptography.fernet import Fernet
from django.core.exceptions import ImproperlyConfigured
Expand Down Expand Up @@ -81,14 +82,6 @@
"pulpcore.app",
]

# Enumerate the installed Pulp plugins during the loading process for use in the status API
INSTALLED_PULP_PLUGINS = []

for entry_point in iter_entry_points("pulpcore.plugin"):
plugin_app_config = entry_point.load()
INSTALLED_PULP_PLUGINS.append(entry_point.module_name)
INSTALLED_APPS.append(plugin_app_config)

# Optional apps that help with development, or augment Pulp in some non-critical way
OPTIONAL_APPS = [
"crispy_forms",
Expand Down Expand Up @@ -314,7 +307,7 @@

# HERE STARTS DYNACONF EXTENSION LOAD (Keep at the very bottom of settings.py)
# Read more at https://dynaconf.readthedocs.io/en/latest/guides/django.html
from dynaconf import DjangoDynaconf, Validator # noqa
from dynaconf import DjangoDynaconf, Dynaconf, Validator # noqa

# Validators
content_origin_validator = Validator(
Expand Down Expand Up @@ -380,14 +373,36 @@
)


def load_plugin_config_hook(settings):
# Enumerate the installed Pulp plugins during the loading process for use in the status API
ENABLED_PLUGINS = getattr(settings, "ENABLED_PLUGINS", None)
installed_plugins = []
installed_plugin_apps = []

for entry_point in entry_points()["pulpcore.plugin"]:
if ENABLED_PLUGINS is not None and entry_point.name not in ENABLED_PLUGINS:
continue
installed_plugins.append(entry_point.module)
installed_plugin_apps.append(entry_point.load())

plugin_settings = Dynaconf(
PRELOAD_FOR_DYNACONF=[f"{module}.app.settings" for module in installed_plugins]
)

data = {"dynaconf_merge": True}
data.update(plugin_settings.as_dict())
data.update(settings.as_dict())
data["INSTALLED_APPS"].extend(installed_plugin_apps)
data["INSTALLED_APPS"].append("dynaconf_merge_unique")
return data


settings = DjangoDynaconf(
__name__,
ENVVAR_PREFIX_FOR_DYNACONF="PULP",
ENV_SWITCHER_FOR_DYNACONF="PULP_ENV",
PRELOAD_FOR_DYNACONF=[
"{}.app.settings".format(plugin_name) for plugin_name in INSTALLED_PULP_PLUGINS
],
ENVVAR_FOR_DYNACONF="PULP_SETTINGS",
post_hooks=(load_plugin_config_hook,),
load_dotenv=False,
validators=[
api_root_validator,
Expand Down
5 changes: 5 additions & 0 deletions staging_docs/admin/learn/settings.md
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,11 @@ The password for Redis.
Pulp defines the following settings itself:


### ENABLED_PLUGINS

An optional list of plugin names.
If provided, Pulp will limit loading plugins to this list.
If omitted, Pulp will load all installed plugins.

### API_ROOT

Expand Down

0 comments on commit 3ccf102

Please sign in to comment.