From 2108b69ff15cca7c9f44f08c77a9f33d1ca2cad1 Mon Sep 17 00:00:00 2001 From: Cory Lee Date: Fri, 1 Mar 2019 18:04:12 -0500 Subject: [PATCH] "Use single yaml config instead of two json configs" This reverts commit 8c805999e650c77e5b1b90d853cb14be6c308287. --- cms/envs/bok_choy.py | 3 + cms/envs/bok_choy.yml | 133 ++++++++++++++ cms/envs/bok_choy_docker.yml | 133 ++++++++++++++ cms/envs/production.py | 46 +++-- lms/envs/bok_choy.auth.json | 144 --------------- lms/envs/bok_choy.env.json | 148 --------------- lms/envs/bok_choy.py | 3 + lms/envs/bok_choy.yml | 161 +++++++++++++++++ lms/envs/bok_choy_docker.auth.json | 152 ---------------- lms/envs/bok_choy_docker.env.json | 148 --------------- lms/envs/bok_choy_docker.yml | 169 ++++++++++++++++++ lms/envs/production.py | 47 +++-- openedx/core/djangoapps/plugins/README.rst | 2 +- openedx/core/djangoapps/plugins/constants.py | 3 +- .../djangoapps/zendesk_proxy/settings/aws.py | 2 +- openedx/features/journals/settings/aws.py | 2 +- 16 files changed, 672 insertions(+), 624 deletions(-) create mode 100644 cms/envs/bok_choy.yml create mode 100644 cms/envs/bok_choy_docker.yml delete mode 100644 lms/envs/bok_choy.auth.json delete mode 100644 lms/envs/bok_choy.env.json create mode 100644 lms/envs/bok_choy.yml delete mode 100644 lms/envs/bok_choy_docker.auth.json delete mode 100644 lms/envs/bok_choy_docker.env.json create mode 100644 lms/envs/bok_choy_docker.yml diff --git a/cms/envs/bok_choy.py b/cms/envs/bok_choy.py index 14e4a21636..82975055f6 100644 --- a/cms/envs/bok_choy.py +++ b/cms/envs/bok_choy.py @@ -25,6 +25,9 @@ from openedx.core.release import RELEASE_LINE # and (b) that the files are the same in Jenkins as in local dev. os.environ['SERVICE_VARIANT'] = 'bok_choy_docker' if 'BOK_CHOY_HOSTNAME' in os.environ else 'bok_choy' os.environ['CONFIG_ROOT'] = path(__file__).abspath().dirname() +os.environ['STUDIO_CFG'] = str.format("{config_root}/{service_variant}.yml", + config_root=os.environ['CONFIG_ROOT'], + service_variant=os.environ['SERVICE_VARIANT']) from .production import * # pylint: disable=wildcard-import, unused-wildcard-import, wrong-import-position diff --git a/cms/envs/bok_choy.yml b/cms/envs/bok_choy.yml new file mode 100644 index 0000000000..4388bfa1c0 --- /dev/null +++ b/cms/envs/bok_choy.yml @@ -0,0 +1,133 @@ +# ingested bok_choy.env.json +# ingested bok_choy.auth.json +AWS_ACCESS_KEY_ID: '' +AWS_SECRET_ACCESS_KEY: '' +BUGS_EMAIL: bugs@example.com +BULK_EMAIL_DEFAULT_FROM_EMAIL: no-reply@example.com +CACHES: + celery: + BACKEND: django.core.cache.backends.memcached.MemcachedCache + KEY_FUNCTION: util.memcache.safe_key + KEY_PREFIX: integration_celery + LOCATION: ['localhost:11211'] + default: + BACKEND: django.core.cache.backends.memcached.MemcachedCache + KEY_FUNCTION: util.memcache.safe_key + KEY_PREFIX: sandbox_default + LOCATION: ['localhost:11211'] + general: + BACKEND: django.core.cache.backends.memcached.MemcachedCache + KEY_FUNCTION: util.memcache.safe_key + KEY_PREFIX: sandbox_general + LOCATION: ['localhost:11211'] + mongo_metadata_inheritance: + BACKEND: django.core.cache.backends.memcached.MemcachedCache + KEY_FUNCTION: util.memcache.safe_key + KEY_PREFIX: integration_mongo_metadata_inheritance + LOCATION: ['localhost:11211'] + staticfiles: + BACKEND: django.core.cache.backends.memcached.MemcachedCache + KEY_FUNCTION: util.memcache.safe_key + KEY_PREFIX: integration_static_files + LOCATION: ['localhost:11211'] +CELERY_ALWAYS_EAGER: true +CELERY_BROKER_HOSTNAME: localhost +CELERY_BROKER_PASSWORD: celery +CELERY_BROKER_TRANSPORT: amqp +CELERY_BROKER_USER: celery +CERT_QUEUE: certificates +CMS_BASE: localhost:8031 +CODE_JAIL: + limits: {REALTIME: 3, VMEM: 0} +COMMENTS_SERVICE_KEY: password +COMMENTS_SERVICE_URL: http://localhost:4567 +CONTACT_EMAIL: info@example.com +CONTENTSTORE: + DOC_STORE_CONFIG: + collection: modulestore + db: test + host: [localhost] + port: 27017 + ENGINE: xmodule.contentstore.mongo.MongoContentStore + OPTIONS: + db: test + host: [localhost] + port: 27017 +DATABASES: + default: {ENGINE: django.db.backends.mysql, HOST: localhost, NAME: edxtest, PASSWORD: '', + PORT: '3306', USER: root} + student_module_history: {ENGINE: django.db.backends.mysql, HOST: localhost, NAME: student_module_history_test, + PASSWORD: '', PORT: '3306', USER: root} +DEFAULT_FEEDBACK_EMAIL: feedback@example.com +DEFAULT_FROM_EMAIL: registration@example.com +DJFS: {aws_access_key_id: test, aws_secret_access_key: test, bucket: test, prefix: test, + type: s3fs} +DOC_STORE_CONFIG: + collection: modulestore + db: test + host: [localhost] + port: 27017 +EMAIL_BACKEND: django.core.mail.backends.smtp.EmailBackend +FEATURES: {AUTH_USE_OPENID_PROVIDER: true, CERTIFICATES_HTML_VIEW: true, CUSTOM_COURSES_EDX: true, + ENABLE_CONTENT_LIBRARIES: true, ENABLE_DISCUSSION_SERVICE: true, ENABLE_EXTENDED_COURSE_DETAILS: true, + ENABLE_GRADE_DOWNLOADS: true, ENABLE_SPECIAL_EXAMS: true, ENTRANCE_EXAMS: true, + MILESTONES_APP: true, PREVIEW_LMS_BASE: 'preview.localhost:8003', SHOW_HEADER_LANGUAGE_SELECTOR: true} +FEEDBACK_SUBMISSION_EMAIL: '' +GITHUB_REPO_ROOT: '** OVERRIDDEN **' +GRADES_DOWNLOAD: {BUCKET: edx-grades, ROOT_PATH: /tmp/edx-s3/grades, STORAGE_TYPE: localfs} +JWT_AUTH: {JWT_PRIVATE_SIGNING_JWK: '{"e": "AQAB", "d": "HIiV7KNjcdhVbpn3KT-I9n3JPf5YbGXsCIedmPqDH1d4QhBofuAqZ9zebQuxkRUpmqtYMv0Zi6ECSUqH387GYQF_XvFUFcjQRPycISd8TH0DAKaDpGr-AYNshnKiEtQpINhcP44I1AYNPCwyoxXA1fGTtmkKChsuWea7o8kytwU5xSejvh5-jiqu2SF4GEl0BEXIAPZsgbzoPIWNxgO4_RzNnWs6nJZeszcaDD0CyezVSuH9QcI6g5QFzAC_YuykSsaaFJhZ05DocBsLczShJ9Omf6PnK9xlm26I84xrEh_7x4fVmNBg3xWTLh8qOnHqGko93A1diLRCrKHOvnpvgQ", + "n": "o5cn3ljSRi6FaDEKTn0PS-oL9EFyv1pI7dRgffQLD1qf5D6sprmYfWWokSsrWig8u2y0HChSygR6Jn5KXBqQn6FpM0dDJLnWQDRXHLl3Ey1iPYgDSmOIsIGrV9ZyNCQwk03wAgWbfdBTig3QSDYD-sTNOs3pc4UD_PqAvU2nz_1SS2ZiOwOn5F6gulE1L0iE3KEUEvOIagfHNVhz0oxa_VRZILkzV-zr6R_TW1m97h4H8jXl_VJyQGyhMGGypuDrQ9_vaY_RLEulLCyY0INglHWQ7pckxBtI5q55-Vio2wgewe2_qYcGsnBGaDNbySAsvYcWRrqDiFyzrJYivodqTQ", + "q": "3T3DEtBUka7hLGdIsDlC96Uadx_q_E4Vb1cxx_4Ss_wGp1Loz3N3ZngGyInsKlmbBgLo1Ykd6T9TRvRNEWEtFSOcm2INIBoVoXk7W5RuPa8Cgq2tjQj9ziGQ08JMejrPlj3Q1wmALJr5VTfvSYBu0WkljhKNCy1KB6fCby0C9WE", + "p": "vUqzWPZnDG4IXyo-k5F0bHV0BNL_pVhQoLW7eyFHnw74IOEfSbdsMspNcPSFIrtgPsn7981qv3lN_staZ6JflKfHayjB_lvltHyZxfl0dvruShZOx1N6ykEo7YrAskC_qxUyrIvqmJ64zPW3jkuOYrFs7Ykj3zFx3Zq1H5568G0", + "kid": "BTZ9HA6K", "kty": "RSA"}', JWT_PUBLIC_SIGNING_JWK_SET: '{"keys": [{"kid": + "BTZ9HA6K", "e": "AQAB", "kty": "RSA", "n": "o5cn3ljSRi6FaDEKTn0PS-oL9EFyv1pI7dRgffQLD1qf5D6sprmYfWWokSsrWig8u2y0HChSygR6Jn5KXBqQn6FpM0dDJLnWQDRXHLl3Ey1iPYgDSmOIsIGrV9ZyNCQwk03wAgWbfdBTig3QSDYD-sTNOs3pc4UD_PqAvU2nz_1SS2ZiOwOn5F6gulE1L0iE3KEUEvOIagfHNVhz0oxa_VRZILkzV-zr6R_TW1m97h4H8jXl_VJyQGyhMGGypuDrQ9_vaY_RLEulLCyY0INglHWQ7pckxBtI5q55-Vio2wgewe2_qYcGsnBGaDNbySAsvYcWRrqDiFyzrJYivodqTQ"}]}', + JWT_SECRET_KEY: super-secret-key} +LMS_BASE: localhost:8003 +LMS_ROOT_URL: http://localhost:8003 +LOCAL_LOGLEVEL: INFO +LOGGING_ENV: sandbox +LOG_DIR: '** OVERRIDDEN **' +MEDIA_URL: /media/ +MKTG_URL_LINK_MAP: {} +MODULESTORE: + default: + ENGINE: xmodule.modulestore.mixed.MixedModuleStore + OPTIONS: + mappings: {} + stores: + - DOC_STORE_CONFIG: + collection: modulestore + db: test + host: [localhost] + port: 27017 + ENGINE: xmodule.modulestore.mongo.DraftMongoModuleStore + NAME: draft + OPTIONS: + collection: modulestore + db: test + default_class: xmodule.hidden_module.HiddenDescriptor + fs_root: '** OVERRIDDEN **' + host: [localhost] + port: 27017 + render_template: edxmako.shortcuts.render_to_string + - ENGINE: xmodule.modulestore.xml.XMLModuleStore + NAME: xml + OPTIONS: {data_dir: '** OVERRIDDEN **', default_class: xmodule.hidden_module.HiddenDescriptor} +OAUTH_OIDC_ISSUER: https://www.example.com/oauth2 +SECRET_KEY: '' +SERVER_EMAIL: devops@example.com +SESSION_COOKIE_DOMAIN: null +SITE_NAME: localhost +SOCIAL_SHARING_SETTINGS: {CUSTOM_COURSE_URLS: true} +STATIC_URL_BASE: /static/ +SYSLOG_SERVER: '' +TECH_SUPPORT_EMAIL: technical@example.com +TIME_ZONE: America/New_York +WIKI_ENABLED: true +XQUEUE_INTERFACE: + basic_auth: [edx, edx] + django_auth: {password: password, username: lms} + url: http://localhost:18040 +ZENDESK_API_KEY: '' +ZENDESK_USER: '' + diff --git a/cms/envs/bok_choy_docker.yml b/cms/envs/bok_choy_docker.yml new file mode 100644 index 0000000000..3a6b0ae27d --- /dev/null +++ b/cms/envs/bok_choy_docker.yml @@ -0,0 +1,133 @@ +# ingested bok_choy_docker.env.json +# ingested bok_choy_docker.auth.json +AWS_ACCESS_KEY_ID: '' +AWS_SECRET_ACCESS_KEY: '' +BUGS_EMAIL: bugs@example.com +BULK_EMAIL_DEFAULT_FROM_EMAIL: no-reply@example.com +CACHES: + celery: + BACKEND: django.core.cache.backends.memcached.MemcachedCache + KEY_FUNCTION: util.memcache.safe_key + KEY_PREFIX: integration_celery + LOCATION: ['edx.devstack.memcached:11211'] + default: + BACKEND: django.core.cache.backends.memcached.MemcachedCache + KEY_FUNCTION: util.memcache.safe_key + KEY_PREFIX: sandbox_default + LOCATION: ['edx.devstack.memcached:11211'] + general: + BACKEND: django.core.cache.backends.memcached.MemcachedCache + KEY_FUNCTION: util.memcache.safe_key + KEY_PREFIX: sandbox_general + LOCATION: ['edx.devstack.memcached:11211'] + mongo_metadata_inheritance: + BACKEND: django.core.cache.backends.memcached.MemcachedCache + KEY_FUNCTION: util.memcache.safe_key + KEY_PREFIX: integration_mongo_metadata_inheritance + LOCATION: ['edx.devstack.memcached:11211'] + staticfiles: + BACKEND: django.core.cache.backends.memcached.MemcachedCache + KEY_FUNCTION: util.memcache.safe_key + KEY_PREFIX: integration_static_files + LOCATION: ['edx.devstack.memcached:11211'] +CELERY_ALWAYS_EAGER: true +CELERY_BROKER_HOSTNAME: localhost +CELERY_BROKER_PASSWORD: celery +CELERY_BROKER_TRANSPORT: amqp +CELERY_BROKER_USER: celery +CERT_QUEUE: certificates +CMS_BASE: '** OVERRIDDEN **' +CODE_JAIL: + limits: {REALTIME: 3, VMEM: 0} +COMMENTS_SERVICE_KEY: password +COMMENTS_SERVICE_URL: http://edx.devstack.studio:4567 +CONTACT_EMAIL: info@example.com +CONTENTSTORE: + DOC_STORE_CONFIG: + collection: modulestore + db: test + host: [edx.devstack.mongo] + port: 27017 + ENGINE: xmodule.contentstore.mongo.MongoContentStore + OPTIONS: + db: test + host: [edx.devstack.mongo] + port: 27017 +DATABASES: + default: {ENGINE: django.db.backends.mysql, HOST: edx.devstack.mysql, NAME: edxtest, + PASSWORD: '', PORT: '3306', USER: root} + student_module_history: {ENGINE: django.db.backends.mysql, HOST: edx.devstack.mysql, + NAME: student_module_history_test, PASSWORD: '', PORT: '3306', USER: root} +DEFAULT_FEEDBACK_EMAIL: feedback@example.com +DEFAULT_FROM_EMAIL: registration@example.com +DJFS: {aws_access_key_id: test, aws_secret_access_key: test, bucket: test, prefix: test, + type: s3fs} +DOC_STORE_CONFIG: + collection: modulestore + db: test + host: [edx.devstack.mongo] + port: 27017 +EMAIL_BACKEND: django.core.mail.backends.smtp.EmailBackend +FEATURES: {AUTH_USE_OPENID_PROVIDER: true, CERTIFICATES_HTML_VIEW: true, CUSTOM_COURSES_EDX: true, + ENABLE_CONTENT_LIBRARIES: true, ENABLE_DISCUSSION_SERVICE: true, ENABLE_EXTENDED_COURSE_DETAILS: true, + ENABLE_GRADE_DOWNLOADS: true, ENABLE_SPECIAL_EXAMS: true, ENTRANCE_EXAMS: true, + MILESTONES_APP: true, PREVIEW_LMS_BASE: 'preview.localhost:8003', SHOW_HEADER_LANGUAGE_SELECTOR: true} +FEEDBACK_SUBMISSION_EMAIL: '' +GITHUB_REPO_ROOT: '** OVERRIDDEN **' +GRADES_DOWNLOAD: {BUCKET: edx-grades, ROOT_PATH: /tmp/edx-s3/grades, STORAGE_TYPE: localfs} +JWT_AUTH: {JWT_PRIVATE_SIGNING_JWK: '{"e": "AQAB", "d": "HIiV7KNjcdhVbpn3KT-I9n3JPf5YbGXsCIedmPqDH1d4QhBofuAqZ9zebQuxkRUpmqtYMv0Zi6ECSUqH387GYQF_XvFUFcjQRPycISd8TH0DAKaDpGr-AYNshnKiEtQpINhcP44I1AYNPCwyoxXA1fGTtmkKChsuWea7o8kytwU5xSejvh5-jiqu2SF4GEl0BEXIAPZsgbzoPIWNxgO4_RzNnWs6nJZeszcaDD0CyezVSuH9QcI6g5QFzAC_YuykSsaaFJhZ05DocBsLczShJ9Omf6PnK9xlm26I84xrEh_7x4fVmNBg3xWTLh8qOnHqGko93A1diLRCrKHOvnpvgQ", + "n": "o5cn3ljSRi6FaDEKTn0PS-oL9EFyv1pI7dRgffQLD1qf5D6sprmYfWWokSsrWig8u2y0HChSygR6Jn5KXBqQn6FpM0dDJLnWQDRXHLl3Ey1iPYgDSmOIsIGrV9ZyNCQwk03wAgWbfdBTig3QSDYD-sTNOs3pc4UD_PqAvU2nz_1SS2ZiOwOn5F6gulE1L0iE3KEUEvOIagfHNVhz0oxa_VRZILkzV-zr6R_TW1m97h4H8jXl_VJyQGyhMGGypuDrQ9_vaY_RLEulLCyY0INglHWQ7pckxBtI5q55-Vio2wgewe2_qYcGsnBGaDNbySAsvYcWRrqDiFyzrJYivodqTQ", + "q": "3T3DEtBUka7hLGdIsDlC96Uadx_q_E4Vb1cxx_4Ss_wGp1Loz3N3ZngGyInsKlmbBgLo1Ykd6T9TRvRNEWEtFSOcm2INIBoVoXk7W5RuPa8Cgq2tjQj9ziGQ08JMejrPlj3Q1wmALJr5VTfvSYBu0WkljhKNCy1KB6fCby0C9WE", + "p": "vUqzWPZnDG4IXyo-k5F0bHV0BNL_pVhQoLW7eyFHnw74IOEfSbdsMspNcPSFIrtgPsn7981qv3lN_staZ6JflKfHayjB_lvltHyZxfl0dvruShZOx1N6ykEo7YrAskC_qxUyrIvqmJ64zPW3jkuOYrFs7Ykj3zFx3Zq1H5568G0", + "kid": "BTZ9HA6K", "kty": "RSA"}', JWT_PUBLIC_SIGNING_JWK_SET: '{"keys": [{"kid": + "BTZ9HA6K", "e": "AQAB", "kty": "RSA", "n": "o5cn3ljSRi6FaDEKTn0PS-oL9EFyv1pI7dRgffQLD1qf5D6sprmYfWWokSsrWig8u2y0HChSygR6Jn5KXBqQn6FpM0dDJLnWQDRXHLl3Ey1iPYgDSmOIsIGrV9ZyNCQwk03wAgWbfdBTig3QSDYD-sTNOs3pc4UD_PqAvU2nz_1SS2ZiOwOn5F6gulE1L0iE3KEUEvOIagfHNVhz0oxa_VRZILkzV-zr6R_TW1m97h4H8jXl_VJyQGyhMGGypuDrQ9_vaY_RLEulLCyY0INglHWQ7pckxBtI5q55-Vio2wgewe2_qYcGsnBGaDNbySAsvYcWRrqDiFyzrJYivodqTQ"}]}', + JWT_SECRET_KEY: super-secret-key} +LMS_BASE: '** OVERRIDDEN **' +LMS_ROOT_URL: '** OVERRIDDEN **' +LOCAL_LOGLEVEL: INFO +LOGGING_ENV: sandbox +LOG_DIR: '** OVERRIDDEN **' +MEDIA_URL: /media/ +MKTG_URL_LINK_MAP: {} +MODULESTORE: + default: + ENGINE: xmodule.modulestore.mixed.MixedModuleStore + OPTIONS: + mappings: {} + stores: + - DOC_STORE_CONFIG: + collection: modulestore + db: test + host: [edx.devstack.mongo] + port: 27017 + ENGINE: xmodule.modulestore.mongo.DraftMongoModuleStore + NAME: draft + OPTIONS: + collection: modulestore + db: test + default_class: xmodule.hidden_module.HiddenDescriptor + fs_root: '** OVERRIDDEN **' + host: [edx.devstack.mongo] + port: 27017 + render_template: edxmako.shortcuts.render_to_string + - ENGINE: xmodule.modulestore.xml.XMLModuleStore + NAME: xml + OPTIONS: {data_dir: '** OVERRIDDEN **', default_class: xmodule.hidden_module.HiddenDescriptor} +OAUTH_OIDC_ISSUER: https://www.example.com/oauth2 +SECRET_KEY: '' +SERVER_EMAIL: devops@example.com +SESSION_COOKIE_DOMAIN: null +SITE_NAME: localhost +SOCIAL_SHARING_SETTINGS: {CUSTOM_COURSE_URLS: true} +STATIC_URL_BASE: /static/ +SYSLOG_SERVER: '' +TECH_SUPPORT_EMAIL: technical@example.com +TIME_ZONE: America/New_York +WIKI_ENABLED: true +XQUEUE_INTERFACE: + basic_auth: [edx, edx] + django_auth: {password: password, username: lms} + url: http://localhost:18040 +ZENDESK_API_KEY: '' +ZENDESK_USER: '' + diff --git a/cms/envs/production.py b/cms/envs/production.py index 86f8c6dbb7..536483983e 100644 --- a/cms/envs/production.py +++ b/cms/envs/production.py @@ -6,17 +6,41 @@ This is the default template for our main set of AWS servers. # want to import all variables from base settings files # pylint: disable=wildcard-import, unused-wildcard-import -import json +import codecs import os +import yaml from path import Path as path from xmodule.modulestore.modulestore_settings import convert_module_store_setting_if_needed +from openedx.core.djangoapps.plugins import plugin_settings, constants as plugin_constants +from django.core.exceptions import ImproperlyConfigured from .common import * from openedx.core.lib.derived import derive_settings # pylint: disable=wrong-import-order from openedx.core.lib.logsettings import get_logger_config # pylint: disable=wrong-import-order + +def get_env_setting(setting): + """ Get the environment setting or return exception """ + try: + return os.environ[setting] + except KeyError: + error_msg = u"Set the %s env variable" % setting + raise ImproperlyConfigured(error_msg) + +# A file path to a YAML file from which to load all the configuration for the edx platform +CONFIG_FILE = get_env_setting('STUDIO_CFG') + +with codecs.open(CONFIG_FILE, encoding='utf-8') as f: + __config__ = yaml.safe_load(f) + + # ENV_TOKENS and AUTH_TOKENS are included for reverse compatability. + # Removing them may break plugins that rely on them. + ENV_TOKENS = __config__ + AUTH_TOKENS = __config__ + + # SERVICE_VARIANT specifies name of the variant used, which decides what JSON # configuration files are read during startup. SERVICE_VARIANT = os.environ.get('SERVICE_VARIANT', None) @@ -82,11 +106,6 @@ CELERY_QUEUES = { CELERY_ROUTES = "{}celery.Router".format(QUEUE_VARIANT) -############# NON-SECURE ENV CONFIG ############################## -# Things like server locations, ports, etc. -with open(CONFIG_ROOT / CONFIG_PREFIX + "env.json") as env_file: - ENV_TOKENS = json.load(env_file) - # Do NOT calculate this dynamically at startup with git because it's *slow*. EDX_PLATFORM_REVISION = ENV_TOKENS.get('EDX_PLATFORM_REVISION', EDX_PLATFORM_REVISION) @@ -287,11 +306,6 @@ FILE_UPLOAD_STORAGE_PREFIX = ENV_TOKENS.get('FILE_UPLOAD_STORAGE_PREFIX', FILE_U ZENDESK_URL = ENV_TOKENS.get('ZENDESK_URL', ZENDESK_URL) ZENDESK_CUSTOM_FIELDS = ENV_TOKENS.get('ZENDESK_CUSTOM_FIELDS', ZENDESK_CUSTOM_FIELDS) -################ SECURE AUTH ITEMS ############################### -# Secret things: passwords, access keys, etc. -with open(CONFIG_ROOT / CONFIG_PREFIX + "auth.json") as auth_file: - AUTH_TOKENS = json.load(auth_file) - ############### XBlock filesystem field config ########## if 'DJFS' in AUTH_TOKENS and AUTH_TOKENS['DJFS'] is not None: DJFS = AUTH_TOKENS['DJFS'] @@ -579,8 +593,14 @@ COURSE_ENROLLMENT_MODES = ENV_TOKENS.get('COURSE_ENROLLMENT_MODES', COURSE_ENROL ####################### Plugin Settings ########################## # This is at the bottom because it is going to load more settings after base settings are loaded -from openedx.core.djangoapps.plugins import plugin_settings, constants as plugin_constants # pylint: disable=wrong-import-order, wrong-import-position -plugin_settings.add_plugins(__name__, plugin_constants.ProjectType.CMS, plugin_constants.SettingsType.AWS) + +# Load aws.py in plugins for reverse compatibility. This can be removed after aws.py +# is officially removed. +plugin_settings.add_plugins(__name__, plugin_constants.ProjectType.CMS, + plugin_constants.SettingsType.AWS) + +# We continue to load production.py over aws.py +plugin_settings.add_plugins(__name__, plugin_constants.ProjectType.CMS, plugin_constants.SettingsType.PRODUCTION) ########################## Derive Any Derived Settings ####################### diff --git a/lms/envs/bok_choy.auth.json b/lms/envs/bok_choy.auth.json deleted file mode 100644 index 53c7d7501b..0000000000 --- a/lms/envs/bok_choy.auth.json +++ /dev/null @@ -1,144 +0,0 @@ -{ - "AWS_ACCESS_KEY_ID": "", - "AWS_SECRET_ACCESS_KEY": "", - "CC_PROCESSOR_NAME": "CyberSource2", - "CC_PROCESSOR": { - "CyberSource2": { - "SECRET_KEY": "abcd123", - "ACCESS_KEY": "abcd123", - "PROFILE_ID": "edx", - "PURCHASE_ENDPOINT": "/shoppingcart/payment_fake" - } - }, - "CELERY_BROKER_PASSWORD": "celery", - "CELERY_BROKER_USER": "celery", - "CONTENTSTORE": { - "DOC_STORE_CONFIG": { - "collection": "modulestore", - "db": "test", - "host": [ - "localhost" - ], - "port": 27017 - }, - "ENGINE": "xmodule.contentstore.mongo.MongoContentStore", - "OPTIONS": { - "db": "test", - "host": [ - "localhost" - ], - "port": 27017 - } - }, - "DATABASES": { - "default": { - "ENGINE": "django.db.backends.mysql", - "HOST": "localhost", - "NAME": "edxtest", - "PASSWORD": "", - "PORT": "3306", - "USER": "root" - }, - "student_module_history": { - "ENGINE": "django.db.backends.mysql", - "HOST": "localhost", - "NAME": "student_module_history_test", - "PASSWORD": "", - "PORT": "3306", - "USER": "root" - } - }, - "DOC_STORE_CONFIG": { - "collection": "modulestore", - "db": "test", - "host": [ - "localhost" - ], - "port": 27017 - }, - "TRACKING_BACKENDS": { - "mongo": { - "ENGINE": "track.backends.mongodb.MongoBackend", - "OPTIONS": { - "database": "test", - "collection": "events" - } - } - }, - "EVENT_TRACKING_BACKENDS": { - "mongo": { - "ENGINE": "eventtracking.backends.mongodb.MongoBackend", - "OPTIONS": { - "database": "test", - "collection": "events" - } - } - }, - "JWT_AUTH": { - "JWT_SECRET_KEY": "super-secret-key", - "JWT_PUBLIC_SIGNING_JWK_SET": "{\"keys\": [{\"kid\": \"BTZ9HA6K\", \"e\": \"AQAB\", \"kty\": \"RSA\", \"n\": \"o5cn3ljSRi6FaDEKTn0PS-oL9EFyv1pI7dRgffQLD1qf5D6sprmYfWWokSsrWig8u2y0HChSygR6Jn5KXBqQn6FpM0dDJLnWQDRXHLl3Ey1iPYgDSmOIsIGrV9ZyNCQwk03wAgWbfdBTig3QSDYD-sTNOs3pc4UD_PqAvU2nz_1SS2ZiOwOn5F6gulE1L0iE3KEUEvOIagfHNVhz0oxa_VRZILkzV-zr6R_TW1m97h4H8jXl_VJyQGyhMGGypuDrQ9_vaY_RLEulLCyY0INglHWQ7pckxBtI5q55-Vio2wgewe2_qYcGsnBGaDNbySAsvYcWRrqDiFyzrJYivodqTQ\"}]}", - "JWT_PRIVATE_SIGNING_JWK": "{\"e\": \"AQAB\", \"d\": \"HIiV7KNjcdhVbpn3KT-I9n3JPf5YbGXsCIedmPqDH1d4QhBofuAqZ9zebQuxkRUpmqtYMv0Zi6ECSUqH387GYQF_XvFUFcjQRPycISd8TH0DAKaDpGr-AYNshnKiEtQpINhcP44I1AYNPCwyoxXA1fGTtmkKChsuWea7o8kytwU5xSejvh5-jiqu2SF4GEl0BEXIAPZsgbzoPIWNxgO4_RzNnWs6nJZeszcaDD0CyezVSuH9QcI6g5QFzAC_YuykSsaaFJhZ05DocBsLczShJ9Omf6PnK9xlm26I84xrEh_7x4fVmNBg3xWTLh8qOnHqGko93A1diLRCrKHOvnpvgQ\", \"n\": \"o5cn3ljSRi6FaDEKTn0PS-oL9EFyv1pI7dRgffQLD1qf5D6sprmYfWWokSsrWig8u2y0HChSygR6Jn5KXBqQn6FpM0dDJLnWQDRXHLl3Ey1iPYgDSmOIsIGrV9ZyNCQwk03wAgWbfdBTig3QSDYD-sTNOs3pc4UD_PqAvU2nz_1SS2ZiOwOn5F6gulE1L0iE3KEUEvOIagfHNVhz0oxa_VRZILkzV-zr6R_TW1m97h4H8jXl_VJyQGyhMGGypuDrQ9_vaY_RLEulLCyY0INglHWQ7pckxBtI5q55-Vio2wgewe2_qYcGsnBGaDNbySAsvYcWRrqDiFyzrJYivodqTQ\", \"q\": \"3T3DEtBUka7hLGdIsDlC96Uadx_q_E4Vb1cxx_4Ss_wGp1Loz3N3ZngGyInsKlmbBgLo1Ykd6T9TRvRNEWEtFSOcm2INIBoVoXk7W5RuPa8Cgq2tjQj9ziGQ08JMejrPlj3Q1wmALJr5VTfvSYBu0WkljhKNCy1KB6fCby0C9WE\", \"p\": \"vUqzWPZnDG4IXyo-k5F0bHV0BNL_pVhQoLW7eyFHnw74IOEfSbdsMspNcPSFIrtgPsn7981qv3lN_staZ6JflKfHayjB_lvltHyZxfl0dvruShZOx1N6ykEo7YrAskC_qxUyrIvqmJ64zPW3jkuOYrFs7Ykj3zFx3Zq1H5568G0\", \"kid\": \"BTZ9HA6K\", \"kty\": \"RSA\"}" - }, - "MODULESTORE": { - "default": { - "ENGINE": "xmodule.modulestore.mixed.MixedModuleStore", - "OPTIONS": { - "mappings": {}, - "stores": [ - { - "NAME": "draft", - "DOC_STORE_CONFIG": { - "collection": "modulestore", - "db": "test", - "host": [ - "localhost" - ], - "port": 27017 - }, - "ENGINE": "xmodule.modulestore.mongo.DraftMongoModuleStore", - "OPTIONS": { - "collection": "modulestore", - "db": "test", - "default_class": "xmodule.hidden_module.HiddenDescriptor", - "fs_root": "** OVERRIDDEN **", - "host": [ - "localhost" - ], - "port": 27017, - "render_template": "edxmako.shortcuts.render_to_string" - } - }, - { - "NAME": "xml", - "ENGINE": "xmodule.modulestore.xml.XMLModuleStore", - "OPTIONS": { - "data_dir": "** OVERRIDDEN **", - "default_class": "xmodule.hidden_module.HiddenDescriptor" - } - } - ] - } - } - }, - "SECRET_KEY": "", - "DJFS": { - "type": "s3fs", - "bucket": "test", - "prefix": "test", - "aws_access_key_id": "test", - "aws_secret_access_key": "test" - }, - "XQUEUE_INTERFACE": { - "basic_auth": [ - "edx", - "edx" - ], - "django_auth": { - "password": "password", - "username": "lms" - }, - "url": "** OVERRIDDEN **" - }, - "ZENDESK_API_KEY": "", - "ZENDESK_USER": "" -} diff --git a/lms/envs/bok_choy.env.json b/lms/envs/bok_choy.env.json deleted file mode 100644 index a2aed20071..0000000000 --- a/lms/envs/bok_choy.env.json +++ /dev/null @@ -1,148 +0,0 @@ -{ - "ANALYTICS_DASHBOARD_URL": "", - "BUGS_EMAIL": "bugs@example.com", - "BULK_EMAIL_DEFAULT_FROM_EMAIL": "no-reply@example.com", - "CACHES": { - "celery": { - "BACKEND": "django.core.cache.backends.memcached.MemcachedCache", - "KEY_FUNCTION": "util.memcache.safe_key", - "KEY_PREFIX": "integration_celery", - "LOCATION": [ - "localhost:11211" - ] - }, - "default": { - "BACKEND": "django.core.cache.backends.memcached.MemcachedCache", - "KEY_FUNCTION": "util.memcache.safe_key", - "KEY_PREFIX": "sandbox_default", - "LOCATION": [ - "localhost:11211" - ] - }, - "general": { - "BACKEND": "django.core.cache.backends.memcached.MemcachedCache", - "KEY_FUNCTION": "util.memcache.safe_key", - "KEY_PREFIX": "sandbox_general", - "LOCATION": [ - "localhost:11211" - ] - }, - "mongo_metadata_inheritance": { - "BACKEND": "django.core.cache.backends.memcached.MemcachedCache", - "KEY_FUNCTION": "util.memcache.safe_key", - "KEY_PREFIX": "integration_mongo_metadata_inheritance", - "LOCATION": [ - "localhost:11211" - ] - }, - "staticfiles": { - "BACKEND": "django.core.cache.backends.memcached.MemcachedCache", - "KEY_FUNCTION": "util.memcache.safe_key", - "KEY_PREFIX": "integration_static_files", - "LOCATION": [ - "localhost:11211" - ] - } - }, - "CELERY_BROKER_HOSTNAME": "localhost", - "CELERY_BROKER_TRANSPORT": "amqp", - "CERT_QUEUE": "certificates", - "CMS_BASE": "localhost:8031", - "CODE_JAIL": { - "limits": { - "REALTIME": 3, - "VMEM": 0 - } - }, - "COMMENTS_SERVICE_KEY": "password", - "COMMENTS_SERVICE_URL": "http://localhost:4567", - "CONTACT_EMAIL": "info@example.com", - "DEFAULT_FEEDBACK_EMAIL": "feedback@example.com", - "DEFAULT_FROM_EMAIL": "registration@example.com", - "EMAIL_BACKEND": "django.core.mail.backends.dummy.EmailBackend", - "SOCIAL_SHARING_SETTINGS": { - "CUSTOM_COURSE_URLS": true, - "DASHBOARD_FACEBOOK": true, - "CERTIFICATE_FACEBOOK": true, - "CERTIFICATE_FACEBOOK_TEXT": "Testing facebook feature:", - "DASHBOARD_TWITTER": true, - "DASHBOARD_TWITTER_TEXT": "Testing feature:" - }, - "FEATURES": { - "AUTH_USE_OPENID_PROVIDER": true, - "CERTIFICATES_HTML_VIEW": true, - "CERTIFICATES_INSTRUCTOR_GENERATION": true, - "ENABLE_PAYMENT_FAKE": true, - "ENABLE_VERIFIED_CERTIFICATES": true, - "ENABLE_DISCUSSION_SERVICE": true, - "ENABLE_GRADE_DOWNLOADS": true, - "ENABLE_THIRD_PARTY_AUTH": true, - "ENABLE_COMBINED_LOGIN_REGISTRATION": true, - "PREVIEW_LMS_BASE": "preview.localhost:8003", - "ALLOW_AUTOMATED_SIGNUPS": true, - "AUTOMATIC_AUTH_FOR_TESTING": true, - "RESTRICT_AUTOMATIC_AUTH": false, - "MODE_CREATION_FOR_TESTING": true, - "EXPOSE_CACHE_PROGRAMS_ENDPOINT": true, - "AUTOMATIC_VERIFY_STUDENT_IDENTITY_FOR_TESTING": true, - "ENABLE_COURSE_DISCOVERY": true, - "ENABLE_SPECIAL_EXAMS": true, - "SHOW_HEADER_LANGUAGE_SELECTOR": true, - "CUSTOM_COURSES_EDX": true - }, - "FEEDBACK_SUBMISSION_EMAIL": "", - "GITHUB_REPO_ROOT": "** OVERRIDDEN **", - "LMS_BASE": "localhost:8003", - "LMS_ROOT_URL": "http://localhost:8003", - "LOCAL_LOGLEVEL": "INFO", - "LOGGING_ENV": "sandbox", - "LOG_DIR": "** OVERRIDDEN **", - "MEDIA_URL": "/media/", - "MKTG_URL_LINK_MAP": { - "ABOUT": "about", - "PRIVACY": "privacy", - "TOS": "tos", - "WHAT_IS_VERIFIED_CERT": "verified-certificate", - "COURSES": "courses", - "CONTACT": "contact", - "NEWS": "news", - "HONOR": "honor", - "CAREERS": "careers", - "HELP_CENTER": "help-center", - "BLOG": "blog", - "PRESS": "press", - "DONATE": "donate", - "ROOT": "root", - "SITEMAP.XML": "sitemap_xml" - }, - "REGISTRATION_EXTENSION_FORM": "openedx.core.djangoapps.user_api.tests.test_helpers.TestCaseForm", - "REGISTRATION_EXTRA_FIELDS": { - "level_of_education": "optional", - "gender": "optional", - "year_of_birth": "optional", - "mailing_address": "optional", - "goals": "optional", - "honor_code": "required", - "terms_of_service": "hidden", - "city": "hidden", - "country": "required" - }, - "SERVER_EMAIL": "devops@example.com", - "SESSION_COOKIE_DOMAIN": null, - "SITE_NAME": "localhost:8003", - "STATIC_URL_BASE": "/static/", - "SUPPORT_SITE_LINK": "https://support.example.com", - "PASSWORD_RESET_SUPPORT_LINK": "https://support.example.com/password-reset-help.html", - "ACTIVATION_EMAIL_SUPPORT_LINK": "https://support.example.com/activation-email-help.html", - "SYSLOG_SERVER": "", - "TECH_SUPPORT_EMAIL": "technical@example.com", - "THIRD_PARTY_AUTH_BACKENDS": [ - "social_core.backends.google.GoogleOAuth2", - "social_core.backends.linkedin.LinkedinOAuth2", - "social_core.backends.facebook.FacebookOAuth2", - "third_party_auth.dummy.DummyBackend", - "third_party_auth.saml.SAMLAuthBackend" - ], - "TIME_ZONE": "America/New_York", - "WIKI_ENABLED": true -} diff --git a/lms/envs/bok_choy.py b/lms/envs/bok_choy.py index e49a9721ef..d2593cc708 100644 --- a/lms/envs/bok_choy.py +++ b/lms/envs/bok_choy.py @@ -29,6 +29,9 @@ TEST_ROOT = CONFIG_ROOT.dirname().dirname() / "test_root" # and (b) that the files are the same in Jenkins as in local dev. os.environ['SERVICE_VARIANT'] = 'bok_choy_docker' if 'BOK_CHOY_HOSTNAME' in os.environ else 'bok_choy' os.environ['CONFIG_ROOT'] = CONFIG_ROOT +os.environ['LMS_CFG'] = str.format("{config_root}/{service_variant}.yml", + config_root=os.environ['CONFIG_ROOT'], service_variant=os.environ['SERVICE_VARIANT']) + from .production import * # pylint: disable=wildcard-import, unused-wildcard-import, wrong-import-position diff --git a/lms/envs/bok_choy.yml b/lms/envs/bok_choy.yml new file mode 100644 index 0000000000..05ae4adb4a --- /dev/null +++ b/lms/envs/bok_choy.yml @@ -0,0 +1,161 @@ +# ingested edx-platform/lms/envs/bok_choy.auth.json +# ingested edx-platform/lms/envs/bok_choy.env.json +ACTIVATION_EMAIL_SUPPORT_LINK: https://support.example.com/activation-email-help.html +ANALYTICS_DASHBOARD_URL: '' +AWS_ACCESS_KEY_ID: '' +AWS_SECRET_ACCESS_KEY: '' +BUGS_EMAIL: bugs@example.com +BULK_EMAIL_DEFAULT_FROM_EMAIL: no-reply@example.com +CACHES: + celery: + BACKEND: django.core.cache.backends.memcached.MemcachedCache + KEY_FUNCTION: util.memcache.safe_key + KEY_PREFIX: integration_celery + LOCATION: ['localhost:11211'] + default: + BACKEND: django.core.cache.backends.memcached.MemcachedCache + KEY_FUNCTION: util.memcache.safe_key + KEY_PREFIX: sandbox_default + LOCATION: ['localhost:11211'] + general: + BACKEND: django.core.cache.backends.memcached.MemcachedCache + KEY_FUNCTION: util.memcache.safe_key + KEY_PREFIX: sandbox_general + LOCATION: ['localhost:11211'] + mongo_metadata_inheritance: + BACKEND: django.core.cache.backends.memcached.MemcachedCache + KEY_FUNCTION: util.memcache.safe_key + KEY_PREFIX: integration_mongo_metadata_inheritance + LOCATION: ['localhost:11211'] + staticfiles: + BACKEND: django.core.cache.backends.memcached.MemcachedCache + KEY_FUNCTION: util.memcache.safe_key + KEY_PREFIX: integration_static_files + LOCATION: ['localhost:11211'] +CC_PROCESSOR: + CyberSource2: {ACCESS_KEY: abcd123, PROFILE_ID: edx, PURCHASE_ENDPOINT: /shoppingcart/payment_fake, + SECRET_KEY: abcd123} +CC_PROCESSOR_NAME: CyberSource2 +CELERY_BROKER_HOSTNAME: localhost +CELERY_BROKER_PASSWORD: celery +CELERY_BROKER_TRANSPORT: amqp +CELERY_BROKER_USER: celery +CERT_QUEUE: certificates +CMS_BASE: localhost:8031 +CODE_JAIL: + limits: {REALTIME: 3, VMEM: 0} +COMMENTS_SERVICE_KEY: password +COMMENTS_SERVICE_URL: http://localhost:4567 +CONTACT_EMAIL: info@example.com +CONTENTSTORE: + DOC_STORE_CONFIG: + collection: modulestore + db: test + host: [localhost] + port: 27017 + ENGINE: xmodule.contentstore.mongo.MongoContentStore + OPTIONS: + db: test + host: [localhost] + port: 27017 +DATABASES: + default: {ENGINE: django.db.backends.mysql, HOST: localhost, NAME: edxtest, PASSWORD: '', + PORT: '3306', USER: root} + student_module_history: {ENGINE: django.db.backends.mysql, HOST: localhost, NAME: student_module_history_test, + PASSWORD: '', PORT: '3306', USER: root} +DEFAULT_FEEDBACK_EMAIL: feedback@example.com +DEFAULT_FROM_EMAIL: registration@example.com +DJFS: {aws_access_key_id: test, aws_secret_access_key: test, bucket: test, prefix: test, + type: s3fs} +DOC_STORE_CONFIG: + collection: modulestore + db: test + host: [localhost] + port: 27017 +EMAIL_BACKEND: django.core.mail.backends.dummy.EmailBackend +EVENT_TRACKING_BACKENDS: + mongo: + ENGINE: eventtracking.backends.mongodb.MongoBackend + OPTIONS: {collection: events, database: test} +FEATURES: {ALLOW_AUTOMATED_SIGNUPS: true, AUTH_USE_OPENID_PROVIDER: true, AUTOMATIC_AUTH_FOR_TESTING: true, + AUTOMATIC_VERIFY_STUDENT_IDENTITY_FOR_TESTING: true, CERTIFICATES_HTML_VIEW: true, + CERTIFICATES_INSTRUCTOR_GENERATION: true, CUSTOM_COURSES_EDX: true, ENABLE_COMBINED_LOGIN_REGISTRATION: true, + ENABLE_COURSE_DISCOVERY: true, ENABLE_DISCUSSION_SERVICE: true, ENABLE_GRADE_DOWNLOADS: true, + ENABLE_PAYMENT_FAKE: true, ENABLE_SPECIAL_EXAMS: true, ENABLE_THIRD_PARTY_AUTH: true, + ENABLE_VERIFIED_CERTIFICATES: true, EXPOSE_CACHE_PROGRAMS_ENDPOINT: true, MODE_CREATION_FOR_TESTING: true, + PREVIEW_LMS_BASE: 'preview.localhost:8003', RESTRICT_AUTOMATIC_AUTH: false, SHOW_HEADER_LANGUAGE_SELECTOR: true} +FEEDBACK_SUBMISSION_EMAIL: '' +GITHUB_REPO_ROOT: '** OVERRIDDEN **' +JWT_AUTH: {JWT_PRIVATE_SIGNING_JWK: '{"e": "AQAB", "d": "HIiV7KNjcdhVbpn3KT-I9n3JPf5YbGXsCIedmPqDH1d4QhBofuAqZ9zebQuxkRUpmqtYMv0Zi6ECSUqH387GYQF_XvFUFcjQRPycISd8TH0DAKaDpGr-AYNshnKiEtQpINhcP44I1AYNPCwyoxXA1fGTtmkKChsuWea7o8kytwU5xSejvh5-jiqu2SF4GEl0BEXIAPZsgbzoPIWNxgO4_RzNnWs6nJZeszcaDD0CyezVSuH9QcI6g5QFzAC_YuykSsaaFJhZ05DocBsLczShJ9Omf6PnK9xlm26I84xrEh_7x4fVmNBg3xWTLh8qOnHqGko93A1diLRCrKHOvnpvgQ", + "n": "o5cn3ljSRi6FaDEKTn0PS-oL9EFyv1pI7dRgffQLD1qf5D6sprmYfWWokSsrWig8u2y0HChSygR6Jn5KXBqQn6FpM0dDJLnWQDRXHLl3Ey1iPYgDSmOIsIGrV9ZyNCQwk03wAgWbfdBTig3QSDYD-sTNOs3pc4UD_PqAvU2nz_1SS2ZiOwOn5F6gulE1L0iE3KEUEvOIagfHNVhz0oxa_VRZILkzV-zr6R_TW1m97h4H8jXl_VJyQGyhMGGypuDrQ9_vaY_RLEulLCyY0INglHWQ7pckxBtI5q55-Vio2wgewe2_qYcGsnBGaDNbySAsvYcWRrqDiFyzrJYivodqTQ", + "q": "3T3DEtBUka7hLGdIsDlC96Uadx_q_E4Vb1cxx_4Ss_wGp1Loz3N3ZngGyInsKlmbBgLo1Ykd6T9TRvRNEWEtFSOcm2INIBoVoXk7W5RuPa8Cgq2tjQj9ziGQ08JMejrPlj3Q1wmALJr5VTfvSYBu0WkljhKNCy1KB6fCby0C9WE", + "p": "vUqzWPZnDG4IXyo-k5F0bHV0BNL_pVhQoLW7eyFHnw74IOEfSbdsMspNcPSFIrtgPsn7981qv3lN_staZ6JflKfHayjB_lvltHyZxfl0dvruShZOx1N6ykEo7YrAskC_qxUyrIvqmJ64zPW3jkuOYrFs7Ykj3zFx3Zq1H5568G0", + "kid": "BTZ9HA6K", "kty": "RSA"}', JWT_PUBLIC_SIGNING_JWK_SET: '{"keys": [{"kid": + "BTZ9HA6K", "e": "AQAB", "kty": "RSA", "n": "o5cn3ljSRi6FaDEKTn0PS-oL9EFyv1pI7dRgffQLD1qf5D6sprmYfWWokSsrWig8u2y0HChSygR6Jn5KXBqQn6FpM0dDJLnWQDRXHLl3Ey1iPYgDSmOIsIGrV9ZyNCQwk03wAgWbfdBTig3QSDYD-sTNOs3pc4UD_PqAvU2nz_1SS2ZiOwOn5F6gulE1L0iE3KEUEvOIagfHNVhz0oxa_VRZILkzV-zr6R_TW1m97h4H8jXl_VJyQGyhMGGypuDrQ9_vaY_RLEulLCyY0INglHWQ7pckxBtI5q55-Vio2wgewe2_qYcGsnBGaDNbySAsvYcWRrqDiFyzrJYivodqTQ"}]}', + JWT_SECRET_KEY: super-secret-key} +LMS_BASE: localhost:8003 +LMS_ROOT_URL: http://localhost:8003 +LOCAL_LOGLEVEL: INFO +LOGGING_ENV: sandbox +LOG_DIR: '** OVERRIDDEN **' +MEDIA_URL: /media/ +MKTG_URL_LINK_MAP: {ABOUT: about, BLOG: blog, CAREERS: careers, CONTACT: contact, + COURSES: courses, DONATE: donate, HELP_CENTER: help-center, HONOR: honor, NEWS: news, + PRESS: press, PRIVACY: privacy, ROOT: root, SITEMAP.XML: sitemap_xml, TOS: tos, + WHAT_IS_VERIFIED_CERT: verified-certificate} +MODULESTORE: + default: + ENGINE: xmodule.modulestore.mixed.MixedModuleStore + OPTIONS: + mappings: {} + stores: + - DOC_STORE_CONFIG: + collection: modulestore + db: test + host: [localhost] + port: 27017 + ENGINE: xmodule.modulestore.mongo.DraftMongoModuleStore + NAME: draft + OPTIONS: + collection: modulestore + db: test + default_class: xmodule.hidden_module.HiddenDescriptor + fs_root: '** OVERRIDDEN **' + host: [localhost] + port: 27017 + render_template: edxmako.shortcuts.render_to_string + - ENGINE: xmodule.modulestore.xml.XMLModuleStore + NAME: xml + OPTIONS: {data_dir: '** OVERRIDDEN **', default_class: xmodule.hidden_module.HiddenDescriptor} +PASSWORD_RESET_SUPPORT_LINK: https://support.example.com/password-reset-help.html +REGISTRATION_EXTENSION_FORM: openedx.core.djangoapps.user_api.tests.test_helpers.TestCaseForm +REGISTRATION_EXTRA_FIELDS: {city: hidden, country: required, gender: optional, goals: optional, + honor_code: required, level_of_education: optional, mailing_address: optional, terms_of_service: hidden, + year_of_birth: optional} +SECRET_KEY: '' +SERVER_EMAIL: devops@example.com +SESSION_COOKIE_DOMAIN: null +SITE_NAME: localhost:8003 +SOCIAL_SHARING_SETTINGS: {CERTIFICATE_FACEBOOK: true, CERTIFICATE_FACEBOOK_TEXT: 'Testing + facebook feature:', CUSTOM_COURSE_URLS: true, DASHBOARD_FACEBOOK: true, DASHBOARD_TWITTER: true, + DASHBOARD_TWITTER_TEXT: 'Testing feature:'} +STATIC_URL_BASE: /static/ +SUPPORT_SITE_LINK: https://support.example.com +SYSLOG_SERVER: '' +TECH_SUPPORT_EMAIL: technical@example.com +THIRD_PARTY_AUTH_BACKENDS: [social_core.backends.google.GoogleOAuth2, social_core.backends.linkedin.LinkedinOAuth2, + social_core.backends.facebook.FacebookOAuth2, third_party_auth.dummy.DummyBackend, + third_party_auth.saml.SAMLAuthBackend] +TIME_ZONE: America/New_York +TRACKING_BACKENDS: + mongo: + ENGINE: track.backends.mongodb.MongoBackend + OPTIONS: {collection: events, database: test} +WIKI_ENABLED: true +XQUEUE_INTERFACE: + basic_auth: [edx, edx] + django_auth: {password: password, username: lms} + url: '** OVERRIDDEN **' +ZENDESK_API_KEY: '' +ZENDESK_USER: '' + diff --git a/lms/envs/bok_choy_docker.auth.json b/lms/envs/bok_choy_docker.auth.json deleted file mode 100644 index 767c404496..0000000000 --- a/lms/envs/bok_choy_docker.auth.json +++ /dev/null @@ -1,152 +0,0 @@ -{ - "AWS_ACCESS_KEY_ID": "", - "AWS_SECRET_ACCESS_KEY": "", - "CC_PROCESSOR_NAME": "CyberSource2", - "CC_PROCESSOR": { - "CyberSource2": { - "SECRET_KEY": "abcd123", - "ACCESS_KEY": "abcd123", - "PROFILE_ID": "edx", - "PURCHASE_ENDPOINT": "/shoppingcart/payment_fake" - } - }, - "CELERY_BROKER_PASSWORD": "celery", - "CELERY_BROKER_USER": "celery", - "CONTENTSTORE": { - "DOC_STORE_CONFIG": { - "collection": "modulestore", - "db": "test", - "host": [ - "edx.devstack.mongo" - ], - "port": 27017 - }, - "ENGINE": "xmodule.contentstore.mongo.MongoContentStore", - "OPTIONS": { - "db": "test", - "host": [ - "edx.devstack.mongo" - ], - "port": 27017 - } - }, - "DATABASES": { - "default": { - "ENGINE": "django.db.backends.mysql", - "HOST": "edx.devstack.mysql", - "NAME": "edxtest", - "PASSWORD": "", - "PORT": "3306", - "USER": "root" - }, - "student_module_history": { - "ENGINE": "django.db.backends.mysql", - "HOST": "edx.devstack.mysql", - "NAME": "student_module_history_test", - "PASSWORD": "", - "PORT": "3306", - "USER": "root" - } - }, - "DOC_STORE_CONFIG": { - "collection": "modulestore", - "db": "test", - "host": [ - "edx.devstack.mongo" - ], - "port": 27017 - }, - "TRACKING_BACKENDS": { - "mongo": { - "ENGINE": "track.backends.mongodb.MongoBackend", - "OPTIONS": { - "database": "test", - "collection": "events", - "host": [ - "edx.devstack.mongo" - ], - "port": 27017 - } - } - }, - "EVENT_TRACKING_BACKENDS": { - "mongo": { - "ENGINE": "eventtracking.backends.mongodb.MongoBackend", - "OPTIONS": { - "database": "test", - "collection": "events", - "host": [ - "edx.devstack.mongo" - ], - "port": 27017 - } - } - }, - "JWT_AUTH": { - "JWT_SECRET_KEY": "super-secret-key", - "JWT_PUBLIC_SIGNING_JWK_SET": "{\"keys\": [{\"kid\": \"BTZ9HA6K\", \"e\": \"AQAB\", \"kty\": \"RSA\", \"n\": \"o5cn3ljSRi6FaDEKTn0PS-oL9EFyv1pI7dRgffQLD1qf5D6sprmYfWWokSsrWig8u2y0HChSygR6Jn5KXBqQn6FpM0dDJLnWQDRXHLl3Ey1iPYgDSmOIsIGrV9ZyNCQwk03wAgWbfdBTig3QSDYD-sTNOs3pc4UD_PqAvU2nz_1SS2ZiOwOn5F6gulE1L0iE3KEUEvOIagfHNVhz0oxa_VRZILkzV-zr6R_TW1m97h4H8jXl_VJyQGyhMGGypuDrQ9_vaY_RLEulLCyY0INglHWQ7pckxBtI5q55-Vio2wgewe2_qYcGsnBGaDNbySAsvYcWRrqDiFyzrJYivodqTQ\"}]}", - "JWT_PRIVATE_SIGNING_JWK": "{\"e\": \"AQAB\", \"d\": \"HIiV7KNjcdhVbpn3KT-I9n3JPf5YbGXsCIedmPqDH1d4QhBofuAqZ9zebQuxkRUpmqtYMv0Zi6ECSUqH387GYQF_XvFUFcjQRPycISd8TH0DAKaDpGr-AYNshnKiEtQpINhcP44I1AYNPCwyoxXA1fGTtmkKChsuWea7o8kytwU5xSejvh5-jiqu2SF4GEl0BEXIAPZsgbzoPIWNxgO4_RzNnWs6nJZeszcaDD0CyezVSuH9QcI6g5QFzAC_YuykSsaaFJhZ05DocBsLczShJ9Omf6PnK9xlm26I84xrEh_7x4fVmNBg3xWTLh8qOnHqGko93A1diLRCrKHOvnpvgQ\", \"n\": \"o5cn3ljSRi6FaDEKTn0PS-oL9EFyv1pI7dRgffQLD1qf5D6sprmYfWWokSsrWig8u2y0HChSygR6Jn5KXBqQn6FpM0dDJLnWQDRXHLl3Ey1iPYgDSmOIsIGrV9ZyNCQwk03wAgWbfdBTig3QSDYD-sTNOs3pc4UD_PqAvU2nz_1SS2ZiOwOn5F6gulE1L0iE3KEUEvOIagfHNVhz0oxa_VRZILkzV-zr6R_TW1m97h4H8jXl_VJyQGyhMGGypuDrQ9_vaY_RLEulLCyY0INglHWQ7pckxBtI5q55-Vio2wgewe2_qYcGsnBGaDNbySAsvYcWRrqDiFyzrJYivodqTQ\", \"q\": \"3T3DEtBUka7hLGdIsDlC96Uadx_q_E4Vb1cxx_4Ss_wGp1Loz3N3ZngGyInsKlmbBgLo1Ykd6T9TRvRNEWEtFSOcm2INIBoVoXk7W5RuPa8Cgq2tjQj9ziGQ08JMejrPlj3Q1wmALJr5VTfvSYBu0WkljhKNCy1KB6fCby0C9WE\", \"p\": \"vUqzWPZnDG4IXyo-k5F0bHV0BNL_pVhQoLW7eyFHnw74IOEfSbdsMspNcPSFIrtgPsn7981qv3lN_staZ6JflKfHayjB_lvltHyZxfl0dvruShZOx1N6ykEo7YrAskC_qxUyrIvqmJ64zPW3jkuOYrFs7Ykj3zFx3Zq1H5568G0\", \"kid\": \"BTZ9HA6K\", \"kty\": \"RSA\"}" - }, - "MODULESTORE": { - "default": { - "ENGINE": "xmodule.modulestore.mixed.MixedModuleStore", - "OPTIONS": { - "mappings": {}, - "stores": [ - { - "NAME": "draft", - "DOC_STORE_CONFIG": { - "collection": "modulestore", - "db": "test", - "host": [ - "edx.devstack.mongo" - ], - "port": 27017 - }, - "ENGINE": "xmodule.modulestore.mongo.DraftMongoModuleStore", - "OPTIONS": { - "collection": "modulestore", - "db": "test", - "default_class": "xmodule.hidden_module.HiddenDescriptor", - "fs_root": "** OVERRIDDEN **", - "host": [ - "edx.devstack.mongo" - ], - "port": 27017, - "render_template": "edxmako.shortcuts.render_to_string" - } - }, - { - "NAME": "xml", - "ENGINE": "xmodule.modulestore.xml.XMLModuleStore", - "OPTIONS": { - "data_dir": "** OVERRIDDEN **", - "default_class": "xmodule.hidden_module.HiddenDescriptor" - } - } - ] - } - } - }, - "SECRET_KEY": "", - "DJFS": { - "type": "s3fs", - "bucket": "test", - "prefix": "test", - "aws_access_key_id": "test", - "aws_secret_access_key": "test" - }, - "XQUEUE_INTERFACE": { - "basic_auth": [ - "edx", - "edx" - ], - "django_auth": { - "password": "password", - "username": "lms" - }, - "url": "** OVERRIDDEN **" - }, - "ZENDESK_API_KEY": "", - "ZENDESK_USER": "" -} diff --git a/lms/envs/bok_choy_docker.env.json b/lms/envs/bok_choy_docker.env.json deleted file mode 100644 index 8f68509bf0..0000000000 --- a/lms/envs/bok_choy_docker.env.json +++ /dev/null @@ -1,148 +0,0 @@ -{ - "ANALYTICS_DASHBOARD_URL": "", - "BUGS_EMAIL": "bugs@example.com", - "BULK_EMAIL_DEFAULT_FROM_EMAIL": "no-reply@example.com", - "CACHES": { - "celery": { - "BACKEND": "django.core.cache.backends.memcached.MemcachedCache", - "KEY_FUNCTION": "util.memcache.safe_key", - "KEY_PREFIX": "integration_celery", - "LOCATION": [ - "edx.devstack.memcached:11211" - ] - }, - "default": { - "BACKEND": "django.core.cache.backends.memcached.MemcachedCache", - "KEY_FUNCTION": "util.memcache.safe_key", - "KEY_PREFIX": "sandbox_default", - "LOCATION": [ - "edx.devstack.memcached:11211" - ] - }, - "general": { - "BACKEND": "django.core.cache.backends.memcached.MemcachedCache", - "KEY_FUNCTION": "util.memcache.safe_key", - "KEY_PREFIX": "sandbox_general", - "LOCATION": [ - "edx.devstack.memcached:11211" - ] - }, - "mongo_metadata_inheritance": { - "BACKEND": "django.core.cache.backends.memcached.MemcachedCache", - "KEY_FUNCTION": "util.memcache.safe_key", - "KEY_PREFIX": "integration_mongo_metadata_inheritance", - "LOCATION": [ - "edx.devstack.memcached:11211" - ] - }, - "staticfiles": { - "BACKEND": "django.core.cache.backends.memcached.MemcachedCache", - "KEY_FUNCTION": "util.memcache.safe_key", - "KEY_PREFIX": "integration_static_files", - "LOCATION": [ - "edx.devstack.memcached:11211" - ] - } - }, - "CELERY_BROKER_HOSTNAME": "localhost", - "CELERY_BROKER_TRANSPORT": "amqp", - "CERT_QUEUE": "certificates", - "CMS_BASE": "** OVERRIDDEN **", - "CODE_JAIL": { - "limits": { - "REALTIME": 3, - "VMEM": 0 - } - }, - "COMMENTS_SERVICE_KEY": "password", - "COMMENTS_SERVICE_URL": "http://edx.devstack.lms:4567", - "CONTACT_EMAIL": "info@example.com", - "DEFAULT_FEEDBACK_EMAIL": "feedback@example.com", - "DEFAULT_FROM_EMAIL": "registration@example.com", - "EMAIL_BACKEND": "django.core.mail.backends.dummy.EmailBackend", - "SOCIAL_SHARING_SETTINGS": { - "CUSTOM_COURSE_URLS": true, - "DASHBOARD_FACEBOOK": true, - "CERTIFICATE_FACEBOOK": true, - "CERTIFICATE_FACEBOOK_TEXT": "Testing facebook feature:", - "DASHBOARD_TWITTER": true, - "DASHBOARD_TWITTER_TEXT": "Testing feature:" - }, - "FEATURES": { - "AUTH_USE_OPENID_PROVIDER": true, - "CERTIFICATES_HTML_VIEW": true, - "CERTIFICATES_INSTRUCTOR_GENERATION": true, - "ENABLE_PAYMENT_FAKE": true, - "ENABLE_VERIFIED_CERTIFICATES": true, - "ENABLE_DISCUSSION_SERVICE": true, - "ENABLE_GRADE_DOWNLOADS": true, - "ENABLE_THIRD_PARTY_AUTH": true, - "ENABLE_COMBINED_LOGIN_REGISTRATION": true, - "PREVIEW_LMS_BASE": "preview.localhost:8003", - "ALLOW_AUTOMATED_SIGNUPS": true, - "AUTOMATIC_AUTH_FOR_TESTING": true, - "RESTRICT_AUTOMATIC_AUTH": false, - "MODE_CREATION_FOR_TESTING": true, - "EXPOSE_CACHE_PROGRAMS_ENDPOINT": true, - "AUTOMATIC_VERIFY_STUDENT_IDENTITY_FOR_TESTING": true, - "ENABLE_COURSE_DISCOVERY": true, - "ENABLE_SPECIAL_EXAMS": true, - "SHOW_HEADER_LANGUAGE_SELECTOR": true, - "CUSTOM_COURSES_EDX": true - }, - "FEEDBACK_SUBMISSION_EMAIL": "", - "GITHUB_REPO_ROOT": "** OVERRIDDEN **", - "LMS_BASE": "http://edx.devstack.lms:18003", - "LMS_ROOT_URL": "http://edx.devstack.lms:18003", - "LOCAL_LOGLEVEL": "INFO", - "LOGGING_ENV": "sandbox", - "LOG_DIR": "** OVERRIDDEN **", - "MEDIA_URL": "/media/", - "MKTG_URL_LINK_MAP": { - "ABOUT": "about", - "PRIVACY": "privacy", - "TOS": "tos", - "WHAT_IS_VERIFIED_CERT": "verified-certificate", - "COURSES": "courses", - "CONTACT": "contact", - "NEWS": "news", - "HONOR": "honor", - "CAREERS": "careers", - "HELP_CENTER": "help-center", - "BLOG": "blog", - "PRESS": "press", - "DONATE": "donate", - "ROOT": "root", - "SITEMAP.XML": "sitemap_xml" - }, - "REGISTRATION_EXTENSION_FORM": "openedx.core.djangoapps.user_api.tests.test_helpers.TestCaseForm", - "REGISTRATION_EXTRA_FIELDS": { - "level_of_education": "optional", - "gender": "optional", - "year_of_birth": "optional", - "mailing_address": "optional", - "goals": "optional", - "honor_code": "required", - "terms_of_service": "hidden", - "city": "hidden", - "country": "required" - }, - "SERVER_EMAIL": "devops@example.com", - "SESSION_COOKIE_DOMAIN": null, - "SITE_NAME": "localhost:8003", - "STATIC_URL_BASE": "/static/", - "SUPPORT_SITE_LINK": "https://support.example.com", - "PASSWORD_RESET_SUPPORT_LINK": "https://support.example.com/password-reset-help.html", - "ACTIVATION_EMAIL_SUPPORT_LINK": "https://support.example.com/activation-email-help.html", - "SYSLOG_SERVER": "", - "TECH_SUPPORT_EMAIL": "technical@example.com", - "THIRD_PARTY_AUTH_BACKENDS": [ - "social_core.backends.google.GoogleOAuth2", - "social_core.backends.linkedin.LinkedinOAuth2", - "social_core.backends.facebook.FacebookOAuth2", - "third_party_auth.dummy.DummyBackend", - "third_party_auth.saml.SAMLAuthBackend" - ], - "TIME_ZONE": "America/New_York", - "WIKI_ENABLED": true -} diff --git a/lms/envs/bok_choy_docker.yml b/lms/envs/bok_choy_docker.yml new file mode 100644 index 0000000000..be8b4eb3ec --- /dev/null +++ b/lms/envs/bok_choy_docker.yml @@ -0,0 +1,169 @@ +# ingested edx-platform/lms/envs/bok_choy_docker.auth.json +# ingested edx-platform/lms/envs/bok_choy_docker.env.json +ACTIVATION_EMAIL_SUPPORT_LINK: https://support.example.com/activation-email-help.html +ANALYTICS_DASHBOARD_URL: '' +AWS_ACCESS_KEY_ID: '' +AWS_SECRET_ACCESS_KEY: '' +BUGS_EMAIL: bugs@example.com +BULK_EMAIL_DEFAULT_FROM_EMAIL: no-reply@example.com +CACHES: + celery: + BACKEND: django.core.cache.backends.memcached.MemcachedCache + KEY_FUNCTION: util.memcache.safe_key + KEY_PREFIX: integration_celery + LOCATION: ['edx.devstack.memcached:11211'] + default: + BACKEND: django.core.cache.backends.memcached.MemcachedCache + KEY_FUNCTION: util.memcache.safe_key + KEY_PREFIX: sandbox_default + LOCATION: ['edx.devstack.memcached:11211'] + general: + BACKEND: django.core.cache.backends.memcached.MemcachedCache + KEY_FUNCTION: util.memcache.safe_key + KEY_PREFIX: sandbox_general + LOCATION: ['edx.devstack.memcached:11211'] + mongo_metadata_inheritance: + BACKEND: django.core.cache.backends.memcached.MemcachedCache + KEY_FUNCTION: util.memcache.safe_key + KEY_PREFIX: integration_mongo_metadata_inheritance + LOCATION: ['edx.devstack.memcached:11211'] + staticfiles: + BACKEND: django.core.cache.backends.memcached.MemcachedCache + KEY_FUNCTION: util.memcache.safe_key + KEY_PREFIX: integration_static_files + LOCATION: ['edx.devstack.memcached:11211'] +CC_PROCESSOR: + CyberSource2: {ACCESS_KEY: abcd123, PROFILE_ID: edx, PURCHASE_ENDPOINT: /shoppingcart/payment_fake, + SECRET_KEY: abcd123} +CC_PROCESSOR_NAME: CyberSource2 +CELERY_BROKER_HOSTNAME: localhost +CELERY_BROKER_PASSWORD: celery +CELERY_BROKER_TRANSPORT: amqp +CELERY_BROKER_USER: celery +CERT_QUEUE: certificates +CMS_BASE: '** OVERRIDDEN **' +CODE_JAIL: + limits: {REALTIME: 3, VMEM: 0} +COMMENTS_SERVICE_KEY: password +COMMENTS_SERVICE_URL: http://edx.devstack.lms:4567 +CONTACT_EMAIL: info@example.com +CONTENTSTORE: + DOC_STORE_CONFIG: + collection: modulestore + db: test + host: [edx.devstack.mongo] + port: 27017 + ENGINE: xmodule.contentstore.mongo.MongoContentStore + OPTIONS: + db: test + host: [edx.devstack.mongo] + port: 27017 +DATABASES: + default: {ENGINE: django.db.backends.mysql, HOST: edx.devstack.mysql, NAME: edxtest, + PASSWORD: '', PORT: '3306', USER: root} + student_module_history: {ENGINE: django.db.backends.mysql, HOST: edx.devstack.mysql, + NAME: student_module_history_test, PASSWORD: '', PORT: '3306', USER: root} +DEFAULT_FEEDBACK_EMAIL: feedback@example.com +DEFAULT_FROM_EMAIL: registration@example.com +DJFS: {aws_access_key_id: test, aws_secret_access_key: test, bucket: test, prefix: test, + type: s3fs} +DOC_STORE_CONFIG: + collection: modulestore + db: test + host: [edx.devstack.mongo] + port: 27017 +EMAIL_BACKEND: django.core.mail.backends.dummy.EmailBackend +EVENT_TRACKING_BACKENDS: + mongo: + ENGINE: eventtracking.backends.mongodb.MongoBackend + OPTIONS: + collection: events + database: test + host: [edx.devstack.mongo] + port: 27017 +FEATURES: {ALLOW_AUTOMATED_SIGNUPS: true, AUTH_USE_OPENID_PROVIDER: true, AUTOMATIC_AUTH_FOR_TESTING: true, + AUTOMATIC_VERIFY_STUDENT_IDENTITY_FOR_TESTING: true, CERTIFICATES_HTML_VIEW: true, + CERTIFICATES_INSTRUCTOR_GENERATION: true, CUSTOM_COURSES_EDX: true, ENABLE_COMBINED_LOGIN_REGISTRATION: true, + ENABLE_COURSE_DISCOVERY: true, ENABLE_DISCUSSION_SERVICE: true, ENABLE_GRADE_DOWNLOADS: true, + ENABLE_PAYMENT_FAKE: true, ENABLE_SPECIAL_EXAMS: true, ENABLE_THIRD_PARTY_AUTH: true, + ENABLE_VERIFIED_CERTIFICATES: true, EXPOSE_CACHE_PROGRAMS_ENDPOINT: true, MODE_CREATION_FOR_TESTING: true, + PREVIEW_LMS_BASE: 'preview.localhost:8003', RESTRICT_AUTOMATIC_AUTH: false, SHOW_HEADER_LANGUAGE_SELECTOR: true} +FEEDBACK_SUBMISSION_EMAIL: '' +GITHUB_REPO_ROOT: '** OVERRIDDEN **' +JWT_AUTH: {JWT_PRIVATE_SIGNING_JWK: '{"e": "AQAB", "d": "HIiV7KNjcdhVbpn3KT-I9n3JPf5YbGXsCIedmPqDH1d4QhBofuAqZ9zebQuxkRUpmqtYMv0Zi6ECSUqH387GYQF_XvFUFcjQRPycISd8TH0DAKaDpGr-AYNshnKiEtQpINhcP44I1AYNPCwyoxXA1fGTtmkKChsuWea7o8kytwU5xSejvh5-jiqu2SF4GEl0BEXIAPZsgbzoPIWNxgO4_RzNnWs6nJZeszcaDD0CyezVSuH9QcI6g5QFzAC_YuykSsaaFJhZ05DocBsLczShJ9Omf6PnK9xlm26I84xrEh_7x4fVmNBg3xWTLh8qOnHqGko93A1diLRCrKHOvnpvgQ", + "n": "o5cn3ljSRi6FaDEKTn0PS-oL9EFyv1pI7dRgffQLD1qf5D6sprmYfWWokSsrWig8u2y0HChSygR6Jn5KXBqQn6FpM0dDJLnWQDRXHLl3Ey1iPYgDSmOIsIGrV9ZyNCQwk03wAgWbfdBTig3QSDYD-sTNOs3pc4UD_PqAvU2nz_1SS2ZiOwOn5F6gulE1L0iE3KEUEvOIagfHNVhz0oxa_VRZILkzV-zr6R_TW1m97h4H8jXl_VJyQGyhMGGypuDrQ9_vaY_RLEulLCyY0INglHWQ7pckxBtI5q55-Vio2wgewe2_qYcGsnBGaDNbySAsvYcWRrqDiFyzrJYivodqTQ", + "q": "3T3DEtBUka7hLGdIsDlC96Uadx_q_E4Vb1cxx_4Ss_wGp1Loz3N3ZngGyInsKlmbBgLo1Ykd6T9TRvRNEWEtFSOcm2INIBoVoXk7W5RuPa8Cgq2tjQj9ziGQ08JMejrPlj3Q1wmALJr5VTfvSYBu0WkljhKNCy1KB6fCby0C9WE", + "p": "vUqzWPZnDG4IXyo-k5F0bHV0BNL_pVhQoLW7eyFHnw74IOEfSbdsMspNcPSFIrtgPsn7981qv3lN_staZ6JflKfHayjB_lvltHyZxfl0dvruShZOx1N6ykEo7YrAskC_qxUyrIvqmJ64zPW3jkuOYrFs7Ykj3zFx3Zq1H5568G0", + "kid": "BTZ9HA6K", "kty": "RSA"}', JWT_PUBLIC_SIGNING_JWK_SET: '{"keys": [{"kid": + "BTZ9HA6K", "e": "AQAB", "kty": "RSA", "n": "o5cn3ljSRi6FaDEKTn0PS-oL9EFyv1pI7dRgffQLD1qf5D6sprmYfWWokSsrWig8u2y0HChSygR6Jn5KXBqQn6FpM0dDJLnWQDRXHLl3Ey1iPYgDSmOIsIGrV9ZyNCQwk03wAgWbfdBTig3QSDYD-sTNOs3pc4UD_PqAvU2nz_1SS2ZiOwOn5F6gulE1L0iE3KEUEvOIagfHNVhz0oxa_VRZILkzV-zr6R_TW1m97h4H8jXl_VJyQGyhMGGypuDrQ9_vaY_RLEulLCyY0INglHWQ7pckxBtI5q55-Vio2wgewe2_qYcGsnBGaDNbySAsvYcWRrqDiFyzrJYivodqTQ"}]}', + JWT_SECRET_KEY: super-secret-key} +LMS_BASE: http://edx.devstack.lms:18003 +LMS_ROOT_URL: http://edx.devstack.lms:18003 +LOCAL_LOGLEVEL: INFO +LOGGING_ENV: sandbox +LOG_DIR: '** OVERRIDDEN **' +MEDIA_URL: /media/ +MKTG_URL_LINK_MAP: {ABOUT: about, BLOG: blog, CAREERS: careers, CONTACT: contact, + COURSES: courses, DONATE: donate, HELP_CENTER: help-center, HONOR: honor, NEWS: news, + PRESS: press, PRIVACY: privacy, ROOT: root, SITEMAP.XML: sitemap_xml, TOS: tos, + WHAT_IS_VERIFIED_CERT: verified-certificate} +MODULESTORE: + default: + ENGINE: xmodule.modulestore.mixed.MixedModuleStore + OPTIONS: + mappings: {} + stores: + - DOC_STORE_CONFIG: + collection: modulestore + db: test + host: [edx.devstack.mongo] + port: 27017 + ENGINE: xmodule.modulestore.mongo.DraftMongoModuleStore + NAME: draft + OPTIONS: + collection: modulestore + db: test + default_class: xmodule.hidden_module.HiddenDescriptor + fs_root: '** OVERRIDDEN **' + host: [edx.devstack.mongo] + port: 27017 + render_template: edxmako.shortcuts.render_to_string + - ENGINE: xmodule.modulestore.xml.XMLModuleStore + NAME: xml + OPTIONS: {data_dir: '** OVERRIDDEN **', default_class: xmodule.hidden_module.HiddenDescriptor} +PASSWORD_RESET_SUPPORT_LINK: https://support.example.com/password-reset-help.html +REGISTRATION_EXTENSION_FORM: openedx.core.djangoapps.user_api.tests.test_helpers.TestCaseForm +REGISTRATION_EXTRA_FIELDS: {city: hidden, country: required, gender: optional, goals: optional, + honor_code: required, level_of_education: optional, mailing_address: optional, terms_of_service: hidden, + year_of_birth: optional} +SECRET_KEY: '' +SERVER_EMAIL: devops@example.com +SESSION_COOKIE_DOMAIN: null +SITE_NAME: localhost:8003 +SOCIAL_SHARING_SETTINGS: {CERTIFICATE_FACEBOOK: true, CERTIFICATE_FACEBOOK_TEXT: 'Testing + facebook feature:', CUSTOM_COURSE_URLS: true, DASHBOARD_FACEBOOK: true, DASHBOARD_TWITTER: true, + DASHBOARD_TWITTER_TEXT: 'Testing feature:'} +STATIC_URL_BASE: /static/ +SUPPORT_SITE_LINK: https://support.example.com +SYSLOG_SERVER: '' +TECH_SUPPORT_EMAIL: technical@example.com +THIRD_PARTY_AUTH_BACKENDS: [social_core.backends.google.GoogleOAuth2, social_core.backends.linkedin.LinkedinOAuth2, + social_core.backends.facebook.FacebookOAuth2, third_party_auth.dummy.DummyBackend, + third_party_auth.saml.SAMLAuthBackend] +TIME_ZONE: America/New_York +TRACKING_BACKENDS: + mongo: + ENGINE: track.backends.mongodb.MongoBackend + OPTIONS: + collection: events + database: test + host: [edx.devstack.mongo] + port: 27017 +WIKI_ENABLED: true +XQUEUE_INTERFACE: + basic_auth: [edx, edx] + django_auth: {password: password, username: lms} + url: '** OVERRIDDEN **' +ZENDESK_API_KEY: '' +ZENDESK_USER: '' + diff --git a/lms/envs/production.py b/lms/envs/production.py index 78935a190c..441200e6f5 100644 --- a/lms/envs/production.py +++ b/lms/envs/production.py @@ -17,8 +17,9 @@ Common traits: # and throws spurious errors. Therefore, we disable invalid-name checking. # pylint: disable=invalid-name +import codecs import datetime -import json +import yaml import os import dateutil @@ -26,11 +27,33 @@ import dateutil from corsheaders.defaults import default_headers as corsheaders_default_headers from path import Path as path from xmodule.modulestore.modulestore_settings import convert_module_store_setting_if_needed +from openedx.core.djangoapps.plugins import plugin_settings, constants as plugin_constants +from django.core.exceptions import ImproperlyConfigured from .common import * from openedx.core.lib.derived import derive_settings # pylint: disable=wrong-import-order from openedx.core.lib.logsettings import get_logger_config # pylint: disable=wrong-import-order + +def get_env_setting(setting): + """ Get the environment setting or return exception """ + try: + return os.environ[setting] + except KeyError: + error_msg = u"Set the %s env variable" % setting + raise ImproperlyConfigured(error_msg) + +# A file path to a YAML file from which to load all the configuration for the edx platform +CONFIG_FILE = get_env_setting('LMS_CFG') + +with codecs.open(CONFIG_FILE, encoding='utf-8') as f: + __config__ = yaml.safe_load(f) + + # ENV_TOKENS and AUTH_TOKENS are included for reverse compatability. + # Removing them may break plugins that rely on them. + ENV_TOKENS = __config__ + AUTH_TOKENS = __config__ + # SERVICE_VARIANT specifies name of the variant used, which decides what JSON # configuration files are read during startup. SERVICE_VARIANT = os.environ.get('SERVICE_VARIANT', None) @@ -100,12 +123,6 @@ CELERY_QUEUES = { CELERY_ROUTES = "{}celery.Router".format(QUEUE_VARIANT) CELERYBEAT_SCHEDULE = {} # For scheduling tasks, entries can be added to this dict -########################## NON-SECURE ENV CONFIG ############################## -# Things like server locations, ports, etc. - -with open(CONFIG_ROOT / CONFIG_PREFIX + "env.json") as env_file: - ENV_TOKENS = json.load(env_file) - # STATIC_ROOT specifies the directory where static files are # collected STATIC_ROOT_BASE = ENV_TOKENS.get('STATIC_ROOT_BASE', None) @@ -458,12 +475,6 @@ if FEATURES.get('ENABLE_CORS_HEADERS') or FEATURES.get('ENABLE_CROSS_DOMAIN_CSRF # 'courseware.student_field_overrides.IndividualStudentOverrideProvider'. FIELD_OVERRIDE_PROVIDERS = tuple(ENV_TOKENS.get('FIELD_OVERRIDE_PROVIDERS', [])) -############################## SECURE AUTH ITEMS ############### -# Secret things: passwords, access keys, etc. - -with open(CONFIG_ROOT / CONFIG_PREFIX + "auth.json") as auth_file: - AUTH_TOKENS = json.load(auth_file) - ############### XBlock filesystem field config ########## if 'DJFS' in AUTH_TOKENS and AUTH_TOKENS['DJFS'] is not None: DJFS = AUTH_TOKENS['DJFS'] @@ -1089,8 +1100,14 @@ PROFILE_MICROFRONTEND_URL = ENV_TOKENS.get('PROFILE_MICROFRONTEND_URL', PROFILE_ ############################### Plugin Settings ############################### # This is at the bottom because it is going to load more settings after base settings are loaded -from openedx.core.djangoapps.plugins import plugin_settings, constants as plugin_constants # pylint: disable=wrong-import-order, wrong-import-position -plugin_settings.add_plugins(__name__, plugin_constants.ProjectType.LMS, plugin_constants.SettingsType.AWS) + +# Load aws.py in plugins for reverse compatibility. This can be removed after aws.py +# is officially removed. +plugin_settings.add_plugins(__name__, plugin_constants.ProjectType.LMS, + plugin_constants.SettingsType.AWS) + +# Load production.py in plugins +plugin_settings.add_plugins(__name__, plugin_constants.ProjectType.LMS, plugin_constants.SettingsType.PRODUCTION) ########################## Derive Any Derived Settings ####################### diff --git a/openedx/core/djangoapps/plugins/README.rst b/openedx/core/djangoapps/plugins/README.rst index 1b68ef7bc7..2f2bad94c3 100644 --- a/openedx/core/djangoapps/plugins/README.rst +++ b/openedx/core/djangoapps/plugins/README.rst @@ -144,7 +144,7 @@ class:: ProjectType.LMS: { # Configure each Settings Type, as needed. - SettingsType.AWS: { + SettingsType.PRODUCTION: { # The python path (relative to this app) to the settings module for the relevant Project Type and Settings Type. # Optional; Defaults to u'settings'. diff --git a/openedx/core/djangoapps/plugins/constants.py b/openedx/core/djangoapps/plugins/constants.py index e9acdb370c..ea4671acac 100644 --- a/openedx/core/djangoapps/plugins/constants.py +++ b/openedx/core/djangoapps/plugins/constants.py @@ -29,7 +29,8 @@ class SettingsType(object): See https://github.com/edx/edx-platform/master/lms/envs/docs/README.rst for further information on each Settings Type. """ - AWS = u'aws' + AWS = u'aws' # aws.py has been deprecated. See https://openedx.atlassian.net/browse/DEPR-14 + PRODUCTION = u'production' COMMON = u'common' DEVSTACK = u'devstack' TEST = u'test' diff --git a/openedx/core/djangoapps/zendesk_proxy/settings/aws.py b/openedx/core/djangoapps/zendesk_proxy/settings/aws.py index 93635bfbe3..08701a4620 100644 --- a/openedx/core/djangoapps/zendesk_proxy/settings/aws.py +++ b/openedx/core/djangoapps/zendesk_proxy/settings/aws.py @@ -1,4 +1,4 @@ -""" Production settings for zendesk proxy.""" +""" AWS settings for zendesk proxy.""" def plugin_settings(settings): diff --git a/openedx/features/journals/settings/aws.py b/openedx/features/journals/settings/aws.py index db5debfe37..dcb0a38f8e 100644 --- a/openedx/features/journals/settings/aws.py +++ b/openedx/features/journals/settings/aws.py @@ -3,7 +3,7 @@ def plugin_settings(settings): """ - Settings for AWS/Production + Settings for AWS """ settings.JOURNALS_URL_ROOT = settings.ENV_TOKENS.get('JOURNALS_URL_ROOT', settings.JOURNALS_URL_ROOT) settings.JOURNALS_FRONTEND_URL = settings.ENV_TOKENS.get('JOURNALS_FRONTEND_URL', settings.JOURNALS_FRONTEND_URL)