refactor(config): normalize and enforce gateway schema v2 - #2814
refactor(config): normalize and enforce gateway schema v2#2814jhjaggars wants to merge 41 commits into
Conversation
be4ecf7 to
4042128
Compare
Review concern dispositions and completed follow-upThe hard schema-v2 cut remains intentional: OpenShell does not silently accept v1 configuration syntax. Compatibility is preserved at explicit operational boundaries where an upgrade must not break runtime behavior, persisted state, or stable Helm values.
Verification completed with targeted driver/server tests, Helm tests, |
Schema-v2 follow-up completedI implemented the remaining review findings while preserving the strict schema-v2 boundary.
Verification
The branch is now synchronized and pushed at |
Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>
Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>
Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>
Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>
Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>
Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>
Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>
Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>
Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>
Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>
Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>
Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>
Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>
Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>
Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>
Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>
Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>
Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>
Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>
Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>
Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>
Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>
Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>
Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>
Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>
Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>
Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>
9ccf6d9 to
6e8b2b4
Compare
johntmyers
left a comment
There was a problem hiding this comment.
gator-agent
PR Review Status
Thanks @jhjaggars. I checked the schema-v2 follow-up and the compatibility boundaries you described. The core migration work is well covered, but two repository-owned operator paths remain inconsistent with the implemented runtime contract.
Action required: update the test-guest configuration producer and correct the compute-driver compatibility guidance, then push a new head for a focused follow-up review.
Blocking findings:
GATOR-6e8b2b41-01: the supported test-guest provisioner still emits a gateway config rejected by schema v2GATOR-6e8b2b41-02: the debugging skill says a legacy environment alias is rejected even though this head still honors it
Carried findings:
- None
Gator metadata
- Validation: Project-valid implementation of accepted issue #2792, including the documented schema-v2 migration and compute-driver normalization.
- Docs: Fern documentation is updated; the installable debugging skill has one blocking runtime-contract contradiction.
- Checks: DCO passes; Branch Checks and Helm Lint are waiting for the current-head copy-pr mirror.
- E2E:
test:e2eis required for the gateway, driver, policy, proxy, credential, and lifecycle changes, but dispatch waits until review blockers are resolved. - Head SHA:
6e8b2b41bd0cf5b09f8da0e51863aeb9fff6029b - Base SHA:
48a8a4bf09824e9d832ac844c76ce5dfcb8c9b0b - Merge base SHA:
c93b2fa7da3a40a6dd6c077973cb13d2755f7e50 - Patch ID:
dc73b48cc8186a992c56477c27fd03e3c8deb984 - Gator payload:
8 - Review mode:
initial - Previous reviewed SHA:
none - Review budget exhausted:
no - Maintainer decision required:
no - Next state:
gator:in-review
| if: needs.pr_metadata.outputs.should_run == 'true' | ||
| runs-on: linux-amd64-cpu8 | ||
| container: | ||
| image: ghcr.io/nvidia/openshell/ci:latest |
Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>
Review follow-upAddressed the current-head findings in
Verification:
|
|
Label |
|
/ok to test 18e17c1 |
|
Label |
Re-check After Author UpdateThanks @jhjaggars. I reviewed current head What I checked: the focused delta from the prior reviewed head, both durable Gator findings, the new gateway-config fixture coverage, and the current-head workflow dispatch. Both findings are resolved, and the independent follow-up review found no new blockers. Disposition: resolved. No blocking items remain, and current-head Branch Checks, Helm Lint, and E2E are now queued or running. Blocking findings:
Carried findings:
Gator metadata
|
Signed-off-by: Jesse Jaggars <jjaggars@redhat.com>
Darwin ARM test follow-upFixed the aarch64-Darwin VM identity-test failure in This keeps the identity recovery and fail-closed behavior unchanged while making Local verification:
The aarch64-Darwin CI lane remains the authoritative platform validation. |
Summary
Normalize the gateway configuration surface and enforce strict schema version 2 for gateway, compute-driver, Helm, and package-managed configurations. The change gives each setting one canonical name and owner, preserves current runtime and security guarantees, documents the breaking migration, and adds deterministic plus paired live capability-parity validation against the frozen schema-v1 baseline.
Related Issue
Closes #2792
Changes
Schema and ownership
[openshell] version = 2; reject omitted, version 1, and unsupported future schemas with migration-focused diagnostics.compute_driver,--compute-driver, andOPENSHELL_COMPUTE_DRIVER.OPENSHELL_DRIVERScompatibility for one normalized driver when the canonical selector is absent; reject comma-delimited values and conflicting selectors. Continue to reject legacy--driverand--driversCLI flags.[openshell.drivers.<name>]; gateway-owned guest TLS paths remain under[openshell.gateway]and are injected only into the selected local driver.sandbox_namespacetosandbox_label, Podmansandbox_ssh_socket_pathtossh_socket_path, and VMopenshell_endpointtogrpc_endpoint.openshell-gatewaythrough the current registration architecture.Runtime and security behavior
main.ProvisioningwithSupervisorNotConnecteduntil the supervisor control session connects.Packaging and migration
openshell-gateway config preflight [--path PATH]for read-only, source-free validation before package-managed startup.ExecStartPrevalidation and fail-closed Snap configuration selection while preserving CLI--configandOPENSHELL_GATEWAY_CONFIGprecedence.Capability-parity validation
The migration procedure and schema-v2 examples are in
docs/reference/gateway-config.mdx. The complete validation campaign report is available at https://gist.github.com/jhjaggars/d890ce0d377d8fc5187f61aa390bbf5c.Breaking migration notes
[openshell] version = 2and use the singularcompute_driverselector.[openshell.gateway]and into the selected[openshell.drivers.<name>]table. Keep onlyguest_tls_ca,guest_tls_cert, andguest_tls_keyat gateway scope.always,if_not_present,never, or Podman-onlynewer. Existing Helm values may retain Kubernetes spellings because the chart normalizes them.openshell-gateway config preflight --path <gateway.toml>before restarting a package-managed gateway. The command validates but never rewrites the file.Testing
mise run pre-commitpassed after the final rebase integration fixes.mise run testpassed after rebasing onto currentorigin/main.platform_blockedrather than being reported as parity.Checklist