set the default in OPTIONS for TOWER_URL_BASE to the request hostname

see: #5470
This commit is contained in:
Ryan Petrello
2017-02-22 10:56:48 -05:00
parent 9e2e119022
commit 94ad12ab0d
3 changed files with 17 additions and 2 deletions

View File

@@ -67,7 +67,10 @@ class Metadata(metadata.SimpleMetadata):
# Indicate if a field has a default value. # Indicate if a field has a default value.
# FIXME: Still isn't showing all default values? # FIXME: Still isn't showing all default values?
try: 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: except serializers.SkipField:
pass pass
@@ -167,6 +170,10 @@ class Metadata(metadata.SimpleMetadata):
return actions return actions
def determine_metadata(self, request, view): 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) metadata = super(Metadata, self).determine_metadata(request, view)
# Add version number in which view was added to Tower. # Add version number in which view was added to Tower.

View File

@@ -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',)) url = reverse('api:setting_singleton_detail', args=('system',))
response = get(url, user=admin, expect=200) response = get(url, user=admin, expect=200)
assert not response.data['LICENSE'] assert not response.data['LICENSE']
Setting.objects.create(key='TOWER_URL_BASE', value='https://towerhost')
Setting.objects.create(key='LICENSE', value=enterprise_license) Setting.objects.create(key='LICENSE', value=enterprise_license)
response = get(url, user=admin, expect=200) response = get(url, user=admin, expect=200)
assert response.data['LICENSE'] 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'] 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 @pytest.mark.django_db
def test_jobs_settings(get, put, patch, delete, admin): def test_jobs_settings(get, put, patch, delete, admin):
url = reverse('api:setting_singleton_detail', args=('jobs',)) url = reverse('api:setting_singleton_detail', args=('jobs',))

View File

@@ -861,7 +861,7 @@ ORG_ADMINS_CAN_SEE_ALL_USERS = True
TOWER_ADMIN_ALERTS = True TOWER_ADMIN_ALERTS = True
# Note: This setting may be overridden by database settings. # Note: This setting may be overridden by database settings.
TOWER_URL_BASE = "https://towerhost" TOWER_URL_BASE = ""
TOWER_SETTINGS_MANIFEST = {} TOWER_SETTINGS_MANIFEST = {}