mirror of
https://github.com/ansible/awx.git
synced 2026-05-19 14:57:39 -02:30
Avoid recursive include of DEFAULT_SETTINGS, add sanity test (#13236)
* Avoid recursive include of DEFAULT_SETTINGS, add sanity test to avoid similar surprises * Implement review comments for more clear code order and readability * Clarify comment about order of app name, which is last in order so that it can modify user settings
This commit is contained in:
@@ -1,8 +1,31 @@
|
|||||||
from split_settings.tools import include
|
from split_settings.tools import include
|
||||||
|
|
||||||
|
|
||||||
|
LOCAL_SETTINGS = (
|
||||||
|
'ALLOWED_HOSTS',
|
||||||
|
'BROADCAST_WEBSOCKET_PORT',
|
||||||
|
'BROADCAST_WEBSOCKET_VERIFY_CERT',
|
||||||
|
'BROADCAST_WEBSOCKET_PROTOCOL',
|
||||||
|
'BROADCAST_WEBSOCKET_SECRET',
|
||||||
|
'DATABASES',
|
||||||
|
'DEBUG',
|
||||||
|
'NAMED_URL_GRAPH',
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_postprocess_auth_basic_enabled():
|
def test_postprocess_auth_basic_enabled():
|
||||||
locals().update({'__file__': __file__})
|
locals().update({'__file__': __file__})
|
||||||
|
|
||||||
include('../../../settings/defaults.py', scope=locals())
|
include('../../../settings/defaults.py', scope=locals())
|
||||||
assert 'awx.api.authentication.LoggedBasicAuthentication' in locals()['REST_FRAMEWORK']['DEFAULT_AUTHENTICATION_CLASSES']
|
assert 'awx.api.authentication.LoggedBasicAuthentication' in locals()['REST_FRAMEWORK']['DEFAULT_AUTHENTICATION_CLASSES']
|
||||||
|
|
||||||
|
|
||||||
|
def test_default_settings():
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
|
for k in dir(settings):
|
||||||
|
if k not in settings.DEFAULTS_SNAPSHOT or k in LOCAL_SETTINGS:
|
||||||
|
continue
|
||||||
|
default_val = getattr(settings.default_settings, k, None)
|
||||||
|
snapshot_val = settings.DEFAULTS_SNAPSHOT[k]
|
||||||
|
assert default_val == snapshot_val, f'Setting for {k} does not match shapshot:\nsnapshot: {snapshot_val}\ndefault: {default_val}'
|
||||||
|
|||||||
@@ -62,19 +62,6 @@ DEBUG_TOOLBAR_CONFIG = {'ENABLE_STACKTRACES': True}
|
|||||||
SYSTEM_UUID = '00000000-0000-0000-0000-000000000000'
|
SYSTEM_UUID = '00000000-0000-0000-0000-000000000000'
|
||||||
INSTALL_UUID = '00000000-0000-0000-0000-000000000000'
|
INSTALL_UUID = '00000000-0000-0000-0000-000000000000'
|
||||||
|
|
||||||
# Store a snapshot of default settings at this point before loading any
|
|
||||||
# customizable config files.
|
|
||||||
DEFAULTS_SNAPSHOT = {}
|
|
||||||
this_module = sys.modules[__name__]
|
|
||||||
for setting in dir(this_module):
|
|
||||||
if setting == setting.upper():
|
|
||||||
DEFAULTS_SNAPSHOT[setting] = copy.deepcopy(getattr(this_module, setting))
|
|
||||||
|
|
||||||
# If there is an `/etc/tower/settings.py`, include it.
|
|
||||||
# If there is a `/etc/tower/conf.d/*.py`, include them.
|
|
||||||
include(optional('/etc/tower/settings.py'), scope=locals())
|
|
||||||
include(optional('/etc/tower/conf.d/*.py'), scope=locals())
|
|
||||||
|
|
||||||
BASE_VENV_PATH = "/var/lib/awx/venv/"
|
BASE_VENV_PATH = "/var/lib/awx/venv/"
|
||||||
AWX_VENV_PATH = os.path.join(BASE_VENV_PATH, "awx")
|
AWX_VENV_PATH = os.path.join(BASE_VENV_PATH, "awx")
|
||||||
|
|
||||||
@@ -105,11 +92,28 @@ AWX_CALLBACK_PROFILE = True
|
|||||||
AWX_DISABLE_TASK_MANAGERS = False
|
AWX_DISABLE_TASK_MANAGERS = False
|
||||||
# ======================!!!!!!! FOR DEVELOPMENT ONLY !!!!!!!=================================
|
# ======================!!!!!!! FOR DEVELOPMENT ONLY !!!!!!!=================================
|
||||||
|
|
||||||
from .application_name import set_application_name
|
# Store a snapshot of default settings at this point before loading any
|
||||||
|
# customizable config files.
|
||||||
|
this_module = sys.modules[__name__]
|
||||||
|
local_vars = dir(this_module)
|
||||||
|
DEFAULTS_SNAPSHOT = {} # define after we save local_vars so we do not snapshot the snapshot
|
||||||
|
for setting in local_vars:
|
||||||
|
if setting.isupper():
|
||||||
|
DEFAULTS_SNAPSHOT[setting] = copy.deepcopy(getattr(this_module, setting))
|
||||||
|
|
||||||
set_application_name(DATABASES, CLUSTER_HOST_ID)
|
del local_vars # avoid temporary variables from showing up in dir(settings)
|
||||||
|
del this_module
|
||||||
|
#
|
||||||
|
###############################################################################################
|
||||||
|
#
|
||||||
|
# Any settings defined after this point will be marked as as a read_only database setting
|
||||||
|
#
|
||||||
|
################################################################################################
|
||||||
|
|
||||||
del set_application_name
|
# If there is an `/etc/tower/settings.py`, include it.
|
||||||
|
# If there is a `/etc/tower/conf.d/*.py`, include them.
|
||||||
|
include(optional('/etc/tower/settings.py'), scope=locals())
|
||||||
|
include(optional('/etc/tower/conf.d/*.py'), scope=locals())
|
||||||
|
|
||||||
# If any local_*.py files are present in awx/settings/, use them to override
|
# If any local_*.py files are present in awx/settings/, use them to override
|
||||||
# default settings for development. If not present, we can still run using
|
# default settings for development. If not present, we can still run using
|
||||||
@@ -123,3 +127,11 @@ try:
|
|||||||
except ImportError:
|
except ImportError:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
# The below runs AFTER all of the custom settings are imported
|
||||||
|
# because conf.d files will define DATABASES and this should modify that
|
||||||
|
from .application_name import set_application_name
|
||||||
|
|
||||||
|
set_application_name(DATABASES, CLUSTER_HOST_ID)
|
||||||
|
|
||||||
|
del set_application_name
|
||||||
|
|||||||
@@ -47,17 +47,21 @@ AWX_ISOLATION_SHOW_PATHS = [
|
|||||||
|
|
||||||
# Store a snapshot of default settings at this point before loading any
|
# Store a snapshot of default settings at this point before loading any
|
||||||
# customizable config files.
|
# customizable config files.
|
||||||
|
this_module = sys.modules[__name__]
|
||||||
|
local_vars = dir(this_module)
|
||||||
|
DEFAULTS_SNAPSHOT = {} # define after we save local_vars so we do not snapshot the snapshot
|
||||||
|
for setting in local_vars:
|
||||||
|
if setting.isupper():
|
||||||
|
DEFAULTS_SNAPSHOT[setting] = copy.deepcopy(getattr(this_module, setting))
|
||||||
|
|
||||||
|
del local_vars # avoid temporary variables from showing up in dir(settings)
|
||||||
|
del this_module
|
||||||
#
|
#
|
||||||
###############################################################################################
|
###############################################################################################
|
||||||
#
|
#
|
||||||
# Any settings defined after this point will be marked as as a read_only database setting
|
# Any settings defined after this point will be marked as as a read_only database setting
|
||||||
#
|
#
|
||||||
################################################################################################
|
################################################################################################
|
||||||
DEFAULTS_SNAPSHOT = {}
|
|
||||||
this_module = sys.modules[__name__]
|
|
||||||
for setting in dir(this_module):
|
|
||||||
if setting == setting.upper():
|
|
||||||
DEFAULTS_SNAPSHOT[setting] = copy.deepcopy(getattr(this_module, setting))
|
|
||||||
|
|
||||||
# Load settings from any .py files in the global conf.d directory specified in
|
# Load settings from any .py files in the global conf.d directory specified in
|
||||||
# the environment, defaulting to /etc/tower/conf.d/.
|
# the environment, defaulting to /etc/tower/conf.d/.
|
||||||
@@ -98,8 +102,8 @@ except IOError:
|
|||||||
else:
|
else:
|
||||||
raise
|
raise
|
||||||
|
|
||||||
# The below runs AFTER all of the custom settings are imported.
|
# The below runs AFTER all of the custom settings are imported
|
||||||
|
# because conf.d files will define DATABASES and this should modify that
|
||||||
from .application_name import set_application_name
|
from .application_name import set_application_name
|
||||||
|
|
||||||
set_application_name(DATABASES, CLUSTER_HOST_ID) # NOQA
|
set_application_name(DATABASES, CLUSTER_HOST_ID) # NOQA
|
||||||
|
|||||||
Reference in New Issue
Block a user