How to add a django Configuration Setting
- First, determine whether your setting should be a dynamically modifiable django admin model setting instead? If so, it is stored in a django model and available via the django Admin interface - and not explained in this document. Since django-admin-model settings do not require code changes when they need to be changed, they are preferable over code-based django settings (the subject of this wiki). However, code-based django settings should still be used for:
- security-sensitive settings
- settings that you anticipate will not change (often) for a given openedX deployment: e.g., one-time configuration for storage, external servers, etc.
- Determine whether your setting is security-sensitive.
- Does it contain a secret key, private key, IP address, etc?
- If so, it is an Auth setting.
- Otherwise, it is an Env setting.
- Add your setting to your envs python file so the setting can be read from the environment. For edx-platform, it would be located in:
- https://github.com/edx/edx-platform/blob/master/lms/envs/aws.py, or
https://github.com/edx/edx-platform/blob/master/cms/envs/aws.py
MY_SETTINGS = ENV_TOKENS.get('MY_SETTINGS', MY_DEFAULT_VALUE)
- Update the playbook for the appropriate role of the edx/configuration repo.
Add a default at the top of the file: https://github.com/edx/configuration/blob/master/playbooks/roles/edxapp/defaults/main.yml
EDXAPP_MY_SETTINGS: MY_DEFAULT_VALUE
Add a mapping between the ansible name and the name used in your python file.
MY_SETTINGS: "{{ EDXAPP_MY_SETTINGS }}"
- To provide overrides of your setting for edx.org deployments, update the YAML files in the following locations: