From 46a2fb24ac79dec643b6a9fbece505e955ad14e9 Mon Sep 17 00:00:00 2001 From: Kyle Felter Date: Thu, 2 Jul 2026 13:07:42 -0500 Subject: [PATCH 1/7] docs: finish infra-controller rename accuracy pass --- Makefile | 8 ++-- README.md | 4 +- deploy/README.md | 4 +- docs/getting-started/quick-start.md | 59 ++++++++++++++++-------- docs/manuals/building_nico_containers.md | 8 ++-- helm-prereqs/README.md | 14 +++--- helm-prereqs/setup.sh | 2 + rest-api/CHANGELOG.md | 48 +++++++++---------- rest-api/deploy/INSTALLATION.md | 4 +- 9 files changed, 87 insertions(+), 64 deletions(-) diff --git a/Makefile b/Makefile index 2c78ed3676..718098811a 100644 --- a/Makefile +++ b/Makefile @@ -76,7 +76,7 @@ bootstrap: ## Set up an Ubuntu/Debian build host: apt deps, rustup, submodules, # make images Build the deployable service stack: NICo Core + REST images # make images-all Build everything: the stack plus machine-validation and # boot-artifact images (needs the full mkosi build host) -# make images-core NICo Core image (nico) only +# make images-core NICo Core image (nvmetal-carbide) only # make images-rest REST service images only # # Images are tagged $(IMAGE_REGISTRY)/:$(IMAGE_TAG). Override IMAGE_REGISTRY @@ -102,7 +102,7 @@ PLATFORM ?= linux/amd64 images: images-core images-rest ## Build the deployable service stack (NICo Core + REST images) @echo "" @echo "Deployable images built under $(IMAGE_REGISTRY) (tag: $(IMAGE_TAG)):" - @echo " $(IMAGE_REGISTRY)/nico:$(IMAGE_TAG) (NICo Core)" + @echo " $(IMAGE_REGISTRY)/nvmetal-carbide:$(IMAGE_TAG) (NICo Core)" @echo " $(IMAGE_REGISTRY)/nico-rest-*:$(IMAGE_TAG) (REST services)" images-all: images images-machine-validation images-boot-artifacts images-bfb ## Build every image (stack + machine validation + boot artifacts; needs an mkosi build host) @@ -111,14 +111,14 @@ images-base: ## Build the x86 build + runtime base containers (prerequisite for docker build --platform $(PLATFORM) --file dev/docker/Dockerfile.build-container-x86_64 -t $(CORE_BUILD_CONTAINER) . docker build --platform $(PLATFORM) --file dev/docker/Dockerfile.runtime-container-x86_64 -t $(CORE_RUNTIME_CONTAINER) . -images-core: images-base ## Build the NICo Core image (nico) +images-core: images-base ## Build the NICo Core image (nvmetal-carbide) docker build --platform $(PLATFORM) \ --build-arg CONTAINER_BUILD_X86_64=$(CORE_BUILD_CONTAINER) \ --build-arg CONTAINER_RUNTIME_X86_64=$(CORE_RUNTIME_CONTAINER) \ --build-arg VERSION=$(VERSION) \ --build-arg CI_COMMIT_SHORT_SHA=$(CI_COMMIT_SHORT_SHA) \ --file dev/docker/Dockerfile.release-container-sa-x86_64 \ - -t $(IMAGE_REGISTRY)/nico:$(IMAGE_TAG) . + -t $(IMAGE_REGISTRY)/nvmetal-carbide:$(IMAGE_TAG) . images-rest: ## Build the REST service images (api, workflow, site-manager, site-agent, db, cert-manager, flow, psm, nsm) $(MAKE) -C rest-api docker-build IMAGE_REGISTRY=$(IMAGE_REGISTRY) IMAGE_TAG=$(IMAGE_TAG) diff --git a/README.md b/README.md index caa0f5b622..a238243fb9 100644 --- a/README.md +++ b/README.md @@ -35,8 +35,8 @@ of the bare-metal lifecycle to fast-track building next generation AI Cloud offe # 1. Build all container images from this clone, then push them to your registry. # See docs/manuals/building_nico_containers.md for the build-host prerequisites. export IMAGE_REGISTRY=my-registry.example.com/infra-controller -make images IMAGE_REGISTRY="${IMAGE_REGISTRY}" # NICo Core (nico) + REST service images -# Then: docker push "${IMAGE_REGISTRY}/nico:latest" +make images IMAGE_REGISTRY="${IMAGE_REGISTRY}" # NICo Core (nvmetal-carbide) + REST service images +# Then: docker push "${IMAGE_REGISTRY}/nvmetal-carbide:latest" # docker push "${IMAGE_REGISTRY}/nico-rest-api:latest" # ...and the other nico-rest-* images # 2. Set environment variables diff --git a/deploy/README.md b/deploy/README.md index 86f7db8c76..7380ea030b 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -5,9 +5,9 @@ The `deploy/kustomization.yaml` file drives the top‑level deployment. Populate | Value | Description | | --- | --- | -| `yourdockerregistry.com/path/to/nico-core` | Registry URL that hosts the NICo core (`nvmetal-nico`) image. | +| `yourdockerregistry.com/path/to/nico-core` | Registry URL that hosts the NICo Core (`nvmetal-carbide`) image. | | `NICO_REGISTRY_PATH` | URL to the registry that hosts all NICo components; shared path for component images. | -| `NICO_TAG` | Version tag for the `nvmetal-nico` component. | +| `NICO_TAG` | Version tag for the `nvmetal-carbide` component. | | `yourdockerregistry.com/path/to/boot-artifacts-aarch64` | Registry URL for the `boot-artifacts-aarch64` image. | | `BOOT_ARTIFACTS_AARCH64_TAG` | Version tag for the `boot-artifacts-aarch64` component. | | `yourdockerregistry.com/path/to/boot-artifacts-x86_64` | Registry URL for the `boot-artifacts-x86_64` image. | diff --git a/docs/getting-started/quick-start.md b/docs/getting-started/quick-start.md index 3e96b1bd3d..b63f7b32a1 100644 --- a/docs/getting-started/quick-start.md +++ b/docs/getting-started/quick-start.md @@ -72,29 +72,32 @@ helm plugin install https://github.com/databus23/helm-diff ## Step 3 — Configure the Site -Everything in this step must be done **before** running `setup.sh`. Skipping any item will either cause setup to fail or result in a deployment with incorrect site configuration that is hard to fix after the fact. +Review this entire step **before** running `setup.sh` and complete every item that applies to your environment. Missing required values can cause setup to fail or produce an incorrectly configured deployment that is hard to fix afterward. -### 3a. Set Required Environment Variables +### 3a. Set Deployment Environment Variables ```bash -export KUBECONFIG=/path/to/kubeconfig # your cluster kubeconfig -export REGISTRY_PULL_SECRET= # your registry pull credential +# export KUBECONFIG=/path/to/kubeconfig # optional if the current kubectl context is correct export NICO_IMAGE_REGISTRY=my-registry.example.com/nico # base registry for all NICo images export NICO_CORE_IMAGE_TAG= # e.g. v2025.12.30-rc1 export NICO_REST_IMAGE_TAG= # e.g. v1.0.4 +# Optional for authenticated registries: +# export REGISTRY_PULL_SECRET= +# export REGISTRY_PULL_USERNAME='$oauthtoken' # default for NGC API-key auth ``` `NICO_IMAGE_REGISTRY` is used for both NICo Core (`/nvmetal-carbide`) and NICo REST (`/nico-rest-*`). Push all images to this registry before running setup. -Obtain an NGC API key at [ngc.nvidia.com](https://ngc.nvidia.com) → **API Keys** → **Generate Personal Key**. +For authenticated NGC pulls, obtain an API key at [ngc.nvidia.com](https://ngc.nvidia.com) → **API Keys** → **Generate Personal Key**. `REGISTRY_PULL_SECRET` may remain unset when images are public, preloaded, or an existing pull secret is configured in the values files. | Variable | Required | Description | |----------|----------|-------------| -| `REGISTRY_PULL_SECRET` | **Yes** | Pull secret and API key for your image registry. Used to create the image pull secret for both NICo Core and NICo REST. | -| `NICO_IMAGE_REGISTRY` | **Yes** | Base image registry for all NICo images (e.g. `my-registry.example.com/nico`). Used for NICo Core (`/nvmetal-carbide`) and NICo REST (`/nico-rest-*`). | -| `NICO_CORE_IMAGE_TAG` | **Yes** | NICo Core image tag (e.g. `v2025.12.30`). | -| `NICO_REST_IMAGE_TAG` | **Yes** | NICo REST image tag (e.g. `v1.0.4`). | -| `KUBECONFIG` | **Yes** | Path to your cluster kubeconfig. | +| `REGISTRY_PULL_SECRET` | No | Raw registry password or API key used to create image pull secrets. | +| `REGISTRY_PULL_USERNAME` | No | Username for generated pull secrets. Defaults to `$oauthtoken`. | +| `NICO_IMAGE_REGISTRY` | Unless `--skip-core --skip-rest` | Base image registry for all NICo images (e.g. `my-registry.example.com/nico`). Used for NICo Core (`/nvmetal-carbide`) and NICo REST (`/nico-rest-*`). | +| `NICO_CORE_IMAGE_TAG` | Unless `--skip-core` | NICo Core image tag (e.g. `v2025.12.30`). | +| `NICO_REST_IMAGE_TAG` | Unless `--skip-rest` | NICo REST image tag (e.g. `v1.0.4`). | +| `KUBECONFIG` | No | Path to the target cluster kubeconfig. Omit it when the current `kubectl` context is already correct. | | `NICO_SITE_UUID` | No | Stable UUID for this site. If unset, `setup.sh` generates a random UUID each run. | ### 3b. Set your Site Name @@ -274,7 +277,7 @@ The `preflight.sh` script checks the following: | Category | Checks | |----------|--------| -| Environment variables | Required vars are set; no `https://` prefix on registry; version tags start with `v`; UUID is valid if set; KUBECONFIG path exists if set | +| Environment variables | Conditional image variables are set; registry has no URL scheme; UUID is valid if set; KUBECONFIG path exists if set | | Required tools | `helm`, `helmfile`, `kubectl`, `jq`, `ssh-keygen` are in PATH | | `values/metallb-config.yaml` | File exists; YAML is valid; at least one IPAddressPool defined; exactly one advertisement mode active (BGP or L2, not both); example placeholder hostnames not still present | | Cluster reachability | `kubectl` can reach the API server. | @@ -300,6 +303,19 @@ cd helm-prereqs/ ./setup.sh -y # non-interactive — deploys everything ``` +Common options can be combined as needed: + +| Option | Effect | +|--------|--------| +| `-y` | Accept setup prompts automatically. | +| `--skip-core` | Skip the Phase 6 NICo Core Helm release. | +| `--skip-rest` | Skip all Phase 7 NICo REST phases. | +| `--skip-flow` | Skip Phase 7h NICo Flow. Also set `flow.enabled=false` in `helm-prereqs/values.yaml` to omit Flow prerequisites. | +| `--core-values ` | Use site-specific NICo Core values for Phase 6. | +| `--metallb-config ` | Use a site-specific MetalLB manifest file or kustomize directory. | +| `--site-overlay ` | Apply a site kustomize overlay after Phase 6. | +| `--debug` | Enable shell tracing. This may print secrets, so protect the logs. | + The `setup.sh` script installs all prerequisites and NICo components in sequential phases: @@ -315,29 +331,32 @@ The `setup.sh` script installs all prerequisites and NICo components in sequenti | 4 | Vault init + unseal + SSH host key | | 5 | external-secrets + nico-prereqs + nico-pg-cluster | | 6 | **NICo Core** (nico helm release) | -| 7a-7h | **NICo REST** full stack (postgres, Keycloak, Temporal, nico-rest, site-agent) | +| 7a-7g | **NICo REST** base stack (source and CA setup, PostgreSQL, Keycloak, Temporal, REST services) | +| 7h | **NICo Flow** (Flow, PSM, and NSM), unless `--skip-flow` is used | +| 7i | **NICo REST site-agent** | The following components are deployed: -``` +```text local-path-provisioner (raw manifest - StorageClasses for Vault + PostgreSQL PVCs) metallb (metallb/metallb 0.14.5 - LoadBalancer IPs via BGP or L2) postgres-operator (zalando/postgres-operator 1.10.1 - manages nico-pg-cluster) cert-manager (jetstack/cert-manager v1.17.1) vault (hashicorp/vault 0.25.0, 3-node HA Raft, TLS) external-secrets (external-secrets/external-secrets 0.14.3) -nico-prereqs (this Helm chart - nico-system namespace) +nico-prereqs (this Helm chart - nico-system namespace) NICo Core (../helm - nico-core.yaml values) -NICo REST (rest-api/helm/charts/nico-rest) +NICo REST (../helm/rest/nico-rest) ├── nico-rest-ca-issuer ClusterIssuer (cert-manager.io) ├── postgres StatefulSet (temporal + keycloak + NICo databases) ├── keycloak (dev OIDC IdP, nico-dev realm) ├── temporal (temporal-helm/temporal, mTLS) - ├── nico-rest (API, cert-manager, workflow, site-manager) - └── nico-rest-site-agent (StatefulSet, bootstrap via site-manager) + └── nico-rest (API, cert-manager, workflow, site-manager) +NICo Flow (../helm/charts/nico-flow - Flow, PSM, and NSM) +NICo REST site-agent (../helm/rest/nico-rest-site-agent - StatefulSet, bootstrap via site-manager) ``` -For manual phase-by-phase installation, re-running individual phases, or debugging failures, refer to the [Reference Installation](../installation-options/reference-install.md) guide. +For manual phase-by-phase installation, re-running individual phases, or debugging failures, refer to the [Reference Installation](installation-options/reference-install.md) guide. ## Step 5 — Verify the Site Controller @@ -492,7 +511,7 @@ kubectl get pods -n temporal kubectl get certificate core-grpc-client-site-agent-certs -n nico-rest ``` -For troubleshooting common issues, refer to the [Reference Installation — Troubleshooting](../installation-options/reference-install.md#troubleshooting) guide. +For troubleshooting common issues, refer to the [Reference Installation — Troubleshooting](installation-options/reference-install.md#troubleshooting) guide. ## Step 6 — Connect the OOB Network @@ -506,7 +525,7 @@ Configure the out-of-band network to relay BMC DHCP requests to the NICo DHCP se kubectl logs -n nico-system -l app.kubernetes.io/name=nico-dhcp --tail=20 ``` -For detailed OOB network requirements, refer to the [BMC and Out-of-Band Setup](../prerequisites/bmc-oob-setup.md) guide. +For detailed OOB network requirements, refer to the [BMC and Out-of-Band Setup](prerequisites/bmc-oob-setup.md) guide. ## Step 7 — Discover Your First Host diff --git a/docs/manuals/building_nico_containers.md b/docs/manuals/building_nico_containers.md index e1650a7300..7f803672d3 100644 --- a/docs/manuals/building_nico_containers.md +++ b/docs/manuals/building_nico_containers.md @@ -45,7 +45,7 @@ Once the prerequisites above are installed, build the NICo container images from top of the repo with a single `make` command: ```sh -make images # deployable stack: NICo Core (nico) + the REST service images +make images # deployable stack: NICo Core (nvmetal-carbide) + the REST service images make images-all # the above plus the machine-validation and x86 boot-artifact images ``` @@ -79,7 +79,7 @@ The count should be exactly 14: | Image | Target | |---|---| -| `nico` | `images-core` | +| `nvmetal-carbide` | `images-core` | | `nico-rest-api` | `images-rest` | | `nico-rest-workflow` | `images-rest` | | `nico-rest-site-manager` | `images-rest` | @@ -141,10 +141,10 @@ docker build --build-arg CONTAINER_RUNTIME_X86_64=nico-runtime-container-x86_64 ``` -## Building nico-core container +## Building the NICo Core container ```sh -docker build --build-arg "CONTAINER_RUNTIME_X86_64=nico-runtime-container-x86_64" --build-arg "CONTAINER_BUILD_X86_64=nico-buildcontainer-x86_64" -f dev/docker/Dockerfile.release-container-sa-x86_64 -t nico . +docker build --build-arg "CONTAINER_RUNTIME_X86_64=nico-runtime-container-x86_64" --build-arg "CONTAINER_BUILD_X86_64=nico-buildcontainer-x86_64" -f dev/docker/Dockerfile.release-container-sa-x86_64 -t nvmetal-carbide . ``` ## Building the AARCH64 Containers and artifacts diff --git a/helm-prereqs/README.md b/helm-prereqs/README.md index b1b5429dec..d9fdc568c2 100644 --- a/helm-prereqs/README.md +++ b/helm-prereqs/README.md @@ -182,6 +182,7 @@ It supports these common deployment modes: | `-y` | Non-interactive mode; accept setup prompts automatically. | | `--skip-core` | Install prerequisites and REST, but skip the NICo Core Helm release. | | `--skip-rest` | Install prerequisites and Core, but skip all REST phases and REST repo checks. | +| `--skip-flow` | Skip NICo Flow in Phase 7h. Also set `flow.enabled=false` in `values.yaml` to omit Flow prerequisites. | | `--skip-core --skip-rest` | Infrastructure-only run; image tags, image registry, and REST repo are not required. | | `--core-values ` | Use site-specific Core values instead of `helm-prereqs/values/nico-core.yaml`. | | `--metallb-config ` | Use a site-specific MetalLB manifest file or kustomize directory. | @@ -194,15 +195,15 @@ existing imagePullSecrets in values. ## What gets deployed -``` +```text local-path-provisioner (raw manifest - StorageClasses for Vault + PostgreSQL PVCs) metallb (metallb/metallb 0.14.5 - LoadBalancer IPs via BGP or L2) postgres-operator (zalando/postgres-operator 1.10.1 - manages nico-pg-cluster) cert-manager (jetstack/cert-manager v1.17.1) vault (hashicorp/vault 0.25.0, 3-node HA Raft, TLS) external-secrets (external-secrets/external-secrets 0.14.3) -nico-prereqs (this Helm chart - nico-system namespace) -NICo Core (../helm - nico-core.yaml values) +nico-prereqs (this Helm chart - nico-system namespace) +NICo Core (../helm - nico-core.yaml values) ├── nico-api (Deployment - gRPC/REST API, requires PostgreSQL + Vault) ├── nico-bmc-proxy (Deployment - authenticating Redfish proxy) ├── nico-dhcp (Deployment - Kea DHCP, advertises hook params to DPUs) @@ -212,13 +213,14 @@ NICo Core (../helm - nico-core.yaml values) ├── nico-pxe (Deployment - HTTP PXE boot) ├── nico-ssh-console-rs (Deployment - SSH console proxy) └── unbound (Deployment - .forge zone DNS, opt-in) -NICo REST (rest-api/helm/charts/nico-rest) +NICo REST (../helm/rest/nico-rest) ├── nico-rest-ca-issuer ClusterIssuer (cert-manager.io) ├── postgres StatefulSet (temporal + keycloak + NICo databases) ├── keycloak (dev OIDC IdP, nico-dev realm) ├── temporal (temporal-helm/temporal, mTLS) - ├── nico-rest (API, cert-manager, workflow, site-manager) - └── nico-rest-site-agent (StatefulSet, bootstrap via site-manager) + └── nico-rest (API, cert-manager, workflow, site-manager) +NICo Flow (../helm/charts/nico-flow - Flow, PSM, and NSM) +NICo REST site-agent (../helm/rest/nico-rest-site-agent - StatefulSet, bootstrap via site-manager) ``` ## DPU compatibility DNS (`.forge` zone) — REQUIRED for DPU bring-up diff --git a/helm-prereqs/setup.sh b/helm-prereqs/setup.sh index e4cacc5169..6b7e13af0e 100755 --- a/helm-prereqs/setup.sh +++ b/helm-prereqs/setup.sh @@ -522,6 +522,8 @@ fi # 7e. Temporal namespace + TLS certs (issued by the NICo REST CA issuer) # 7f. Temporal helm chart # 7g. NICo REST helm chart (API, cert-manager, workflow, site-manager) +# 7h. NICo Flow (Flow, PSM, NSM) +# 7i. NICo REST site-agent # --------------------------------------------------------------------------- echo "" _SETUP_PHASE="[7/7] NICo REST" diff --git a/rest-api/CHANGELOG.md b/rest-api/CHANGELOG.md index a5b09874b9..1d44f9836a 100644 --- a/rest-api/CHANGELOG.md +++ b/rest-api/CHANGELOG.md @@ -17,19 +17,19 @@ Each release lists pull requests grouped by category, with the most recent versi ### Features - **Add support for online repair of Machines, allowing repair without Instance deletion** ([#415](https://github.com/NVIDIA/infra-controller/rest-api/pull/415)) - Introduces Machine online repair, enabling operators to perform maintenance on machines without first deleting the associated Instance. The repair workflow transitions the machine through a maintenance state and back, preserving the instance assignment throughout. See [Machine](https://nvidia.github.io/infra-controller-rest/#tag/Machine) endpoints. + Introduces Machine online repair, enabling operators to perform maintenance on machines without first deleting the associated Instance. The repair workflow transitions the machine through a maintenance state and back, preserving the instance assignment throughout. See [Machine](https://docs.nvidia.com/infra-controller/rest-api-reference/api-reference/machine) endpoints. - **Support IP Usage stats in VPC Prefix and Subnet** ([#480](https://github.com/NVIDIA/infra-controller/rest-api/pull/480)) - VPC Prefix and Subnet responses now include IP usage statistics showing total, used, and available IP addresses, giving operators visibility into address pool utilization without external IPAM queries. See the updated response fields on [VPC Prefix](https://nvidia.github.io/infra-controller-rest/#tag/VPC-Prefix) and [Subnet](https://nvidia.github.io/infra-controller-rest/#tag/Subnet) endpoints. + VPC Prefix and Subnet responses now include IP usage statistics showing total, used, and available IP addresses, giving operators visibility into address pool utilization without external IPAM queries. See the updated response fields on [VPC Prefix](https://docs.nvidia.com/infra-controller/rest-api-reference/api-reference/vpc-prefix) and [Subnet](https://docs.nvidia.com/infra-controller/rest-api-reference/api-reference/subnet) endpoints. - **Add Flow task-list endpoints and root /task endpoints** ([#543](https://github.com/NVIDIA/infra-controller/rest-api/pull/543)) - Exposes new REST API endpoints for listing and querying Flow (formerly RLA) tasks, including a root `/task` endpoint that provides a unified view of all task types. See the [Task](https://nvidia.github.io/infra-controller-rest/#tag/Task) section in the API schema. + Exposes new REST API endpoints for listing and querying Flow (formerly RLA) tasks, including a root `/task` endpoint that provides a unified view of all task types. See the [Task](https://docs.nvidia.com/infra-controller/rest-api-reference/api-reference/task) section in the API schema. - **Add tray-level firmware update target selection in Tray FW Update API** ([#541](https://github.com/NVIDIA/infra-controller/rest-api/pull/541)) - The Tray firmware update endpoint now supports selecting specific firmware update targets at the tray level, allowing operators to target individual components within a tray rather than updating all at once. See the updated [Tray](https://nvidia.github.io/infra-controller-rest/#tag/Tray) firmware update endpoint. + The Tray firmware update endpoint now supports selecting specific firmware update targets at the tray level, allowing operators to target individual components within a tray rather than updating all at once. See the updated [Tray](https://docs.nvidia.com/infra-controller/rest-api-reference/api-reference/tray) firmware update endpoint. - **Support filter by location info in Flow Tray API** ([#545](https://github.com/NVIDIA/infra-controller/rest-api/pull/545)) - Adds location-based filtering to the Flow Tray API, enabling queries by physical rack position and other location metadata. See the updated query parameters on the [Tray](https://nvidia.github.io/infra-controller-rest/#tag/Tray) endpoints. + Adds location-based filtering to the Flow Tray API, enabling queries by physical rack position and other location metadata. See the updated query parameters on the [Tray](https://docs.nvidia.com/infra-controller/rest-api-reference/api-reference/tray) endpoints. - **Support filter ListTasks by component_id in Flow** ([#542](https://github.com/NVIDIA/infra-controller/rest-api/pull/542)) Adds a `component_id` filter to the Flow task list endpoint, enabling operators to retrieve all tasks associated with a specific hardware component. @@ -93,7 +93,7 @@ Each release lists pull requests grouped by category, with the most recent versi Decomposes the monolithic component manager interface into granular per-operation interfaces and separates registry wiring from business logic, improving testability and enabling capability-aware dispatch. - **Improve readability for terminology and NVSwitch naming in Flow** ([#544](https://github.com/NVIDIA/infra-controller/rest-api/pull/544)) - Standardizes variable naming and terminology across the Flow service, aligning NVSwitch references with the official product naming convention. See the updated naming in the [API reference](https://nvidia.github.io/infra-controller-rest/). + Standardizes variable naming and terminology across the Flow service, aligning NVSwitch references with the official product naming convention. See the updated naming in the [API reference](https://docs.nvidia.com/infra-controller/rest-api-reference/getting-started). - **Apply layered ToProto convention to MachineInstanceType and VPC handlers** ([#533](https://github.com/NVIDIA/infra-controller/rest-api/pull/533), [#505](https://github.com/NVIDIA/infra-controller/rest-api/pull/505)) Extends the layered proto conversion pattern to MachineInstanceType and VPC handlers, moving protobuf request construction onto DB models for consistent separation between API and data layers. @@ -144,16 +144,16 @@ Each release lists pull requests grouped by category, with the most recent versi ### Features - **Rename carbide/forge to NVIDIA Infrastructure Controller (NICo)** ([#432](https://github.com/NVIDIA/infra-controller/rest-api/pull/432)) - Comprehensive rebranding of the project from Carbide/Forge to NVIDIA Infrastructure Controller (NICo). All API path segments, CLI binary names, Helm chart names, configuration keys, and documentation are updated. The OpenAPI schema now uses the NICo naming throughout — see the updated [API reference](https://nvidia.github.io/infra-controller-rest/). + Comprehensive rebranding of the project from Carbide/Forge to NVIDIA Infrastructure Controller (NICo). All API path segments, CLI binary names, Helm chart names, configuration keys, and documentation are updated. The OpenAPI schema now uses the NICo naming throughout — see the updated [API reference](https://docs.nvidia.com/infra-controller/rest-api-reference/getting-started). - **Add API model and CRUD endpoints for ExpectedRack** ([#444](https://github.com/NVIDIA/infra-controller/rest-api/pull/444)) - Introduces full CRUD REST API endpoints for managing Expected Rack inventory, enabling operators to define expected rack configurations before physical deployment. See [Expected Rack](https://nvidia.github.io/infra-controller-rest/#tag/Expected-Rack) endpoints in the API schema. + Introduces full CRUD REST API endpoints for managing Expected Rack inventory, enabling operators to define expected rack configurations before physical deployment. See [Expected Rack](https://docs.nvidia.com/infra-controller/rest-api-reference/api-reference/expected-rack) endpoints in the API schema. - **Allow updating Site capabilities using Site update API endpoint** ([#470](https://github.com/NVIDIA/infra-controller/rest-api/pull/470)) - Site capabilities (native networking, network security groups, NVLink partitioning, rack-level administration) can now be modified via the existing Site update endpoint, removing the need to delete and recreate sites for configuration changes. See the updated `config` field on [Update Site](https://nvidia.github.io/infra-controller-rest/#tag/Site/operation/updateSite). + Site capabilities (native networking, network security groups, NVLink partitioning, rack-level administration) can now be modified via the existing Site update endpoint, removing the need to delete and recreate sites for configuration changes. See the updated `config` field on [Update Site](https://docs.nvidia.com/infra-controller/rest-api-reference/api-reference/site/update-site). - **Add a REST endpoint to cancel a task in Flow (formerly RLA)** ([#489](https://github.com/NVIDIA/infra-controller/rest-api/pull/489)) - Exposes a new endpoint for cancelling in-progress rack-level tasks (firmware upgrades, power operations, etc.), giving operators the ability to abort long-running operations. See the [Task](https://nvidia.github.io/infra-controller-rest/#tag/Task) endpoints. + Exposes a new endpoint for cancelling in-progress rack-level tasks (firmware upgrades, power operations, etc.), giving operators the ability to abort long-running operations. See the [Task](https://docs.nvidia.com/infra-controller/rest-api-reference/api-reference/task) endpoints. - **Support firmware updates to unregistered devices in NSM and PSM** ([#442](https://github.com/NVIDIA/infra-controller/rest-api/pull/442)) NVSwitch Manager and PowerShelf Manager can now perform firmware updates on devices that have not been formally registered, streamlining initial rack provisioning when firmware must be updated before registration. @@ -194,10 +194,10 @@ Each release lists pull requests grouped by category, with the most recent versi Fixes a bug where the dynamic TLS certificate loader would retain a previous error state even after a successful certificate refresh, causing services to report unhealthy TLS status. - **No-op Instance update when requested NVLink Interfaces match current state** ([#438](https://github.com/NVIDIA/infra-controller/rest-api/pull/438)) - Prevents unnecessary Instance updates to the Site Controller when the requested NVLink Interface configuration is identical to the current state, avoiding spurious status transitions. See [Update Instance](https://nvidia.github.io/infra-controller-rest/#tag/Instance/operation/updateInstance). + Prevents unnecessary Instance updates to the Site Controller when the requested NVLink Interface configuration is identical to the current state, avoiding spurious status transitions. See [Update Instance](https://docs.nvidia.com/infra-controller/rest-api-reference/api-reference/instance/update-instance). - **Mark nullable fields correctly in OpenAPI spec** ([#440](https://github.com/NVIDIA/infra-controller/rest-api/pull/440)) - Adds `nullable: true` annotations to multiple fields across the OpenAPI schema that can legitimately be null in API responses, fixing strict SDK client deserialization failures. See the updated field definitions across the [API reference](https://nvidia.github.io/infra-controller-rest/). + Adds `nullable: true` annotations to multiple fields across the OpenAPI schema that can legitimately be null in API responses, fixing strict SDK client deserialization failures. See the updated field definitions across the [API reference](https://docs.nvidia.com/infra-controller/rest-api-reference/getting-started). - **Verify if Site has FNN enabled when updating VPC to FNN** ([#466](https://github.com/NVIDIA/infra-controller/rest-api/pull/466)) Validates that the target Site supports Fabric Native Networking before allowing a VPC virtualization type update to FNN. *(Also in v1.4.3)* @@ -258,7 +258,7 @@ Each release lists pull requests grouped by category, with the most recent versi ### Documentation - **Improve Allocation guidance, fix Machine ID format in OpenAPI spec** ([#488](https://github.com/NVIDIA/infra-controller/rest-api/pull/488)) - Adds guidance on Allocation lifecycle and constraint management to the OpenAPI schema, and corrects the Machine ID format from integer to UUID. See the updated [Allocation](https://nvidia.github.io/infra-controller-rest/#tag/Allocation) documentation. + Adds guidance on Allocation lifecycle and constraint management to the OpenAPI schema, and corrects the Machine ID format from integer to UUID. See the updated [Allocation](https://docs.nvidia.com/infra-controller/rest-api-reference/api-reference/allocation) documentation. - **Fix nicocli help text and clean up CLI README** ([#495](https://github.com/NVIDIA/infra-controller/rest-api/pull/495)) Updates CLI help text and README to reflect the NICo rebranding, corrects command examples, and removes outdated references. @@ -277,10 +277,10 @@ Each release lists pull requests grouped by category, with the most recent versi Renames the Rack Level Administration (RLA) service to "Flow" across the entire codebase — directory structure, package names, configuration keys, Helm chart values, and documentation. The rebrand is split across three PRs for incremental review: core flow directory (#508), inner flow directory (#520), and external references (#525). - **Update Go module path to remove ncx and match GitHub repo** ([#482](https://github.com/NVIDIA/infra-controller/rest-api/pull/482)) - Updates the Go module path from `github.com/NVIDIA/infra-controller/rest-api` to match the current GitHub repository URL, fixing import resolution for downstream consumers. See the updated module paths in the [API reference](https://nvidia.github.io/infra-controller-rest/). + Updates the Go module path from `github.com/NVIDIA/infra-controller/rest-api` to match the current GitHub repository URL, fixing import resolution for downstream consumers. See the updated module paths in the [API reference](https://docs.nvidia.com/infra-controller/rest-api-reference/getting-started). - **Expose BMC IP Address Option for Expected Components** ([#445](https://github.com/NVIDIA/infra-controller/rest-api/pull/445)) - Adds an optional `bmcIpAddress` field to Expected Machine, Expected PowerShelf, and Expected Switch create/update requests, allowing operators to pre-configure BMC IP addresses during inventory planning. See the updated fields on [Expected Machine](https://nvidia.github.io/infra-controller-rest/#tag/Expected-Machine), [Expected Power Shelf](https://nvidia.github.io/infra-controller-rest/#tag/Expected-Power-Shelf), and [Expected Switch](https://nvidia.github.io/infra-controller-rest/#tag/Expected-Switch) endpoints. + Adds an optional `bmcIpAddress` field to Expected Machine, Expected PowerShelf, and Expected Switch create/update requests, allowing operators to pre-configure BMC IP addresses during inventory planning. See the updated fields on [Expected Machine](https://docs.nvidia.com/infra-controller/rest-api-reference/api-reference/expected-machine), [Expected Power Shelf](https://docs.nvidia.com/infra-controller/rest-api-reference/api-reference/expected-power-shelf), and [Expected Switch](https://docs.nvidia.com/infra-controller/rest-api-reference/api-reference/expected-switch) endpoints. - **Add unique BMC + site constraint to expected_power_shelf and expected_switch** ([#450](https://github.com/NVIDIA/infra-controller/rest-api/pull/450)) Adds database-level unique constraints on BMC MAC address per site for Expected PowerShelf and Expected Switch tables, matching the existing Expected Machine constraint and preventing duplicate registrations. @@ -325,16 +325,16 @@ Each release lists pull requests grouped by category, with the most recent versi ### Features - **Add support for filtering VPCs by NVLink Logical Partition** ([#380](https://github.com/NVIDIA/infra-controller/rest-api/pull/380)) - VPCs can now be filtered by their associated default NVLink Logical Partition ID. Other VPC filters have also been enhanced to accept multiple values, and network security group filter validation has been improved. See the updated query parameters on [Retrieve all VPCs](https://nvidia.github.io/infra-controller-rest/#tag/VPC/operation/get-all-vpc). + VPCs can now be filtered by their associated default NVLink Logical Partition ID. Other VPC filters have also been enhanced to accept multiple values, and network security group filter validation has been improved. See the updated query parameters on [Retrieve all VPCs](https://docs.nvidia.com/infra-controller/rest-api-reference/api-reference/vpc/get-all-vpc). - **Allow setting routing profile when creating VPCs** ([#350](https://github.com/NVIDIA/infra-controller/rest-api/pull/350)) - Callers can now include `routingProfile` when creating a VPC with FNN network virtualization. The field is only accepted for FNN-type VPCs and is reflected in the API response accordingly. See the `routingProfile` field on [Create VPC](https://nvidia.github.io/infra-controller-rest/#tag/VPC/operation/create-vpc). + Callers can now include `routingProfile` when creating a VPC with FNN network virtualization. The field is only accepted for FNN-type VPCs and is reflected in the API response accordingly. See the `routingProfile` field on [Create VPC](https://docs.nvidia.com/infra-controller/rest-api-reference/api-reference/vpc/create-vpc). - **Allow power control to NSM and PSM without registration** ([#368](https://github.com/NVIDIA/infra-controller/rest-api/pull/368)) NVSwitch Manager and PowerShelf Manager can now receive power control commands (on/off/cycle) without requiring prior component registration, simplifying initial rack bring-up workflows. - **Update Site Agent Helm chart to adopt Core prereqs for installation** ([#416](https://github.com/NVIDIA/infra-controller/rest-api/pull/416)) - Updates the README and Helm chart to reference the `helm-prereqs` chart from infra-controller-core as the recommended installation path for bare-metal cluster setup. Also adds username keys to the common DB credentials secret template. + Updates the README and Helm chart to reference the `helm-prereqs` chart, now located in this repository's `helm-prereqs/` directory, as the recommended installation path for bare-metal cluster setup. Also adds username keys to the common DB credentials secret template. - **Hint at label filter syntax after TUI list output** ([#406](https://github.com/NVIDIA/infra-controller/rest-api/pull/406)) After running a list command in the TUI, a context-sensitive hint now displays available label keys and the syntax for `--label`, `--sort-label`, and `scope label` filtering. The hint is suppressed once any label filter is active. @@ -357,7 +357,7 @@ Each release lists pull requests grouped by category, with the most recent versi Adds the missing VPC Peering manager to the Site Agent and fixes VPC Peering workflows to correctly require the VPC Peering ID during creation on Site. - **Mark ipBlockId as required in VPC Prefix create request** ([#414](https://github.com/NVIDIA/infra-controller/rest-api/pull/414)) - Corrects the OpenAPI schema and CLI/TUI to reflect that `ipBlockId` is a required field when creating a VPC Prefix, matching the server-side validation that already enforced this. See [Create VPC Prefix](https://nvidia.github.io/infra-controller-rest/#tag/VPC-Prefix/operation/create-vpc-prefix). + Corrects the OpenAPI schema and CLI/TUI to reflect that `ipBlockId` is a required field when creating a VPC Prefix, matching the server-side validation that already enforced this. See [Create VPC Prefix](https://docs.nvidia.com/infra-controller/rest-api-reference/api-reference/vpc-prefix/create-vpc-prefix). - **Prompt for allocation constraints in TUI allocation create** ([#413](https://github.com/NVIDIA/infra-controller/rest-api/pull/413)) Fixes the TUI allocation creation flow to properly prompt for the required constraint (resource type, IP block selection, constraint type, and value), which was previously missing. @@ -366,7 +366,7 @@ Each release lists pull requests grouped by category, with the most recent versi Fixes IP Block creation in the CLI/TUI by including the `protocolVersion` and `routingType` parameters that were previously omitted from the request, causing creation failures. - **Fix Expected Machine OpenAPI misnamed fields for BMC default credentials** ([#421](https://github.com/NVIDIA/infra-controller/rest-api/pull/421)) - Corrects field names for BMC default username and password in the Expected Machine OpenAPI schema, resolving mismatches between the spec and the actual API behavior. See [Expected Machine](https://nvidia.github.io/infra-controller-rest/#tag/Expected-Machine) endpoints. + Corrects field names for BMC default username and password in the Expected Machine OpenAPI schema, resolving mismatches between the spec and the actual API behavior. See [Expected Machine](https://docs.nvidia.com/infra-controller/rest-api-reference/api-reference/expected-machine) endpoints. - **Resolve RLA inventory component manager ID sync issue** ([#409](https://github.com/NVIDIA/infra-controller/rest-api/pull/409)) Ensures machine IDs are synced on every inventory loop iteration, removing a conditional skip that could leave `external_id` stale and cause leak detection to fail. Also updates default operation timeouts and fixes misleading error messages in component target resolution. @@ -384,7 +384,7 @@ Each release lists pull requests grouped by category, with the most recent versi Adds detection of misordered flags placed after positional arguments in `carbidecli`, providing a clear error message instead of sending a malformed HTTP request. - **Remove deprecated Instance/Allocation relationships** ([#371](https://github.com/NVIDIA/infra-controller/rest-api/pull/371)) - Completes the transition from per-instance allocation linkage to aggregate allocation enforcement. Instance creation now validates against total reserved capacity for a tenant's instance type at a site, and allocation constraint updates check against total instance usage. See the updated [Allocation](https://nvidia.github.io/infra-controller-rest/#tag/Allocation) schema. + Completes the transition from per-instance allocation linkage to aggregate allocation enforcement. Instance creation now validates against total reserved capacity for a tenant's instance type at a site, and allocation constraint updates check against total instance usage. See the updated [Allocation](https://docs.nvidia.com/infra-controller/rest-api-reference/api-reference/allocation) schema. - **Move machine ID lock acquisition before record pull** ([#405](https://github.com/NVIDIA/infra-controller/rest-api/pull/405)) Fixes a race condition in instance creation where the machine record could become stale between initial read and lock acquisition. The lock is now acquired before pulling the record, ensuring all subsequent checks operate on current data. @@ -393,10 +393,10 @@ Each release lists pull requests grouped by category, with the most recent versi Corrects 20 URL path segments in the TUI that were using hyphenated display names instead of the actual API paths (e.g., `ip-block` instead of `ipblock`), fixing silent 404s on list, get, create, update, and delete operations for these four resource types. - **Revise Allocation status enum and attribute descriptions in OpenAPI spec** ([#395](https://github.com/NVIDIA/infra-controller/rest-api/pull/395)) - Aligns the Allocation status enum values in the OpenAPI schema with database constants (e.g., `Registered` was missing), fixing deserialization errors when listing Allocations. Adds comprehensive attribute descriptions across Allocation models. See the updated [Allocation](https://nvidia.github.io/infra-controller-rest/#tag/Allocation) schema. + Aligns the Allocation status enum values in the OpenAPI schema with database constants (e.g., `Registered` was missing), fixing deserialization errors when listing Allocations. Adds comprehensive attribute descriptions across Allocation models. See the updated [Allocation](https://docs.nvidia.com/infra-controller/rest-api-reference/api-reference/allocation) schema. - **Infer Provider/Tenant from org for Site update and Fabric retrieval endpoints** ([#372](https://github.com/NVIDIA/infra-controller/rest-api/pull/372)) - Extends org-based identity inference to Site update and Fabric retrieval endpoints, removing the need to pass `infrastructureProviderId` or `tenantId` query parameters. See updated parameters on [Update Site](https://nvidia.github.io/infra-controller-rest/#tag/Site/operation/update-site) and [Retrieve all Sites](https://nvidia.github.io/infra-controller-rest/#tag/Site/operation/get-all-site). + Extends org-based identity inference to Site update and Fabric retrieval endpoints, removing the need to pass `infrastructureProviderId` or `tenantId` query parameters. See updated parameters on [Update Site](https://docs.nvidia.com/infra-controller/rest-api-reference/api-reference/site/update-site) and [Retrieve all Sites](https://docs.nvidia.com/infra-controller/rest-api-reference/api-reference/site/get-all-site). - **Support reflashing the same firmware version in PSM** ([#393](https://github.com/NVIDIA/infra-controller/rest-api/pull/393)) Allows PowerShelf Manager to re-apply the same firmware version that is already installed, enabling recovery scenarios where a re-flash is needed without a version change. @@ -412,7 +412,7 @@ Each release lists pull requests grouped by category, with the most recent versi ### Documentation - **Add Getting Started section in OpenAPI schema** ([#402](https://github.com/NVIDIA/infra-controller/rest-api/pull/402)) - Adds a [Getting Started](https://nvidia.github.io/infra-controller-rest/#section/Getting-Started) section to the API documentation, providing a clear onboarding path for new users. HTTP 200 and 201 responses are now auto-expanded for better discoverability of response schemas. + Adds a [Getting Started](https://docs.nvidia.com/infra-controller/rest-api-reference/getting-started) section to the API documentation, providing a clear onboarding path for new users. HTTP 200 and 201 responses are now auto-expanded for better discoverability of response schemas. ### CI/CD diff --git a/rest-api/deploy/INSTALLATION.md b/rest-api/deploy/INSTALLATION.md index 50368b7730..d39b0a6955 100644 --- a/rest-api/deploy/INSTALLATION.md +++ b/rest-api/deploy/INSTALLATION.md @@ -202,7 +202,7 @@ kubectl rollout status statefulset/postgres -n postgres Keycloak is the **reference OIDC identity provider** for the NICo REST API. It handles authentication and issues JWTs that the API validates on every request. It is pre-loaded with the `nico-dev` realm via an imported realm ConfigMap, which includes the `nico-api` client, realm roles, and a set of pre-seeded dev users. -Users of NICo can also bring their own OpenID/OAuth JWT Provider, see [Auth docs](https://github.com/NVIDIA/infra-controller/rest-api/tree/main/auth) for more details. +Users of NICo can also bring their own OpenID/OAuth JWT Provider, see [Auth docs](https://github.com/NVIDIA/infra-controller/tree/main/rest-api/auth) for more details. ### Manifests @@ -892,7 +892,7 @@ Or run commands directly for scripting: nicocli --config ~/.nico/config.yaml site list ``` -See [cli/README.md](cli/README.md) for the full configuration reference and command list. +See [cli/README.md](../cli/README.md) for the full configuration reference and command list. ### Getting an access token From 9801a944ff49a35532981834f00f1f42550f6b8d Mon Sep 17 00:00:00 2001 From: Kyle Felter Date: Thu, 2 Jul 2026 13:14:50 -0500 Subject: [PATCH 2/7] docs: preserve NICo image naming --- Makefile | 8 ++++---- README.md | 4 ++-- deploy/README.md | 4 ++-- docs/manuals/building_nico_containers.md | 8 ++++---- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Makefile b/Makefile index 718098811a..2c78ed3676 100644 --- a/Makefile +++ b/Makefile @@ -76,7 +76,7 @@ bootstrap: ## Set up an Ubuntu/Debian build host: apt deps, rustup, submodules, # make images Build the deployable service stack: NICo Core + REST images # make images-all Build everything: the stack plus machine-validation and # boot-artifact images (needs the full mkosi build host) -# make images-core NICo Core image (nvmetal-carbide) only +# make images-core NICo Core image (nico) only # make images-rest REST service images only # # Images are tagged $(IMAGE_REGISTRY)/:$(IMAGE_TAG). Override IMAGE_REGISTRY @@ -102,7 +102,7 @@ PLATFORM ?= linux/amd64 images: images-core images-rest ## Build the deployable service stack (NICo Core + REST images) @echo "" @echo "Deployable images built under $(IMAGE_REGISTRY) (tag: $(IMAGE_TAG)):" - @echo " $(IMAGE_REGISTRY)/nvmetal-carbide:$(IMAGE_TAG) (NICo Core)" + @echo " $(IMAGE_REGISTRY)/nico:$(IMAGE_TAG) (NICo Core)" @echo " $(IMAGE_REGISTRY)/nico-rest-*:$(IMAGE_TAG) (REST services)" images-all: images images-machine-validation images-boot-artifacts images-bfb ## Build every image (stack + machine validation + boot artifacts; needs an mkosi build host) @@ -111,14 +111,14 @@ images-base: ## Build the x86 build + runtime base containers (prerequisite for docker build --platform $(PLATFORM) --file dev/docker/Dockerfile.build-container-x86_64 -t $(CORE_BUILD_CONTAINER) . docker build --platform $(PLATFORM) --file dev/docker/Dockerfile.runtime-container-x86_64 -t $(CORE_RUNTIME_CONTAINER) . -images-core: images-base ## Build the NICo Core image (nvmetal-carbide) +images-core: images-base ## Build the NICo Core image (nico) docker build --platform $(PLATFORM) \ --build-arg CONTAINER_BUILD_X86_64=$(CORE_BUILD_CONTAINER) \ --build-arg CONTAINER_RUNTIME_X86_64=$(CORE_RUNTIME_CONTAINER) \ --build-arg VERSION=$(VERSION) \ --build-arg CI_COMMIT_SHORT_SHA=$(CI_COMMIT_SHORT_SHA) \ --file dev/docker/Dockerfile.release-container-sa-x86_64 \ - -t $(IMAGE_REGISTRY)/nvmetal-carbide:$(IMAGE_TAG) . + -t $(IMAGE_REGISTRY)/nico:$(IMAGE_TAG) . images-rest: ## Build the REST service images (api, workflow, site-manager, site-agent, db, cert-manager, flow, psm, nsm) $(MAKE) -C rest-api docker-build IMAGE_REGISTRY=$(IMAGE_REGISTRY) IMAGE_TAG=$(IMAGE_TAG) diff --git a/README.md b/README.md index a238243fb9..caa0f5b622 100644 --- a/README.md +++ b/README.md @@ -35,8 +35,8 @@ of the bare-metal lifecycle to fast-track building next generation AI Cloud offe # 1. Build all container images from this clone, then push them to your registry. # See docs/manuals/building_nico_containers.md for the build-host prerequisites. export IMAGE_REGISTRY=my-registry.example.com/infra-controller -make images IMAGE_REGISTRY="${IMAGE_REGISTRY}" # NICo Core (nvmetal-carbide) + REST service images -# Then: docker push "${IMAGE_REGISTRY}/nvmetal-carbide:latest" +make images IMAGE_REGISTRY="${IMAGE_REGISTRY}" # NICo Core (nico) + REST service images +# Then: docker push "${IMAGE_REGISTRY}/nico:latest" # docker push "${IMAGE_REGISTRY}/nico-rest-api:latest" # ...and the other nico-rest-* images # 2. Set environment variables diff --git a/deploy/README.md b/deploy/README.md index 7380ea030b..d36492de33 100644 --- a/deploy/README.md +++ b/deploy/README.md @@ -5,9 +5,9 @@ The `deploy/kustomization.yaml` file drives the top‑level deployment. Populate | Value | Description | | --- | --- | -| `yourdockerregistry.com/path/to/nico-core` | Registry URL that hosts the NICo Core (`nvmetal-carbide`) image. | +| `yourdockerregistry.com/path/to/nico-core` | Source image placeholder rewritten to `NICO_REGISTRY_PATH/nico-core` by `deploy/kustomization.yaml`. | | `NICO_REGISTRY_PATH` | URL to the registry that hosts all NICo components; shared path for component images. | -| `NICO_TAG` | Version tag for the `nvmetal-carbide` component. | +| `NICO_TAG` | Version tag for the NICo Core (`nico-core`) image. | | `yourdockerregistry.com/path/to/boot-artifacts-aarch64` | Registry URL for the `boot-artifacts-aarch64` image. | | `BOOT_ARTIFACTS_AARCH64_TAG` | Version tag for the `boot-artifacts-aarch64` component. | | `yourdockerregistry.com/path/to/boot-artifacts-x86_64` | Registry URL for the `boot-artifacts-x86_64` image. | diff --git a/docs/manuals/building_nico_containers.md b/docs/manuals/building_nico_containers.md index 7f803672d3..e1650a7300 100644 --- a/docs/manuals/building_nico_containers.md +++ b/docs/manuals/building_nico_containers.md @@ -45,7 +45,7 @@ Once the prerequisites above are installed, build the NICo container images from top of the repo with a single `make` command: ```sh -make images # deployable stack: NICo Core (nvmetal-carbide) + the REST service images +make images # deployable stack: NICo Core (nico) + the REST service images make images-all # the above plus the machine-validation and x86 boot-artifact images ``` @@ -79,7 +79,7 @@ The count should be exactly 14: | Image | Target | |---|---| -| `nvmetal-carbide` | `images-core` | +| `nico` | `images-core` | | `nico-rest-api` | `images-rest` | | `nico-rest-workflow` | `images-rest` | | `nico-rest-site-manager` | `images-rest` | @@ -141,10 +141,10 @@ docker build --build-arg CONTAINER_RUNTIME_X86_64=nico-runtime-container-x86_64 ``` -## Building the NICo Core container +## Building nico-core container ```sh -docker build --build-arg "CONTAINER_RUNTIME_X86_64=nico-runtime-container-x86_64" --build-arg "CONTAINER_BUILD_X86_64=nico-buildcontainer-x86_64" -f dev/docker/Dockerfile.release-container-sa-x86_64 -t nvmetal-carbide . +docker build --build-arg "CONTAINER_RUNTIME_X86_64=nico-runtime-container-x86_64" --build-arg "CONTAINER_BUILD_X86_64=nico-buildcontainer-x86_64" -f dev/docker/Dockerfile.release-container-sa-x86_64 -t nico . ``` ## Building the AARCH64 Containers and artifacts From 2dd770297aacc493e6306e157df10eeb61bfffd1 Mon Sep 17 00:00:00 2001 From: Kyle Felter Date: Tue, 7 Jul 2026 17:47:11 -0500 Subject: [PATCH 3/7] chore: Ignore local workspace files Signed-off-by: Kyle Felter --- .gitignore | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.gitignore b/.gitignore index 830826bff2..f97b5fef1f 100644 --- a/.gitignore +++ b/.gitignore @@ -43,6 +43,11 @@ crates/dpf/doca-platform # Generated plans from Cursor .cursor/ +.kolo +.kolo/ +.agents/ +.trash/ +.secrets # Generated by github runners, ignore them to prevent failures in check-repo-clean.sh /cargo/ From 52f8d99a74a027b51bb3fc09eb50f63d79fea02e Mon Sep 17 00:00:00 2001 From: Kyle Felter Date: Tue, 7 Jul 2026 17:47:17 -0500 Subject: [PATCH 4/7] docs: Align quick-start version examples Signed-off-by: Kyle Felter --- docs/getting-started/quick-start.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/getting-started/quick-start.md b/docs/getting-started/quick-start.md index b63f7b32a1..f264ed993f 100644 --- a/docs/getting-started/quick-start.md +++ b/docs/getting-started/quick-start.md @@ -79,8 +79,8 @@ Review this entire step **before** running `setup.sh` and complete every item th ```bash # export KUBECONFIG=/path/to/kubeconfig # optional if the current kubectl context is correct export NICO_IMAGE_REGISTRY=my-registry.example.com/nico # base registry for all NICo images -export NICO_CORE_IMAGE_TAG= # e.g. v2025.12.30-rc1 -export NICO_REST_IMAGE_TAG= # e.g. v1.0.4 +export NICO_CORE_IMAGE_TAG= # e.g. v2.0.0 +export NICO_REST_IMAGE_TAG= # e.g. v2.0.0 # Optional for authenticated registries: # export REGISTRY_PULL_SECRET= # export REGISTRY_PULL_USERNAME='$oauthtoken' # default for NGC API-key auth @@ -95,8 +95,8 @@ For authenticated NGC pulls, obtain an API key at [ngc.nvidia.com](https://ngc.n | `REGISTRY_PULL_SECRET` | No | Raw registry password or API key used to create image pull secrets. | | `REGISTRY_PULL_USERNAME` | No | Username for generated pull secrets. Defaults to `$oauthtoken`. | | `NICO_IMAGE_REGISTRY` | Unless `--skip-core --skip-rest` | Base image registry for all NICo images (e.g. `my-registry.example.com/nico`). Used for NICo Core (`/nvmetal-carbide`) and NICo REST (`/nico-rest-*`). | -| `NICO_CORE_IMAGE_TAG` | Unless `--skip-core` | NICo Core image tag (e.g. `v2025.12.30`). | -| `NICO_REST_IMAGE_TAG` | Unless `--skip-rest` | NICo REST image tag (e.g. `v1.0.4`). | +| `NICO_CORE_IMAGE_TAG` | Unless `--skip-core` | NICo Core image tag (e.g. `v2.0.0`). | +| `NICO_REST_IMAGE_TAG` | Unless `--skip-rest` | NICo REST image tag (e.g. `v2.0.0`). | | `KUBECONFIG` | No | Path to the target cluster kubeconfig. Omit it when the current `kubectl` context is already correct. | | `NICO_SITE_UUID` | No | Stable UUID for this site. If unset, `setup.sh` generates a random UUID each run. | From c289bbfe89a8a98658a7d010057edef1e6f4dc53 Mon Sep 17 00:00:00 2001 From: Kyle Felter Date: Wed, 8 Jul 2026 10:24:33 -0500 Subject: [PATCH 5/7] chore: Remove local workspace ignores --- .gitignore | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.gitignore b/.gitignore index f97b5fef1f..830826bff2 100644 --- a/.gitignore +++ b/.gitignore @@ -43,11 +43,6 @@ crates/dpf/doca-platform # Generated plans from Cursor .cursor/ -.kolo -.kolo/ -.agents/ -.trash/ -.secrets # Generated by github runners, ignore them to prevent failures in check-repo-clean.sh /cargo/ From 764c27229fe5b42060b2cf16bb7faae3b753b7e5 Mon Sep 17 00:00:00 2001 From: Kyle Felter Date: Fri, 10 Jul 2026 00:19:43 -0500 Subject: [PATCH 6/7] docs: Address setup guide review feedback Signed-off-by: Kyle Felter --- docs/getting-started/quick-start.md | 14 +++++++------- helm-prereqs/README.md | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/getting-started/quick-start.md b/docs/getting-started/quick-start.md index a0d58825d1..847f7dbf2d 100644 --- a/docs/getting-started/quick-start.md +++ b/docs/getting-started/quick-start.md @@ -307,18 +307,18 @@ cd helm-prereqs/ ./setup.sh -y # non-interactive — deploys everything ``` -Common options can be combined as needed: +You can combine common options as needed: | Option | Effect | |--------|--------| -| `-y` | Accept setup prompts automatically. | -| `--skip-core` | Skip the Phase 6 NICo Core Helm release. | -| `--skip-rest` | Skip all Phase 7 NICo REST phases. | -| `--skip-flow` | Skip Phase 7h NICo Flow. Also set `flow.enabled=false` in `helm-prereqs/values.yaml` to omit Flow prerequisites. | | `--core-values ` | Use site-specific NICo Core values for Phase 6. | +| `--debug` | Enable shell tracing. This may print secrets, so protect the logs. | | `--metallb-config ` | Use a site-specific MetalLB manifest file or kustomize directory. | | `--site-overlay ` | Apply a site kustomize overlay after Phase 6. | -| `--debug` | Enable shell tracing. This may print secrets, so protect the logs. | +| `--skip-core` | Skip the Phase 6 NICo Core Helm release. | +| `--skip-flow` | Skip Phase 7h NICo Flow. Also set `flow.enabled=false` in `helm-prereqs/values.yaml` to omit Flow prerequisites. | +| `--skip-rest` | Skip all Phase 7 NICo REST phases. | +| `-y` | Accept setup prompts automatically. | The `setup.sh` script installs all prerequisites and NICo components in sequential phases: @@ -351,7 +351,7 @@ external-secrets (external-secrets/external-secrets 0.14.3) nico-prereqs (this Helm chart - nico-system namespace) NICo Core (../helm - nico-core.yaml values) NICo REST (../helm/rest/nico-rest) - ├── nico-rest-ca-issuer ClusterIssuer (cert-manager.io) + ├── nico-rest-ca-issuer (ClusterIssuer - cert-manager.io) ├── postgres StatefulSet (temporal + keycloak databases) ├── keycloak (dev OIDC IdP, nico-dev realm) ├── temporal (temporal-helm/temporal, mTLS) diff --git a/helm-prereqs/README.md b/helm-prereqs/README.md index aa60fa912d..c986c7398f 100644 --- a/helm-prereqs/README.md +++ b/helm-prereqs/README.md @@ -182,7 +182,7 @@ It supports these common deployment modes: | `-y` | Non-interactive mode; accept setup prompts automatically. | | `--skip-core` | Install prerequisites and REST, but skip the NICo Core Helm release. | | `--skip-rest` | Install prerequisites and Core, but skip all REST phases and REST repo checks. | -| `--skip-flow` | Skip NICo Flow in Phase 7h. Also set `flow.enabled=false` in `values.yaml` to omit Flow prerequisites. | +| `--skip-flow` | Skip NICo Flow in Phase 7h. You can also set `flow.enabled=false` in `values.yaml` to omit Flow prerequisites. | | `--skip-core --skip-rest` | Infrastructure-only run; image tags, image registry, and REST repo are not required. | | `--core-values ` | Use site-specific Core values instead of `helm-prereqs/values/nico-core.yaml`. | | `--metallb-config ` | Use a site-specific MetalLB manifest file or kustomize directory. | @@ -214,7 +214,7 @@ NICo Core (../helm - nico-core.yaml values) ├── nico-ssh-console-rs (Deployment - SSH console proxy) └── unbound (Deployment - .forge zone DNS, opt-in) NICo REST (../helm/rest/nico-rest) - ├── nico-rest-ca-issuer ClusterIssuer (cert-manager.io) + ├── nico-rest-ca-issuer (ClusterIssuer - cert-manager.io) ├── postgres StatefulSet (temporal + keycloak + NICo databases) ├── keycloak (dev OIDC IdP, nico-dev realm) ├── temporal (temporal-helm/temporal, mTLS) From 4e6fc3856f84523d43b76f37c1bb6b00258e04c2 Mon Sep 17 00:00:00 2001 From: Kyle Felter Date: Fri, 10 Jul 2026 01:09:51 -0500 Subject: [PATCH 7/7] docs: Clarify unified release notes Signed-off-by: Kyle Felter --- rest-api/CHANGELOG.md | 52 +++++++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 19 deletions(-) diff --git a/rest-api/CHANGELOG.md b/rest-api/CHANGELOG.md index 1d44f9836a..f0d91cb516 100644 --- a/rest-api/CHANGELOG.md +++ b/rest-api/CHANGELOG.md @@ -1,18 +1,24 @@ # Changelog -All notable changes to **NVIDIA Infra Controller REST** are documented in this file. -Each release lists pull requests grouped by category, with the most recent version first. +This file is the historical record for independent **NVIDIA Infra Controller REST** +releases through v1.6.0. Future release information is maintained only in the +[unified NICo release notes](../docs/release-notes.md). + +Each release lists pull requests grouped by category, with the most recent version +first. Entries within each category preserve their published order. --- ## [v1.6.0](https://github.com/NVIDIA/infra-controller/rest-api/releases/tag/v1.6.0) -> [!NOTE] -> This release is compatible with Core **v0.10.x**. - -> [!IMPORTANT] -> This is the last independent release of NICo REST. Future releases will be part of the unified NICo repository located at [infra-controller](https://github.com/NVIDIA/infra-controller). + +This release is compatible with Core **v0.10.x**. + + +This is the last independent release of NICo REST. Future releases are documented +in the [unified NICo release notes](../docs/release-notes.md). + ### Features @@ -136,11 +142,15 @@ Each release lists pull requests grouped by category, with the most recent versi ## [v1.5.0](https://github.com/NVIDIA/infra-controller/rest-api/releases/tag/v1.5.0) -> [!NOTE] -> This release is compatible with Core **v0.9.x**. + +This release is compatible with Core **v0.9.x**. + -> [!IMPORTANT] -> In our effort to unify the product name, starting from `v1.5.0` the image names are now prefixed with `nico-` instead of `carbide-`. Docker images produced by the make commands will now have the `nico-` prefix. + +In our effort to unify the product name, starting from `v1.5.0` the image names +are now prefixed with `nico-` instead of `carbide-`. Docker images produced by +the make commands will now have the `nico-` prefix. + ### Features - **Rename carbide/forge to NVIDIA Infrastructure Controller (NICo)** ([#432](https://github.com/NVIDIA/infra-controller/rest-api/pull/432)) @@ -319,8 +329,9 @@ Each release lists pull requests grouped by category, with the most recent versi ## [v1.4.0](https://github.com/NVIDIA/infra-controller/rest-api/releases/tag/v1.4.0) -> [!NOTE] -> This release is compatible with Core **v0.8.x**. + +This release is compatible with Core **v0.8.x**. + ### Features @@ -452,8 +463,9 @@ Each release lists pull requests grouped by category, with the most recent versi ## [v1.3.0](https://github.com/NVIDIA/infra-controller/rest-api/releases/tag/v1.3.0) -> [!NOTE] -> This release is compatible with Core **v0.7.x**. + +This release is compatible with Core **v0.7.x**. + ### Features @@ -530,8 +542,9 @@ Each release lists pull requests grouped by category, with the most recent versi ## [v1.2.1](https://github.com/NVIDIA/infra-controller/rest-api/releases/tag/v1.2.1) -> [!NOTE] -> This release is compatible with Core **v0.6.x**. + +This release is compatible with Core **v0.6.x**. + ### Features @@ -609,8 +622,9 @@ Each release lists pull requests grouped by category, with the most recent versi ## [v1.2.0](https://github.com/NVIDIA/infra-controller/rest-api/releases/tag/v1.2.0) -> [!NOTE] -> This release is compatible with Core **v0.6.x**. + +This release is compatible with Core **v0.6.x**. + ### Features