Repository navigation
feat(helm): migrate gateway configuration to gatewayConfig - #3384
Conversation
|
/ok to test c5afa06 |
c5afa06 to
cb8ae8b
Compare
|
Label |
|
/ok to test cb8ae8b |
cb8ae8b to
5efe3e8
Compare
|
@krishicks I pushed a new commit solving a conflict with |
|
/ok to test 5efe3e8 |
46d70d8 to
cfae1b6
Compare
|
/ok to test cfae1b6 |
|
I added this to to 0.1.1 milestone as we're freezing what goes into 0.1.0. For this to actually land in 0.1.1 it would need to be implemented in a backwards-compatible way. Failing that this would need to be pushed to 0.2.0 which is the next release where breaking changes can get in. |
cfae1b6 to
df2e85c
Compare
4e1bcdb to
4329258
Compare
|
Rebased onto latest main and conflicts are resolved. @krishicks could I have the test suite re-executed with |
|
I did some analysis as the goal is to have this rolled in a backwards compatible manner. Posting my analysis: Compat check against 0.1.x: legacy server.oidc.* without role names loses RBAC on upgrade: I rendered the chart at the merge-base (b8ffe52) and at this PR's head (de1451b) with the same legacy ci/values-*.yaml overlays, then compared the parsed Regression: a values file that sets server.oidc.issuer and audience but no role names (for example The old template emitted roles_claim, admin_role and user_role only when non-empty (gateway-config.yaml L163-171), so the gateway fell back to realm_access.roles / openshell-admin / openshell-user. With explicit empty strings: Config-file values replace defaulted CLI args ( Repro: Suggested fix: in the legacy OIDC translation, add roles_claim, admin_role and user_role only when the legacy value is non-empty, as the old template did and as this PR already does for the other optional fields. Please also add a Helm test: legacy server.oidc.issuer only → gateway.toml has no admin_role, user_role or roles_claim. Another test could pin that an explicit schema-v2 admin_role = "" is still honoured. |
|
Optional but, IMO we should split this PR |
Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com>
|
/ok to test b7cde12 |
Signed-off-by: Taylor Mutch <taylormutch@gmail.com>
Signed-off-by: Taylor Mutch <taylormutch@gmail.com>
Signed-off-by: Taylor Mutch <taylormutch@gmail.com>
TaylorMutch
left a comment
There was a problem hiding this comment.
I validated the chart in a local Helm development environment and found three remaining migration issues. Details are inline.
|
@gmenher Thanks for working through the compatibility changes. I found the three remaining migration issues noted in my review and have fixes prepared locally. I'll push those fixes, along with regression tests, the CI values example covering ordered gateway interceptor and supervisor middleware arrays from #3060, and the small SPDX header reverts, so we can get this across the finish line. The fixes have been checked with Helm unit tests, config-parser validation, and targeted tests in a local Kubernetes development environment, including credential continuity across an upgrade and the default pull policy for a |
Signed-off-by: Taylor Mutch <taylormutch@gmail.com>
Signed-off-by: Taylor Mutch <taylormutch@gmail.com>
Signed-off-by: Taylor Mutch <taylormutch@gmail.com>
|
/ok to test aa5e148 |
Signed-off-by: Taylor Mutch <taylormutch@gmail.com>
|
/ok to test a1a1933 |
…y server values (#12949) ## Failure The OpenShell v0.1.3 chart (NVIDIA/OpenShell#3384) moves gateway settings into `gatewayConfig`. NemoClaw still set four of them through `server.*` values, which work only through the chart's compatibility mapping: - `server.oidc` issuer, audience, claims, and roles - `server.auth.allowUnauthenticatedUsers` - `server.workspaceDefaultStorageSize` - `server.drivers.kubernetes.workspaceMode` ## Decision Set them in `gatewayConfig` (schema version 2), using the dotted TOML table keys the chart's own CI values use: ```yaml gatewayConfig: openshell.gateway.oidc: # issuer, audience, jwks_ttl_secs, roles_claim, # admin_role, user_role, scopes_claim, # dangerously_allow_insecure_http openshell.gateway.auth: allow_unauthenticated_users: false openshell.drivers.kubernetes: workspace_mode: shared workspace_default_storage_size: 2Gi ``` `server` keeps only values the templates read directly: TLS, the JWT signing secret, credential storage, telemetry, and `server.oidc.caConfigMapName`. The chart mounts the issuer CA only from that last value. The settings themselves are unchanged. ## Validation - The gateway value tests now require the `gatewayConfig` tables, and that `server` holds only those directly read keys. Both failed before the change and pass after it. All 84 Kubernetes tests pass. - `cargo ci` passed: 1,322 workspace tests and all 120 lifecycle tests. - Live / Kind passed on `linux_arm64` and `linux_amd64` with the real v0.1.3 chart ([run 38003924177](https://github.com/NVIDIA/NemoClaw/actions/runs/38003924177)). That includes `the_pinned_chart_renders_with_the_sdk_values` and `the_gateway_installs_authenticates_and_is_removed_keeping_storage`, which authenticates through the OIDC settings in `gatewayConfig`.
Summary
Migrate the Helm chart from field-by-field
gateway.tomlconstruction to the schema-v2gatewayConfigboundary while preserving the non-secret ConfigMap boundary and Helm-owned Secret, volume, and resource wiring.Related Issue
Closes #3060.
Compatibility
This implementation is backwards-compatible for 0.1.x:
sandboxRuntime,supervisor,upstreamProxy, and Kubernetes driver aliases for existing values files.gatewayConfigis authoritative whenever both the schema-v2 field and its legacy alias are supplied.gatewayConfig.Changes
Testing
mise run cimise run helm:test(170 gateway-chart tests and 5 workspace-chart tests)mise run helm:lintacross chart overlaysChecklist
Signed-off-bytrailers.