Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
c68325e
feat(nvca): add control-plane cluster validator role, gateway and sto…
rohithb-hub Aug 11, 2026
1b05986
fix(nvca): address code-review findings in control-plane validator
rohithb-hub Aug 12, 2026
cc062af
fix(nvca): add security context, summary schema entries, and test ass…
rohithb-hub Aug 12, 2026
793bb32
fix(nvca): sync AllCheckKeys count and clusterValidatorCheckKeys with…
rohithb-hub Aug 12, 2026
21b85e8
fix(nvca): set RunAsUser on node-to-node probe security context
rohithb-hub Aug 12, 2026
eeb2c30
style(nvca): replace em dash with semicolon in security context comment
rohithb-hub Aug 12, 2026
257ac5e
feat(nvca): extend control-plane validator with DaemonSet n2n, HA che…
rohithb-hub Aug 17, 2026
29180fb
fix(nvca): remove activeDeadlineSeconds from DaemonSet pod template
rohithb-hub Aug 17, 2026
603233d
fix(nvca): sweep orphan n2n DaemonSets left by SIGKILL'd validator runs
rohithb-hub Aug 17, 2026
8c5bafe
fix(nvca): fix Bazel dep, DaemonSet taint handling, orphan sweep cleanup
rohithb-hub Aug 18, 2026
f810b22
fix(nvca): address CodeRabbit review comments
rohithb-hub Aug 18, 2026
8e332e6
feat(nvca): warn on in-progress Tier-1 rollouts and strengthen tainte…
rohithb-hub Aug 18, 2026
812fdbb
Merge branch 'main' into feat/nvca-control-plane-validator
rohithb-hub Aug 18, 2026
ee8379d
refactor(nvca): introduce Role type for VALIDATOR_ROLE constants
rohithb-hub Sep 7, 2026
a42d058
fix(nvca): update parseRole test for Role type and two-value return
rohithb-hub Sep 7, 2026
e2e6049
docs(nvca): correct node-to-node probe topology comment
rohithb-hub Sep 11, 2026
b9ac001
fix(nvca): correct control-plane checks that misreported cluster state
rohithb-hub Sep 14, 2026
93e24c6
fix(nvca): surface Gateway API discovery failures instead of reportin…
rohithb-hub Sep 14, 2026
8b516d7
fix(nvca): pin Gateway route versions and stop partial RBAC denials p…
rohithb-hub Sep 14, 2026
208ce1c
fix(nvca): verify StatefulSet controller identity and treat skipped r…
rohithb-hub Sep 14, 2026
f861d3c
Merge branch 'main' into feat/nvca-control-plane-validator
vrv3814 Sep 16, 2026
9decc75
fix(nvca): make control-plane checks reachable and stop unobserved ch…
rohithb-hub Sep 21, 2026
2381281
test(nvca): cover the gateway discovery surface, pod-list denials, an…
rohithb-hub Sep 21, 2026
88d34da
chore(nvca): ignore locally built command binaries at the subtree root
rohithb-hub Sep 21, 2026
93e96db
fix(nvca): scope the load-balancer test fixtures to the probed namespace
rohithb-hub Sep 21, 2026
1aab2ac
test(nvca): resolve the Envoy namespace in fixtures so ambient env ca…
rohithb-hub Sep 21, 2026
76bf31c
fix(nvca): reclaim suffixed legacy probe DaemonSets and wire the role…
rohithb-hub Sep 21, 2026
c2ec3ee
fix(nvca): grant the operator SA daemonset create and treat a single-…
rohithb-hub Sep 21, 2026
8ae4120
fix(nvca): report an unexercised overlay check as not applicable inst…
rohithb-hub Sep 21, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions deploy/helm/nvca-operator/nvca-operator/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,9 @@ This release does not wire the catalog into backend selection. Runtime use requi
| `clusterValidator.image.repository` | Cluster Validator container registry path, without tag | `""` |
| `clusterValidator.image.tag` | Cluster Validator container image tag | `v2.0.0` |
| `clusterValidator.image.pullPolicy` | K8s ImagePullPolicy for cluster-validator | `IfNotPresent` |
| `clusterValidator.role` | Check set: `control-plane`, or any other value for the GPU checks | `""` |
| `clusterValidator.openBaoNamespace` | Namespace holding OpenBao when it is not `vault-system` | `""` |
| `clusterValidator.envoyGatewayNamespace` | Namespace holding Envoy Gateway when it is not `envoy-gateway-system` | `""` |
| `clusterValidator.schedule` | CronJob schedule (cron expression) | `0 */3 * * *` |
| `clusterValidator.configMapName` | ConfigMap name for user-defined network checks | `cluster-validator-network-checks` |
| `clusterValidator.networkChecks` | Network check configuration (creates the ConfigMap automatically when set) | `{}` |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -418,6 +418,9 @@ Usage: {{- $cv := include "nvcaop.clusterValidatorConfig" . | fromYaml -}}
"image" (dict "repository" "" "tag" "" "pullPolicy" "IfNotPresent")
"schedule" "0 */3 * * *"
"configMapName" "cluster-validator-network-checks"
"role" ""
"openBaoNamespace" ""
"envoyGatewayNamespace" ""
"networkChecks" (dict)
"resources" (dict
"requests" (dict "cpu" "100m" "memory" "64Mi")
Expand Down
18 changes: 18 additions & 0 deletions deploy/helm/nvca-operator/nvca-operator/templates/cronjob.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,24 @@ spec:
valueFrom:
fieldRef:
fieldPath: metadata.namespace
# Selects the check set: "control-plane" runs the gateway,
# storage, overlay and HA checks; anything else (including
# unset) runs the compute-plane GPU set. Without this the
# control-plane checks are unreachable from the chart.
- name: VALIDATOR_ROLE
value: {{ $cv.role | quote }}
{{- if $cv.openBaoNamespace }}
# Relocated OpenBao: without this the Tier-2 quorum check
# silently skips its StatefulSet.
- name: NVCF_OPENBAO_NAMESPACE
value: {{ $cv.openBaoNamespace | quote }}
{{- end }}
{{- if $cv.envoyGatewayNamespace }}
# Set when the stack's controllerNamespace differs from the
# Envoy Gateway chart default.
- name: NVCF_ENVOY_GATEWAY_NAMESPACE
value: {{ $cv.envoyGatewayNamespace | quote }}
{{- end }}
resources:
requests:
cpu: {{ $cv.resources.requests.cpu | quote }}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,21 @@ spec:
valueFrom:
fieldRef:
fieldPath: metadata.namespace
# Same role and namespace wiring as the CronJob. This init container
# writes the same summary ConfigMap, so without it every operator pod
# restart republishes a compute-plane summary over a control-plane
# one: the GPU keys reappear and all the control-plane keys are pruned
# until the next CronJob tick.
- name: VALIDATOR_ROLE
value: {{ $cv.role | quote }}
{{- if $cv.openBaoNamespace }}
- name: NVCF_OPENBAO_NAMESPACE
value: {{ $cv.openBaoNamespace | quote }}
{{- end }}
{{- if $cv.envoyGatewayNamespace }}
- name: NVCF_ENVOY_GATEWAY_NAMESPACE
value: {{ $cv.envoyGatewayNamespace | quote }}
{{- end }}
resources:
requests:
cpu: {{ $cv.resources.requests.cpu | quote }}
Expand Down
13 changes: 11 additions & 2 deletions deploy/helm/nvca-operator/nvca-operator/templates/rbac.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,15 @@ rules:
resourceNames: ["cluster-validator-summary"]
verbs: ["update"]
- apiGroups: ["apps"]
resources: ["deployments", "daemonsets"]
resources: ["deployments", "statefulsets"]
# statefulsets: the Tier-2 quorum and placement check. Without it every
# control-plane namespace 403s and the critical row is permanently unknown.
verbs: ["get", "list"]
- apiGroups: ["apps"]
resources: ["daemonsets"]
# create/delete: the node-to-node overlay probe runs a short-lived
# DaemonSet in a per-run namespace and deletes it in the same run.
verbs: ["get", "list", "create", "delete"]
- apiGroups: ["admissionregistration.k8s.io"]
resources:
- mutatingwebhookconfigurations
Expand All @@ -69,7 +76,9 @@ rules:
resources: ["networkpolicies"]
verbs: ["get", "list", "create", "update", "delete"]
- apiGroups: ["storage.k8s.io"]
resources: ["csidrivers"]
# storageclasses: the default-StorageClass check. Without it the critical
# row is permanently unknown on every run.
resources: ["csidrivers", "storageclasses"]
verbs: ["get", "list"]
- apiGroups: ["nvidia.com"]
resources: ["clusterpolicies"]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,13 @@ rules:
verbs: ["get", "list", "watch", "create", "update", "delete", "deletecollection", "patch"]
- apiGroups: ["apps"]
resources: ["daemonsets"]
verbs: ["get", "list", "watch"]
# create/delete: the cluster-validator init container runs under this
# ServiceAccount and the node-to-node overlay probe creates a short-lived
# DaemonSet in a per-run namespace. Without these the probe 403s, which is
# an unobserved critical check, which fails the verdict and CrashLoops the
# operator pod. Not an escalation: this role already has cluster-wide
# create/delete on namespaces, pods, deployments and statefulsets.
verbs: ["get", "list", "watch", "create", "delete"]
- apiGroups: ["scheduling.run.ai"]
resources: ["queues"]
verbs: ["get", "list", "watch"]
Expand Down
11 changes: 11 additions & 0 deletions deploy/helm/nvca-operator/nvca-operator/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -497,6 +497,9 @@ networkPolicy:
## @param clusterValidator.image.repository Cluster Validator container registry path, without tag
## @param clusterValidator.image.tag Cluster Validator container image tag
## @param clusterValidator.image.pullPolicy K8s ImagePullPolicy for cluster-validator
## @param clusterValidator.role Check set to run: "control-plane" for gateway, storage, overlay and HA checks; any other value (including "") runs the compute-plane GPU checks
## @param clusterValidator.openBaoNamespace Namespace holding OpenBao, when it is not vault-system; without it the Tier-2 quorum check skips its StatefulSet
## @param clusterValidator.envoyGatewayNamespace Namespace holding Envoy Gateway, when it is not envoy-gateway-system
## @param clusterValidator.schedule CronJob schedule (cron expression)
## @param clusterValidator.configMapName ConfigMap name for user-defined network checks (reachability + network policy validation)
## @param clusterValidator.resources.limits.cpu CPU limit for the cluster-validator container
Expand All @@ -506,6 +509,14 @@ networkPolicy:
## @param clusterValidator.networkChecks [object] Network check configuration (creates the ConfigMap automatically when set)
clusterValidator:
enabled: false
# Which check set the validator runs. "control-plane" enables the gateway,
# StorageClass, node-to-node overlay and Tier-1/Tier-2 HA checks and skips
# the GPU checks. Any other value (including "") runs the compute-plane set.
role: ""
# Set when OpenBao or Envoy Gateway are installed outside their default
# namespaces, so the control-plane checks look in the right place.
openBaoNamespace: ""
envoyGatewayNamespace: ""
image:
repository: ""
tag: "" # defaults to .Chart.AppVersion (same as nvca-operator)
Expand Down
8 changes: 8 additions & 0 deletions src/compute-plane-services/nvca/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,11 @@ clusterdump-*
/bazel-*
.bazel-cache/
.tls/

# Locally built command binaries. `go build -o <name> ./cmd/<name>` at the
# subtree root drops a ~60MB artifact next to the source, which is easy to
# sweep into a commit with `git add -A`.
/cluster-validator
/nvca
/nvca-operator
/webhook-server
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,7 @@ go_test(
name = "cluster-validator_test",
srcs = ["main_test.go"],
embed = [":cluster-validator_lib"],
deps = [
"//src/compute-plane-services/nvca/internal/clustervalidator",
],
)
26 changes: 25 additions & 1 deletion src/compute-plane-services/nvca/cmd/cluster-validator/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,11 +72,35 @@ func main() {
clustervalidator.SummaryConfigMapNamespaceEnv)
}

if err := clustervalidator.Run(ctx, client, configNS, configName, summaryNS, emitMetrics); err != nil {
// VALIDATOR_ROLE selects which check set runs: "control-plane" enables
// gateway and StorageClass checks and skips GPU/SMB; anything else (including
// unset) runs the compute-plane check set (backward-compatible default).
roleEnv := os.Getenv("VALIDATOR_ROLE")
role, roleKnown := parseRole(roleEnv)
if roleEnv != "" && !roleKnown {
log.Warnf("VALIDATOR_ROLE=%q is not recognized; defaulting to compute-plane", roleEnv)
}

if err := clustervalidator.Run(ctx, client, configNS, configName, summaryNS, emitMetrics, role); err != nil {
Comment on lines +75 to +84

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nothing in the repo sets VALIDATOR_ROLE, so none of the eight control-plane checks this PR rewrote executes in any shipped path.

  • deployments/nvca-operator/templates/cronjob.yaml:69 sets only VALIDATOR_CONFIG_NAMESPACE / _NAME / _SUMMARY_NAMESPACE.
  • values.yaml:538 has no role key, and clusterValidator.enabled defaults to false.
  • feat(check): add control-plane validator, stale namespace detection, and registry credential checks #782 adds VALIDATOR_ROLE at src/clis/nvcf-cli/internal/selfhosted/clustervalidator.go:659 — but only in the nvcf-cli Job builder. The CronJob path is wired by neither PR. Even with both merged, the operator CronJob still runs compute-plane.

So roleEnv is empty, parseRole defaults to compute-plane, and validator.go:186 if role == RoleControlPlane is never true in production.

Related dead wiring: controlPlaneNamespaceSet (checks.go:1585) reads os.Getenv("NVCF_OPENBAO_NAMESPACE"), but that is an nvcf-cli client-side config key resolved via getConfigValueWithDefault (internal/client/client.go:291) and is passed to neither Job builder (grep over deploy/ and nvca/deployments/ returns zero hits). An operator following the shipped examples/config-dev.yaml — which really does set vault-system-dev — gets os.Getenv("") inside the pod, the static list, and "All N quorum StatefulSet(s) Ready" with OpenBao's Raft quorum never examined: the exact silent drop the comment at 1568 says it prevents. TestControlPlaneNamespaceSet_HonoursOpenBaoOverride is green only because t.Setenv mutates the test process.

Adding VALIDATOR_ROLE (and NVCF_OPENBAO_NAMESPACE) to the CronJob env block would make this PR's work reachable — and would also make the RBAC gap flagged on checks.go:1766 a live outage rather than a latent one, so the two need to land together.

log.WithError(err).Fatal("Cluster validation failed")
}
}

// parseRole normalizes the VALIDATOR_ROLE env value. Returns the matching
// clustervalidator.Role constant and true for "control-plane" or
// "compute-plane"; returns the compute-plane default and false for any other
// value so unknown inputs are safe.
func parseRole(v string) (clustervalidator.Role, bool) {
switch strings.ToLower(strings.TrimSpace(v)) {
case string(clustervalidator.RoleControlPlane):
return clustervalidator.RoleControlPlane, true
case string(clustervalidator.RoleComputePlane):
return clustervalidator.RoleComputePlane, true
default:
return clustervalidator.RoleComputePlane, false
Comment thread
coderabbitai[bot] marked this conversation as resolved.
}
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.

// preflightMode reports whether this is a one-shot preflight run (e.g. nvcf-cli,
// before NVCA is installed), which skips the summary write. Read from an env
// (not a flag) so an unknown value is ignored rather than crashing arg parsing.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,37 @@ limitations under the License.

package main

import "testing"
import (
"testing"

"github.com/NVIDIA/nvcf/src/compute-plane-services/nvca/internal/clustervalidator"
)

func TestParseRole(t *testing.T) {
tests := []struct {
in string
want clustervalidator.Role
wantKnown bool
}{
// Known roles are normalized and reported as known.
{"control-plane", clustervalidator.RoleControlPlane, true},
{"CONTROL-PLANE", clustervalidator.RoleControlPlane, true},
{" control-plane ", clustervalidator.RoleControlPlane, true},
{"compute-plane", clustervalidator.RoleComputePlane, true},
{"COMPUTE-PLANE", clustervalidator.RoleComputePlane, true},
// Unknown values fall back to compute-plane and are reported as unknown.
{"", clustervalidator.RoleComputePlane, false},
{"gpu", clustervalidator.RoleComputePlane, false},
{"both", clustervalidator.RoleComputePlane, false},
{"control_plane", clustervalidator.RoleComputePlane, false}, // underscore, not hyphen
}
for _, tt := range tests {
got, gotKnown := parseRole(tt.in)
if got != tt.want || gotKnown != tt.wantKnown {
t.Errorf("parseRole(%q) = (%q, %v), want (%q, %v)", tt.in, got, gotKnown, tt.want, tt.wantKnown)
}
}
}

func TestPreflightMode(t *testing.T) {
tests := []struct {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,9 @@ This release does not wire the catalog into backend selection. Runtime use requi
| `clusterValidator.image.repository` | Cluster Validator container registry path, without tag | `""` |
| `clusterValidator.image.tag` | Cluster Validator container image tag | `v2.0.0` |
| `clusterValidator.image.pullPolicy` | K8s ImagePullPolicy for cluster-validator | `IfNotPresent` |
| `clusterValidator.role` | Check set: `control-plane`, or any other value for the GPU checks | `""` |
| `clusterValidator.openBaoNamespace` | Namespace holding OpenBao when it is not `vault-system` | `""` |
| `clusterValidator.envoyGatewayNamespace` | Namespace holding Envoy Gateway when it is not `envoy-gateway-system` | `""` |
| `clusterValidator.schedule` | CronJob schedule (cron expression) | `0 */3 * * *` |
| `clusterValidator.configMapName` | ConfigMap name for user-defined network checks | `cluster-validator-network-checks` |
| `clusterValidator.networkChecks` | Network check configuration (creates the ConfigMap automatically when set) | `{}` |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -418,6 +418,9 @@ Usage: {{- $cv := include "nvcaop.clusterValidatorConfig" . | fromYaml -}}
"image" (dict "repository" "" "tag" "" "pullPolicy" "IfNotPresent")
"schedule" "0 */3 * * *"
"configMapName" "cluster-validator-network-checks"
"role" ""
"openBaoNamespace" ""
"envoyGatewayNamespace" ""
"networkChecks" (dict)
"resources" (dict
"requests" (dict "cpu" "100m" "memory" "64Mi")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,24 @@ spec:
valueFrom:
fieldRef:
fieldPath: metadata.namespace
# Selects the check set: "control-plane" runs the gateway,
# storage, overlay and HA checks; anything else (including
# unset) runs the compute-plane GPU set. Without this the
# control-plane checks are unreachable from the chart.
- name: VALIDATOR_ROLE
value: {{ $cv.role | quote }}
{{- if $cv.openBaoNamespace }}
# Relocated OpenBao: without this the Tier-2 quorum check
# silently skips its StatefulSet.
- name: NVCF_OPENBAO_NAMESPACE
value: {{ $cv.openBaoNamespace | quote }}
{{- end }}
{{- if $cv.envoyGatewayNamespace }}
# Set when the stack's controllerNamespace differs from the
# Envoy Gateway chart default.
- name: NVCF_ENVOY_GATEWAY_NAMESPACE
value: {{ $cv.envoyGatewayNamespace | quote }}
{{- end }}
resources:
requests:
cpu: {{ $cv.resources.requests.cpu | quote }}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,21 @@ spec:
valueFrom:
fieldRef:
fieldPath: metadata.namespace
# Same role and namespace wiring as the CronJob. This init container
# writes the same summary ConfigMap, so without it every operator pod
# restart republishes a compute-plane summary over a control-plane
# one: the GPU keys reappear and all the control-plane keys are pruned
# until the next CronJob tick.
- name: VALIDATOR_ROLE
value: {{ $cv.role | quote }}
{{- if $cv.openBaoNamespace }}
- name: NVCF_OPENBAO_NAMESPACE
value: {{ $cv.openBaoNamespace | quote }}
{{- end }}
{{- if $cv.envoyGatewayNamespace }}
- name: NVCF_ENVOY_GATEWAY_NAMESPACE
value: {{ $cv.envoyGatewayNamespace | quote }}
{{- end }}
resources:
requests:
cpu: {{ $cv.resources.requests.cpu | quote }}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,15 @@ rules:
resourceNames: ["cluster-validator-summary"]
verbs: ["update"]
- apiGroups: ["apps"]
resources: ["deployments", "daemonsets"]
resources: ["deployments", "statefulsets"]
# statefulsets: the Tier-2 quorum and placement check. Without it every
# control-plane namespace 403s and the critical row is permanently unknown.
verbs: ["get", "list"]
- apiGroups: ["apps"]
resources: ["daemonsets"]
# create/delete: the node-to-node overlay probe runs a short-lived
# DaemonSet in a per-run namespace and deletes it in the same run.
verbs: ["get", "list", "create", "delete"]
- apiGroups: ["admissionregistration.k8s.io"]
resources:
- mutatingwebhookconfigurations
Expand All @@ -69,7 +76,9 @@ rules:
resources: ["networkpolicies"]
verbs: ["get", "list", "create", "update", "delete"]
- apiGroups: ["storage.k8s.io"]
resources: ["csidrivers"]
# storageclasses: the default-StorageClass check. Without it the critical
# row is permanently unknown on every run.
resources: ["csidrivers", "storageclasses"]
verbs: ["get", "list"]
- apiGroups: ["nvidia.com"]
resources: ["clusterpolicies"]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,13 @@ rules:
verbs: ["get", "list", "watch", "create", "update", "delete", "deletecollection", "patch"]
- apiGroups: ["apps"]
resources: ["daemonsets"]
verbs: ["get", "list", "watch"]
# create/delete: the cluster-validator init container runs under this
# ServiceAccount and the node-to-node overlay probe creates a short-lived
# DaemonSet in a per-run namespace. Without these the probe 403s, which is
# an unobserved critical check, which fails the verdict and CrashLoops the
# operator pod. Not an escalation: this role already has cluster-wide
# create/delete on namespaces, pods, deployments and statefulsets.
verbs: ["get", "list", "watch", "create", "delete"]
- apiGroups: ["scheduling.run.ai"]
resources: ["queues"]
verbs: ["get", "list", "watch"]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -528,6 +528,9 @@ networkPolicy:
## @param clusterValidator.image.repository Cluster Validator container registry path, without tag
## @param clusterValidator.image.tag Cluster Validator container image tag
## @param clusterValidator.image.pullPolicy K8s ImagePullPolicy for cluster-validator
## @param clusterValidator.role Check set to run: "control-plane" for gateway, storage, overlay and HA checks; any other value (including "") runs the compute-plane GPU checks
## @param clusterValidator.openBaoNamespace Namespace holding OpenBao, when it is not vault-system; without it the Tier-2 quorum check skips its StatefulSet
## @param clusterValidator.envoyGatewayNamespace Namespace holding Envoy Gateway, when it is not envoy-gateway-system
## @param clusterValidator.schedule CronJob schedule (cron expression)
## @param clusterValidator.configMapName ConfigMap name for user-defined network checks (reachability + network policy validation)
## @param clusterValidator.resources.limits.cpu CPU limit for the cluster-validator container
Expand All @@ -537,6 +540,14 @@ networkPolicy:
## @param clusterValidator.networkChecks [object] Network check configuration (creates the ConfigMap automatically when set)
clusterValidator:
enabled: false
# Which check set the validator runs. "control-plane" enables the gateway,
# StorageClass, node-to-node overlay and Tier-1/Tier-2 HA checks and skips
# the GPU checks. Any other value (including "") runs the compute-plane set.
role: ""
# Set when OpenBao or Envoy Gateway are installed outside their default
# namespaces, so the control-plane checks look in the right place.
openBaoNamespace: ""
envoyGatewayNamespace: ""
image:
repository: ""
tag: "" # defaults to .Chart.AppVersion (same as nvca-operator)
Expand Down
Loading
Loading