diff options
-rw-r--r-- | awx_collection/plugins/module_utils/controller_api.py | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/awx_collection/plugins/module_utils/controller_api.py b/awx_collection/plugins/module_utils/controller_api.py index 758fcd1986..541639306a 100644 --- a/awx_collection/plugins/module_utils/controller_api.py +++ b/awx_collection/plugins/module_utils/controller_api.py @@ -17,7 +17,7 @@ import time import re from json import loads, dumps from os.path import isfile, expanduser, split, join, exists, isdir -from os import access, R_OK, getcwd, environ +from os import access, R_OK, getcwd, environ, getenv try: @@ -148,9 +148,10 @@ class ControllerModule(AnsibleModule): # Make sure we start with /api/vX if not endpoint.startswith("/"): endpoint = "/{0}".format(endpoint) - prefix = self.url_prefix.rstrip("/") - if not endpoint.startswith(prefix + "/api/"): - endpoint = prefix + "/api/v2{0}".format(endpoint) + hostname_prefix = self.url_prefix.rstrip("/") + api_path = self.api_path() + if not endpoint.startswith(hostname_prefix + api_path): + endpoint = hostname_prefix + f"{api_path}v2{endpoint}" if not endpoint.endswith('/') and '?' not in endpoint: endpoint = "{0}/".format(endpoint) @@ -603,6 +604,14 @@ class ControllerAPIModule(ControllerModule): status_code = response.status return {'status_code': status_code, 'json': response_json} + def api_path(self): + + default_api_path = "/api/" + if self._COLLECTION_TYPE != "awx": + default_api_path = "/api/controller/" + prefix = getenv('CONTROLLER_OPTIONAL_API_URLPATTERN_PREFIX', default_api_path) + return prefix + def authenticate(self, **kwargs): if self.username and self.password: # Attempt to get a token from /api/v2/tokens/ by giving it our username/password combo @@ -613,7 +622,7 @@ class ControllerAPIModule(ControllerModule): "scope": "write", } # Preserve URL prefix - endpoint = self.url_prefix.rstrip('/') + '/api/v2/tokens/' + endpoint = self.url_prefix.rstrip('/') + f'{self.api_path()}v2/tokens/' # Post to the tokens endpoint with baisc auth to try and get a token api_token_url = (self.url._replace(path=endpoint)).geturl() @@ -1002,7 +1011,7 @@ class ControllerAPIModule(ControllerModule): if self.authenticated and self.oauth_token_id: # Attempt to delete our current token from /api/v2/tokens/ # Post to the tokens endpoint with baisc auth to try and get a token - endpoint = self.url_prefix.rstrip('/') + '/api/v2/tokens/{0}/'.format(self.oauth_token_id) + endpoint = self.url_prefix.rstrip('/') + f'{self.api_path()}v2/tokens/{self.oauth_token_id}/' api_token_url = (self.url._replace(path=endpoint, query=None)).geturl() # in error cases, fail_json exists before exception handling try: |