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
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,16 @@ Full subcommand list. Always pair with [flags.md](flags.md) for global flags and
| `self-hosted uninstall --compute-plane --cluster-name=X` | Per-plane primitive: `helmfile destroy` on one compute plane (no ICMS unregister, no drain) | progress | Just the helm releases on that compute plane |
| `self-hosted uninstall --control-plane [--force-with-registered-clusters]` | Per-plane primitive: `helmfile destroy` on the control plane | progress | Refuses if compute planes still registered unless `--force-with-registered-clusters` |
| `self-hosted uninstall --no-apply <plane>` | Render delete YAML via `helm get manifest` per release | YAML on stdout | GitOps; pipe to `kubectl delete -f -` or commit + Argo applies. Mirrors `install --no-apply` |
| `self-hosted down --cluster-name=X [--drain-active=true\|false\|prompt] [--remove-persistent]` | Orchestrator: drain → uninstall --compute-plane → cluster delete in ICMS | progress | Symmetric companion to `up --cluster-name=X` |
| `self-hosted down --cluster-name=X [--drain-active] [--remove-persistent]` | Orchestrator: drain → uninstall --compute-plane → cluster delete in ICMS | progress | Symmetric companion to `up --cluster-name=X` |
| `self-hosted down --all [--confirm]` | Orchestrator: tear down every registered compute plane + control plane | progress | Bounded parallelism via `--all-concurrency` (default 4); `--confirm` required in non-interactive |
| `self-hosted down --plan-only ...` | Orchestrator dry-run: phases + helm releases + ICMS rows + ETAs (no helm/helmfile contact) | JSONL | **Always run before any actual `down`** |

## Cluster management

| Command | Purpose | Notes |
|---|---|---|
| `cluster register --name=X --nca-id=Y --region=Z [--ignore-existing]` | Register a JWKS+OIDC with ICMS | Used by `up` Phase 5 internally; standalone for manual registration |
| `cluster register --name=X --nca-id=Y [--region=Z] [--ignore-existing]` | Register a JWKS+OIDC with ICMS | Used by `up` Phase 5 internally; standalone for manual registration |
| `cluster list` | List registered clusters | Output is YAML by default; `--json` for machine |
| `cluster get --cluster-id=ID` | Get one cluster's metadata | |
| `cluster rotate --cluster-id=ID` | Re-fetch JWKS from K8s and PUT to ICMS | After K8s API server signing key rotation |
| `cluster delete --cluster-id=ID` | Remove ICMS row | **DESTRUCTIVE: confirm with user** |

Expand Down Expand Up @@ -76,7 +75,7 @@ Task commands require `NVCF_API_KEY` set to a task-scoped key and `NVCF_BASE_NVC
| `api-key generate [--for function\|task] [--description=…] [--expires-in=…]` | Mint API keys | Default (no `--for`): generates both a function key and a task key; `--for function` or `--for task` generates one only; `--scopes` requires `--for` |
| `api-key generate --validate` | Mint and immediately validate each generated key | Validates each key against its correct audience (NVCF for function keys, NVCT for task keys) |
| `api-key list` | List API keys for current owner | Lists NVCF-scoped keys only |
| `api-key delete --id=ID` / `api-key revoke --id=ID` | Remove an API key | **Confirm with user** |
| `api-key delete KEY-ID` / `api-key revoke KEY-ID` | Remove an API key | **Confirm with user** |
| `api-key show` | Show currently saved API key from state | |

## Agent skill
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ Stable across subcommands. Use these to drive agent retry / surfacing logic.
| `1` | Generic error | Helm render failed; network unreachable; file not found; YAML parse error |
| `2` | Pre-flight check failed | Gateway API CRDs missing; kubectl not on PATH; default StorageClass absent |
| `3` | Admin auth failed | No token + `--non-interactive` set; ICMS rejected JWT; init endpoint unreachable |
| `4` | Cluster registration failed | ICMS unreachable; JWKS fingerprint conflict; missing NCA ID |
| `5` | Manifest apply or `--wait` timed out | Helm install timeout; check polled but didn't pass before duration |
| `130` | Cancelled by SIGINT/SIGTERM | User Ctrl-C; CI budget exceeded; pod evicted |

Expand All @@ -20,9 +19,8 @@ Stable across subcommands. Use these to drive agent retry / surfacing logic.
| `1` | Surface stderr to user; ask before any retry. Generic errors usually need a human to read the message. |
| `2` | Surface failed checks + their `hintURL`. Don't propose `up` until the user fixes prereqs. |
| `3` | Suggest `nvcf-cli init` (interactive) OR `--token=$JWT` (CI). Don't auto-mint without user OK. |
| `4` | Show `errMessage` + `remediation`. Branch on `retryClass`: `immediate` → may retry now (with user OK); `backoff` → wait `retryAfterSec` then retry (with user OK); `after_remediation` / `none` / `unknown` → operator action required, do not auto-retry. |
| `5` | Ask user if they want to wait longer, dig into the stalled component, or cancel. |
| `130` | Don't retry automatically user explicitly cancelled. Confirm before re-running. |
| `130` | Don't retry automatically; user explicitly cancelled. Confirm before re-running. |

## Where to find more detail

Expand Down
44 changes: 21 additions & 23 deletions ai-tooling/user/skills/nvcf-self-managed-cli/reference/flags.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@
| `--compute-plane-stack=…` | Compute-plane bundle source: local path, git URL, or `oci://` URL | embedded OCI URL pinned by CLI version |
| `--env=local\|prd\|…` | Helmfile environment name | `local` for dev builds, `prd` for releases |
| `--non-interactive` | Disable all stdin prompts | `false` |
| `--token=$JWT` | Admin JWT, overrides stored session | |
| `--no-apply` | `install` only emit YAML only, don't kubectl apply | `false` |
| `--token=$JWT` | Admin JWT, overrides stored session | - |
| `--no-apply` | `install` only - emit YAML, do not kubectl apply | `false` |
| `--output=text\|json` | Legacy alias for `--json` (deprecated, removed in next major) | `text` |
| `--plain` | Force plain streaming output | auto-detect |
| `--wait DURATION` | `check` only; block until pass | |
| `--wait DURATION` | `check` only; block until pass | - |
| `--control-plane-context CTX` | kubectl context for control plane (REQ-20) | current context |
| `--compute-plane-context CTX` | kubectl context for compute plane (REQ-20) | current context |
| `--icms-url URL` | Public ICMS URL; required when contexts differ | derived from `base_http_url` |
Expand All @@ -30,7 +30,7 @@

| Flag | Purpose | Default |
|---|---|---|
| `--cluster-name NAME` | ICMS cluster row identifier (required) | |
| `--cluster-name NAME` | ICMS cluster row identifier (required) | - |
| `--nca-id ID` | NCA account ID | `nvcf-default` |
| `--region REGION` | Cluster region | `us-west-1` |
| `--plan-only` | Dry-run; emit phase plan + ETAs without changes | `false` |
Expand All @@ -39,23 +39,21 @@

| Flag | Purpose | Default |
|---|---|---|
| `--cluster-name NAME` | Limit to one compute plane | (control + all clusters) |
| `--cluster-name NAME` | Limit to one compute plane | - (control + all clusters) |
| `--watch` | Live re-render | `false` |
| `--watch-interval DUR` | `--watch` cadence | `5s` |
| `--component NAME` | Filter components panel | all |
| `--show-events DUR` | Recent events window | `5m` |
| `--no-events` | Skip events panel | `false` |

## `cluster register`-specific

| Flag | Purpose | Default |
|---|---|---|
| `--name NAME` | Cluster name (required) | |
| `--nca-id ID` | NCA ID (required) | |
| `--region REGION` | Region (required, non-empty) | — |
| `--name NAME` | Cluster name (required) | - |
| `--nca-id ID` | NCA ID (required) | - |
| `--region REGION` | Region | `us-west-1` |
| `--icms-url URL` | ICMS endpoint | from config |
| `--ignore-existing` | Match-or-create instead of fail-on-exists | `false` |
Comment thread
coderabbitai[bot] marked this conversation as resolved.
| `--identity-source psat\|spire` | Identity source | `psat` |

## `api-key generate`-specific

Expand Down Expand Up @@ -107,12 +105,12 @@ In JSON, `function update` accepts `modelUpdates[]` entries with `modelName` and

| Flag | Purpose | Default |
|---|---|---|
| `--function-id ID` | Function ID (required) | |
| `--function-id ID` | Function ID (required) | - |
| `--gpu NAME` | GPU family | `H100` |
| `--instance-type TYPE` | SKU | `NCP.GPU.H100_1x` |
| `--min-instances N` | Min replicas | `1` |
| `--max-instances N` | Max replicas | `1` |
| `--max-request-concurrency N` | Concurrency | `10` |
| `--max-request-concurrency N` | Concurrency | `0` (unset; server default applies) |
| `--clusters NAME[,NAME]` | Target specific compute clusters | (any matching SKU) |

## `task create`-specific
Expand All @@ -127,22 +125,22 @@ In JSON, `function update` accepts `modelUpdates[]` entries with `modelName` and
| `--image IMAGE` | Container image | Mutually exclusive with `--helm-chart` |
| `--helm-chart CHART` | Helm chart URL or OCI reference | Mutually exclusive with `--image` |
| `--input-file FILE` | JSON task spec file | CLI flags override JSON values when both are set |
| `--backend BACKEND` | Backend / CSP | |
| `--backend BACKEND` | Backend / CSP | - |
| `--clusters NAME[,NAME]` | Specific clusters within the instance | Comma-separated |
| `--container-args ARGS` | Args passed when launching the container | Single string, e.g. `"--epochs 10 --batch-size 32"` |
| `--container-env NAME=value` | Container environment variable; repeatable | |
| `--secrets NAME=value` | Secret environment variable; repeatable; encrypted at rest | |
| `--container-env NAME=value` | Container environment variable; repeatable | - |
| `--secrets NAME=value` | Secret environment variable; repeatable; encrypted at rest | - |
| `--max-runtime DURATION` | Max wall-clock run time (ISO 8601, e.g. `PT4H`) | No default; omit for no time limit |
| `--max-queued DURATION` | Max time in queue before cancellation (ISO 8601) | Server default `PT72H` |
| `--termination-grace DURATION` | Grace period after stop signal (ISO 8601) | Server default `PT1H` |
| `--result-strategy UPLOAD\|NONE` | How to handle task output artifacts | |
| `--results-location LOCATION` | Result upload target, format `org-name/[team-name/]model-name`; required when `--result-strategy=UPLOAD` | |
| `--models NAME:VERSION:URI` | Model artifact; repeatable | |
| `--resources NAME:VERSION:URI` | Resource artifact; repeatable | |
| `--result-strategy UPLOAD\|NONE` | How to handle task output artifacts | - |
| `--results-location LOCATION` | Result upload target, format `org-name/[team-name/]model-name`; required when `--result-strategy=UPLOAD` | - |
| `--models NAME:VERSION:URI` | Model artifact; repeatable | - |
| `--resources NAME:VERSION:URI` | Resource artifact; repeatable | - |
| `--tags TAG[,TAG]` | Task tags | Comma-separated |
| `--description TEXT` | Task description | |
| `--logs-telemetry-id UUID` | Logs telemetry endpoint ID | |
| `--metrics-telemetry-id UUID` | Metrics telemetry endpoint ID | |
| `--traces-telemetry-id UUID` | Traces telemetry endpoint ID | |
| `--description TEXT` | Task description | - |
| `--logs-telemetry-id UUID` | Logs telemetry endpoint ID | - |
| `--metrics-telemetry-id UUID` | Metrics telemetry endpoint ID | - |
| `--traces-telemetry-id UUID` | Traces telemetry endpoint ID | - |


6 changes: 3 additions & 3 deletions src/clis/nvcf-cli/.nvcf-cli.yaml.template
Original file line number Diff line number Diff line change
Expand Up @@ -52,14 +52,14 @@ api_keys_service_url: https://api-keys.nvcf.nvidia.com
# Config key: api_key
# Environment variable: NVCF_API_KEY
# Scope: invoke_function, list_functions, queue_details, list_functions_details
# Note: Stored in ~/.nvcf-cli-state.json after running 'nvcf-cli api-key generate'
# Note: Stored in ~/.nvcf-cli.state after running 'nvcf-cli api-key generate'
# api_key: nvapi-xxxxx

# NVCF Admin Token / JWT (for admin operations: create, deploy, delete, update)
# Config key: token
# Environment variable: NVCF_TOKEN
# Scope: admin:* (all admin operations)
# Note: Stored in ~/.nvcf-cli-state.json after running 'nvcf-cli init'
# Note: Stored in ~/.nvcf-cli.state after running 'nvcf-cli init'
# token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...

# NVIDIA Cloud Account Client ID (your account/username)
Expand Down Expand Up @@ -213,7 +213,7 @@ api_keys_owner_id: svc@nvcf-api.local
# - No kubeconfig or kubectl needed!
# - Run: nvcf-cli init
# - Calls API Keys service directly: /v1/admin/keys
# - Tokens stored in: ~/.nvcf-cli-state.json
# - Tokens stored in: ~/.nvcf-cli.state
#
# 4. Token Usage:
# - NVCF_API_KEY: User operations (invoke, list, queue details)
Expand Down
Loading