diff --git a/awx/api/metadata.py b/awx/api/metadata.py index 380734e4a0..43510bec75 100644 --- a/awx/api/metadata.py +++ b/awx/api/metadata.py @@ -67,7 +67,10 @@ class Metadata(metadata.SimpleMetadata): # Indicate if a field has a default value. # FIXME: Still isn't showing all default values? try: - field_info['default'] = field.get_default() + default = field.get_default() + if not default and field.field_name == 'TOWER_URL_BASE': + default = '{}://{}'.format(self.request.scheme, self.request.get_host()) + field_info['default'] = default except serializers.SkipField: pass @@ -167,6 +170,10 @@ class Metadata(metadata.SimpleMetadata): return actions def determine_metadata(self, request, view): + # store request on self so we can use it to generate field defaults + # (such as TOWER_URL_BASE) + self.request = request + metadata = super(Metadata, self).determine_metadata(request, view) # Add version number in which view was added to Tower. diff --git a/awx/main/tests/functional/api/test_settings.py b/awx/main/tests/functional/api/test_settings.py index 5753841bd2..6322f354e7 100644 --- a/awx/main/tests/functional/api/test_settings.py +++ b/awx/main/tests/functional/api/test_settings.py @@ -30,6 +30,7 @@ def test_license_cannot_be_removed_via_system_settings(mock_no_license_file, get url = reverse('api:setting_singleton_detail', args=('system',)) response = get(url, user=admin, expect=200) assert not response.data['LICENSE'] + Setting.objects.create(key='TOWER_URL_BASE', value='https://towerhost') Setting.objects.create(key='LICENSE', value=enterprise_license) response = get(url, user=admin, expect=200) assert response.data['LICENSE'] @@ -44,6 +45,13 @@ def test_license_cannot_be_removed_via_system_settings(mock_no_license_file, get assert response.data['LICENSE'] +@pytest.mark.django_db +def test_url_base_defaults_to_request(options, admin): + # If TOWER_URL_BASE is not set, default to the Tower request hostname + resp = options(reverse('api:setting_singleton_detail', args=('system',)), user=admin, expect=200) + assert resp.data['actions']['PUT']['TOWER_URL_BASE']['default'] == 'http://testserver' + + @pytest.mark.django_db def test_jobs_settings(get, put, patch, delete, admin): url = reverse('api:setting_singleton_detail', args=('jobs',)) diff --git a/awx/settings/defaults.py b/awx/settings/defaults.py index 9890f7a468..f0e03c68e1 100644 --- a/awx/settings/defaults.py +++ b/awx/settings/defaults.py @@ -861,7 +861,7 @@ ORG_ADMINS_CAN_SEE_ALL_USERS = True TOWER_ADMIN_ALERTS = True # Note: This setting may be overridden by database settings. -TOWER_URL_BASE = "https://towerhost" +TOWER_URL_BASE = "" TOWER_SETTINGS_MANIFEST = {}