infra-controller-rest

module
v1.5.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 14, 2026 License: Apache-2.0

README

NVIDIA Infrastructure Controller (NICo) REST API

A collection of microservices that comprise the management backend for NVIDIA Infrastructure Controller (NICo), exposed as a REST API.

In deployments, NVIDIA Infrastructure Controller REST requires NVIDIA Infrastructure Controller Core to function.

The REST layer can be deployed in the datacenter with NVIDIA Infrastructure Controller Core, or deployed anywhere in Cloud and allow Site Agent to connect from the datacenter. Multiple NVIDIA Infrastructure Controller Cores running in different datacenters can also connect to NVIDIA Infrastructure Controller REST through respective Site Agents.

View latest OpenAPI schema on GitHub pages.

Prerequisites

  • Go 1.25.4 or later
  • Docker 20.10+ with BuildKit enabled
  • Make
  • Kind (for local deployment)
  • kubectl (for local deployment)
  • jq (optional, for parsing JSON responses)

Quick Start

Run Unit Tests
make test

Tests require PostgreSQL. The Makefile automatically manages a test container.

Test database configuration:

  • Host: localhost
  • Port: 30432
  • User/Password: postgres / postgres
Option A: Local Development with Kind

The fastest path to a running stack on your laptop. Builds images locally, spins up a Kind cluster, and deploys a mock NVIDIA Infrastructure Controller Core automatically — no external registry or bare-metal cluster required.

make kind-reset

This deploys the full stack via Helm charts (default). It:

  1. Creates a Kind Kubernetes cluster
  2. Builds all Docker images
  3. Sets up infrastructure (PostgreSQL, Temporal, Keycloak, cert-manager, etc.)
  4. Deploys app services via Helm umbrella chart
  5. Bootstraps and deploys site-agent
  6. Deploys a mock NVIDIA Infrastructure Controller Core

To deploy via Kustomize overlays instead:

make kind-reset-kustomize

Once complete, services are available at:

Service URL
API http://localhost:8388
Keycloak http://localhost:8082
Temporal UI http://localhost:8233
Adminer (DB UI) http://localhost:8081

Other useful commands:

make kind-status         # Check pod status
make kind-logs           # Tail API logs
make kind-redeploy       # Rebuild and restart after code changes (Kustomize)
make helm-redeploy       # Rebuild and restart after code changes (Helm)
make kind-verify         # Run health checks
make helm-verify         # Check Helm deployment rollout status
make helm-uninstall      # Uninstall Helm releases
make kind-down           # Tear down cluster
Option B: Bare-Metal Cluster with helm-prereqs

For deploying onto a real Kubernetes cluster alongside NVIDIA Infrastructure Controller Core. Uses helm-prereqs/setup.sh from the infra-controller-core repo, which installs the full prerequisite stack (cert-manager, Vault, external-secrets, PostgreSQL, Temporal, Keycloak) and deploys both NICo Core and NICo REST in the correct order.

# 1. Build and push images to your registry
make docker-build IMAGE_REGISTRY=my-registry.example.com/nico IMAGE_TAG=v1.0.4

for image in nico-rest-api nico-rest-workflow nico-rest-site-manager \
             nico-rest-site-agent nico-rest-db nico-rest-cert-manager; do
    docker push my-registry.example.com/nico/$image:v1.0.4
done

# 2. Set environment variables
export KUBECONFIG=/path/to/kubeconfig
export REGISTRY_PULL_SECRET=<pull-secret-or-api-key>
export NICO_IMAGE_REGISTRY=my-registry.example.com/nico
export NICO_CORE_IMAGE_TAG=<nico-core-tag>    # NVIDIA Infrastructure Controller Core image tag
export NICO_REST_IMAGE_TAG=v1.0.4               # NICo REST image tag

# 3. Clone infra-controller-core (if not already present as a sibling directory)
git clone https://github.com/NVIDIA/infra-controller-core.git ../infra-controller-core

# 4. Run setup from the infra-controller-core repo
cd ../infra-controller-core/helm-prereqs
./setup.sh -y     # or ./setup.sh for interactive prompts

The setup script auto-detects this repo from the sibling path infra-controller-rest. Set NICO_REPO=/path/to/this/repo to override.

To tear everything down:

./clean.sh

See infra-controller-core/helm-prereqs/README.md for the full reference: PKI architecture, phase-by-phase description, site customization, secrets reference, and troubleshooting (including site-agent gRPC connectivity).

Option C: Manual / Kustomize Production Deployment

See Deployment QuickStart Guide for a concise bring-up guide, and Detailed Installation Guide for the full step-by-step reference with per-component explanations.

CLI

nicocli is a command-line client that wraps the full REST API. Install it and set up configs for each environment you work with:

make nico-cli             # build and install to $GOPATH/bin
nicocli init              # generate ~/.nico/config.yaml

Create a config per environment (~/.nico/config.yaml, ~/.nico/config.staging.yaml, ~/.nico/config.prod.yaml), then launch the interactive TUI which handles environment selection, login, and token refresh automatically:

nicocli tui

All commands are also available directly for scripting and one-off use:

nicocli --config ~/.nico/config.staging.yaml site list

See cli/README.md for configuration, authentication, shell completion, and the full command reference.

Using the API

Get an Access Token
TOKEN=$(curl -s -X POST "http://localhost:8082/realms/nico-dev/protocol/openid-connect/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "client_id=nico-api" \
  -d "client_secret=nico-local-secret" \
  -d "grant_type=password" \
  -d "username=admin@example.com" \
  -d "password=adminpassword" | jq -r .access_token)
Example API Requests
# Health check
curl -s http://localhost:8388/healthz -H "Authorization: Bearer $TOKEN" | jq .

# Get current tenant (auto-creates on first access)
curl -s "http://localhost:8388/v2/org/test-org/nico/tenant/current" \
  -H "Authorization: Bearer $TOKEN" | jq .

# List sites
curl -s "http://localhost:8388/v2/org/test-org/nico/site" \
  -H "Authorization: Bearer $TOKEN" | jq .
Test Users
Email Password Roles
admin@example.com adminpassword PROVIDER_ADMIN, TENANT_ADMIN
testuser@example.com testpassword TENANT_ADMIN
provider@example.com providerpassword PROVIDER_ADMIN

All users have the test-org organization assigned.

Building Docker Images

Build All Images
make docker-build

Images are tagged with localhost:5000 registry and latest tag by default.

Build with Custom Registry and Tag
make docker-build IMAGE_REGISTRY=my-registry.example.com/nico IMAGE_TAG=v1.0.0
Push to Your Registry
  1. Authenticate with your registry:
# Docker Hub
docker login

# AWS ECR
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 123456789.dkr.ecr.us-east-1.amazonaws.com

# Google Container Registry
gcloud auth configure-docker

# Azure Container Registry
az acr login --name myregistry
  1. Build and push:
REGISTRY=my-registry.example.com/infra-controller-rest
TAG=v1.0.0

make docker-build IMAGE_REGISTRY=$REGISTRY IMAGE_TAG=$TAG

for image in nico-rest-api nico-rest-workflow nico-rest-site-manager nico-rest-site-agent nico-rest-db nico-rest-cert-manager; do
    docker push "$REGISTRY/$image:$TAG"
done
Available Images
Image Description
nico-rest-api Main REST API (port 8388)
nico-rest-workflow Temporal workflow worker
nico-rest-site-manager Site management worker
nico-rest-site-agent On-site agent
nico-rest-db Database migrations (run to completion)
nico-rest-cert-manager Native PKI certificate manager

Architecture

Service Binary Description
nico-rest-api api Main REST API server
nico-rest-workflow workflow Temporal workflow service
nico-rest-db migrations Database migrations
nico-rest-site-agent site-agent On-site agent
nico-rest-site-manager sitemgr Site management service
nico-rest-cert-manager credsmgr Native PKI certificate manager
nico-cli nicocli CLI client for the REST API

Supporting modules:

  • common - Shared utilities and configurations
  • auth - Authentication and authorization
  • ipam - IP Address Management

OpenAPI Schema Development

OpenAPI schema must be updated whenever the API endpoints are added/updated. Please view instructions at OpenAPI README

Pre-commit Hooks

This project uses pre-commit with TruffleHog for secret detection to prevent accidentally committing sensitive information like API keys, passwords, or tokens.

Setup
# Install pre-commit hooks (first time setup)
make pre-commit-install

This will:

  1. Install pre-commit if not already installed
  2. Install trufflehog if not already installed
  3. Configure git hooks for pre-commit and pre-push
Usage

Once installed, TruffleHog automatically scans your changes on every git commit and git push.

To manually run the scan on all files:

make pre-commit-run

Example output:

❯ make pre-commit-run
pre-commit run --all-files
[INFO] Initializing environment for https://github.com/trufflesecurity/trufflehog.
TruffleHog Secret Scan...................................................Passed
Other Commands
make pre-commit-update  # Update hooks to latest versions

Experimental Notice

This software is considered experimental and is a preview release. Use at your own risk in production environments. The software is provided "as is" without warranties of any kind. Features, APIs, and configurations may change without notice in future releases. For production deployments, thoroughly test in non-critical environments first.

License

See LICENSE for details. This project will download and install additional third-party open source software projects. Review the license terms of these open source projects before use.

Directories

Path Synopsis
api
cmd/api command
auth
pkg/testing
Package testing provides shared constants and utilities for cloud-auth tests
Package testing provides shared constants and utilities for cloud-auth tests
cert-manager
cmd/credsmgr command
Package main is the command entry point
Package main is the command entry point
pkg/certs
Package certs implements certificate management
Package certs implements certificate management
pkg/core
Package core implements some core utilities
Package core implements some core utilities
pkg/pki
Package pki provides certificate authority and PKI operations
Package pki provides certificate authority and PKI operations
pkg/types
Package types defines shared types for cert-manager
Package types defines shared types for cert-manager
cli
cmd/cli command
pkg
tui
common
pkg/otelecho
Package otelecho provides OpenTelemetry instrumentation for the labstack/echo package.
Package otelecho provides OpenTelemetry instrumentation for the labstack/echo package.
pkg/roles
Package roles defines the canonical authorization role suffix names used throughout the codebase.
Package roles defines the canonical authorization role suffix names used throughout the codebase.
pkg/secretstring
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
db
cmd/migrations command
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
cmd
Package cmd implements the flow CLI commands using Cobra.
Package cmd implements the flow CLI commands using Cobra.
internal/alert
Package alert provides an abstraction for sending alerts/notifications from Flow workflows and activities.
Package alert provides an abstraction for sending alerts/notifications from Flow workflows and activities.
internal/certs
Package certs provides TLS configuration resolution using deployment-specific defaults: the CERTDIR environment variable and the Kubernetes SPIFFE secret path.
Package certs provides TLS configuration resolution using deployment-specific defaults: the CERTDIR environment variable and the Kubernetes SPIFFE secret path.
internal/inventory/manager
Package manager provides the business logic layer for inventory management.
Package manager provides the business logic layer for inventory management.
internal/inventory/store
Package store provides the storage layer for inventory management.
Package store provides the storage layer for inventory management.
internal/nsmapi
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
internal/scheduler/taskschedule
Package taskschedule manages user-defined task schedules (task_schedule table).
Package taskschedule manages user-defined task schedules (task_schedule table).
internal/service
Package service implements the gRPC server for NICo Flow, the rack-level asset management system.
Package service implements the gRPC server for NICo Flow, the rack-level asset management system.
internal/task/componentmanager/builtin
Package builtin registers the component manager extensions compiled into the Flow binary.
Package builtin registers the component manager extensions compiled into the Flow binary.
internal/task/componentmanager/config
Package config loads, normalizes, and validates component manager configuration.
Package config loads, normalizes, and validates component manager configuration.
internal/task/componentmanager/nvlswitch/nvswitchmanager
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
internal/task/componentmanager/providerapi
Package providerapi contains provider abstractions that must be shared between the componentmanager package and provider implementation packages without creating an import cycle.
Package providerapi contains provider abstractions that must be shared between the componentmanager package and provider implementation packages without creating an import cycle.
internal/task/componentmanager/providers/nvswitchmanager
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
internal/task/conflict
Package conflict provides data-driven task conflict detection for Flow.
Package conflict provides data-driven task conflict detection for Flow.
internal/task/store
Package store provides the storage layer for task and operation rule management.
Package store provides the storage layer for task and operation rule management.
pkg/certs
Package certs provides TLS configuration building from explicit certificate file paths.
Package certs provides TLS configuration building from explicit certificate file paths.
pkg/client
Package client provides a gRPC client for interacting with the Flow service.
Package client provides a gRPC client for interacting with the Flow service.
pkg/metadata
Package metadata contains build-time metadata for the Flow service.
Package metadata contains build-time metadata for the Flow service.
pkg/types
Package types provides public domain types for the Flow client.
Package types provides public domain types for the Flow client.
Package ipam is a ip address management library for ip's and prefixes (networks).
Package ipam is a ip address management library for ip's and prefixes (networks).
cmd/client command
cmd/server command
cmd
pkg/db/testutil
Package testutil provides database test utilities for integration tests.
Package testutil provides database test utilities for integration tests.
pkg/firmwaremanager
Package firmwaremanager provides firmware update orchestration for NV-Switch trays.
Package firmwaremanager provides firmware update orchestration for NV-Switch trays.
pkg/firmwaremanager/packages
Package packages provides firmware package definition and loading.
Package packages provides firmware package definition and loading.
pkg/redfish
Package redfish wraps gofish to provide service-focused Redfish operations (inventory, power control, and firmware upload) for NV-Switch trays with minimal coupling to underlying transport details.
Package redfish wraps gofish to provide service-focused Redfish operations (inventory, power control, and firmware upload) for NV-Switch trays with minimal coupling to underlying transport details.
pkg/sshclient
Package sshclient provides SSH-based operations for NV-Switch NVOS management.
Package sshclient provides SSH-based operations for NV-Switch NVOS management.
Package openapi embeds the OpenAPI spec so it can be imported by other packages without requiring a build-time copy step.
Package openapi embeds the OpenAPI spec so it can be imported by other packages without requiring a build-time copy step.
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
cmd
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
internal/service
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
pkg/common/errors
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
pkg/common/log
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
pkg/common/perfstat
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
pkg/common/runner
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
pkg/common/util
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
pkg/common/vendor
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
pkg/converter/dao
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
pkg/converter/protobuf
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
pkg/credentials
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
pkg/db/migrations
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
pkg/db/model
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
pkg/firmwaremanager
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
pkg/inventorymanager
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
pkg/objects/pmc
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
pkg/objects/powershelf
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
pkg/objects/powersupply
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
pkg/pmcmanager
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
pkg/pmcregistry
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
pkg/powershelfmanager
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
pkg/redfish
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
sdk
standard module
site-agent
cmd/mock-core command
cmd/mock-flow command
cmd/site-agent command
pkg/components/managers
Package managers implements some core utilities
Package managers implements some core utilities
site-manager
cmd/sitemgr command
Package main is the command entry point
Package main is the command entry point
pkg/client/clientset/versioned/fake
This package has the automatically generated fake clientset.
This package has the automatically generated fake clientset.
pkg/client/clientset/versioned/scheme
This package contains the scheme of the automatically generated clientset.
This package contains the scheme of the automatically generated clientset.
pkg/client/clientset/versioned/typed/crds/v1
This package has the automatically generated typed clients.
This package has the automatically generated typed clients.
pkg/client/clientset/versioned/typed/crds/v1/fake
Package fake has the automatically generated clients.
Package fake has the automatically generated clients.
pkg/crds/v1
Package v1 implements crds
Package v1 implements crds
pkg/sitemgr
Package sitemgr implements the site manager
Package sitemgr implements the site manager
pkg/types
Package types defines api structure types
Package types defines api structure types
site-workflow
pkg/activity
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
* SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES.
workflow
cmd/workflow command
workflow-schema

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL