{{- $kubernetesConfig := include "openshell.effectiveKubernetesConfig" . | fromYaml -}} {{- $workspaceMode := get $kubernetesConfig "workspace_mode" | default "shared" -}} {{- $allowDriverConfig := get $kubernetesConfig "allow_driver_config" | default false -}} {{- if and (eq $workspaceMode "shared") (include "openshell.workspaceResourcesEnabled" .) (include "openshell.rbacCreate" .) }} # SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: {{ include "openshell.fullname" . }}-sandbox namespace: {{ include "openshell.sandboxNamespace" . }} labels: {{- include "openshell.labels" . | nindent 4 }} rules: {{- if $allowDriverConfig }} # Metadata-only admission of caller-selected PVCs requires get permission. - apiGroups: [""] resources: ["persistentvolumeclaims"] verbs: ["get"] {{- end }} - apiGroups: - agents.x-k8s.io resources: - sandboxes - sandboxes/status verbs: - create - delete - get - list - patch - update - watch - apiGroups: - "" resources: - events verbs: - get - list - watch # Per-sandbox identity: TokenReview authenticates the projected token from # the configured sandbox service account, then the gateway resolves the # returned pod name and UID to its immutable sandbox labels. The driver also # creates and deletes the directly managed supervisor Pod. PATCH removes the # driver-owned bootstrap scheduling gate after immutable bootstrap material # has been created. - apiGroups: - "" resources: - pods verbs: - create - delete - get - list - patch - watch - apiGroups: [""] resources: ["services"] verbs: ["create", "get"] - apiGroups: [""] resources: ["secrets"] # Bootstrap Secrets are generation-scoped. Recovery deletes them by exact # name. verbs: ["create", "delete"] - apiGroups: ["networking.k8s.io"] resources: ["networkpolicies"] verbs: ["create", "get"] {{- end }}