mirror of
https://github.com/NVIDIA/OpenShell.git
synced 2026-10-21 06:11:31 +08:00
* feat(helm): add generic gateway TOML serializer Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * docs(architecture): define Helm gateway configuration boundary Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * feat(helm): define default gateway configuration map Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * refactor(helm): render gateway config from values map Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * test(helm): cover generic gateway TOML rendering Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * feat(helm): protect gateway config secret boundary Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * docs(helm): classify legacy gateway configuration values Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * refactor(helm): derive dual-use resources from gateway config Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * test(helm): migrate gateway config scenarios Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * refactor(helm): derive credential resources from gateway config Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * refactor(helm): migrate gateway config overlays Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * refactor(helm): remove gateway configuration shadow values Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * refactor(helm): align runtime config with resources Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * docs(helm): add gateway config migration guide Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * test(helm): validate rendered gateway config Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * test(helm): cover config resource coherence Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * fix(helm): make Kubernetes E2E deployable Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * fix(e2e): pass host aliases through gateway config Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * docs(e2e): reference gateway config host alias Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * fix(helm): enforce gateway resource ownership Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * test(e2e): cover chart host gateway input Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * fix(helm): address gateway config review findings Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * fix(helm): repair RFC 0012 migration integration Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * fix(e2e): align Kubernetes parity with RFC 0012 Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * fix(helm): complete gateway config migration Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * chore(helm): add SPDX header to TOML template * fix(helm): preserve legacy gateway configuration aliases Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * fix(helm): complete legacy gateway config compatibility Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * feat(helm): support gateway config arrays of tables * fix(helm): preserve sandbox identity aliases * fix(helm): address gateway config review findings Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * fix(helm): preserve gateway config migration settings Signed-off-by: Taylor Mutch <taylormutch@gmail.com> * test(helm): validate extension arrays in CI values Signed-off-by: Taylor Mutch <taylormutch@gmail.com> * fix(helm): restore unconditional SPDX headers Signed-off-by: Taylor Mutch <taylormutch@gmail.com> * fix(helm): restore route SPDX header placement Signed-off-by: Taylor Mutch <taylormutch@gmail.com> * docs(helm): simplify configuration and migration examples Signed-off-by: Taylor Mutch <taylormutch@gmail.com> * docs(helm): remove redundant flag explanations Signed-off-by: Taylor Mutch <taylormutch@gmail.com> * docs(helm): move chart configuration guidance to Kubernetes setup Signed-off-by: Taylor Mutch <taylormutch@gmail.com> --------- Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> Signed-off-by: Taylor Mutch <taylormutch@gmail.com> Co-authored-by: Taylor Mutch <taylormutch@gmail.com>
224 lines
6.3 KiB
YAML
224 lines
6.3 KiB
YAML
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
suite: ClusterRole RBAC
|
|
templates:
|
|
- templates/clusterrole.yaml
|
|
release:
|
|
name: openshell
|
|
namespace: my-namespace
|
|
|
|
tests:
|
|
- it: includes the release namespace in the ClusterRole name
|
|
asserts:
|
|
- equal:
|
|
path: metadata.name
|
|
value: openshell-node-reader-my-namespace
|
|
|
|
- it: grants managed namespace NetworkPolicy apply permissions
|
|
set:
|
|
server.drivers.kubernetes.workspaceMode: managed
|
|
asserts:
|
|
- contains:
|
|
path: rules
|
|
content:
|
|
apiGroups: ["networking.k8s.io"]
|
|
resources: ["networkpolicies"]
|
|
verbs: ["get", "create", "patch", "update"]
|
|
|
|
- it: limits namespaced admission reads to PVCs
|
|
set:
|
|
server.drivers.kubernetes.workspaceMode: managed
|
|
server.drivers.kubernetes.allowDriverConfig: true
|
|
asserts:
|
|
- contains:
|
|
path: rules
|
|
content:
|
|
apiGroups: [""]
|
|
resources: ["persistentvolumeclaims"]
|
|
verbs: ["get"]
|
|
- notContains:
|
|
path: rules
|
|
content:
|
|
apiGroups: [""]
|
|
resources: ["secrets"]
|
|
verbs: ["get"]
|
|
- notContains:
|
|
path: rules
|
|
content:
|
|
apiGroups: [""]
|
|
resources: ["configmaps"]
|
|
verbs: ["get"]
|
|
|
|
- it: omits PVC admission reads when caller driver config is disabled
|
|
set:
|
|
server.drivers.kubernetes.workspaceMode: managed
|
|
asserts:
|
|
- notContains:
|
|
path: rules
|
|
content:
|
|
apiGroups: [""]
|
|
resources: ["persistentvolumeclaims"]
|
|
verbs: ["get"]
|
|
|
|
- it: preserves sandbox-runtime fence permissions when gateway isolation is disabled
|
|
set:
|
|
server.drivers.kubernetes.workspaceMode: managed
|
|
networkPolicy.enabled: false
|
|
asserts:
|
|
- contains:
|
|
path: rules
|
|
content:
|
|
apiGroups: ["networking.k8s.io"]
|
|
resources: ["networkpolicies"]
|
|
verbs: ["create", "get"]
|
|
- notContains:
|
|
path: rules
|
|
content:
|
|
apiGroups: ["networking.k8s.io"]
|
|
resources: ["networkpolicies"]
|
|
verbs: ["get", "create", "patch", "update"]
|
|
|
|
- it: gives schema-v2 managed SSH ingress precedence over the legacy alias
|
|
set:
|
|
server.drivers.kubernetes.workspaceMode: managed
|
|
networkPolicy.enabled: true
|
|
gatewayConfig:
|
|
openshell.drivers.kubernetes.managed_ssh_ingress:
|
|
enabled: false
|
|
asserts:
|
|
- notContains:
|
|
path: rules
|
|
content:
|
|
apiGroups: ["networking.k8s.io"]
|
|
resources: ["networkpolicies"]
|
|
verbs: ["get", "create", "patch", "update"]
|
|
|
|
- it: omits credential Secret access in managed mode
|
|
set:
|
|
server.drivers.kubernetes.workspaceMode: managed
|
|
server.credentialDrivers.kubernetesSecrets.enabled: true
|
|
asserts:
|
|
- notContains:
|
|
path: rules
|
|
content:
|
|
apiGroups: [""]
|
|
resources: ["secrets"]
|
|
verbs: ["get", "create", "patch", "delete"]
|
|
|
|
- it: omits all Secret rules in operator mode
|
|
set:
|
|
server.drivers.kubernetes.workspaceMode: operator
|
|
server.tls.clientTlsSecretName: custom-client-tls
|
|
server.credentialDrivers.kubernetesSecrets.enabled: true
|
|
asserts:
|
|
- notExists:
|
|
path: rules[*].resources[?(@ == "secrets")]
|
|
|
|
- it: names no Secrets in managed mode
|
|
set:
|
|
server.drivers.kubernetes.workspaceMode: managed
|
|
server.tls.clientTlsSecretName: custom-client-tls
|
|
server.sandboxImagePullSecrets:
|
|
- name: registry-one
|
|
- name: registry-two
|
|
asserts:
|
|
- notExists:
|
|
path: rules[*].resourceNames
|
|
- contains:
|
|
path: rules
|
|
content:
|
|
apiGroups: [""]
|
|
resources: ["secrets"]
|
|
verbs: ["create", "delete"]
|
|
|
|
- it: omits secrets rule entirely in shared mode
|
|
set:
|
|
server.drivers.kubernetes.workspaceMode: shared
|
|
asserts:
|
|
- notExists:
|
|
path: rules[*].resources[?(@ == "secrets")]
|
|
|
|
- it: grants managed sandbox-runtime companion permissions
|
|
set:
|
|
gatewayConfig:
|
|
openshell.drivers.kubernetes:
|
|
workspace_mode: managed
|
|
asserts:
|
|
- contains:
|
|
path: rules
|
|
content:
|
|
apiGroups: [""]
|
|
resources: ["pods"]
|
|
verbs: ["create", "delete", "get", "list", "patch", "watch"]
|
|
- contains:
|
|
path: rules
|
|
content:
|
|
apiGroups: [""]
|
|
resources: ["services"]
|
|
verbs: ["create", "get"]
|
|
- contains:
|
|
path: rules
|
|
content:
|
|
apiGroups: [""]
|
|
resources: ["secrets"]
|
|
verbs: ["create", "delete"]
|
|
|
|
- it: grants operator sandbox-runtime companion permissions
|
|
set:
|
|
gatewayConfig:
|
|
openshell.drivers.kubernetes:
|
|
workspace_mode: operator
|
|
asserts:
|
|
- contains:
|
|
path: rules
|
|
content:
|
|
apiGroups: [""]
|
|
resources: ["pods"]
|
|
verbs: ["create", "delete", "get", "list", "patch", "watch"]
|
|
- contains:
|
|
path: rules
|
|
content:
|
|
apiGroups: [""]
|
|
resources: ["services"]
|
|
verbs: ["create", "get"]
|
|
- it: omits the ClusterRole when cluster-scoped RBAC is disabled
|
|
set:
|
|
rbac.clusterScoped.create: false
|
|
asserts:
|
|
- hasDocuments:
|
|
count: 0
|
|
|
|
- it: omits the ClusterRole when all chart-managed RBAC is disabled
|
|
set:
|
|
rbac.create: false
|
|
asserts:
|
|
- hasDocuments:
|
|
count: 0
|
|
|
|
- it: omits the ClusterRole independently of the workspace mode
|
|
set:
|
|
rbac.clusterScoped.create: false
|
|
server.drivers.kubernetes.workspaceMode: managed
|
|
asserts:
|
|
- hasDocuments:
|
|
count: 0
|
|
|
|
- it: uses the configured ClusterRole name
|
|
set:
|
|
rbac.clusterScoped.clusterRoleName: platform-openshell-node-reader
|
|
asserts:
|
|
- equal:
|
|
path: metadata.name
|
|
value: platform-openshell-node-reader
|
|
|
|
- it: creates the ClusterRole when legacy values omit the rbac block
|
|
set:
|
|
rbac: null
|
|
asserts:
|
|
- hasDocuments:
|
|
count: 1
|
|
- equal:
|
|
path: metadata.name
|
|
value: openshell-node-reader-my-namespace
|