Skip to content

Commit 6187980

Browse files
committed
feat: add license manager ida to devstack
1 parent 4255f6a commit 6187980

File tree

12 files changed

+141
-8
lines changed

12 files changed

+141
-8
lines changed

.github/workflows/provisioning-tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ jobs:
3030
os:
3131
- ubuntu-20.04 # Ubuntu 20.04 "Focal Fossa"
3232
python-version: [ '3.11' ]
33-
services: [ discovery+lms+forum ,registrar+lms, ecommerce+lms, edx_notes_api+lms, credentials+lms, xqueue, analyticsapi+insights+lms]
33+
services: [ discovery+lms+forum ,registrar+lms, ecommerce+lms, edx_notes_api+lms, credentials+lms, xqueue, analyticsapi+insights+lms, license-manager+lms]
3434
fail-fast: false # some services can be flaky; let others run to completion even if one fails
3535

3636
steps:

check.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,12 @@ if should_check analyticsapi; then
156156
"curl --fail -L http://localhost:19001/health/"
157157
fi
158158

159+
if should_check license-manager; then
160+
echo "Running License Manager Devstack tests: "
161+
run_check license_manager_heartbeat license-manager \
162+
"curl --fail -L http://localhost:18170/health/"
163+
fi
164+
159165
echo "Successful checks:${succeeded:- NONE}"
160166
echo "Failed checks:${failed:- NONE}"
161167
if [[ -z "$succeeded" ]] && [[ -z "$failed" ]]; then

docker-compose-host.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,21 @@ services:
7171
- ${DEVSTACK_WORKSPACE}/edx-analytics-data-api:/edx/app/analytics_api/analytics_api
7272
- ${DEVSTACK_WORKSPACE}/src:/edx/src
7373
- ${PWD}/py_configuration_files/analytics_data_api.py:/edx/app/analytics_api/analytics_api/analyticsdataserver/settings/devstack.py
74+
license-manager:
75+
volumes:
76+
- ${DEVSTACK_WORKSPACE}/license-manager:/edx/app/license_manager
77+
- ${DEVSTACK_WORKSPACE}/src:/edx/src:cached
78+
- ${PWD}/py_configuration_files/license_manager.py:/edx/app/license_manager/license_manager/settings/devstack.py
79+
license-manager-worker:
80+
volumes:
81+
- ${DEVSTACK_WORKSPACE}/license-manager:/edx/app/license_manager
82+
- ${DEVSTACK_WORKSPACE}/src:/edx/src:cached
83+
- ${PWD}/py_configuration_files/license_manager.py:/edx/app/license_manager/license_manager/settings/devstack.py
84+
bulk-enrollment-worker:
85+
volumes:
86+
- ${DEVSTACK_WORKSPACE}/license-manager:/edx/app/license_manager
87+
- ${DEVSTACK_WORKSPACE}/src:/edx/src:cached
88+
- ${PWD}/py_configuration_files/license_manager.py:/edx/app/license_manager/license_manager/settings/devstack.py
7489

7590
# Note that frontends mount `src` to /edx/app/src instead of /edx/src.
7691
# See ADR #5 for rationale.

docker-compose.yml

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -693,6 +693,73 @@ services:
693693
aliases:
694694
- edx.devstack.xqueue_consumer
695695

696+
license-manager:
697+
image: edxops/license-manager-dev:latest
698+
container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.license-manager"
699+
hostname: license-manager.devstack.edx
700+
# Use the Django devserver, so that we can hot-reload code changes
701+
command: bash -c 'while true; do python /edx/app/license_manager/manage.py runserver 0.0.0.0:18170; sleep 2; done'
702+
ports:
703+
- "18170:18170"
704+
depends_on:
705+
- mysql80
706+
- license-manager-worker
707+
# Allows attachment to this container using 'docker attach <containerID>'.
708+
stdin_open: true
709+
tty: true
710+
environment:
711+
CELERY_ALWAYS_EAGER: 'false'
712+
CELERY_BROKER_TRANSPORT: redis
713+
CELERY_BROKER_HOSTNAME: edx.devstack.redis:6379
714+
CELERY_BROKER_VHOST: 0
715+
CELERY_BROKER_PASSWORD: password
716+
DJANGO_SETTINGS_MODULE: license_manager.settings.devstack
717+
DJANGO_WATCHMAN_TIMEOUT: 30
718+
ENABLE_DJANGO_TOOLBAR: 1
719+
720+
license-manager-worker:
721+
image: edxops/license-manager-dev:latest
722+
command: bash -c 'cd /edx/app/license_manager/license_manager && celery -A license_manager worker -Q license_manager.default -l DEBUG'
723+
container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.license-manager-worker"
724+
hostname: license-manager-worker.devstack.edx
725+
depends_on:
726+
- mysql80
727+
environment:
728+
CELERY_ALWAYS_EAGER: 'false'
729+
CELERY_BROKER_TRANSPORT: redis
730+
CELERY_BROKER_HOSTNAME: edx.devstack.redis:6379
731+
CELERY_BROKER_VHOST: 0
732+
CELERY_BROKER_PASSWORD: password
733+
DJANGO_SETTINGS_MODULE: license_manager.settings.devstack
734+
COLUMNS: 80
735+
ports:
736+
- "18171:18171"
737+
restart: always
738+
stdin_open: true
739+
tty: true
740+
741+
bulk-enrollment-worker:
742+
image: edxops/license-manager-dev:latest
743+
command: bash -c 'cd /edx/app/license_manager/license_manager && celery -A license_manager worker -Q license_manager.bulk_enrollment -l DEBUG'
744+
container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.license-manager.bulk-enrollment-worker"
745+
hostname: license-manager.bulk-enrollment-worker.devstack.edx
746+
depends_on:
747+
- mysql80
748+
environment:
749+
CELERY_ALWAYS_EAGER: 'false'
750+
CELERY_BROKER_TRANSPORT: redis
751+
CELERY_BROKER_HOSTNAME: edx.devstack.redis:6379
752+
CELERY_BROKER_VHOST: 0
753+
CELERY_BROKER_PASSWORD: password
754+
DJANGO_SETTINGS_MODULE: license_manager.settings.devstack
755+
COLUMNS: 80
756+
ports:
757+
- "18172:18172"
758+
restart: always
759+
stdin_open: true
760+
tty: true
761+
762+
696763
# ==========================================================================
697764
# edX Microfrontends
698765
#

docs/service_list.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ Instead of a service name or list, you can also run commands like ``make dev.pro
6161
+------------------------------------+-------------------------------------+----------------+--------------+
6262
| `analyticsapi`_ | http://localhost:19001 | Python/Django | Extra |
6363
+------------------------------------+-------------------------------------+----------------+--------------+
64+
| `license-manager`_ | http://localhost:18171 | Python/Django | Extra |
65+
+------------------------------------+-------------------------------------+----------------+--------------+
6466
| `frontend-app-ora-grading`_ | http://localhost:1993 | MFE (React.js) | Extra |
6567
+------------------------------------+-------------------------------------+----------------+--------------+
6668

@@ -95,3 +97,4 @@ Some common service combinations include:
9597
.. _frontend-app-ora-grading: https://github.com/edx/frontend-app-ora-grading
9698
.. _insights: https://github.com/edx/edx-analytics-dashboard
9799
.. _analyticsapi: https://github.com/edx/edx-analytics-data-api
100+
.. _license-manager: https://github.com/openedx/license-manager

options.mk

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ credentials+discovery+ecommerce+edx_notes_api+forum+frontend-app-authn+frontend-
6767
# Separated by plus signs.
6868
# Separated by plus signs. Listed in alphabetical order for clarity.
6969
EDX_SERVICES ?= \
70-
analyticsapi+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
70+
analyticsapi+credentials+cms+cms-worker+cms_watcher+discovery+ecommerce+edx_notes_api+license-manager+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
7171

7272
# Services with database migrations.
7373
# Should be a subset of $(EDX_SERVICES).
@@ -76,7 +76,7 @@ analyticsapi+credentials+cms+cms-worker+cms_watcher+discovery+ecommerce+edx_note
7676
# Note: This list should contain _all_ db-backed services, even if not
7777
# configured to run; the list will be filtered later against $(DEFAULT_SERVICES).
7878
DB_SERVICES ?= \
79-
credentials+cms+discovery+ecommerce+lms+registrar
79+
credentials+cms+discovery+ecommerce+lms+registrar+license-manager
8080

8181
# Services with static assets to be built.
8282
# Should be a subset of $(EDX_SERVICES).

provision-license-manager.sh

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#!/usr/bin/env bash
2+
# Provisioning script for the notes service
3+
set -eu -o pipefail
4+
5+
. scripts/colors.sh
6+
set -x
7+
8+
name=license-manager
9+
port=18170
10+
11+
docker compose up -d $name
12+
docker compose up -d lms
13+
14+
echo -e "${GREEN}Installing requirements for ${name}...${NC}"
15+
docker compose exec -T ${name} bash -e -c 'cd /edx/app/license_manager/ && make requirements' -- "$name"
16+
# Run migrations
17+
echo -e "${GREEN}Running migrations for ${name}...${NC}"
18+
docker compose exec -T ${name} bash -e -c "cd /edx/app/license_manager/ && make migrate" -- "$name"
19+
20+
# Seed data for development
21+
echo -e "${GREEN}Seeding development data..."
22+
docker compose exec -T ${name} bash -e -c "python manage.py seed_development_data" -- "$name"
23+
# Some migrations require development data to be seeded, hence migrating again.
24+
docker compose exec -T ${name} bash -e -c "make migrate" -- "$name"
25+
26+
# Create superuser
27+
echo -e "${GREEN}Creating super-user for ${name}...${NC}"
28+
docker compose exec -T ${name} bash -e -c "echo 'from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.create_superuser(\"edx\", \"[email protected]\", \"edx\") if not User.objects.filter(username=\"edx\").exists() else None' | python /edx/app/license_manager/manage.py shell" -- "$name"
29+
30+
# Provision IDA User in LMS
31+
./provision-ida-user.sh ${name} ${name} $port
32+
33+
make dev.restart-devserver.license-manager

provision-mysql80.sql

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ GRANT ALL ON `reports`.* TO 'analytics001'@'%';
3939
CREATE DATABASE IF NOT EXISTS `reports_v1`;
4040
GRANT ALL ON `reports_v1`.* TO 'analytics001'@'%';
4141

42+
CREATE DATABASE IF NOT EXISTS license_manager;
43+
CREATE USER IF NOT EXISTS 'license_manager001'@'%' IDENTIFIED BY 'password';
44+
GRANT ALL ON license_manager.* TO 'license_manager001'@'%';
45+
4246
CREATE DATABASE IF NOT EXISTS edxapp;
4347
CREATE DATABASE IF NOT EXISTS edxapp_csmh;
4448
CREATE USER IF NOT EXISTS 'edxapp001'@'%' IDENTIFIED BY 'password';

provision.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ xqueue \
4949
coursegraph \
5050
insights \
5151
analyticsapi \
52+
license-manager \
5253
"
5354

5455
# What should we provision?

provision.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,7 @@ GRANT ALL ON `reports`.* TO 'analytics001'@'%' IDENTIFIED BY 'password';
3333
CREATE DATABASE IF NOT EXISTS `reports_v1`;
3434
GRANT ALL ON `reports_v1`.* TO 'analytics001'@'%' IDENTIFIED BY 'password';
3535

36+
CREATE DATABASE IF NOT EXISTS license_manager;
37+
GRANT ALL ON license_manager.* TO 'license_manager001'@'%' IDENTIFIED BY 'password';
3638

3739
FLUSH PRIVILEGES;

0 commit comments

Comments
 (0)