From e709f09e4b5456ad284c82aaa1fdb8244a031419 Mon Sep 17 00:00:00 2001 From: Adam Lewis <23342526+Adam-D-Lewis@users.noreply.github.com> Date: Tue, 4 Feb 2025 22:43:58 -0600 Subject: [PATCH 1/2] support updated kubespawner --- .../files/jupyterhub/03-profiles.py | 28 ++++++------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/src/_nebari/stages/kubernetes_services/template/modules/kubernetes/services/jupyterhub/files/jupyterhub/03-profiles.py b/src/_nebari/stages/kubernetes_services/template/modules/kubernetes/services/jupyterhub/files/jupyterhub/03-profiles.py index b298ae5ae1..4e6bacaa2b 100644 --- a/src/_nebari/stages/kubernetes_services/template/modules/kubernetes/services/jupyterhub/files/jupyterhub/03-profiles.py +++ b/src/_nebari/stages/kubernetes_services/template/modules/kubernetes/services/jupyterhub/files/jupyterhub/03-profiles.py @@ -5,7 +5,6 @@ from pathlib import Path import z2jh -from tornado import gen def base_profile_home_mounts(username): @@ -512,7 +511,6 @@ def render_profile( return None profile = copy.copy(profile) - profile_kubespawner_override = profile.get("kubespawner_override") profile["kubespawner_override"] = functools.reduce( deep_merge, [ @@ -522,38 +520,27 @@ def render_profile( base_profile_extra_mounts(), configure_user(username, groups), configure_user_provisioned_repositories(username), - profile_kubespawner_override, + profile.get("kubespawner_override"), ], {}, ) - # We need to merge any env vars from the spawner with any overrides from the profile - # This is mainly to ensure JUPYTERHUB_ANYONE/GROUP is passed through from the spawner - # to control dashboard access. - envvars_fixed = {**(profile["kubespawner_override"].get("environment", {}))} - - def preserve_envvars(spawner): - # This adds in JUPYTERHUB_ANYONE/GROUP rather than overwrite all env vars, - # if set in the spawner for a dashboard to control access. - return { - **envvars_fixed, - **spawner.environment, + profile["kubespawner_override"]["environment"].update( + { **profile_argo_token(groups), **profile_conda_store_viewer_token(), } - - profile["kubespawner_override"]["environment"] = preserve_envvars + ) return profile -@gen.coroutine -def render_profiles(spawner): +async def render_profiles(spawner): # jupyterhub does not yet manage groups but it will soon # so for now we rely on auth_state from the keycloak # userinfo request to have the groups in the key # "auth_state.oauth_user.groups" - auth_state = yield spawner.user.get_auth_state() + auth_state = await spawner.user.get_auth_state() username = auth_state["oauth_user"]["preferred_username"] @@ -570,7 +557,7 @@ def render_profiles(spawner): # fetch available profiles and render additional attributes profile_list = z2jh.get_config("custom.profiles") - return list( + rendered_profiles = list( filter( None, [ @@ -585,6 +572,7 @@ def render_profiles(spawner): ], ) ) + return rendered_profiles c.KubeSpawner.args = ["--debug"] From 582903800ca54ecf66ea646bed08d4acf765b405 Mon Sep 17 00:00:00 2001 From: Adam Lewis <23342526+Adam-D-Lewis@users.noreply.github.com> Date: Mon, 10 Feb 2025 15:13:21 -0600 Subject: [PATCH 2/2] add new default_image so we can test the PR --- .github/actions/init-local/action.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/actions/init-local/action.yml b/.github/actions/init-local/action.yml index 306876973a..a3d0438558 100644 --- a/.github/actions/init-local/action.yml +++ b/.github/actions/init-local/action.yml @@ -75,6 +75,12 @@ runs: size: 1Gi EOM + # Change jupyterhub image for PR testing purposes + cat >> '${{ steps.metadata.outputs.config }}' <<- EOM + default_images: + jupyterhub: quay.io/nebari/nebari-jupyterhub:jhub-fancy-profiles + EOM + - shell: bash run: | # Display Nebari config