Files
OpenShell/deploy/helm/openshell/tests/clusterrole_test.yaml
Gaizka MenendezandTaylor Mutch fe3942f2da feat(helm): migrate gateway configuration to gatewayConfig (#3384)
* 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>
2026-10-08 18:39:59 +00:00

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