antoviaque
(Xavier Antoviaque (OpenCraft) - opencraft.com/help)
April 18, 2022, 9:44am
#1
Here is the retrospective for the last core contributor sprint:
Calls/offers for help
This is what the core team needs help on now. Note that anyone can help – you don’t need to be a core contributor (yet!) for that:
Is there anything where you could use help from others? Or that you would like to collaborate on?
Not yet but soon I might want people to help me write config files related to Backstage into various repos.
@feanil
I would love to get an overview of the current work on frontend plugins. I’m trying to keep in touch with the latest changes.
@xitij2000
I need help to think of new test cases for the Test Plan. At present there are only basic test cases for the Studio and LMS.What about unique XBlocks, plugins, devops, global admin, and other areas that we need to create test cases for? It would be great if people can review the test cases then add their suggestions to the SUGGESTIONS tab in the sheet. I will bring this up in the meetups too.
@Dean
I’m hoping that this blockstore PR gets merged this week or next week, and then backported to nutmeg.
@pdpinch
Improvements & blockers
What is blocking the team currently, as well as suggestions of improvements:
Retrospective - What should we improve? Any blockers?
I wish there were a snapshot of the technical settings and feature toggles from the Maple release, so I could diff them nor the nutmeg release notes. (edx-platform technical reference — edx-platform Technical Reference documentation
@pdpinch
I should ask for commit privileges on the documentation repo, but it’s not really a blocker.
@pdpinch
It was a little bit tough to onboard as there’s so may communication platforms, but the more I learned the more it all makes sense. The onboarding courses will be super helpful to future participants.
@Dean
I was added to a new Slack channel “#wg-open-edx-product-management ” — I need to see if I have enough time to commit, but I’d certainly be interested in participating in this group. Maybe I’ll have to make a choice.
@gabrieldamours
What went well?
Retrospective - What went well these last two weeks / sprint?
Joining beta tester group of Nutmeg and helping others join
Zia Fazal
Glad to see the community coming up with ideas and implementations to address MFE shortcomings.
Adolfo Brandes
Getting more people in CC program
Sarina Canelake
I’m really excited that we have a testing plan for nutmeg and so many volunteers interested in helping test.
Peter Pinch
There’s more clarity within the CCs processes
Maria Grimaldi
- Good improvements made to the core sprints processes, and great collaboration to try to make it fit our various use cases among the working groups
Xavier Antoviaque
I enjoy collaborating with tCRIL, edX, and members from other providers on the conference planning committee. We’re a very efficient team!
Gabriel D’Amours
I got other work done to open up time for CC work next sprint.
Ali Hugo
Got a good chunk of time for this task so was able to do it, breaking it less than an 2 hrs doesn’t get me very far.
Kshitij Sobti
A fun and welcoming working atmosphere and onboarding experience. Good level of energy.
Dean Jay Mathew
Hours contributed
The total reported for the last sprint: 248 hours contributed .
The totals of the hours reported in the last six sprints:
User
Hours contributed
Piotr Surowiec
80
Xavier Antoviaque
62
Zia Fazal
54
Gabriel D’Amours
49
Sarina Canelake
41
Adolfo Brandes
40
David Ormsbee
40
Maria Grimaldi
38
Ali Hugo
37
Feanil Patel
36
Jillian Vogel
35
Peter Pinch
34
Juan Camilo Montoya
30
Kyle McCormick
30
Matjaz Gregoric
29
Braden MacDonald
28
Giovanni Cimolin
24
Felipe Montoya
20
Ghassan Maslamani
20
Sofiane Bebert
18
Dean Jay Mathew
14
Usman Khalid
13
Jhony Avella
11
Kshitij Sobti
11
Igor Degtiarov
10
Nizar Mahmoud
10
Andrés González
7
Esteban Etcheverry
7
Omar Al-Ithawi
6
Nicole Kessler
2
Ilaria Botti
2
Check-ins
A lot of the work is related to the upcoming conference – both in what was done last sprint (preparing talks) and attending it. Nutmeg preparations are also a prominent item. All the raw details are at:
2022 - Hours
User,SUM of How many hours did you log over the last 14 days?
0
Ali Hugo,36.7
Braden MacDonald,23
Feanil Patel,20
Felipe Montoya,20
Gabriel D'Amours,38
Ghassan Maslamani,20
Giovanni Cimolin,22
Ilaria Botti,1.5
Jhony Avella,11
Jillian...
@Eden_Huthmacher Let me know whether you can find everything you need for your own working groups updates – and don’t hesitate if some changes would be useful to you!
3 Likes
antoviaque
(Xavier Antoviaque (OpenCraft) - opencraft.com/help)
April 19, 2022, 3:56pm
#2
Comments from today’s meetings discussions that lead to action items:
@pdpinch That should be possible – @feanil indicated that since it’s generated automatically from the code, it should be possible to regenerate it for Maple. If you’re not sure how, he has offered to help
@xitij2000 There is @arbrandes who offered to discuss this with you
Dean:
I need help to think of new test cases for the Test Plan. At present there are only basic test cases for the Studio and LMS.What about unique XBlocks, plugins, devops, global admin, and other areas that we need to create test cases for? It would be great if people can review the test cases then add their suggestions to the SUGGESTIONS tab in the sheet. I will bring this up in the meetups too.
There wasn’t a specific volunteer to add this, but @sambapete said the additional missing use cases would likely be added during the testing itself.
@pdpinch Are you referring to that PR?
openedx:master
← open-craft:jill/TNL-8746
opened 12:57PM - 18 Jan 22 UTC
<!--
🍁🍁
🍁🍁🍁🍁 🍁 Note: the Maple master branch has been created. Plea… se consider whether your change
🍁🍁🍁🍁 should also be applied to Maple. If so, make another pull request against the
🍁🍁🍁🍁 open-release/maple.master branch, or ping @nedbat for help or questions.
🍁🍁
Please give your pull request a short but descriptive title.
Use conventional commits to separate and summarize commits logically:
https://open-edx-proposals.readthedocs.io/en/latest/oep-0051-bp-conventional-commits.html
Use this template as a guide. Omit sections that don't apply. You may link to information rather than copy it.
More details about the template are at https://github.com/edx/open-edx-proposals/pull/180
(link will be updated when that document merges)
-->
## Description
Installs blockstore as an app inside of edx-platform.
* Provides a waffle switch (`blockstore.use_blockstore_app_api`) to toggle between using the installed blockstore app's Python API directly, instead of the external blockstore IDA service's REST API (default), so that the app can be tested and its usage rolled back without having to deploy any code changes.
* Provides a database router which will use the blockstore IDA's database when configured (supports [TNL-8745](https://openedx.atlassian.net/browse/TNL-8745)).
* Provides django storage configuration setting for blockstore bundle asset files.
* Also fixes a bug introduced by https://github.com/openedx/edx-platform/pull/29354 and removes the template workaround added by https://github.com/openedx/edx-platform/pull/29517 (see Author Notes & Concerns on that PR).
This change should not impact the edX user experience.
## Supporting information
[ADR: Blockstore Deployment as an App, Not Service](https://github.com/openedx/blockstore/blob/master/decisions/0002-app-not-service.rst)
[TNL-8746](https://openedx.atlassian.net/browse/TNL-8746), subtask of [TNL-8351](https://openedx.atlassian.net/browse/TNL-8351)
Depends on https://github.com/openedx/blockstore/pull/149 <-- this must be merged first and deployed to the blockstore service instance.
## Testing instructions
### Sandbox
* LMS: https://pr29779.sandbox.opencraft.hosting/
* Studio: https://studio.pr29779.sandbox.opencraft.hosting/
Sandbox was provisioned with the Settings and Manual steps noted below.
### Devstack setup
1. Run blockstore IDA service (see [README](https://github.com/openedx/blockstore#using-with-docker-devstack)).
2. Add user/password to the blockstore DB from the `mysql57-shell`:
```sql
# mysql -u root
GRANT ALL ON `blockstore_db`.* TO 'blockstore001'@'%' IDENTIFIED BY 'password';
```
3. Checkout the branch from https://github.com/openedx/blockstore/pull/149 into `${DEVSTACK_WORKSPACE}/src/blockstore`, and install in the LMS and Studio shells:
```bash
# make lms-shell and studio-shell
pip install -e /edx/src/blockstore
```
4. To share to the Blockstore database and file storage between edxapp and the IDA, add the following to `lms/envs/private.py` and
`cms/envs/private.py`:
```python
BLOCKSTORE_API_URL = "http://edx.devstack.blockstore:18250/api/v1/"
BLOCKSTORE_API_AUTH_TOKEN = 'edxapp-insecure-devstack-key'
LX_PATHWAY_PLUGIN_AUTHORIZED_USERNAMES = ['staff'] # added by LX provisioning
MEDIA_ROOT = '/edx/src/blockstore/blockstore/media'
MEDIA_URL = '/media/'
BUNDLE_ASSET_STORAGE_SETTINGS = dict(
STORAGE_CLASS='django.core.files.storage.FileSystemStorage',
STORAGE_KWARGS=dict(
location=MEDIA_ROOT,
base_url=MEDIA_URL,
),
)
def add_blockstore_service_db():
from .devstack import DATABASES
DATABASES['blockstore'] = dict(
CONN_MAX_AGE=0,
ENGINE='django.db.backends.mysql',
HOST='edx.devstack.mysql57',
NAME='blockstore_db',
PASSWORD='password',
PORT='3306',
USER='blockstore001',
)
return DATABASES
DATABASES = add_blockstore_service_db()
```
5. Run content-library-authoring MFE (see [README](https://github.com/openedx/frontend-app-library-authoring#devstack-installation)), OR provision the LabXchange devstack.
### Testing instructions
These tests should work on either the sandbox or your devstack.
Test blockstore as service (default, no switch created):
* Create some new blockstore content.
If you're using content libraries, create a new library with some blocks in it.
(If you're using LabXchange, the devstack provisioning did this for you.)
* Check that you can view the created content OK.
* Visit Django Admin > Blockstore Bundles, and ensure you can see your collections and bundles.
Test blockstore as app (enable switch):
* Create and enable the waffle switch: `blockstore.use_blockstore_app_api`
* Clear the blockstore cache.
In devstack, you can restart LMS+Studio; in the sandbox, you can [run `blockstore_cache.cache.clear()`](https://github.com/openedx/edx-platform/blob/db32ff2cdf678fa8edd12c9da76a76eef0478614/openedx/core/djangolib/blockstore_cache.py#L22-L26).
* Stop the blockstore service, or watch the blockstore service logs to ensure that it's not being used for the steps below.
* Ensure that can still see the content created in above steps.
* Ensure that you can create new content, and edit existing OLX.
* Visit Django Admin > Blockstore Bundles, and ensure you can see your new and old collections and bundles.
Test blockstore as service (disable switch):
* Disable the waffle switch.
* Clear the blockstore cache, as above.
* Start the blockstore service, and watch the logs to ensure that requests start coming in for the steps below.
* Ensure that you can still see content and changes made above.
* Ensure that you can create new content, and edit existing OLX.
* Visit Django Admin > Blockstore Bundles, and ensure you can see your new and old collections and bundles.
### Integration tests
Integration tests for the blockstore service aren't run as part of the CI, but can be run manually in the devstack, (see [blockstore README](https://github.com/openedx/blockstore#running-integration-tests)):
1. In a `blockstore-shell` run `make testserver`.
2. In a `studio-shell`, run:
```bash
EDXAPP_RUN_BLOCKSTORE_TESTS=1 python -Wd -m pytest --ds=cms.envs.test \
openedx/core/lib/blockstore_api/ openedx/core/djangolib/tests/test_blockstore_cache.py openedx/core/djangoapps/content_libraries/tests/
EDXAPP_RUN_BLOCKSTORE_TESTS=1 python -Wd -m pytest --ds=lms.envs.test \
openedx/core/lib/blockstore_api/ openedx/core/djangolib/tests/test_blockstore_cache.py openedx/core/djangoapps/content_libraries/tests/
```
## Deadline
None
## Other information
### Author Notes
1. Switching between using the blockstore standalone service and the blockstore installed app causes an issue in the devstack with the [blockstore cache for the bundle file URLs](https://github.com/openedx/edx-platform/blob/db32ff2cdf678fa8edd12c9da76a76eef0478614/openedx/core/djangolib/blockstore_cache.py#L160-L235).
This should not be an issue in production, as these URLs are absolute S3 URLs, not routed through the app or service.
### Deployment configuration changes
Anyone who is running blockstore as a service and wants to preserve the service's content when switching to the blockstore app will need to:
1. Add a `blockstore` stanza to [`edxapp_databases`](https://github.com/openedx/configuration/blob/b19410635ec96e3eb32825cc512fbb7ec8055006/playbooks/roles/edxapp/defaults/main.yml#L1201) ansible configuration.
2. Add settings to edxapp for the [blockstore file storage](https://github.com/open-craft/blockstore/blob/jill/symbolist/blockstore-as-app/blockstore/settings/base.py#L305-L339)
```yaml
BUNDLE_ASSET_URL_STORAGE_KEY: ...
BUNDLE_ASSET_URL_STORAGE_SECRET: ...
BUNDLE_ASSET_STORAGE_SETTINGS:
STORAGE_CLASS: ... # if different from DEFAULT_FILE_STORAGE
STORAGE_KWARGS:
location: ... # within bucket path
bucket_name: ... # bucket name
# + anything else that differs from the global storage settings
```
1. When switching between the blockstore app and blockstore IDA service, leave the blockstore service running to handle cached copies of the bundle version file URLs.
Alternatively, these caches can be cleared when the service URLs are no longer desired.
**Settings**
<details><summary>Ansible settings to deploy the blockstore service + MFEs</summary>
```yaml
SANDBOX_ENABLE_BLOCKSTORE: true
BLOCKSTORE_DATABASE_HOST: "{{ DISCOVERY_MYSQL }}"
BLOCKSTORE_DATABASE_PASSWORD: "{{ DISCOVERY_MYSQL_PASSWORD }}"
BLOCKSTORE_DATABASE_USER: "{{ DISCOVERY_MYSQL_USER }}"
BLOCKSTORE_DEFAULT_DB_NAME: "{{ DISCOVERY_DEFAULT_DB_NAME }}"
BLOCKSTORE_GIT_PATH: "open-craft"
BLOCKSTORE_VERSION: "jill/symbolist/blockstore-as-app"
BLOCKSTORE_NGINX_HOSTNAME: discovery.*
BLOCKSTORE_NGINX_PORT: 80
BLOCKSTORE_SSL_NGINX_PORT: 443
BLOCKSTORE_SECRET_KEY: "{{ DISCOVERY_SECRET_KEY }}"
BLOCKSTORE_SERVICE_CONFIG_OVERRIDES:
# Only need to set these if you're using different access keys for generating signed URLs
#BUNDLE_ASSET_URL_STORAGE_KEY: "{{ EDXAPP_AWS_ACCESS_KEY_ID }}"
#BUNDLE_ASSET_URL_STORAGE_SECRET: "{{ EDXAPP_AWS_SECRET_ACCESS_KEY }}"
AWS_ACCESS_KEY_ID: "{{ EDXAPP_AWS_ACCESS_KEY_ID }}"
AWS_SECRET_ACCESS_KEY: "{{ EDXAPP_AWS_SECRET_ACCESS_KEY }}"
AWS_STORAGE_BUCKET_NAME: "{{ EDXAPP_AWS_STORAGE_BUCKET_NAME }}"
AWS_LOCATION: "blockstore/"
DEFAULT_FILE_STORAGE: storages.backends.s3boto3.S3Boto3Storage
EDXAPP_BLOCKSTORE_API_URL: http://localhost:8250/api/v1/
# Add a blockstore database to edxapp's databases list, so the blockstore app can share the blockstore service's database.
edxapp_databases:
# edxapp's edxapp-migrate scripts and the edxapp_migrate play
# will ensure that any DB not named read_replica will be migrated
# for both the lms and cms.
read_replica:
ENGINE: 'django.db.backends.mysql'
NAME: "{{ EDXAPP_MYSQL_REPLICA_DB_NAME }}"
USER: "{{ EDXAPP_MYSQL_REPLICA_USER }}"
PASSWORD: "{{ EDXAPP_MYSQL_REPLICA_PASSWORD }}"
HOST: "{{ EDXAPP_MYSQL_REPLICA_HOST }}"
PORT: "{{ EDXAPP_MYSQL_REPLICA_PORT }}"
CONN_MAX_AGE: "{{ EDXAPP_MYSQL_CONN_MAX_AGE }}"
OPTIONS: "{{ EDXAPP_MYSQL_REPLICA_OPTIONS }}"
default:
ENGINE: 'django.db.backends.mysql'
NAME: "{{ EDXAPP_MYSQL_DB_NAME }}"
USER: "{{ EDXAPP_MYSQL_USER }}"
PASSWORD: "{{ EDXAPP_MYSQL_PASSWORD }}"
HOST: "{{ EDXAPP_MYSQL_HOST }}"
PORT: "{{ EDXAPP_MYSQL_PORT }}"
ATOMIC_REQUESTS: "{{ EDXAPP_MYSQL_ATOMIC_REQUESTS }}"
CONN_MAX_AGE: "{{ EDXAPP_MYSQL_CONN_MAX_AGE }}"
OPTIONS: "{{ EDXAPP_MYSQL_OPTIONS }}"
student_module_history:
ENGINE: 'django.db.backends.mysql'
NAME: "{{ EDXAPP_MYSQL_CSMH_DB_NAME }}"
USER: "{{ EDXAPP_MYSQL_CSMH_USER }}"
PASSWORD: "{{ EDXAPP_MYSQL_CSMH_PASSWORD }}"
HOST: "{{ EDXAPP_MYSQL_CSMH_HOST }}"
PORT: "{{ EDXAPP_MYSQL_CSMH_PORT }}"
CONN_MAX_AGE: "{{ EDXAPP_MYSQL_CONN_MAX_AGE }}"
OPTIONS: "{{ EDXAPP_MYSQL_CSMH_OPTIONS }}"
blockstore:
ENGINE: 'django.db.backends.mysql'
NAME: "{{ BLOCKSTORE_DEFAULT_DB_NAME }}"
USER: "{{ BLOCKSTORE_DATABASE_USER }}"
PASSWORD: "{{ BLOCKSTORE_DATABASE_PASSWORD }}"
HOST: "{{ BLOCKSTORE_DATABASE_HOST }}"
PORT: "{{ BLOCKSTORE_DATABASE_PORT }}"
CONN_MAX_AGE: "{{ BLOCKSTORE_DATABASE_CONN_MAX_AGE }}"
OPTIONS: "{{ EDXAPP_MYSQL_OPTIONS }}"
## Blockstore and library authoring
EDXAPP_CMS_ENV_EXTRA:
LIBRARY_AUTHORING_MICROFRONTEND_URL : 'https://library-authoring.{{ EDXAPP_LMS_BASE }}/'
# Only need to set these if you're using different access keys for generating signed URLs
#BUNDLE_ASSET_URL_STORAGE_KEY: "{{ EDXAPP_AWS_ACCESS_KEY_ID }}"
#BUNDLE_ASSET_URL_STORAGE_SECRET: "{{ EDXAPP_AWS_SECRET_ACCESS_KEY }}"
BUNDLE_ASSET_STORAGE_SETTINGS:
STORAGE_CLASS: "{{ EDXAPP_DEFAULT_FILE_STORAGE }}"
STORAGE_KWARGS:
location: "blockstore/"
bucket_name: "{{ EDXAPP_AWS_STORAGE_BUCKET_NAME }}"
access_key: "{{ EDXAPP_AWS_ACCESS_KEY_ID }}"
secret_key: "{{ EDXAPP_AWS_SECRET_ACCESS_KEY }}"
location: "blockstore/"
object_parameters:
CacheControl: "max-age=60"
querystring_auth: true
querystring_expire: 60
custom_domain: !!null
BLOCKSTORE_API_AUTH_TOKEN: "ky8yxqegTh"
BLOCKSTORE_BUNDLE_CACHE_TIMEOUT: 60
# HACK -- i was unable to get requests from the library authoring MFE to be accepted by Studio.
CORS_ORIGIN_ALLOW_ALL: true
EDXAPP_LMS_ENV_EXTRA:
# Only need to set these if you're using different access keys for generating signed URLs
#BUNDLE_ASSET_URL_STORAGE_KEY: "{{ EDXAPP_AWS_ACCESS_KEY_ID }}"
#BUNDLE_ASSET_URL_STORAGE_SECRET: "{{ EDXAPP_AWS_SECRET_ACCESS_KEY }}"
BUNDLE_ASSET_STORAGE_SETTINGS:
STORAGE_CLASS: "{{ EDXAPP_DEFAULT_FILE_STORAGE }}"
STORAGE_KWARGS:
location: "blockstore/"
bucket_name: "{{ EDXAPP_AWS_STORAGE_BUCKET_NAME }}"
access_key: "{{ EDXAPP_AWS_ACCESS_KEY_ID }}"
secret_key: "{{ EDXAPP_AWS_SECRET_ACCESS_KEY }}"
location: "blockstore/"
object_parameters:
CacheControl: "max-age=60"
querystring_auth: true
querystring_expire: 60
custom_domain: !!null
BLOCKSTORE_API_AUTH_TOKEN: "ky8yxqegTh"
BLOCKSTORE_BUNDLE_CACHE_TIMEOUT: 60
AUTHN_MICROFRONTEND_URL: "https://authn.{{ EDXAPP_LMS_BASE }}"
## MFEs
# Deploy MFEs to own subdomain
MFE_DEPLOY_STANDALONE_NGINX: true
MFES:
- name: profile
repo: frontend-app-profile
- name: gradebook
repo: frontend-app-gradebook
- name: account
repo: frontend-app-account
- name: learning
repo: frontend-app-learning
- name: authn
repo: frontend-app-authn
- name: library-authoring
repo: frontend-app-library-authoring
MFE_ENVIRONMENT_EXTRA:
LMS_BASE_URL: "https://{{ EDXAPP_LMS_BASE }}"
STUDIO_BASE_URL: "https://{{ EDXAPP_CMS_BASE }}"
BLOCKSTORE_COLLECTION_UUID: "11111111-2111-4111-8111-111111111111"
# does setting this here break all the other MFEs??
BASE_URL: "https://library-authoring.pr29779.sandbox.opencraft.hosting"
# FFS really??
SECURE_ORIGIN_XBLOCK_BOOTSTRAP_HTML_URL: "//d26i2lpnkzmddn.cloudfront.net/xblock-bootstrap-v8.html"
## edxapp Configurations
EDXAPP_SESSION_COOKIE_DOMAIN: ".{{ EDXAPP_LMS_BASE }}"
EDXAPP_CSRF_COOKIE_SECURE: true
EDXAPP_SESSION_COOKIE_SECURE: true
EDXAPP_ENABLE_CORS_HEADERS: true
EDXAPP_ENABLE_CROSS_DOMAIN_CSRF_COOKIE: true
EDXAPP_CROSS_DOMAIN_CSRF_COOKIE_DOMAIN: ".{{ EDXAPP_LMS_BASE }}"
EDXAPP_CROSS_DOMAIN_CSRF_COOKIE_NAME: "cross-domain-cookie-mfe"
EDXAPP_CORS_ORIGIN_WHITELIST:
- "https://{{ EDXAPP_CMS_BASE }}"
- "https://profile.{{ EDXAPP_LMS_BASE }}"
- "https://gradebook.{{ EDXAPP_LMS_BASE }}"
- "https://accounts.{{ EDXAPP_LMS_BASE }}"
- "https://learning.{{ EDXAPP_LMS_BASE }}"
- "https://library-authoring.{{ EDXAPP_LMS_BASE }}"
- "https://authn.{{ EDXAPP_LMS_BASE }}"
EDXAPP_CSRF_TRUSTED_ORIGINS:
- "{{ EDXAPP_CMS_BASE }}"
- "profile.{{ EDXAPP_LMS_BASE }}"
- "gradebook.{{ EDXAPP_LMS_BASE }}"
- "accounts.{{ EDXAPP_LMS_BASE }}"
- "learning.{{ EDXAPP_LMS_BASE }}"
- "library-authoring.{{ EDXAPP_LMS_BASE }}"
- "authn.{{ EDXAPP_LMS_BASE }}"
EDXAPP_LOGIN_REDIRECT_WHITELIST:
- "{{ EDXAPP_CMS_BASE }}"
- "profile.{{ EDXAPP_LMS_BASE }}"
- "gradebook.{{ EDXAPP_LMS_BASE }}"
- "accounts.{{ EDXAPP_LMS_BASE }}"
- "learning.{{ EDXAPP_LMS_BASE }}"
- "library-authoring.{{ EDXAPP_LMS_BASE }}"
- "authn.{{ EDXAPP_LMS_BASE }}"
EDXAPP_SITE_CONFIGURATION:
- values:
ENABLE_ORDER_HISTORY_MICROFRONTEND: "{{ SANDBOX_ENABLE_ECOMMERCE }}"
## MFE Links
EDXAPP_LMS_WRITABLE_GRADEBOOK_URL: 'https://gradebook.{{ EDXAPP_LMS_BASE }}/'
EDXAPP_LEARNING_MICROFRONTEND_URL: 'https://learning.{{ EDXAPP_LMS_BASE }}/'
EDXAPP_PROFILE_MICROFRONTEND_URL: 'https://profile.{{ EDXAPP_LMS_BASE }}/u/'
EDXAPP_ACCOUNT_MICROFRONTEND_URL: 'https://accounts.{{ EDXAPP_LMS_BASE }}/'
EDXAPP_FEATURES_EXTRA:
ENABLE_CONTENT_LIBRARIES: true
ENABLE_LIBRARY_AUTHORING_MICROFRONTEND: true
```
</details>
<details><summary>Manual steps run to provision the sandbox</summary>
1. Create auth token in Blockstore, with value matching ansible `BLOCKSTORE_API_AUTH_TOKEN` ([ref blockstore/README](https://github.com/openedx/blockstore/blob/f4475771a53321701fefb2c9d7ff7692f8435318/README.rst#using-in-production)):
```python
# As the blockstore user, with the blockstore envs and venv enabled, run ./manage.py shell
from django.contrib.auth import get_user_model
from rest_framework.authtoken.models import Token
edxapp, _ = get_user_model().objects.create(username='edxapp', is_active=True)
Token.objects.create(key='ky8yxqegTh', user=edxapp)
```
1. Create a "Collection" that new content libraries / xblocks can be created within. The collection UUID must match the `BLOCKSTORE_COLLECTION_UUID` configured on the MFE:
```python
# Create from the blockstore shell or the LMS shell; doesn't matter where, because they share the same database now!
from blockstore.apps.bundles.models import Collection
coll, _ = Collection.objects.get_or_create(title='Library Content Collection', uuid='11111111-2111-4111-8111-111111111111')
```
1. Create an an Organization in the LMS:
```python
# Run /edx/bin/edxapp-shell-lms
from organizations.models import Organization
Organization.objects.get_or_create(short_name='DeveloperInc', defaults={'name': 'DeveloperInc', 'active': True})
```
If so @braden said it’s scheduled to be merged on Thursday. I do not know if there are any plans to backport it to nutmeg though – CC @jill
I’m not mentioning the other points which didn’t lead to a specific action item, or were already underway. Don’t hesitate to reply if more help is needed though!
jill
(Jillian Vogel (OpenCraft) - opencraft.com/help)
April 20, 2022, 10:55am
#3
Yep, we’re planning backport this to nutmeg since we missed the release cut deadline.
1 Like