Add descriptions for plugin names (#15643)

* Add descriptions for plugin names

* Update serializers to display plugin and plugin description

* Add function to extract plugin name descriptions

* Add description for scm

* Conditionalize scm and file descriptions
This commit is contained in:
Lila Yasin 2024-11-25 09:20:22 -05:00 committed by GitHub
parent 790875ceef
commit 4bbcb34ae3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 33 additions and 2 deletions

View File

@ -2325,8 +2325,11 @@ class InventorySourceOptionsSerializer(BaseSerializer):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if 'source' in self.fields:
self.fields['source'].choices = load_combined_inventory_source_options()
source_options = load_combined_inventory_source_options()
self.fields['source'].choices = [(plugin, description) for plugin, description in source_options.items()]
def get_related(self, obj):
res = super(InventorySourceOptionsSerializer, self).get_related(obj)

View File

@ -43,6 +43,24 @@ def compute_cloud_inventory_sources() -> dict[str, str]:
return dict(zip(plugins, plugins), scm='scm', constructed='constructed')
@cache
def discover_available_cloud_provider_descriptions() -> dict[str, str]:
"""
Return a dictionary of cloud provider plugin descriptions
available.
:returns: Dictionary of plugin cloud descriptions.
:rtype: dict[str, str]
"""
from awx.main.models.inventory import InventorySourceOptions
plugin_description_list = [(plugin_name, plugin.plugin_description) for plugin_name, plugin in InventorySourceOptions.injectors.items()]
plugin_description = dict(plugin_description_list)
return plugin_description
@cache
def load_combined_inventory_source_options() -> dict[str, str]:
"""
@ -56,4 +74,14 @@ def load_combined_inventory_source_options() -> dict[str, str]:
plugins = compute_cloud_inventory_sources()
return dict(zip(plugins, plugins), file='file')
plugin_description = discover_available_cloud_provider_descriptions()
if 'scm' in plugins:
plugin_description['scm'] = 'Sourced from a Project'
if 'file' in plugins:
plugin_description['file'] = 'File-based inventory source'
result = {plugin: plugin_description.get(plugin, plugin) for plugin in plugins}
return result