Skip to content
This repository was archived by the owner on Sep 5, 2023. It is now read-only.

Commit

Permalink
feat: Update dockerspawner configuration settings (#288)
Browse files Browse the repository at this point in the history
  • Loading branch information
jgwerner authored Aug 21, 2020
1 parent 7df5bc3 commit a8f4dac
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 18 deletions.
7 changes: 7 additions & 0 deletions ansible/roles/jupyterhub/files/jupyterhub_config_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,13 @@
if shared_folder_enabled.lower() in ('true', '1'):
c.DockerSpawner.volumes[f'{mnt_root}/{org_name}' + '/shared/'] = notebook_dir + '/shared'
c.DockerSpawner.name_template = 'jupyter-{raw_username}'

# start the container with root so we can update uid/gid using the docker-stacks hooks
c.DockerSpawner.extra_create_kwargs = {'user': '0'}

# these env vars are set within the docker image but add them here for good measure
c.DockerSpawner.environment = {'NB_UID': '1000', 'NB_GID': '100', 'NB_USER': 'jovyan'}

##########################################
# END CUSTOM DOCKERSPAWNER
##########################################
2 changes: 1 addition & 1 deletion src/illumidesk/setup_course/course.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ def run(self):
base_url = os.environ.get('JUPYTERHUB_BASE_URL') or ''
logger.debug('Grader container JUPYTERHUB_API_URL set to %s' % jupyterhub_api_url)
logger.debug('Grader container JUPYTERHUB_API_TOKEN set to %s' % jupyterhub_api_token)
# set initial volumes dict
# set initial volumes dict
docker_volumes = {
str(self.grader_root): {'bind': f'/home/{self.grader_name}'},
str(self.exchange_root): {'bind': '/srv/nbgrader/exchange'},
Expand Down
3 changes: 2 additions & 1 deletion src/illumidesk/spawners/spawners.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ class IllumiDeskBaseDockerSpawner(DockerSpawner):
"""
Extends the DockerSpawner by defining the common behavior for our Spwaners that work with LTI versions 1.1 and 1.3
"""

load_shared_folder_with_instructor = Bool(
True,
config=True,
Expand All @@ -40,7 +41,7 @@ def _volumes_to_binds(self, volumes, binds, mode="rw"):
shared_vol_key = k
break
if shared_vol_key:
self.log.debug(f'Removing shared folder for instructor')
self.log.debug('Removing shared folder for instructor')
del binds[shared_vol_key]
self.log.debug(f'binds without the shared folder: {binds}')
return binds
Expand Down
29 changes: 13 additions & 16 deletions src/tests/illumidesk/spawners/test_illumidesk_dockerspawner.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,57 +2,54 @@
import types

from dockerspawner.dockerspawner import DockerSpawner
from illumidesk.authenticators.authenticator import setup_course_hook

from illumidesk.spawners.spawners import IllumiDeskBaseDockerSpawner
from illumidesk.spawners.spawners import IllumiDeskRoleDockerSpawner


def test_base_spawner_does_not_consider_shared_folder_with_instructor_role_when_jhub_setting_is_False(setup_image_environ, mock_jhub_user):
def test_base_spawner_does_not_consider_shared_folder_with_instructor_role_when_jhub_setting_is_False(
setup_image_environ, mock_jhub_user
):
"""
Does the IllumiDeskBaseDockerSpawner class exclude the shared folder for instructors when load_shared_folder_with_instructor is False?
"""
sut = IllumiDeskBaseDockerSpawner(load_shared_folder_with_instructor=False)
sut.environment['USER_ROLE'] = 'Instructor'
sut.user = mock_jhub_user()
volumes_to_mount = {
f'mnt_root/my-org/shared/': 'home/jovyan/shared'
}
volumes_to_mount = {'mnt_root/my-org/shared/': 'home/jovyan/shared'}
binds = sut._volumes_to_binds(volumes=volumes_to_mount, binds={})
assert len(binds) == 0


def test_base_spawner_load_shared_folder_with_instructor_role_when_jhub_setting_is_True(setup_image_environ, mock_jhub_user):
def test_base_spawner_load_shared_folder_with_instructor_role_when_jhub_setting_is_True(
setup_image_environ, mock_jhub_user
):
"""
Does the IllumiDeskBaseDockerSpawner class load the shared folder for instructors?
"""
sut = IllumiDeskBaseDockerSpawner(load_shared_folder_with_instructor=True)
sut.environment['USER_ROLE'] = 'Instructor'
sut.user = mock_jhub_user()
volumes_to_mount = {
f'mnt_root/my-org/shared/': 'home/jovyan/shared'
}
volumes_to_mount = {'mnt_root/my-org/shared/': 'home/jovyan/shared'}
binds = sut._volumes_to_binds(volumes=volumes_to_mount, binds={})
assert len(binds) == 1


def test_base_spawner_returns_the_shared_folder_with_learner_role_not_matter_the_jhub_setting(setup_image_environ, mock_jhub_user):
def test_base_spawner_returns_the_shared_folder_with_learner_role_not_matter_the_jhub_setting(
setup_image_environ, mock_jhub_user
):
"""
Does the IllumiDeskBaseDockerSpawner class consider the shared folder for learners?
"""
sut = IllumiDeskBaseDockerSpawner()
sut.environment['USER_ROLE'] = 'Learner'
sut.user = mock_jhub_user()
volumes_to_mount = {
f'mnt_root/my-org/shared/': 'home/jovyan/shared'
}
volumes_to_mount = {'mnt_root/my-org/shared/': 'home/jovyan/shared'}
binds = sut._volumes_to_binds(volumes=volumes_to_mount, binds={})
# First case (setting is not used)
assert len(binds) == 1
sut.load_shared_folder_with_instructor = False
volumes_to_mount = {
f'mnt_root/my-org/shared/': 'home/jovyan/shared'
}
volumes_to_mount = {'mnt_root/my-org/shared/': 'home/jovyan/shared'}
binds = sut._volumes_to_binds(volumes=volumes_to_mount, binds={})
# First case (setting is used)
assert len(binds) == 1
Expand Down

0 comments on commit a8f4dac

Please sign in to comment.