Skip to content

depend in nebari app library chart - #38

Draft
pmeier wants to merge 2 commits into
mainfrom
nebari-app-library-chart
Draft

depend in nebari app library chart#38
pmeier wants to merge 2 commits into
mainfrom
nebari-app-library-chart

Conversation

@pmeier

@pmeier pmeier commented Aug 28, 2026

Copy link
Copy Markdown
Member

Reference Issues or PRs

Fixes #13.

What does this implement/fix?

Put a x in the boxes that apply

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds a feature)
  • Breaking change (fix or feature that would cause existing features not to work as expected)
  • Documentation Update
  • Code style update (formatting, renaming)
  • Refactoring (no functional changes, no API changes)
  • Build related changes
  • Other (please describe):

Testing

  • Did you test the pull request locally?
  • Did you add new tests?

Documentation

Access-centered content checklist

Text styling

  • The content is written with plain language (where relevant).
  • If there are headers, they use the proper header tags (with only one level-one header: H1 or # in markdown).
  • All links describe where they link to (for example, check the Nebari website).
  • This content adheres to the Nebari style guides.

Non-text content

  • All content is represented as text (for example, images need alt text, and videos need captions or descriptive transcripts).
  • If there are emojis, there are not more than three in a row.
  • Don't use flashing GIFs or videos.
  • If the content were to be read as plain text, it still makes sense, and no information is missing.

Any other comments?

@pmeier

pmeier commented Aug 28, 2026

Copy link
Copy Markdown
Member Author

Rendered chart comparison

Generated using these scripts

auth

nebariapp:
  # only for main
  enabled: true
  # only for main
  hostname: "serve.example.com"
  # only for main
  auth:
    enabled: true
    enforceAtGateway: false
  serve:
    enabled: true
    # only for PR
    hostname: "serve.example.com"
    # only for PR
    auth:
      enabled: true
      enforceAtGateway: true
  dashboard:
    enabled: true
    hostname: "dashboard.example.com"
    # only for PR
    auth:
      enabled: true
      enforceAtGateway: false
Diff

*** /tmp/sorted1.yaml	2026-08-28 14:59:17.887851053 +0200
--- /tmp/sorted2.yaml	2026-08-28 14:59:17.911851263 +0200
***************
*** 620,639 ****
      app.kubernetes.io/managed-by: Helm
      app.kubernetes.io/name: nebari-rayserve-pack
      app.kubernetes.io/version: 2.43.0
      helm.sh/chart: nebari-rayserve-pack-0.4.1
    name: release-name-nebari-rayserve-pack
  spec:
    auth:
      enabled: true
!     provider: keycloak
!     provisionClient: true
!     redirectURI: /oauth2/callback
!     scopes:
!       - openid
!       - profile
!       - email
    gateway: public
    hostname: serve.example.com
    routing:
      routes:
        - pathPrefix: /
--- 620,634 ----
      app.kubernetes.io/managed-by: Helm
      app.kubernetes.io/name: nebari-rayserve-pack
      app.kubernetes.io/version: 2.43.0
      helm.sh/chart: nebari-rayserve-pack-0.4.1
    name: release-name-nebari-rayserve-pack
+   namespace: default
  spec:
    auth:
      enabled: true
!     enforceAtGateway: true
    gateway: public
    hostname: serve.example.com
    routing:
      routes:
        - pathPrefix: /
***************
*** 652,671 ****
      app.kubernetes.io/managed-by: Helm
      app.kubernetes.io/name: nebari-rayserve-pack
      app.kubernetes.io/version: 2.43.0
      helm.sh/chart: nebari-rayserve-pack-0.4.1
    name: release-name-nebari-rayserve-pack-dashboard
  spec:
    auth:
      enabled: true
!     provider: keycloak
!     provisionClient: true
!     redirectURI: /oauth2/callback
!     scopes:
!       - openid
!       - profile
!       - email
    gateway: public
    hostname: dashboard.example.com
    landingPage:
      category: Data Science
      description: Monitor and manage Ray clusters and Serve deployments
--- 647,661 ----
      app.kubernetes.io/managed-by: Helm
      app.kubernetes.io/name: nebari-rayserve-pack
      app.kubernetes.io/version: 2.43.0
      helm.sh/chart: nebari-rayserve-pack-0.4.1
    name: release-name-nebari-rayserve-pack-dashboard
+   namespace: default
  spec:
    auth:
      enabled: true
!     enforceAtGateway: false
    gateway: public
    hostname: dashboard.example.com
    landingPage:
      category: Data Science
      description: Monitor and manage Ray clusters and Serve deployments

both

nebariapp:
  # only for main
  enabled: true
  # only for main
  hostname: "serve.example.com"
  serve:
    enabled: true
    # only for PR
    hostname: "serve.example.com"
  dashboard:
    enabled: true
    hostname: "dashboard.example.com"
Diff

*** /tmp/sorted1.yaml	2026-08-28 14:59:17.939851507 +0200
--- /tmp/sorted2.yaml	2026-08-28 14:59:17.963851717 +0200
***************
*** 620,629 ****
--- 620,630 ----
      app.kubernetes.io/managed-by: Helm
      app.kubernetes.io/name: nebari-rayserve-pack
      app.kubernetes.io/version: 2.43.0
      helm.sh/chart: nebari-rayserve-pack-0.4.1
    name: release-name-nebari-rayserve-pack
+   namespace: default
  spec:
    gateway: public
    hostname: serve.example.com
    routing:
      routes:
***************
*** 643,652 ****
--- 644,654 ----
      app.kubernetes.io/managed-by: Helm
      app.kubernetes.io/name: nebari-rayserve-pack
      app.kubernetes.io/version: 2.43.0
      helm.sh/chart: nebari-rayserve-pack-0.4.1
    name: release-name-nebari-rayserve-pack-dashboard
+   namespace: default
  spec:
    gateway: public
    hostname: dashboard.example.com
    landingPage:
      category: Data Science

dashboard

nebariapp:
  # only for main
  enabled: true
  serve:
    enabled: false
  dashboard:
    enabled: true
    hostname: "dashboard.example.com"
Diff

*** /tmp/sorted1.yaml	2026-08-28 14:59:17.736849733 +0200
--- /tmp/sorted2.yaml	2026-08-28 14:59:17.760849943 +0200
***************
*** 620,629 ****
--- 620,630 ----
      app.kubernetes.io/managed-by: Helm
      app.kubernetes.io/name: nebari-rayserve-pack
      app.kubernetes.io/version: 2.43.0
      helm.sh/chart: nebari-rayserve-pack-0.4.1
    name: release-name-nebari-rayserve-pack-dashboard
+   namespace: default
  spec:
    gateway: public
    hostname: dashboard.example.com
    landingPage:
      category: Data Science

real-world

nebariapp:
  enabled: true
  # Keep the Serve endpoint internal-only (per upstream README's
  # recommendation). Notebooks access it via cluster DNS at
  # rayserve-pack-nebari-rayserve-serve-svc.ray.svc.cluster.local:8000.
  serve:
    enabled: false
  dashboard:
    enabled: true
    hostname: ray-dashboard.atep-dev.openteams.local
    landingPage:
      enabled: true
    # only for PR
    auth:
      enabled: true
      provider: keycloak
      provisionClient: true
      redirectURI: /oauth2/callback
  # only for main
  auth:
    enabled: true
    provider: keycloak
    provisionClient: true
    redirectURI: /oauth2/callback
Diff

*** /tmp/sorted1.yaml	2026-08-28 14:59:17.787850179 +0200
--- /tmp/sorted2.yaml	2026-08-28 14:59:17.811850389 +0200
***************
*** 620,639 ****
      app.kubernetes.io/managed-by: Helm
      app.kubernetes.io/name: nebari-rayserve-pack
      app.kubernetes.io/version: 2.43.0
      helm.sh/chart: nebari-rayserve-pack-0.4.1
    name: release-name-nebari-rayserve-pack-dashboard
  spec:
    auth:
      enabled: true
      provider: keycloak
      provisionClient: true
      redirectURI: /oauth2/callback
-     scopes:
-       - openid
-       - profile
-       - email
    gateway: public
    hostname: ray-dashboard.atep-dev.openteams.local
    landingPage:
      category: Data Science
      description: Monitor and manage Ray clusters and Serve deployments
--- 620,636 ----
      app.kubernetes.io/managed-by: Helm
      app.kubernetes.io/name: nebari-rayserve-pack
      app.kubernetes.io/version: 2.43.0
      helm.sh/chart: nebari-rayserve-pack-0.4.1
    name: release-name-nebari-rayserve-pack-dashboard
+   namespace: default
  spec:
    auth:
      enabled: true
      provider: keycloak
      provisionClient: true
      redirectURI: /oauth2/callback
    gateway: public
    hostname: ray-dashboard.atep-dev.openteams.local
    landingPage:
      category: Data Science
      description: Monitor and manage Ray clusters and Serve deployments

serve

nebariapp:
  # only for main
  enabled: true
  # only for main
  hostname: "serve.example.com"
  serve:
    enabled: true
    # only for PR
    hostname: "serve.example.com"
  dashboard:
    enabled: false
Diff

*** /tmp/sorted1.yaml	2026-08-28 14:59:17.837850616 +0200
--- /tmp/sorted2.yaml	2026-08-28 14:59:17.859850808 +0200
***************
*** 620,629 ****
--- 620,630 ----
      app.kubernetes.io/managed-by: Helm
      app.kubernetes.io/name: nebari-rayserve-pack
      app.kubernetes.io/version: 2.43.0
      helm.sh/chart: nebari-rayserve-pack-0.4.1
    name: release-name-nebari-rayserve-pack
+   namespace: default
  spec:
    gateway: public
    hostname: serve.example.com
    routing:
      routes:

Comment thread chart/values.yaml
# Set enabled: true when deploying on a Nebari cluster.
# Creates NebariApp CRs that configure routing, TLS, and auth via nebari-operator.
nebariapp:
enabled: false

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

  1. Why would we not deploy this on nebari given that this is a software pack?
  2. Even if there is such a use case, we still have switches for the individual pieces. Meaning, the global one is just convenience to begin with.

Comment thread chart/values.yaml
# Creates a NebariApp CRD that configures routing, TLS, and auth via nebari-operator.
# Set enabled: true when deploying on a Nebari cluster.
# Creates NebariApp CRs that configure routing, TLS, and auth via nebari-operator.
nebariapp:

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

This whole struct is a mix of individual and common configuration. It is certainly not obvious how it works and is not aligned with what other software packs are doing. I basically moved all common fields into the components so they are now independent from each other. This is BC breaking. I'm going to call out the individual things in my comments below.

Comment thread chart/values.yaml
# Creates NebariApp CRs that configure routing, TLS, and auth via nebari-operator.
nebariapp:
enabled: false
# hostname: rayserve.nebari.example.com # Required when serve.enabled is true

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

  1. No longer on the top level, but rather serve.hostname name

  2. The comment says that it is required, but the template silently skips the NebariApp CR if enabled, but no hostname is available.

    {{- if and .Values.nebariapp.enabled (ne (toString (dig "serve" "enabled" true .Values.nebariapp)) "false") }}
    {{- if .Values.nebariapp.hostname }}

    With this PR the hostname is now required if enabled as the comment states.

Comment thread chart/values.yaml
Comment on lines -26 to -29
service:
name: "" # Defaults to <release>-<chart>-serve-svc (serve) or -head-svc (dashboard)
servePort: 8000
dashboardPort: 8265

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Moved into the components with servePort becoming serve.service.port and dashboardPort becoming dashboard.service.port.

Comment thread chart/values.yaml
Comment on lines -30 to -38
auth:
enabled: false
provider: keycloak
provisionClient: true
redirectURI: /oauth2/callback
scopes:
- openid
- profile
- email

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Removed as auth was disabled by default. We only need to put it back if the other values besides enabled are intentionally there or if they have been copied over from somewhere and will be user defined anyway.

Comment thread chart/values.yaml
- profile
- email

gateway: public

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Moved into the components.

Comment on lines -15 to -18
routing:
routes:
- pathPrefix: /
pathType: PathPrefix

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

This block was hardcoded here and was moved into the values.

Comment thread chart/templates/NOTES.txt
The RayService controller manages the Ray cluster and Serve proxy.
Serve is pre-initialized with host 0.0.0.0 on port 8000.

{{- if .Values.nebariapp.enabled }}

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Flag for myself: reinstate.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

I removed some of the tests as they don't provide much value. They only check if templating works and not what is produced.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

As mentioned in another comment, I'm questioning if we should have this workflow at all. Are we expecting this to be deployed anywhere but nebari?

Comment thread .gitignore
@@ -1,6 +1,5 @@
# Helm
chart/charts/
chart/Chart.lock

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Not sure why we ignored the lock file. It is important for a reproducible deployment.

Comment thread chart/Chart.yaml
appVersion: "2.43.0"
dependencies:
- name: nebari-app
repository: oci://quay.io/reiemp/charts

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

NebariApp template drops most AuthConfig fields, duplicates auth block

2 participants