From 9c190ca0b6654691c88615b6d7cb132b03cf1a60 Mon Sep 17 00:00:00 2001 From: Muhammad Farhan Date: Tue, 19 Nov 2024 18:21:40 +0500 Subject: [PATCH 1/6] feat: Add enterprise subsidy service to Devstack --- .github/workflows/provisioning-tests.yml | 2 +- check.sh | 6 ++++++ docker-compose-host.yml | 10 +++++++++- docker-compose.yml | 23 +++++++++++++++++++++++ docs/service_list.rst | 3 +++ options.mk | 2 +- provision-enterprise-subsidy.sh | 24 ++++++++++++++++++++++++ provision-mysql80.sql | 4 ++++ provision.sh | 1 + provision.sql | 4 ++++ repo.sh | 2 ++ 11 files changed, 78 insertions(+), 3 deletions(-) create mode 100755 provision-enterprise-subsidy.sh diff --git a/.github/workflows/provisioning-tests.yml b/.github/workflows/provisioning-tests.yml index a55f3f7b..7c49f13d 100644 --- a/.github/workflows/provisioning-tests.yml +++ b/.github/workflows/provisioning-tests.yml @@ -30,7 +30,7 @@ jobs: os: - ubuntu-20.04 # Ubuntu 20.04 "Focal Fossa" python-version: [ '3.11' ] - services: [ discovery+lms+forum ,registrar+lms, ecommerce+lms, edx_notes_api+lms, credentials+lms, xqueue, analyticsapi+insights+lms, designer+lms, enterprise-catalog+enterprise-access+lms, license-manager+lms] + services: [ discovery+lms+forum ,registrar+lms, ecommerce+lms, edx_notes_api+lms, credentials+lms, xqueue, analyticsapi+insights+lms, designer+lms, enterprise-subsidy+enterprise-catalog+enterprise-access+lms, license-manager+lms] fail-fast: false # some services can be flaky; let others run to completion even if one fails steps: diff --git a/check.sh b/check.sh index 8a28dd63..b0c75f1d 100755 --- a/check.sh +++ b/check.sh @@ -120,6 +120,12 @@ if should_check enterprise_access; then "curl --fail -L http://localhost:18130/health/" fi +if should_check enterprise-subsidy; then + echo "Checking enterprise-subsidy health:" + run_check enterprise_subsidy_heartbeat enterprise-subsidy \ + "curl --fail -L http://localhost:18280/health/" +fi + if should_check discovery; then echo "Checking discovery health:" run_check discovery_heartbeat discovery \ diff --git a/docker-compose-host.yml b/docker-compose-host.yml index cd4c8c14..b1d5c001 100644 --- a/docker-compose-host.yml +++ b/docker-compose-host.yml @@ -90,9 +90,16 @@ services: - ${DEVSTACK_WORKSPACE}/edx-analytics-data-api:/edx/app/analytics_api/analytics_api - ${DEVSTACK_WORKSPACE}/src:/edx/src - ${PWD}/py_configuration_files/analytics_data_api.py:/edx/app/analytics_api/analytics_api/analyticsdataserver/settings/devstack.py + enterprise-subsidy: + volumes: + - ${DEVSTACK_WORKSPACE}/enterprise-subsidy:/edx/app/enterprise-subsidy + - ${DEVSTACK_WORKSPACE}/src:/edx/src + - ${PWD}/py_configuration_files/enterprise_subsidy.py:/edx/app/enterprise-subsidy/enterprise_subsidy/settings/devstack.py + enterprise-catalog: volumes: - ${DEVSTACK_WORKSPACE}/enterprise-catalog:/edx/app/enterprise_catalog/enterprise_catalog + - ${PWD}/py_configuration_files/enterprise_catalog.py:/edx/app/enterprise_catalog/enterprise_catalog/settings/devstack.py enterprise-catalog-worker: volumes: - ${DEVSTACK_WORKSPACE}/enterprise-catalog:/edx/app/enterprise_catalog/enterprise_catalog @@ -114,7 +121,8 @@ services: volumes: - ${DEVSTACK_WORKSPACE}/license-manager:/edx/app/license_manager - ${DEVSTACK_WORKSPACE}/src:/edx/src:cached - - ${PWD}/py_configuration_files/license_manager.py:/edx/app/license_manager/license_manager/settings/devstack.py + - ${PWD}/py_configuration_files/license_manager.py:/edx/app/license_manager/license_manager/settings/devstack.py + # Note that frontends mount `src` to /edx/app/src instead of /edx/src. # See ADR #5 for rationale. frontend-app-account: diff --git a/docker-compose.yml b/docker-compose.yml index c5e882dc..fccf33af 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -913,6 +913,29 @@ services: stdin_open: true tty: true + enterprise-subsidy: + image: edxops/enterprise-subsidy-dev + container_name: edx.devstack.enterprise-subsidy + hostname: enterprise-subsidy.devstack.edx + depends_on: + - mysql80 + - memcached + command: bash -c 'while true; do python /edx/app/enterprise-subsidy/manage.py runserver 0.0.0.0:18280; sleep 2; done' + stdin_open: true + tty: true + environment: + DB_HOST: edx.devstack.mysql80 + DB_PORT: 3306 + DB_USER: subsidy001 + DB_PASSWORD: password + DJANGO_SETTINGS_MODULE: enterprise_subsidy.settings.devstack + MEMCACHE_HOST: memcached.devstack.edx:11211 + working_dir: /edx/app/enterprise-subsidy + ports: + - "18280:18280" + volumes: + - /edx/var/enterprise-subsidy + # ========================================================================== # edX Microfrontends # diff --git a/docs/service_list.rst b/docs/service_list.rst index 1b58efe1..24d7ff35 100644 --- a/docs/service_list.rst +++ b/docs/service_list.rst @@ -73,6 +73,8 @@ Instead of a service name or list, you can also run commands like ``make dev.pro +------------------------------------+-------------------------------------+----------------+--------------+ | `enterprise-access`_ | http://localhost:18270 | Python/Django | Extra | +------------------------------------+-------------------------------------+----------------+--------------+ +| `enterprise-subsidy`_ | http://localhost:18280 | Python/Django | Extra | ++------------------------------------+-------------------------------------+----------------+--------------+ Some common service combinations include: @@ -110,3 +112,4 @@ Some common service combinations include: .. _enterprise-catalog: https://github.com/openedx/enterprise-catalog .. _license-manager: https://github.com/openedx/license-manager .. _enterprise-access: https://github.com/openedx/enterprise-access +.. _enterprise-subsidy: https://github.com/openedx/enterprise-subsidy diff --git a/options.mk b/options.mk index f135e670..b1f4bb10 100644 --- a/options.mk +++ b/options.mk @@ -67,7 +67,7 @@ credentials+discovery+ecommerce+edx_notes_api+forum+frontend-app-authn+frontend- # Separated by plus signs. # Separated by plus signs. Listed in alphabetical order for clarity. EDX_SERVICES ?= \ -analyticsapi+codejail+credentials+cms+cms-worker+cms_watcher+discovery+ecommerce+edx_notes_api+forum+frontend-app-account+frontend-app-learner-dashboard+frontend-app-learner-record+frontend-app-profile+frontend-app-authn+frontend-app-course-authoring+frontend-app-gradebook+frontend-app-ora-grading+frontend-app-learning+frontend-app-library-authoring+frontend-app-payment+frontend-app-program-console+frontend-app-publisher+insights+lms+lms-worker+lms_watcher+registrar+registrar-worker+xqueue+xqueue_consumer+enterprise-catalog+license-manager+designer+enterprise-access +analyticsapi+codejail+enterprise-subsidy+credentials+cms+cms-worker+cms_watcher+discovery+ecommerce+edx_notes_api+forum+frontend-app-account+frontend-app-learner-dashboard+frontend-app-learner-record+frontend-app-profile+frontend-app-authn+frontend-app-course-authoring+frontend-app-gradebook+frontend-app-ora-grading+frontend-app-learning+frontend-app-library-authoring+frontend-app-payment+frontend-app-program-console+frontend-app-publisher+insights+lms+lms-worker+lms_watcher+registrar+registrar-worker+xqueue+xqueue_consumer+enterprise-catalog+license-manager+designer+enterprise-access # Services with database migrations. # Should be a subset of $(EDX_SERVICES). diff --git a/provision-enterprise-subsidy.sh b/provision-enterprise-subsidy.sh new file mode 100755 index 00000000..30c82155 --- /dev/null +++ b/provision-enterprise-subsidy.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash +set -eu -o pipefail +set -x + +. scripts/colors.sh + +name="enterprise-subsidy" +port="18280" + +docker compose up -d lms +docker compose up -d ${name} + +# Run migrations +echo -e "${GREEN}Running migrations for ${name}...${NC}" +docker compose exec ${name} bash -c "cd /edx/app/${name}/ && make migrate" + +# Create superuser +echo -e "${GREEN}Creating super-user for ${name}...${NC}" +docker compose exec ${name} bash -c "echo 'from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.create_superuser(\"edx\", \"edx@example.com\", \"edx\") if not User.objects.filter(username=\"edx\").exists() else None' | python /edx/app/${name}/manage.py shell" + +# Provision IDA User in LMS +echo -e "${GREEN}Provisioning ${name}_worker in LMS...${NC}" + +./provision-ida-user.sh ${name} ${name} ${port} diff --git a/provision-mysql80.sql b/provision-mysql80.sql index 9af9e464..58451c80 100644 --- a/provision-mysql80.sql +++ b/provision-mysql80.sql @@ -61,4 +61,8 @@ CREATE USER IF NOT EXISTS 'edxapp001'@'%' IDENTIFIED BY 'password'; GRANT ALL ON edxapp.* TO 'edxapp001'@'%'; GRANT ALL ON edxapp_csmh.* TO 'edxapp001'@'%'; +CREATE DATABASE IF NOT EXISTS enterprise_subsidy; +CREATE USER IF NOT EXISTS 'subsidy001'@'%' IDENTIFIED BY 'password'; +GRANT ALL ON enterprise_subsidy.* TO 'subsidy001'@'%'; + FLUSH PRIVILEGES; diff --git a/provision.sh b/provision.sh index 11a6f2d9..300d475f 100755 --- a/provision.sh +++ b/provision.sh @@ -53,6 +53,7 @@ enterprise-catalog \ license-manager \ designer \ enterprise-access \ +enterprise-subsidy \ " # What should we provision? diff --git a/provision.sql b/provision.sql index 52a674cb..9e21daf3 100644 --- a/provision.sql +++ b/provision.sql @@ -36,6 +36,10 @@ GRANT ALL ON `reports`.* TO 'analytics001'@'%' IDENTIFIED BY 'password'; CREATE DATABASE IF NOT EXISTS `reports_v1`; GRANT ALL ON `reports_v1`.* TO 'analytics001'@'%' IDENTIFIED BY 'password'; +CREATE DATABASE IF NOT EXISTS enterprise_subsidy; +CREATE USER IF NOT EXISTS 'subsidy001'@'%' IDENTIFIED BY 'password'; +GRANT ALL ON enterprise_subsidy.* TO 'subsidy001'@'%'; + CREATE DATABASE IF NOT EXISTS `enterprise_catalog`; GRANT ALL ON `enterprise_catalog`.* TO 'catalog001'@'%' IDENTIFIED BY 'password'; diff --git a/repo.sh b/repo.sh index 43d84d05..61d6546b 100755 --- a/repo.sh +++ b/repo.sh @@ -53,6 +53,7 @@ non_release_repos=( "https://github.com/openedx/frontend-app-account.git" "https://github.com/openedx/frontend-app-profile.git" "https://github.com/openedx/frontend-app-ora-grading.git" + "https://github.com/openedx/enterprise-subsidy.git" ) ssh_repos=( @@ -88,6 +89,7 @@ non_release_ssh_repos=( "git@github.com:openedx/frontend-app-account.git" "git@github.com:openedx/frontend-app-profile.git" "git@github.com:openedx/frontend-app-ora-grading.git" + "git@github.com:openedx/enterprise-subsidy.git" ) if [ -n "${OPENEDX_RELEASE}" ]; then From 5f74b5e74154550414694a6f7949383a06d9cfd1 Mon Sep 17 00:00:00 2001 From: Hunia Fatima Date: Fri, 14 Mar 2025 16:50:29 +0500 Subject: [PATCH 2/6] fix: added db_name, removed memchached --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index fccf33af..acf8abdf 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -928,8 +928,8 @@ services: DB_PORT: 3306 DB_USER: subsidy001 DB_PASSWORD: password + DB_NAME: enterprise_subsidy DJANGO_SETTINGS_MODULE: enterprise_subsidy.settings.devstack - MEMCACHE_HOST: memcached.devstack.edx:11211 working_dir: /edx/app/enterprise-subsidy ports: - "18280:18280" From 023245a75b0430950e7ce333c1cdecdf60c7a533 Mon Sep 17 00:00:00 2001 From: Hunia Fatima Date: Fri, 14 Mar 2025 17:08:24 +0500 Subject: [PATCH 3/6] chore: corrected path for settings file --- check.sh | 6 +++--- docker-compose-host.yml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/check.sh b/check.sh index b0c75f1d..f54ad4b7 100755 --- a/check.sh +++ b/check.sh @@ -120,9 +120,9 @@ if should_check enterprise_access; then "curl --fail -L http://localhost:18130/health/" fi -if should_check enterprise-subsidy; then - echo "Checking enterprise-subsidy health:" - run_check enterprise_subsidy_heartbeat enterprise-subsidy \ +if should_check enterprise_subsidy; then + echo "Checking enterprise_subsidy health:" + run_check enterprise_subsidy_heartbeat enterprise_subsidy \ "curl --fail -L http://localhost:18280/health/" fi diff --git a/docker-compose-host.yml b/docker-compose-host.yml index b1d5c001..915eb136 100644 --- a/docker-compose-host.yml +++ b/docker-compose-host.yml @@ -92,9 +92,9 @@ services: - ${PWD}/py_configuration_files/analytics_data_api.py:/edx/app/analytics_api/analytics_api/analyticsdataserver/settings/devstack.py enterprise-subsidy: volumes: - - ${DEVSTACK_WORKSPACE}/enterprise-subsidy:/edx/app/enterprise-subsidy + - ${DEVSTACK_WORKSPACE}/enterprise-subsidy:/edx/app/enterprise_subsidy - ${DEVSTACK_WORKSPACE}/src:/edx/src - - ${PWD}/py_configuration_files/enterprise_subsidy.py:/edx/app/enterprise-subsidy/enterprise_subsidy/settings/devstack.py + - ${PWD}/py_configuration_files/enterprise_subsidy.py:/edx/app/enterprise_subsidy/enterprise_subsidy/settings/devstack.py enterprise-catalog: volumes: @@ -121,7 +121,7 @@ services: volumes: - ${DEVSTACK_WORKSPACE}/license-manager:/edx/app/license_manager - ${DEVSTACK_WORKSPACE}/src:/edx/src:cached - - ${PWD}/py_configuration_files/license_manager.py:/edx/app/license_manager/license_manager/settings/devstack.py + - ${PWD}/py_configuration_files/license_manager.py:/edx/app/license_manager/license_manager/settings/devstack.py # Note that frontends mount `src` to /edx/app/src instead of /edx/src. # See ADR #5 for rationale. From d0169bf0cad28e864acae9cf0fcd6b32c2098f37 Mon Sep 17 00:00:00 2001 From: Hunia Fatima Date: Wed, 19 Mar 2025 10:51:24 +0500 Subject: [PATCH 4/6] chore: add check for enterprise subsidy back --- check.sh | 4 ++-- docker-compose-host.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/check.sh b/check.sh index f54ad4b7..0c1b53fa 100755 --- a/check.sh +++ b/check.sh @@ -120,9 +120,9 @@ if should_check enterprise_access; then "curl --fail -L http://localhost:18130/health/" fi -if should_check enterprise_subsidy; then +if should_check enterprise-subsidy; then echo "Checking enterprise_subsidy health:" - run_check enterprise_subsidy_heartbeat enterprise_subsidy \ + run_check enterprise-subsidy_heartbeat enterprise_subsidy \ "curl --fail -L http://localhost:18280/health/" fi diff --git a/docker-compose-host.yml b/docker-compose-host.yml index 915eb136..e63812a5 100644 --- a/docker-compose-host.yml +++ b/docker-compose-host.yml @@ -92,9 +92,9 @@ services: - ${PWD}/py_configuration_files/analytics_data_api.py:/edx/app/analytics_api/analytics_api/analyticsdataserver/settings/devstack.py enterprise-subsidy: volumes: - - ${DEVSTACK_WORKSPACE}/enterprise-subsidy:/edx/app/enterprise_subsidy + - ${DEVSTACK_WORKSPACE}/enterprise-subsidy:/edx/app/enterprise-subsidy - ${DEVSTACK_WORKSPACE}/src:/edx/src - - ${PWD}/py_configuration_files/enterprise_subsidy.py:/edx/app/enterprise_subsidy/enterprise_subsidy/settings/devstack.py + - ${PWD}/py_configuration_files/enterprise_subsidy.py:/edx/app/enterprise-subsidy/enterprise_subsidy/settings/devstack.py enterprise-catalog: volumes: From 9882734f735d181720b2ce73dd8814ce4c333742 Mon Sep 17 00:00:00 2001 From: Muhammad Soban Javed Date: Fri, 28 Mar 2025 20:03:17 +0500 Subject: [PATCH 5/6] fix: use devstack's memcached in enterprise-subsidy --- py_configuration_files/enterprise_subsidy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/py_configuration_files/enterprise_subsidy.py b/py_configuration_files/enterprise_subsidy.py index 42ad1219..9a4fb364 100644 --- a/py_configuration_files/enterprise_subsidy.py +++ b/py_configuration_files/enterprise_subsidy.py @@ -28,7 +28,7 @@ CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.PyMemcacheCache', - 'LOCATION': 'enterprise-subsidy.memcache:11211', + 'LOCATION': 'edx.devstack.memcached:11211', } } From 3274a31c6f77b31864ac9261ab3b99252bedb4bf Mon Sep 17 00:00:00 2001 From: Muhammad Soban Javed Date: Fri, 4 Apr 2025 14:31:55 +0500 Subject: [PATCH 6/6] fix: use hyphen in health check of enterprise-subsidy --- check.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/check.sh b/check.sh index 0c1b53fa..3db2720c 100755 --- a/check.sh +++ b/check.sh @@ -122,7 +122,7 @@ fi if should_check enterprise-subsidy; then echo "Checking enterprise_subsidy health:" - run_check enterprise-subsidy_heartbeat enterprise_subsidy \ + run_check enterprise-subsidy_heartbeat enterprise-subsidy \ "curl --fail -L http://localhost:18280/health/" fi