From 243e27c7a9b88751e0fad9423f628ba9ae208641 Mon Sep 17 00:00:00 2001 From: Peter Braun Date: Tue, 2 Sep 2025 14:47:32 +0200 Subject: [PATCH] Aap 49452 - support CONTROLLER_OPTIONAL_API_URLPATTERN_PREFIX in awxkit (#16085) * fix: awxkit should honor CONTROLLER_OPTIONAL_API_URLPATTERN_PREFIX if defined * add unit tests * update tests --- awxkit/awxkit/config.py | 4 +++- awxkit/test/cli/test_config.py | 39 ++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/awxkit/awxkit/config.py b/awxkit/awxkit/config.py index 81c4d7938b..7a973d3535 100644 --- a/awxkit/awxkit/config.py +++ b/awxkit/awxkit/config.py @@ -32,4 +32,6 @@ config.assume_untrusted = config.get('assume_untrusted', True) config.client_connection_attempts = int(os.getenv('AWXKIT_CLIENT_CONNECTION_ATTEMPTS', 5)) config.prevent_teardown = to_bool(os.getenv('AWXKIT_PREVENT_TEARDOWN', False)) config.use_sessions = to_bool(os.getenv('AWXKIT_SESSIONS', False)) -config.api_base_path = os.getenv('AWXKIT_API_BASE_PATH', '/api/') +config.api_base_path = os.getenv('CONTROLLER_OPTIONAL_API_URLPATTERN_PREFIX', '/api/') +config.api_base_path = os.getenv('AWXKIT_API_BASE_PATH', config.api_base_path) +config.gateway_base_path = os.getenv('AWXKIT_GATEWAY_BASE_PATH', '/api/gateway/') diff --git a/awxkit/test/cli/test_config.py b/awxkit/test/cli/test_config.py index cbbb6c555c..2a7ade16ec 100644 --- a/awxkit/test/cli/test_config.py +++ b/awxkit/test/cli/test_config.py @@ -106,3 +106,42 @@ def test_config_file(): assert config.credentials.default.username == 'mary' assert config.credentials.default.password == 'secret' + + +def test_controller_optional_api_urlpattern_prefix(): + """Tests that CONTROLLER_OPTIONAL_API_URLPATTERN_PREFIX is honored when set.""" + cli = CLI() + env = {'CONTROLLER_OPTIONAL_API_URLPATTERN_PREFIX': '/custom/api/'} + cli.parse_args(['awx'], env=env) + + # Update config with environment variable since config.py reads from os.getenv at import time + config.api_base_path = env.get('CONTROLLER_OPTIONAL_API_URLPATTERN_PREFIX', '/api/') + config.api_base_path = env.get('AWXKIT_API_BASE_PATH', config.api_base_path) + + assert config.api_base_path == '/custom/api/' + + +def test_awxkit_api_base_path_fallback(): + """Tests that AWXKIT_API_BASE_PATH overrides CONTROLLER_OPTIONAL_API_URLPATTERN_PREFIX.""" + cli = CLI() + env = {'CONTROLLER_OPTIONAL_API_URLPATTERN_PREFIX': '/custom/api/', 'AWXKIT_API_BASE_PATH': '/override/api/'} + cli.parse_args(['awx'], env=env) + + # Update config with environment variable since config.py reads from os.getenv at import time + config.api_base_path = env.get('CONTROLLER_OPTIONAL_API_URLPATTERN_PREFIX', '/api/') + config.api_base_path = env.get('AWXKIT_API_BASE_PATH', config.api_base_path) + + assert config.api_base_path == '/override/api/' + + +def test_api_base_path_default(): + """Tests that api_base_path defaults to /api/ when no environment variables are set.""" + cli = CLI() + env = {} + cli.parse_args(['awx'], env=env) + + # Reset config to default when no environment variables are set + config.api_base_path = env.get('CONTROLLER_OPTIONAL_API_URLPATTERN_PREFIX', '/api/') + config.api_base_path = env.get('AWXKIT_API_BASE_PATH', config.api_base_path) + + assert config.api_base_path == '/api/'