Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions .claude/skills/nvca-chart-release
1 change: 1 addition & 0 deletions .claude/skills/nvca-self-managed-install
1 change: 1 addition & 0 deletions .claude/skills/nvca-values-customization
1 change: 1 addition & 0 deletions .codex/skills/nvca-chart-release
1 change: 1 addition & 0 deletions .codex/skills/nvca-self-managed-install
1 change: 1 addition & 0 deletions .codex/skills/nvca-values-customization
1 change: 1 addition & 0 deletions .cursor/skills/nvca-chart-release
1 change: 1 addition & 0 deletions .cursor/skills/nvca-self-managed-install
1 change: 1 addition & 0 deletions .cursor/skills/nvca-values-customization
3 changes: 3 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,9 @@ manually before finishing.
| `documentation-style` | `ai-tooling/dev/skills/` | NVCF documentation conventions (no bold, no emojis, no em-dash) |
| `nvcf-explore-stack` | `ai-tooling/dev/skills/` | Navigate the self-hosted stack topology and dependency graph |
| `official-docs-style` | `ai-tooling/dev/skills/` | External-facing NVCF user documentation voice and structure |
| `nvca-chart-release` | `ai-tooling/dev/skills/` | Release NVCA Operator chart changes from monorepo source to the vendored Helm chart |
| `nvca-self-managed-install` | `ai-tooling/dev/skills/` | Install or validate the NVCA Operator chart against a self-managed control plane |
| `nvca-values-customization` | `ai-tooling/dev/skills/` | Customize NVCA Operator Helm chart values in the monorepo |
| `nvcf-self-managed-cli` | `ai-tooling/user/skills/` | Install, operate, and manage self-managed NVCF through `nvcf-cli` |
| `nvcf-self-managed-installation` | `ai-tooling/user/skills/` | Install and deploy the self-managed NVCF stack |
| `nvcf-self-managed-prerequisite` | `ai-tooling/user/skills/` | Install cluster-level prerequisites such as KAI Scheduler and SMB CSI driver |
Expand Down
104 changes: 104 additions & 0 deletions ai-tooling/dev/skills/nvca-chart-release/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
---
Comment thread
Max-NV marked this conversation as resolved.
name: nvca-chart-release
description: Release NVCA Operator chart changes from the native monorepo source to the vendored Helm chart. Use when updating the vendored NVCA Operator chart, changing NVCA image refs, publishing helm-nvca-operator, or validating the chart against a self-managed control plane.
license: Apache-2.0
compatibility: Requires a local checkout of the NVCF monorepo with deploy/helm/nvca-operator/ and src/compute-plane-services/nvca/ present, plus helm and yq.
author: "nvcf-core-eng <nvcf-core-eng@exchange.nvidia.com>"
version: "1.0.0"
tags: [nvcf, nvca, helm, chart-release, self-managed]
tools: [Read, Grep, Glob, Shell]
metadata:
internal: false
author: "nvcf-core-eng <nvcf-core-eng@exchange.nvidia.com>"
version: "1.0"
tags: [nvcf, nvca, helm, chart-release]
languages: [bash]
frameworks: [helm]
domain: cloud-infrastructure
---

# NVCA Operator Chart Release Workflow

Propagates Helm chart changes through the native monorepo paths:

| Component | Path | Purpose |
|-----------|------|---------|
| NVCA source | `src/compute-plane-services/nvca` | Operator and agent source plus source chart at `deployments/nvca-operator/` |
| Vendored chart | `deploy/helm/nvca-operator` | Vendors the source chart, applies self-managed defaults, publishes `helm-nvca-operator` |
| Self-managed stack | `deploy/stacks/self-managed` | Control-plane Helmfile deployment and environment defaults |

## Workflow

1. Make source changes in `src/compute-plane-services/nvca` when operator,
agent, or source chart behavior changes. Test them there.
2. Vendor from the monorepo source chart at
`src/compute-plane-services/nvca/deployments/nvca-operator/`.
3. Set the version inputs, either in the environment or in
`deploy/helm/nvca-operator/.env`:

```bash
NVCA_OPERATOR_VERSION=<operator-image-tag>
NVCA_VERSION=<agent-image-tag>
NVCA_SHARED_STORAGE_IMAGE_TAG=<shared-storage-tag>
```

4. Vendor and validate from `deploy/helm/nvca-operator`:

```bash
make vendor-chart
make lint
make template
make validate
```

5. If the chart is tested against a local self-managed control plane, render
stack-aware values and install from this chart subtree:

```bash
make render-values-from-stack stack_repo=../../../deploy/stacks/self-managed stack_env=local
make install-from-stack stack_repo=../../../deploy/stacks/self-managed stack_env=local
```

Use `additional_values=override.yml` for one-off validation. Do not edit the
stack just to test this chart.

## CI and Release

Umbrella CI is declared in `tools/ci/subproject-validations.yaml` with
subproject id `nvca-operator`. Do not add a chart-local `.gitlab-ci.yml`.

Validate the same chart path CI uses:

```bash
tools/ci/validate-helm-chart deploy/helm/nvca-operator/nvca-operator \
-f tools/ci/helm-validate-values/nvca-operator.yaml
```

## Local Image Testing

When testing local images in k3d, build them from `src/compute-plane-services/nvca`
and import them into the test cluster. Keep tags explicit and match them in the
chart values:

```bash
export NVCA_OPERATOR_VERSION=dev-local
export NVCA_VERSION=dev-local

# Run from src/compute-plane-services/nvca.
docker build -f docker/Dockerfile.nvca-operator \
-t nvca-operator:$NVCA_OPERATOR_VERSION .
docker build -f docker/Dockerfile.nvca \
-t nvca:$NVCA_VERSION .
```

Use the local-dev safety guidance before creating or deleting k3d clusters.

## Gotchas

- `make vendor-chart` overwrites the vendored `nvca-operator/` chart.
- Chart release generation depends on Conventional Commit semantics at the
umbrella level. Use `feat` or `fix` when a chart release is required.
- Keep `image.*`, `nvcaImage.*`, `ngcConfig.*`, and `selfManaged.*` values in
sync with the stack and source image tags.
- Never commit service keys, kubeconfigs, rendered secrets, or local registry
credentials.
71 changes: 71 additions & 0 deletions ai-tooling/dev/skills/nvca-self-managed-install/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
---
name: nvca-self-managed-install
description: Install or validate the NVCA Operator chart against a self-managed NVCF control plane from the native monorepo. Use when the control plane comes from deploy/stacks/self-managed and NVCA must be installed with stack-derived image repository settings.
license: Apache-2.0
compatibility: Requires a local checkout of the NVCF monorepo with deploy/helm/nvca-operator/ and deploy/stacks/self-managed/ present, plus helm.
author: "nvcf-core-eng <nvcf-core-eng@exchange.nvidia.com>"
version: "1.0.0"
tags: [nvcf, nvca, helm, install, self-managed]
tools: [Read, Shell]
metadata:
internal: false
author: "nvcf-core-eng <nvcf-core-eng@exchange.nvidia.com>"
version: "1.0"
tags: [nvcf, nvca, helm, install]
languages: [bash]
frameworks: [helm]
domain: cloud-infrastructure
---

# NVCA Self-Managed Install

Use `deploy/helm/nvca-operator` as the install surface for NVCA Operator chart
validation. Do not add NVCA back into the stack Helmfile just to test this
chart.

## Source of Truth

- Control-plane deployment: `deploy/stacks/self-managed`
- NVCA chart and install workflow: `deploy/helm/nvca-operator`
- NVCA source images and source chart: `src/compute-plane-services/nvca`
- Cluster prerequisites: use the public `nvcf-self-managed-prerequisite` skill
- Full stack install and teardown: use the public `nvcf-self-managed-installation` skill

## Preferred Workflow

Run from `deploy/helm/nvca-operator`:

```bash
make render-values-from-stack \
stack_env=local \
stack_repo=../../../deploy/stacks/self-managed
```

Inspect the generated file under `bin/`, then install or upgrade:

```bash
make install-from-stack \
stack_env=local \
stack_repo=../../../deploy/stacks/self-managed
```

## Optional Inputs

- `additional_values=override.yml` for one-off overrides
- `NCA_ID=<value>` to set the primary account ID explicitly
- `CLUSTER_NAME=<value>` and `CLUSTER_ID=<value>` to preserve or pin cluster identity
- `IMAGE_PULL_SECRET_NAME=<secret>` to attach a pre-created image pull secret

## Existing Release Reuse

If `nvca-operator` is already installed in the `nvca-operator` namespace, the
render helper reuses current release values first, then overlays repository
paths derived from the stack environment file. Use this to preserve cluster IDs
and operator settings during upgrades.

## Safety

Before creating, deleting, or reusing local k3d clusters, read the local-dev
safety guidance in `.cursor/skills/nvcf-self-hosted-local-dev/SKILL.md` from
the repo root. Do not delete clusters or Helm releases without explicit user
approval.
101 changes: 101 additions & 0 deletions ai-tooling/dev/skills/nvca-values-customization/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
---
name: nvca-values-customization
description: Customize NVCA Operator Helm chart values in the native monorepo. Use when modifying vendored defaults, changing stack-derived install values, adding deployment-time overrides, or updating scripts under deploy/helm/nvca-operator.
license: Apache-2.0
compatibility: Requires a local checkout of the NVCF monorepo with deploy/helm/nvca-operator/ present, plus helm and yq.
author: "nvcf-core-eng <nvcf-core-eng@exchange.nvidia.com>"
version: "1.0.0"
tags: [nvcf, nvca, helm, values, customization]
tools: [Read, Grep]
metadata:
internal: false
author: "nvcf-core-eng <nvcf-core-eng@exchange.nvidia.com>"
version: "1.0"
tags: [nvcf, nvca, helm, values]
languages: [bash, yaml]
frameworks: [helm]
domain: cloud-infrastructure
---

# Customizing NVCA Operator Chart Values

Use this skill from `deploy/helm/nvca-operator`.

## Values Flow

```text
src/compute-plane-services/nvca/deployments/nvca-operator/ source chart
-> scripts/ci_vendor_nvca_operator_chart applies self-managed defaults
-> nvca-operator/values.yaml vendored chart values
-> scripts/render_values_from_stack_env.sh stack-aware generated values
-> make install or make install-from-stack optional additional overrides
```

## Permanent Defaults

For defaults that every self-managed deployment should receive, edit
`scripts/ci_vendor_nvca_operator_chart` and re-vendor:

```bash
make vendor-chart
git diff nvca-operator/values.yaml
```

The vendoring script already applies defaults such as:

- `ngcConfig.clusterSource = "self-managed"`
- `ngcConfig.serviceKey = "dummy-api-key"`
- `image.tag = "$NVCA_OPERATOR_VERSION"`
- `selfManaged.nvcaVersion = "$NVCA_VERSION"`
- `generateImagePullSecret = false`
- `selfManaged.sharedStorage.imageTag = "$NVCA_SHARED_STORAGE_IMAGE_TAG"`
- `nameOverride = "nvca-operator"`
- `fullnameOverride = "nvca-operator"`

Do not edit `nvca-operator/values.yaml` directly for a permanent default. The
next vendor run will overwrite it.

## Deploy-time Overrides

Use `additional_values` for one-off validation or environment-specific values:

```bash
make install-from-stack \
stack_repo=../../../deploy/stacks/self-managed \
stack_env=local \
additional_values=override.yml
```

Use deploy-time overrides for secrets, credentials, cluster-specific IDs, and
temporary validation changes.

## Adding .env Inputs

For version-like values that the vendoring script needs, add a variable to
`.env`, require it in `scripts/ci_vendor_nvca_operator_chart`, and re-vendor:

```bash
MY_NEW_CONFIG=some-value
```

```bash
update_yaml_key ".myConfig = \"${MY_NEW_CONFIG:?MY_NEW_CONFIG is not set}\"" "${TARGET_DIR}/values.yaml"
```

## Validation

```bash
make lint
make template
make validate
tools/ci/validate-helm-chart deploy/helm/nvca-operator/nvca-operator \
-f tools/ci/helm-validate-values/nvca-operator.yaml
```

## Gotchas

- Install-time values are layered after generated stack-aware values.
- Use `yq` carefully for nested keys and quoted strings.
- Keep `Chart.yaml` name/version changes in the vendoring script when they are
part of the self-managed packaging contract.
- Never commit real service keys or rendered secret material.
20 changes: 20 additions & 0 deletions deploy/helm/admin-token-issuer-proxy/values.local.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

adminIssuerProxy:
image:
registry: ""
repository: ""
tag: "1.0.2"
Loading
Loading