use optional api prefix in collection if set as environ vairable (#15205)

* use optional api prefix if set as environ variable

* Different default depending on collection type
This commit is contained in:
Harshith u
2024-05-29 11:54:05 -04:00
committed by GitHub
parent af6ccdbde5
commit 776b661fb3

View File

@@ -17,7 +17,7 @@ import time
import re import re
from json import loads, dumps from json import loads, dumps
from os.path import isfile, expanduser, split, join, exists, isdir 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: try:
@@ -148,9 +148,10 @@ class ControllerModule(AnsibleModule):
# Make sure we start with /api/vX # Make sure we start with /api/vX
if not endpoint.startswith("/"): if not endpoint.startswith("/"):
endpoint = "/{0}".format(endpoint) endpoint = "/{0}".format(endpoint)
prefix = self.url_prefix.rstrip("/") hostname_prefix = self.url_prefix.rstrip("/")
if not endpoint.startswith(prefix + "/api/"): api_path = self.api_path()
endpoint = prefix + "/api/v2{0}".format(endpoint) if not endpoint.startswith(hostname_prefix + api_path):
endpoint = hostname_prefix + f"{api_path}v2{endpoint}"
if not endpoint.endswith('/') and '?' not in endpoint: if not endpoint.endswith('/') and '?' not in endpoint:
endpoint = "{0}/".format(endpoint) endpoint = "{0}/".format(endpoint)
@@ -603,6 +604,14 @@ class ControllerAPIModule(ControllerModule):
status_code = response.status status_code = response.status
return {'status_code': status_code, 'json': response_json} 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): def authenticate(self, **kwargs):
if self.username and self.password: if self.username and self.password:
# Attempt to get a token from /api/v2/tokens/ by giving it our username/password combo # 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", "scope": "write",
} }
# Preserve URL prefix # 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 # Post to the tokens endpoint with baisc auth to try and get a token
api_token_url = (self.url._replace(path=endpoint)).geturl() api_token_url = (self.url._replace(path=endpoint)).geturl()
@@ -1002,7 +1011,7 @@ class ControllerAPIModule(ControllerModule):
if self.authenticated and self.oauth_token_id: if self.authenticated and self.oauth_token_id:
# Attempt to delete our current token from /api/v2/tokens/ # Attempt to delete our current token from /api/v2/tokens/
# Post to the tokens endpoint with baisc auth to try and get a token # 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 api_token_url = (self.url._replace(path=endpoint, query=None)).geturl() # in error cases, fail_json exists before exception handling
try: try: