Fix up migration path

These settings aren't available during the initial database migration so
we'll use the defaults when bootstrapping the database
This commit is contained in:
Matthew Jones
2015-12-17 13:13:12 -05:00
parent b59e4d8111
commit 74c06cfc92

View File

@@ -1,9 +1,14 @@
# Copyright (c) 2015 Ansible, Inc.. # Copyright (c) 2015 Ansible, Inc..
# All Rights Reserved. # All Rights Reserved.
import logging
from django.conf import settings as django_settings from django.conf import settings as django_settings
from django.db.utils import ProgrammingError
from awx.main.models.configuration import TowerSettings from awx.main.models.configuration import TowerSettings
logger = logging.getLogger('awx.main.conf')
class TowerConfiguration(object): class TowerConfiguration(object):
# TODO: Caching so we don't have to hit the database every time for settings # TODO: Caching so we don't have to hit the database every time for settings
@@ -11,14 +16,20 @@ class TowerConfiguration(object):
settings_manifest = django_settings.TOWER_SETTINGS_MANIFEST settings_manifest = django_settings.TOWER_SETTINGS_MANIFEST
if key not in settings_manifest: if key not in settings_manifest:
raise AttributeError("Tower Setting with key '{0}' is not defined in the manifest".format(key)) raise AttributeError("Tower Setting with key '{0}' is not defined in the manifest".format(key))
default_value = settings_manifest[key]['default']
ts = TowerSettings.objects.filter(key=key) ts = TowerSettings.objects.filter(key=key)
if not ts.exists(): try:
try: if not ts.exists():
val_actual = getattr(django_settings, key) try:
except AttributeError: val_actual = getattr(django_settings, key)
val_actual = settings_manifest[key]['default'] except AttributeError:
return val_actual val_actual = default_value
return ts[0].value_converted return val_actual
return ts[0].value_converted
except ProgrammingError, e:
# Database is not available yet, usually during migrations so lets use the default
logger.debug("Database settings not available yet, using defaults ({0})".format(e))
return default_value
def __setattr__(self, key, value): def __setattr__(self, key, value):
settings_manifest = django_settings.TOWER_SETTINGS_MANIFEST settings_manifest = django_settings.TOWER_SETTINGS_MANIFEST