Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

support updated kubespawner #2938

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .github/actions/init-local/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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

Comment on lines +78 to +83
Copy link
Contributor

@viniciusdc viniciusdc Feb 13, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Adam-D-Lewis , I think this was not suposed to be committed as part of this PR, is that right?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NVM, just saw your comment above.

- shell: bash
run: |
# Display Nebari config
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
from pathlib import Path

import z2jh
from tornado import gen


def base_profile_home_mounts(username):
Expand Down Expand Up @@ -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,
[
Expand All @@ -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,
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The behavior of Kubespawner changed in v5 so kubespawner_override's default behavior is merge instead of replace now so I'm now simplifing this part.
reference: https://jupyterhub-kubespawner.readthedocs.io/en/latest/changelog.html#id24

# 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
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

flyby: tornado coroutine to native 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"]

Expand All @@ -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,
[
Expand All @@ -585,6 +572,7 @@ def render_profiles(spawner):
],
)
)
return rendered_profiles


c.KubeSpawner.args = ["--debug"]
Expand Down
Loading