From e3611487202611fbd829c0d802ccd4877d51eb74 Mon Sep 17 00:00:00 2001 From: Brian McLaughlin Date: Wed, 5 Jun 2024 08:35:11 -0400 Subject: [PATCH] Add logic to retrieve Galaxy api prefix when resource_provider is present --- .../api_prefix_with_resource_provider.yml | 4 +++ plugins/module_utils/ah_api_module.py | 31 ++++++++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 changelogs/fragments/api_prefix_with_resource_provider.yml diff --git a/changelogs/fragments/api_prefix_with_resource_provider.yml b/changelogs/fragments/api_prefix_with_resource_provider.yml new file mode 100644 index 00000000..5d2bb36f --- /dev/null +++ b/changelogs/fragments/api_prefix_with_resource_provider.yml @@ -0,0 +1,4 @@ +--- +minor_changes: + - Retrieves Galaxy api prefix when resource_provider is present, defaults to existing behavior. +... diff --git a/plugins/module_utils/ah_api_module.py b/plugins/module_utils/ah_api_module.py index 0eda08b2..20c7d43a 100644 --- a/plugins/module_utils/ah_api_module.py +++ b/plugins/module_utils/ah_api_module.py @@ -130,7 +130,7 @@ def __init__(self, argument_spec, direct_params=None, **kwargs): self.session = Request(validate_certs=self.verify_ssl, headers=self.headers, follow_redirects=True, timeout=self.request_timeout) # Define the API paths - self.galaxy_path_prefix = "/api/{prefix}".format(prefix=self.path_prefix.strip("/")) + self.galaxy_path_prefix = self.get_galaxy_path_prefix() self.ui_path_prefix = "{galaxy_prefix}/_ui/v1".format(galaxy_prefix=self.galaxy_path_prefix) self.plugin_path_prefix = "{galaxy_prefix}/v3/plugin".format(galaxy_prefix=self.galaxy_path_prefix) self.authenticate() @@ -486,6 +486,35 @@ def exit_json(self, **kwargs): self.logout() super(AHAPIModule, self).exit_json(**kwargs) + def get_galaxy_path_prefix(self): + """Return the automation hub/galaxy path prefix + + :return: '/api/{prefix}' unless behind resource_server wherein the api path prefix may differ. + resource_server expected response structure: + { + "description": "", + "apis": { + "galaxy": "/api/galaxy/" + } + } + :rtype: String + """ + + url = self._build_url(prefix="api", endpoint=None, query_params=None) + + try: + response = self.make_request("GET", url) + except AHAPIModuleError as e: + self.fail_json(msg="Error while contacting server for Galaxy path prefix: {error} \nurl: {url}".format(error=e, url=url)) + if response["status_code"] == 404: + return "/api/{prefix}".format(prefix=self.path_prefix.strip("/")) + else: + try: + rs_prefix = response["json"]["apis"]["galaxy"] + except KeyError as e: + self.fail_json(msg="Error while getting Galaxy api path prefix: {error}".format(error=e)) + return rs_prefix.strip("/") + def get_server_version(self): """Return the automation hub/galaxy server version.