# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 openapi: 3.1.0 info: title: NVIDIA Infra Controller REST API version: 2.0.0 summary: NVIDIA Infra Controller REST API is the RESTful gateway for accessing the NVIDIA Infra Controller service description: 'NVIDIA Infra Controller REST API allows users to create and manage resources, e.g., VPCs, Subnets, and Instances, across all connected NVIDIA Infra Controller datacenters, also referred to as Sites.' license: name: Apache-2.0 url: 'https://www.apache.org/licenses/LICENSE-2.0' contact: name: NVIDIA Infra Controller Dev Team servers: - url: 'https://nico-rest-api.nico.svc.cluster.local' description: Kubernetes Cluster tags: - name: Getting Started description: |- This section provides a quick overview of the API and how to get started. ### Authentication The first step is to authenticate using a JWT bearer token. Organization structures and roles depend on the authentication configuration used. For details on authentication, please consult the NICo REST `auth` module [README](https://github.com/NVIDIA/infra-controller/rest-api/tree/main/auth). ### API Version The next step is to be aware of the API version being used. The API version can be retrieved by calling the [Retrieve Metadata endpoint](#tag/Metadata/operation/get-metadata). In general, the API maintains backward compatibility with the previous versions. Any breaking changes are announced using a deprecation notice. Current and past deprecations are listed in the [Deprecations](#tag/Deprecations) section. ### Service Account Mode Depending on the auth configuration used, the NICo REST API may be configured in Service Account mode. In this mode, API users can act as both Provider and Tenant as part of the same organization. If this is the case, the user must first retrieve the Service Account by making a call to the [Retrieve Service Account endpoint](#tag/Service-Account/operation/get-current-service-account). For service accounts, the Tenant entity is initialized as a privileged Tenant when a Ready Tenant Account has `siteCapabilities` with `targetedInstanceCreation` enabled. ### Provider or Tenant Mode If NICo REST API is not configured in Service Account mode, the user should retrieve the Infrastructure Provider by making a call to the [Retrieve Infrastructure Provider endpoint](#tag/Infrastructure-Provider/operation/get-current-infrastructure-provider) or the Tenant by making a call to the [Retrieve Tenant endpoint](#tag/Tenant/operation/get-current-tenant). In both cases, these calls initialize Provider and Tenant entities for the organization. All resources created are anchored to either the Provider or Tenant entity. Once the Provider and the Tenant are initialized, the user can create resources by making calls to the appropriate endpoints. ### Creating Site-Level IP Blocks To use a NICo Site, the Provider or Service Account holder must create IP Blocks for each network overlay defined in the Site configuration TOML file. To create an IP Block, the user must make a call to the [Create IP Block endpoint](#tag/IP-Block/operation/create-ipblock). > **Note:** From this point onwards, a brief outline is provided for the typical API call flows for various use cases. ### Typical API Call Flow for Service Account - Retrieve available Sites using the [Retrieve All Sites endpoint](#tag/Site/operation/get-all-site) and choose a Site to create resources in. For _Disconnected_ NICo installations where NICo REST is deployed alongside NICo Core, typically there will be a single Site available. - For each Site IP Block, create a Network Allocation for the Tenant entity with the full prefix length using the [Create Allocation endpoint](#tag/Allocation/operation/create-allocation). This will create a Tenant IP Block for each Site IP Block. - Creating an Allocation will create the Tenant in NICo Core. - Create a VPC using the [Create VPC endpoint](#tag/VPC/operation/create-vpc). - Create a VPC Prefix or Subnet referencing the VPC and a Tenant IP Block. - If the Site supports Native Networking (FNN), create a VPC Prefix using the [Create VPC Prefix endpoint](#tag/VPC-Prefix/operation/create-vpc-prefix). - Otherwise the user should create a Subnet using the [Create Subnet endpoint](#tag/Subnet/operation/create-subnet). - Create an Operating System using the [Create Operating System endpoint](#tag/Operating-System/operation/create-operating-system) specifying iPXE script and user data. - Retrieve available Machines on the Site using the [Retrieve All Machines endpoint](#tag/Machine/operation/get-all-machine). - Create an Instance specifying the VPC, VPC Prefix or Subnet, Operating System, and Machine. ### Typical API Call Flow for Provider - Create a Tenant Account using the [Create Tenant Account endpoint](#tag/Tenant-Account/operation/create-tenant-account). Provider must know the Tenant org name. - Once the Tenant has accepted the Tenant Account, the Provider can allocate resources to the Tenant. - Retrieve available Sites using the [Retrieve All Sites endpoint](#tag/Site/operation/get-all-site) and choose a Site to create resources in. - Create an Instance Type using the [Create Instance Type endpoint](#tag/Instance-Type/operation/create-instance-type). - Retrieve available Machines on the Site using the [Retrieve All Machines endpoint](#tag/Machine/operation/get-all-machine). - Update a Machine's Instance Type using the [Update Machine endpoint](#tag/Machine/operation/update-machine) or assign multiple Machines to an Instance Type using the [Create Instance Type/Machine Association endpoint](#tag/Instance-Type/operation/create-instance-type-machine-association) - Create a Compute Allocation for Tenant using the [Create Compute Allocation endpoint](#tag/Allocation/operation/create-allocation) referencing the Instance Type. - Creating any type of Allocation for a Tenant will create the Tenant in NICo Core. - Create a Network Allocation for Tenant using the [Create Allocation endpoint](#tag/Allocation/operation/create-allocation) referencing a Site IP Block. - Creating a Network Allocation will create a Tenant IP Block. ### Typical API Call Flow for Tenant - Accept the Tenant Account using the [Update Tenant Account endpoint](#tag/Tenant-Account/operation/update-tenant-account). - Retrieve available Sites using the [Retrieve All Sites endpoint](#tag/Site/operation/get-all-site) and choose a Site to create resources in. Any Site where the Tenant has an Allocation will be returned. - Create a VPC using the [Create VPC endpoint](#tag/VPC/operation/create-vpc). - Retrieve available Site IP Blocks using the [Retrieve All IP Blocks endpoint](#tag/IP-Block/operation/get-all-ipblock). Any IP Block for which the Tenant has received a Network Allocation from the Provider will be returned. - Create a VPC Prefix or Subnet referencing the VPC and a Tenant IP Block. - If the Site supports Native Networking (FNN), create a VPC Prefix using the [Create VPC Prefix endpoint](#tag/VPC-Prefix/operation/create-vpc-prefix). - Otherwise the user should create a Subnet using the [Create Subnet endpoint](#tag/Subnet/operation/create-subnet). - Create an Operating System using the [Create Operating System endpoint](#tag/Operating-System/operation/create-operating-system) specifying iPXE script and user data. - Retrieve available Instance Types using the [Retrieve All Instance Types endpoint](#tag/Instance-Type/operation/get-all-instance-type). Any Instance Type for which the Tenant has received a Compute Allocation from the Provider will be returned. - Create an Instance specifying the VPC, VPC Prefix or Subnet, Operating System, and Instance Type. - name: Service Account description: |- When the API service is configured in Service Account mode, API users can act as both Provider and Tenant. Privileged Tenant behavior (for example, creating Instances by Machine ID) is determined by `siteCapabilities` on a Ready Tenant Account, not by tenant-level configuration. - name: Infrastructure Provider description: |- Infrastructure Provider is the anchor entity for an organization that owns and manages Site resources. - name: Tenant description: |- Tenant is the anchor entity for an organization that consumes Network and Compute resources on a Site. Deprecation history: - `capabilities.targetedInstanceCreation` was deprecated in favor of `tenantAccount.siteCapabilities` and will be removed on October 1st, 2026 0:00 UTC. The value returned on GET `/tenant/current` is computed from Ready Tenant Account configuration; embedded `TenantSummary.capabilities` in nested resources always reports `false`. - name: Tenant Account description: |- Tenant Account connects a Tenant with an Infrastructure Provider. It represents/contains any information pertaining to their relationship. Provider Admins configure TargetedInstanceCreation for a Tenant using the `siteCapabilities` attribute. An entry with empty or omitted `siteIds` configures the Tenant Account default; entries with `siteIds` configure Tenant Site overrides. Deprecation history: - `accountNumber`, `subscriptionId`, and `subscriptionTier` attributes were deprecated and will be removed on September 10th, 2026 0:00 UTC. Please update your usage accordingly. - name: Site description: |- Site is a datacenter that contains physical hardware and networking resources. All resources created by Provider or Tenant are directly or indirectly anchored to the Site object. Recent deprecations: - `rackLevelAdministration` capability attribute was deprecated in favor of `flow` and was removed on May 13th, 2026 0:00 UTC. Please use `flow` instead. - `isRackLevelAdministrationEnabled` query parameter was deprecated in favor of `isFlowEnabled` and was removed on May 13th, 2026 0:00 UTC. Please use `isFlowEnabled` instead. - name: BMC Credential description: |- BMC Credential endpoints allow creating and updating BMC credentials across all Machines of a Site - name: UEFI Credential description: |- UEFI Credential endpoints allow creating site-default host and DPU UEFI credentials for a Site - name: Measured Boot Trusted Machine description: |- Measured Boot Trusted Machine endpoints manage automatic measurement promotion approvals for Machines at a Site - name: Measured Boot Trusted Profile description: |- Measured Boot Trusted Profile endpoints manage automatic measurement promotion approvals for system profiles at a Site - name: Credential Rotation description: |- Credential Rotation endpoints stage a site-wide credential rotation and report per-Site or per-device convergence - name: Site Explorer description: |- Site Explorer discovers BMC endpoints on a Site and tracks their exploration state. - name: Allocation description: |- Allocations are the mechanism by which Provider can delegate Network and Compute resources to Tenant. Deprecation history: - `ResourceTypeID` attribute on Allocation Constraint was deprecated in favor of `resourceTypeId` and will be removed on July 9th, 2026 0:00 UTC. Please use `resourceTypeId` instead. - name: VPC description: |- VPC defines the networking isolation boundary for Tenant's Instances. - name: VPC Peering description: |- VPC Peering allows Instances in one VPC to communicate with Instances in another VPC on the same Site. - name: VPC Prefix description: |- VPC Prefix is a network prefix belonging to an IP Block allocated to a Tenant. Tenant can use VPC Prefixes to enable network connectivity between their Instances. Only Sites that support Native Networking (FNN) offer VPC Prefix management. - name: Subnet description: |- Subnet is a network prefix belonging to an IP Block allocated to a Tenant. Tenant can use Subnets to enable network connectivity between their Instances. Subnets are used on Sites that do not support Native Networking (FNN). - name: Expected Machine description: |- Expected Machine identifies a Machine that is expected to be discovered at a Site. Infrastructure Providers can pre-register Expected Machines using BMC credentials and serial numbers to help with Machine discovery and ingestion. - name: Expected Power Shelf description: |- Expected Power Shelf identifies a Power Shelf that is expected to be discovered at a Site. Infrastructure Providers can pre-register Expected Power Shelves using BMC credentials and serial numbers to help with Power Shelf discovery and ingestion. - name: Expected Rack description: |- Expected Rack identifies a Rack that is expected to be discovered at a Site. Infrastructure Providers can pre-register Expected Racks with an operator-supplied rack identifier and a Rack Profile reference to help with Rack discovery and ingestion. Chassis identity and physical location information are conveyed via well-known label keys (`chassis.manufacturer`, `chassis.serial-number`, `chassis.model`, `location.region`, `location.datacenter`, `location.room`, `location.position`). - name: Expected Switch description: |- Expected Switch identifies an NVLink Switch that is expected to be discovered at a Site. Infrastructure Providers can pre-register Expected Switches using BMC, NVOS credentials and serial numbers to help with NVLink Switch discovery and ingestion. - name: SKU description: |- SKU (Stock Keeping Unit) defines one or more hardware configurations or Machine Bill of Materials (BOM). SKUs group similar machines by their hardware characteristics. Most SKUs are managed by the system, but Provider Admins can create, update, and delete SKUs for a Site. - name: InfiniBand Partition x-displayName: InfiniBand Partition description: |- InfiniBand (IB) is a high-performance, low-latency networking standard designed for interconnecting servers and storage in HPC (High-Performance Computing) and AI systems, utilizing RDMA (Remote Direct Memory Access) to reduce CPU overhead. InfiniBand Partitions are used to group Machines into logical partitions for network isolation and load distribution. - name: NVLink Logical Partition x-displayName: NVLink Logical Partition description: |- NVLink Logical Partitions are used to group GPUs into logical partitions for shared memory and low-latency direct communication between GPUs. Deprecation history: - `nvLinklogicalPartitionId` attribute on NVLink Interface was deprecated in favor of `nvLinkLogicalPartitionId` and will be removed on July 9th, 2026 0:00 UTC. Please use `nvLinkLogicalPartitionId` instead. - name: Operating System description: |- Operating Systems in NICo are typically iPXE scripts that are used to boot Machines. Deprecation history: - `isCloudInit` on create and update requests is deprecated and ignored; the response field is derived from whether `userData` is non-empty. - name: iPXE Template description: |- iPXE Templates are read-only definitions propagated from nico-core into the REST API. Each template has a stable core UUID and a globally unique name; per-site availability is tracked in IpxeTemplateSiteAssociation records rather than on the template row itself. List and retrieve operations return templates reported at sites the caller is authorized for (optionally filtered by `siteId`). Templated iPXE Operating Systems reference a template by `ipxeTemplateId`. - name: Instance Type description: |- Instance Types allow grouping Machines into a pool defined by their capabilities. Providers can then allocate a portion of the Instance Type pool to a Tenant. - name: Instance description: |- Instance is a Machine provisioned with an Operating System by a Tenant and attached to one or more VPC Prefixes or Subnets. - name: Machine description: |- Machine is a physical server that contains CPUs, GPUs, memory, storage, and networking hardware. Machines are the physical building blocks of a Site. - name: BMC Reset x-displayName: BMC Reset description: |- BMC Reset allows resetting a Machine's BMC - name: DPU Reprovision x-DisplayName: DPU Reprovision description: |- DPU Reprovision allows re-provisioning Machine's DPUs - name: Health Report description: |- Machine Health Report contains information about the health of a Machine including user enforced overrides - name: Machine Capability description: |- Machine Capability defines the hardware capabilities of a Machine. Machine Capabilities can be used to group Machines into Instance Types. - name: Rack description: |- Rack is a physical enclosure that contains a number of Machines. Racks are the physical building blocks of a Site. - name: Tray description: |- Tray represents a component within a Rack. - name: Task description: |- Task represents an asynchronous, site-scoped operation (for example firmware update, power state change, or rack bring-up). Tasks are created when operations run against Racks, Trays, or other components. Endpoints in this tag retrieve or cancel a Task by ID; list Tasks for a Rack or Tray under the Rack and Tray tags. - name: Rule description: |- Operation Rule defines, per Site, how a particular operation (for example `PowerControl` / `power_on` or `FirmwareControl` / `upgrade`) should be executed against a set of components: ordered execution stages, per-component-type concurrency, pre / main / post actions, timeouts, and retry policy. Rules are reusable templates owned by Flow; this tag exposes CRUD (`POST`, `GET`, `PATCH`, `DELETE`) over them. - name: Task Run description: |- A Task Run is a phased, policy-gated execution of one operation (currently firmware) across many Racks. A Task Run narrows a candidate set of Racks with an optional selector, divides the selected Racks into phases, and drives one execution target per Rack; each target in turn drives at most one Task. Safety gates pause the Task Run when failures exceed a threshold, and phase gates hold each phase until an operator advances it. This tag exposes creation, retrieval, target listing, and the pause / resume / advance / cancel lifecycle actions; drill into per-Rack execution detail via the Task tag using each target's `taskId`. - name: Network Security Group description: |- Network Security Group is a security policy that controls the traffic flowing between Instances. Deprecation history: - `object_id` attribute on Network Security Group propagation details was deprecated in favor of `objectId` and will be removed on July 9th, 2026 0:00 UTC. Please use `objectId` instead. - name: IP Block description: |- IP Block is a contiguous block of IP addresses defined by a prefix and prefix length. It can be used by the Provider to describe the overlay network of a particular Site. Providers can also use Allocations to delegate portions of these IP Blocks to Tenants. - name: DPU Extension Service x-displayName: DPU Extension Service description: |- DPU Extension Service allows users to run custom services in the DPUs of their Instances. Currently K8s pods are the only supported service type. - name: SSH Key Group description: |- SSH Key Groups allow grouping several SSH Keys together so they can be synced to Sites and used to access the Serial Console of Instances. - name: SSH Key description: |- SSH Key is a public key that can be used to access the Serial Console of an Instance. - name: User description: |- User is a logical entity that identifies individuals operating on behalf of an organization. - name: Audit description: |- Audit is a record of actions taken by users on the API. - name: Metadata description: |- Metadata describes various system-level attributes of the API service. - name: Host Firmware Config description: |- Host firmware configuration defines known firmware versions, artifact locations, update ordering, and per-component defaults for a given hardware vendor and model on a Site. Provider Admins use PUT to create or merge host firmware config entries in Core via `UpsertHostFirmwareConfig`. Configurations are keyed by `(vendor, model)`; repeated PUTs merge firmware versions for components already present and add new component types when supplied together with an updated `ordering`. Returns `201 Created` on first create and `200 OK` on subsequent updates. Provider Admins use DELETE to remove a host firmware config entry from Core via `DeleteHostFirmwareConfig`, keyed by `(vendor, model)`. Returns `204 No Content` on success. User must have authorization role with `PROVIDER_ADMIN` suffix in the URL `{org}`, and the Site must belong to the org's Infrastructure Provider. - name: Tenant Identity description: |- Tenant identity (JWT-SVID issuance) and RFC 8693 token delegation. Tenant Admins use these endpoints to enable JWT-SVID issuance for an org on a specific site, rotate the signing key, configure a token exchange callback, and serve the public JWKS / OIDC discovery documents that verifiers (OpenBao, tenant APIs, etc.) consume. The six management endpoints (PUT / GET / DELETE on `tenant-identity/config` and `tenant-identity/token-delegation`) require an authorization role with `TENANT_ADMIN` suffix in the URL `{org}`. The three `.well-known/*` endpoints are public; external verifiers can fetch public keys without credentials. PUT is a full-replace upsert: every call must include all required fields, and omitted optional fields are cleared. To pause issuance without destroying signing keys, PUT with `enabled: false`; to destroy the signing keypair, use DELETE. Signing keys survive `enabled: false` and survive non-rotation upserts, so JWKS consumers and in-flight JWTs continue to verify across pauses and attribute changes. JWKS verifiers should treat every key in the returned set as valid and match candidates by `kid` — during a key-rotation overlap window two keys are present until the previous key expires. The OIDC discovery endpoint's `id_token_signing_alg_values_supported` is intentionally empty because NICo issues bearer access JWTs, not OIDC `id_token`s. The three public endpoints return `404 Not Found` when identity material cannot be served for this org/site (unknown site, org is not a tenant, no tenant allocation on the site, or no identity configuration); the two JWKS routes additionally return `502 Bad Gateway` when the Core gRPC API responds with a body that is not a parseable JWK Set. - name: Deprecations description: |- NICo REST API maintains backward compatibility with the previous versions. Any breaking changes are announced using deprecation notices. Active Deprecations: Instance: - `infrastructureProviderId` query parameter on the list Instances endpoint was deprecated and will be removed on October 10th, 2026 0:00 UTC. Instances will no longer be filtered by Infrastructure Provider; results are scoped to the org's Tenant. Use the `siteId` parameter to scope results to a specific Infrastructure Provider's Sites. Tenant: - `capabilities.targetedInstanceCreation` attribute was deprecated in favor of `tenantAccount.siteCapabilities` and will be removed on October 1st, 2026 0:00 UTC. Please use `tenantAccount.siteCapabilities` instead. Recent Deprecations: Site: - `rackLevelAdministration` capability attribute was deprecated in favor of `flow` and was removed on May 13th, 2026 0:00 UTC. Please use `flow` instead. - `isRackLevelAdministrationEnabled` query parameter was deprecated in favor of `isFlowEnabled` and was removed on May 13th, 2026 0:00 UTC. Please use `isFlowEnabled` instead. paths: '/v2/org/{org}/nico/service-account/current': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve Service Account status for current org responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ServiceAccount' '403': $ref: '#/components/responses/ForbiddenError' operationId: get-current-service-account description: |- Retrieve Service Account status for current org API service must be configured for Service Account access at the time of deployment. It cannot be enabled or disabled via API. parameters: [] tags: - Service Account '/v2/org/{org}/nico/infrastructure-provider/current': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve Infrastructure Provider for current Org responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/InfrastructureProvider' examples: example-1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 org: rf43bbtnb9c5 orgDisplayName: Dell Corporation created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '403': $ref: '#/components/responses/ForbiddenError' operationId: get-current-infrastructure-provider description: |- Retrieve Infrastructure Provider entity for current Org. User must have authorization role with `PROVIDER_ADMIN` suffix. parameters: [] tags: - Infrastructure Provider '/v2/org/{org}/nico/infrastructure-provider/current/stats': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve Stats for current Infrastructure Provider responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/InfrastructureProviderStats' '403': $ref: '#/components/responses/ForbiddenError' operationId: get-current-infrastructure-provider-stats description: |- Retrieve stats for current Infrastructure Provider. User must have authorization role with `PROVIDER_ADMIN` suffix. parameters: [] tags: - Infrastructure Provider '/v2/org/{org}/nico/tenant/current': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve Tenant for current Org tags: - Tenant responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/Tenant' examples: example-1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 org: qygdmg8oqik8 orgDisplayName: Echo Corporation created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' capabilities: targetedInstanceCreation: true deprecations: - attribute: capabilities.targetedInstanceCreation replacedBy: tenantAccount.siteCapabilities takeActionBy: '2026-10-01T00:00:00Z' notice: '''capabilities.targetedInstanceCreation'' is being deprecated in favor of ''tenantAccount.siteCapabilities''. Please take action prior to the specified date' '403': $ref: '#/components/responses/ForbiddenError' operationId: get-current-tenant description: |- Retrieve Tenant entity for current Org. `capabilities.targetedInstanceCreation` is a deprecated read-only aggregate: it is `true` when all Ready Tenant Account for this Tenant has TargetedInstanceCreation enabled in its configuration to preserve backwards compatibility. Configure the capability per Provider/per Site via PATCH `/tenant/account/{accountId}` using `siteCapabilities`. Disallowing at Provider or Site level would result in no value returned here. User must have authorization role with `TENANT_ADMIN` suffix. parameters: [] '/v2/org/{org}/nico/tenant/current/stats': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve Stats for current Tenant tags: - Tenant responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/TenantStats' '403': $ref: '#/components/responses/ForbiddenError' operationId: get-current-tenant-stats description: |- Retrieve stats for current Tenant. User must have authorization role with `TENANT_ADMIN` suffix. parameters: [] '/v2/org/{org}/nico/tenant/account': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve all Tenant Accounts tags: - Tenant Account responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/TenantAccount' examples: example-1: value: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf infrastructureProviderOrg: xskkpgqpeakn tenantId: f97df110-f4de-492e-8849-4a6af68026b0 tenantOrg: rf43bbtnb9c5 tenantContact: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 email: janed@nvidia.com firstName: Jane lastName: Doe created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' allocationCount: 0 status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy": "CREATED_DESC"}' description: Pagination result in JSON format '403': $ref: '#/components/responses/ForbiddenError' operationId: get-all-tenant-account description: |- Retrieve all Tenant Accounts for the org. The Infrastructure Provider and Tenant are inferred from the org's membership. User must have authorization role with `PROVIDER_ADMIN`, `PROVIDER_VIEWER`, or `TENANT_ADMIN` suffix. parameters: - schema: type: string format: uuid in: query name: infrastructureProviderId deprecated: true description: "Filter Tenant Accounts by Infrastructure Provider ID. Deprecated: Infrastructure Provider is now inferred from the org's membership." - schema: type: string format: uuid in: query name: tenantId description: Filter Tenant Accounts by Tenant ID - schema: type: string in: query name: query description: 'Search string to filter Tenant Accounts by account number, tenant org, or tenant org display name' - schema: type: string enum: - InfrastructureProvider - Tenant in: query name: includeRelation description: Related entity to expand - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - STATUS_ASC - STATUS_DESC - CREATED_ASC - CREATED_DESC - UPDATED_ASC - UPDATED_DESC - ACCOUNT_NUMBER_ASC - ACCOUNT_NUMBER_DESC - TENANT_ORG_NAME_ASC - TENANT_ORG_NAME_DESC - TENANT_ORG_DISPLAY_NAME_ASC - TENANT_ORG_DISPLAY_NAME_DESC - TENANT_CONTACT_EMAIL_ASC - TENANT_CONTACT_EMAIL_DESC - TENANT_CONTACT_FULL_NAME_ASC - TENANT_CONTACT_FULL_NAME_DESC in: query name: orderBy description: Ordering for pagination query post: summary: Create Tenant Account operationId: create-tenant-account responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/TenantAccount' examples: example-1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf infrastructureProviderOrg: xskkpgqpeakn tenantId: null tenantOrg: rf43bbtnb9c5 tenantContact: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 email: janed@nvidia.com firstName: Jane lastName: Doe created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' allocationCount: 0 status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' description: |- Create a Tenant Account. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. The Infrastructure Provider is inferred from the caller's org; the deprecated `infrastructureProviderId` request body field is optional and, when provided, must match the org's Infrastructure Provider. Infrastructure Provider can create a Tenant Account by specifying the Tenant's UUID or Tenant's org name. This sets the Tenant Account status to "Invited". The Tenant can then view the account information and accept the account by updating the Tenant Account. requestBody: content: application/json: schema: $ref: '#/components/schemas/TenantAccountCreateRequest' examples: example-1: value: infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf tenantOrg: rf43bbtnb9c5 tags: - Tenant Account '/v2/org/{org}/nico/tenant/account/{accountId}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: accountId in: path required: true description: ID of the Tenant Account get: summary: Retrieve Tenant Account tags: - Tenant Account responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/TenantAccount' examples: example-1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf infrastructureProviderOrg: xskkpgqpeakn tenantId: f97df110-f4de-492e-8849-4a6af68026b0 tenantOrg: rf43bbtnb9c5 tenantContact: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 email: janed@nvidia.com firstName: Jane lastName: Doe created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' allocationCount: 2 status: Ready statusHistory: - status: Ready message: 'Account ready, Tenant accepted invite' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - status: Invited message: 'Request received, pending Tenant acceptance' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' siteCapabilities: - targetedInstanceCreation: true created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '403': $ref: '#/components/responses/ForbiddenError' operationId: get-tenant-account description: |- Retrieve a Tenant Account by ID. The Infrastructure Provider and Tenant are inferred from the org's membership. User must have authorization role with `PROVIDER_ADMIN`, `PROVIDER_VIEWER`, or `TENANT_ADMIN` suffix. parameters: - schema: type: string format: uuid in: query name: infrastructureProviderId deprecated: true description: "Filter Tenant Accounts by Infrastructure Provider ID. Deprecated: Infrastructure Provider is now inferred from the org's membership." - schema: type: string format: uuid in: query name: tenantId deprecated: true description: "Filter Tenant Accounts by Tenant ID. Deprecated: Tenant is now inferred from the org's membership." - schema: type: string enum: - InfrastructureProvider - Tenant in: query name: includeRelation description: Related entity to expand patch: summary: Update Tenant Account operationId: update-tenant-account responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/TenantAccount' examples: example-1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf infrastructureProviderOrg: xskkpgqpeakn tenantId: f97df110-f4de-492e-8849-4a6af68026b0 tenantOrg: rf43bbtnb9c5 tenantContact: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 email: janed@nvidia.com firstName: Jane lastName: Doe created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' allocationCount: 0 status: Ready statusHistory: - status: Ready message: 'Account ready, Tenant accepted invite' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - status: Invited message: 'Request received, pending Tenant acceptance' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' siteCapabilities: - targetedInstanceCreation: true created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Tenant Account description: |- Update a Tenant Account. Tenant Admins may accept an invitation sent by an Infrastructure Provider by supplying `tenantContactId`. Provider Admins may replace `siteCapabilities` to configure the Tenant Account default and overrides for specific Sites. When `siteCapabilities` is sent, it must be non-empty, include exactly one entry with empty or omitted `siteIds`, and must not repeat any `siteId` across entries. Requests containing both `tenantContactId` and `siteCapabilities` are rejected with 400. Org must have a Tenant entity whose ID matches the `tenantId` of the Tenant Account object when accepting an invite. User must have authorization role with `TENANT_ADMIN` suffix to accept; `PROVIDER_ADMIN` suffix to update `siteCapabilities`. Tenant Admins can only update a Tenant Account that has `Invited` status. requestBody: content: application/json: schema: $ref: '#/components/schemas/TenantAccountUpdateRequest' examples: accept-invite: value: {} update-site-capabilities: value: siteCapabilities: - siteIds: [] targetedInstanceCreation: true description: Tenant invite acceptance or Provider Admin site capability update. delete: summary: Delete Tenant Account operationId: delete-tenant-account responses: '202': description: Deletion request was accepted content: application/json: schema: $ref: '#/components/schemas/MessageResponse' examples: example-1: value: message: Deletion request was accepted '403': $ref: '#/components/responses/ForbiddenError' description: |- Delete a Tenant Account by ID. Org must have an Infrastructure Provider entity, and the specified Tenant Account must have been created by that Provider. Requesting user must have `PROVIDER_ADMIN` role. Tenant cannot delete a Tenant Account. tags: - Tenant Account '/v2/org/{org}/nico/site': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve all Sites tags: - Site responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/Site' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy": "CREATED_DESC"}' description: Pagination result in JSON format '403': $ref: '#/components/responses/ForbiddenError' operationId: get-all-site description: |- Retrieve all Sites for org. User must have authorization role with `PROVIDER_ADMIN` or `TENANT_ADMIN` suffix. `infrastructureProviderId` or `tenantId` query parameter may be required for older API versions. parameters: - schema: type: string format: uuid in: query name: infrastructureProviderId deprecated: true description: "Filter Sites by Infrastructure Provider ID. Deprecated: Infrastructure Provider is now inferred from the org's membership." - schema: type: string format: uuid in: query name: tenantId deprecated: true description: "Filter Sites by Tenant ID. Deprecated: Tenant is now inferred from the org's membership." - schema: type: string in: query name: status description: Filter Sites by Status. Can be specified multiple times to filter on more than one status - schema: type: boolean in: query name: isNativeNetworkingEnabled description: Filter Sites by native networking enabled flag. Requires Provider Admin role. - schema: type: boolean in: query name: isNetworkSecurityGroupEnabled description: Filter Sites by network security group enabled flag. Requires Provider Admin role. - schema: type: boolean in: query name: isNVLinkPartitionEnabled description: Filter Sites by NVLink partitioning enabled flag. Requires Provider Admin role. - schema: type: boolean in: query name: isFlowEnabled description: Filter Sites by NICo Flow enabled flag. Requires Provider Admin role. - schema: type: boolean in: query name: includeMachineStats description: Include a breakdown of Machine counts by lifecycle status and health. Requires Provider Admin role. - schema: type: boolean in: query name: includeGpuStats description: Include a per-Site breakdown of GPU counts grouped by GPU type. Requires Provider Admin role. - schema: type: string in: query name: query description: 'Search for matches across all Sites. Input will be matched against name, description, location, contact, and status fields' - schema: type: string enum: - InfrastructureProvider in: query name: includeRelation description: Related entity to expand - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - NAME_ASC - NAME_DESC - STATUS_ASC - STATUS_DESC - CREATED_ASC - CREATED_DESC - UPDATED_ASC - UPDATED_DESC - DESCRIPTION_ASC - DESCRIPTION_DESC - LOCATION_ASC - LOCATION_DESC - CONTACT_ASC - CONTACT_DESC in: query name: orderBy description: Ordering for pagination query post: summary: Create Site operationId: create-site responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/Site' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' description: |- Create a Site for the org. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. Tenants cannot create Sites. requestBody: content: application/json: schema: $ref: '#/components/schemas/SiteCreateRequest' examples: example-1: value: name: San Jose Central 4 description: Datacenter serving San Jose central region location: city: San Jose state: CA country: USA contact: email: johndoe@nvidia.com tags: - Site '/v2/org/{org}/nico/site/{siteId}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: siteId in: path required: true description: ID of the Site get: summary: Retrieve Site tags: - Site responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/Site' '403': $ref: '#/components/responses/ForbiddenError' operationId: get-site description: |- Retrieve a specific Site by ID. User must have authorization role with `PROVIDER_ADMIN` or `TENANT_ADMIN` suffix. Access is granted if: - The Site is owned by the org's Infrastructure Provider - The org's Tenant has an Allocation for Site - The org's Tenant is privileged and has Account with Site's Provider parameters: [] patch: summary: Update Site operationId: update-site responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/Site' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Site description: |- Update a specific Site User must have authorization role with `PROVIDER_ADMIN` suffix. Infrastructure Provider updating the Site must be the owner of the Site. At present, there are no other Site-specific configurations modifiable by Tenant. requestBody: content: application/json: schema: $ref: '#/components/schemas/SiteUpdateRequest' examples: example-1: value: name: San Jose Central No.4 description: Datacenter 4 serving central San Jose renewRegistrationToken: true serialConsoleHostname: sol.nico.acme.com location: city: San Jose state: CA country: USA contact: email: johndoe@nvidia.com example-2: value: isSerialConsoleSSHKeysEnabled: true contact: email: janedoe@nvidia.com delete: summary: Delete Site operationId: delete-site responses: '202': description: Deletion request was accepted content: application/json: schema: $ref: '#/components/schemas/MessageResponse' examples: example-1: value: message: Deletion request was accepted '403': $ref: '#/components/responses/ForbiddenError' tags: - Site description: |- Delete a specific Site Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. Site can only be deleted if all Allocations have been deleted. parameters: - schema: type: boolean in: query name: purgeMachines description: Scrub all Machine data associated with this Site to re-pair '/v2/org/{org}/nico/site/{siteId}/status-history': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: siteId in: path required: true description: ID of the Site get: summary: Retrieve Site status history tags: - Site responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/StatusDetail' examples: Example 1: value: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' headers: X-Pagination: schema: type: string description: Pagination result in JSON format '403': $ref: '#/components/responses/ForbiddenError' operationId: get-site-status-history description: |- Retrieve a specific Site status history User must have authorization role with `PROVIDER_ADMIN` or `TENANT_ADMIN` suffix. Access is granted if: - The Site is owned by the org's Infrastructure Provider - The org's Tenant has an Allocation for Site - The org's Tenant is privileged and has Account with Site's Provider parameters: - schema: type: integer in: query name: pageNumber description: Page number for pagination query - schema: type: integer in: query name: pageSize description: Page size for pagination query - schema: type: string in: query name: orderBy description: Ordering for pagination query '/v2/org/{org}/nico/credential/bmc': parameters: - schema: type: string name: org in: path required: true description: Name of the Org put: summary: Create Or Update BMC Credential tags: - BMC Credential requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/BMCCredentialRequest' responses: '200': description: BMC credential was created or updated content: application/json: schema: $ref: '#/components/schemas/BMCCredential' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' operationId: create-or-update-bmc-credential description: |- Create or update a site-wide or per-BMC root credential. Equivalent to `nico-admin-cli credential add-bmc`. User must have authorization role with `PROVIDER_ADMIN` suffix. '/v2/org/{org}/nico/credential/uefi': parameters: - schema: type: string name: org in: path required: true description: Name of the Org post: summary: Create UEFI Credential tags: - UEFI Credential requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UEFICredentialRequest' responses: '201': description: UEFI credential was created content: application/json: schema: $ref: '#/components/schemas/UEFICredential' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '409': description: The selected site-default UEFI credential already exists content: application/json: schema: $ref: '#/components/schemas/NICoAPIError' operationId: create-uefi-credential description: |- Create a site-default host or DPU UEFI credential. The request fails if the selected site-default credential already exists. User must have authorization role with `PROVIDER_ADMIN` suffix. '/v2/org/{org}/nico/measured-boot/trusted-machine': parameters: - schema: type: string name: org in: path required: true description: Name of the Org post: summary: Create Measured Boot Trusted Machine Approval tags: - Measured Boot Trusted Machine operationId: create-measured-boot-trusted-machine description: |- Approve a Machine, or all Machines using `*`, for automatic promotion of its next measured-boot report. Org must have an Infrastructure Provider entity that owns the Site. User must have authorization role with `PROVIDER_ADMIN` suffix. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/MeasuredBootTrustedMachineCreateRequest' responses: '201': description: Measured Boot trusted Machine approval was created content: application/json: schema: $ref: '#/components/schemas/MeasuredBootTrustedMachine' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '500': $ref: '#/components/responses/GenericHttpError' get: summary: Retrieve All Measured Boot Trusted Machine Approvals tags: - Measured Boot Trusted Machine operationId: get-all-measured-boot-trusted-machine description: |- Retrieve all measured-boot trusted Machine approvals for a Site. Org must have an Infrastructure Provider entity that owns the Site. User must have authorization role with `PROVIDER_ADMIN` suffix. parameters: - schema: type: string format: uuid name: siteId in: query required: true description: ID of the Site responses: '200': description: Measured Boot trusted Machine approvals content: application/json: schema: type: array items: $ref: '#/components/schemas/MeasuredBootTrustedMachine' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '500': $ref: '#/components/responses/GenericHttpError' '/v2/org/{org}/nico/measured-boot/trusted-machine/{id}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string name: id in: path required: true description: Approval ID or Machine ID, as selected by the selector query parameter delete: summary: Delete Measured Boot Trusted Machine Approval tags: - Measured Boot Trusted Machine operationId: delete-measured-boot-trusted-machine description: |- Delete a measured-boot trusted Machine approval by approval ID or Machine ID. Org must have an Infrastructure Provider entity that owns the Site. User must have authorization role with `PROVIDER_ADMIN` suffix. parameters: - schema: type: string format: uuid name: siteId in: query required: true description: ID of the Site - schema: type: string enum: - ApprovalId - MachineId name: selector in: query required: true description: Whether id identifies the approval or the Machine responses: '200': description: Deleted measured-boot trusted Machine approval content: application/json: schema: $ref: '#/components/schemas/MeasuredBootTrustedMachine' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '500': $ref: '#/components/responses/GenericHttpError' '/v2/org/{org}/nico/measured-boot/trusted-profile': parameters: - schema: type: string name: org in: path required: true description: Name of the Org post: summary: Create Measured Boot Trusted Profile Approval tags: - Measured Boot Trusted Profile operationId: create-measured-boot-trusted-profile description: |- Approve a measured-boot system profile for automatic promotion of reports from matching Machines. Org must have an Infrastructure Provider entity that owns the Site. User must have authorization role with `PROVIDER_ADMIN` suffix. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/MeasuredBootTrustedProfileCreateRequest' responses: '201': description: Measured Boot trusted Profile approval was created content: application/json: schema: $ref: '#/components/schemas/MeasuredBootTrustedProfile' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '500': $ref: '#/components/responses/GenericHttpError' get: summary: Retrieve All Measured Boot Trusted Profile Approvals tags: - Measured Boot Trusted Profile operationId: get-all-measured-boot-trusted-profile description: |- Retrieve all measured-boot trusted Profile approvals for a Site. Org must have an Infrastructure Provider entity that owns the Site. User must have authorization role with `PROVIDER_ADMIN` suffix. parameters: - schema: type: string format: uuid name: siteId in: query required: true description: ID of the Site responses: '200': description: Measured Boot trusted Profile approvals content: application/json: schema: type: array items: $ref: '#/components/schemas/MeasuredBootTrustedProfile' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '500': $ref: '#/components/responses/GenericHttpError' '/v2/org/{org}/nico/measured-boot/trusted-profile/{id}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: id in: path required: true description: Approval ID or Profile ID, as selected by the selector query parameter delete: summary: Delete Measured Boot Trusted Profile Approval tags: - Measured Boot Trusted Profile operationId: delete-measured-boot-trusted-profile description: |- Delete a measured-boot trusted Profile approval by approval ID or Profile ID. Org must have an Infrastructure Provider entity that owns the Site. User must have authorization role with `PROVIDER_ADMIN` suffix. parameters: - schema: type: string format: uuid name: siteId in: query required: true description: ID of the Site - schema: type: string enum: - ApprovalId - ProfileId name: selector in: query required: true description: Whether id identifies the approval or the system profile responses: '200': description: Deleted measured-boot trusted Profile approval content: application/json: schema: $ref: '#/components/schemas/MeasuredBootTrustedProfile' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '500': $ref: '#/components/responses/GenericHttpError' '/v2/org/{org}/nico/credential/rotation': parameters: - schema: type: string name: org in: path required: true description: Name of the Org post: summary: Rotate Credential tags: - Credential Rotation requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CredentialRotationRequest' responses: '200': description: Credential rotation was staged content: application/json: schema: $ref: '#/components/schemas/CredentialRotationResult' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' operationId: rotate-credential description: |- Stage a site-wide credential rotation: publish a new rotate-to secret and bump the site-wide target version. Devices converge to the new version asynchronously; poll the status endpoint to observe convergence. Equivalent to `nico-admin-cli credential rotate`. User must have authorization role with `PROVIDER_ADMIN` suffix. get: summary: Get Credential Rotation Status tags: - Credential Rotation parameters: - schema: type: string format: uuid name: siteId in: query required: true description: ID of the Site to query. - schema: type: string enum: - BMC - HostUEFI - DPUUEFI - NVOS - LockdownIKM name: credentialType in: query required: true description: Credential family to report. - schema: type: string name: deviceMac in: query required: false description: Report only this device's convergence, matched by MAC. responses: '200': description: Credential rotation status content: application/json: schema: $ref: '#/components/schemas/CredentialRotationStatus' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': description: No rotation record exists for the requested device content: application/json: schema: $ref: '#/components/schemas/NICoAPIError' operationId: get-credential-rotation-status description: |- Report convergence of an in-flight or completed site-wide credential rotation. When `deviceMac` is set, the counts describe just that device and a per-device detail block is returned. Equivalent to `nico-admin-cli credential rotation-status`. User must have authorization role with `PROVIDER_ADMIN` suffix. '/v2/org/{org}/nico/site-explorer/endpoint/action': parameters: - schema: type: string name: org in: path required: true description: Name of the Org post: summary: Trigger Site Explorer Endpoint Action tags: - Site Explorer requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SiteExplorerEndpointActionRequest' responses: '200': description: The action completed for every selected endpoint. content: application/json: schema: $ref: '#/components/schemas/SiteExplorerEndpointAction' '400': $ref: '#/components/responses/GenericHttpError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/GenericHttpError' '412': $ref: '#/components/responses/GenericHttpError' '500': $ref: '#/components/responses/GenericHttpError' '504': $ref: '#/components/responses/GenericHttpError' operationId: create-site-explorer-endpoint-action description: |- Clear the last exploration error or queue re-exploration for all explored endpoints at a Site or an explicit BMC IP address list. The operation calls Core once per endpoint. If a call fails, processing stops and endpoints earlier in the list may already have completed. User must have authorization role with `PROVIDER_ADMIN` suffix. '/v2/org/{org}/nico/allocation': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve all Allocations tags: - Allocation responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/Allocation' examples: example-1: value: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: Echo Studios description: Echo Studios resource allocation in SJC4 infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 tenantId: f97df110-f4de-492e-8849-4a6af68026b0 status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' allocationConstraints: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 allocationId: 9ec871ce-3363-4de2-8f79-062881067628 resourceType: InstanceType resourceTypeId: a59ee688-b5e5-4606-9891-f4a605edacd3 constraintType: Reserved constraintValue: 10 derivedResourceId: null instanceType: name: x3.large infrastructureProviderId: 63c29416-8833-4eaf-9e1c-7c0173cc3150 siteId: c9f4f276-6f7a-4209-953c-2b9870ce7cc1 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy": "CREATED_DESC"}' description: Pagination result in JSON format '403': $ref: '#/components/responses/ForbiddenError' operationId: get-all-allocation description: |- Retrieve all Allocations for the org. The Infrastructure Provider and Tenant are inferred from the org's membership. User must have authorization role with `PROVIDER_ADMIN` or `TENANT_ADMIN` suffix. Results are returned from both Provider and Tenant perspectives when the org has both roles. parameters: - schema: type: string format: uuid in: query name: infrastructureProviderId deprecated: true description: Filter Allocations by Infrastructure Provider ID. - schema: type: string format: uuid in: query name: tenantId description: Filter Allocations by Tenant ID. - schema: type: string format: uuid in: query name: siteId description: Filter Allocations by Site ID. Can be specified multiple times to filter on more than one Site ID. - schema: type: string in: query name: id description: Filter Allocations by ID. Can be specified multiple times to filter on more than one ID. - schema: type: string enum: - InstanceType - IPBlock in: query name: resourceType description: Filter Allocations by Constraint Resource Type. Can be specified multiple times to filter on more than one Constraint Resource Type. - schema: type: string in: query name: status description: Filter Allocations by Status. Can be specified multiple times to filter on more than one Status. - schema: type: string in: query name: resourceTypeId description: Filter Allocations by Constraint Resource Type ID. Can be specified multiple times to filter on more than one Constraint Resource Type ID. - schema: type: string enum: - Reserved - OnDemand - Preemptible in: query name: constraintType description: Filter Allocations by Constraint Type. Can be specified multiple times to filter on more than one Constraint Type. - schema: type: integer in: query name: constraintValue description: Filter Allocations by Constraint Value. Can be specified multiple times to filter on more than one Constraint Value. - schema: type: string in: query name: query description: 'Search for matches across all Allocations. Input will be matched against name, description, and status fields' - schema: type: string enum: - InfrastructureProvider - Tenant - Site in: query name: includeRelation description: Related entity to expand - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - NAME_ASC - NAME_DESC - STATUS_ASC - STATUS_DESC - CREATED_ASC - CREATED_DESC - UPDATED_ASC - UPDATED_DESC - SITE_NAME_ASC - SITE_NAME_DESC - TENANT_ORG_DISPLAY_NAME_ASC - TENANT_ORG_DISPLAY_NAME_DESC - INSTANCE_TYPE_NAME_ASC - INSTANCE_TYPE_NAME_DESC - IP_BLOCK_NAME_ASC - IP_BLOCK_NAME_DESC - CONSTRAINT_VALUE_ASC - CONSTRAINT_VALUE_DESC in: query name: orderBy description: Ordering for pagination query post: summary: Create Allocation operationId: create-allocation responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/Allocation' examples: example-1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: Echo Studios description: Echo Studios resource allocation in SJC4 infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 tenantId: f97df110-f4de-492e-8849-4a6af68026b0 status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' allocationConstraints: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 allocationId: 9ec871ce-3363-4de2-8f79-062881067628 resourceType: InstanceType resourceTypeId: bd5a0240-eb62-4bff-91f7-335e6bb86459 constraintType: Reserved constraintValue: 10 derivedResourceId: null created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' description: |- Create an Allocation for the org. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. To successfully create a compute Allocation, there must be enough unallocated Machines associated with the Instance Type to satisfy the constraint value. For network Allocation, the source site-level IP Block must have an available prefix with length equal to the constraint value. requestBody: content: application/json: schema: $ref: '#/components/schemas/AllocationCreateRequest' examples: example-1: value: name: Echo Studios description: Echo Studios resource allocation in SJC4 tenantId: f97df110-f4de-492e-8849-4a6af68026b0 siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 allocationConstraints: - resourceType: InstanceType resourceTypeId: bd5a0240-eb62-4bff-91f7-335e6bb86459 constraintType: Reserved constraintValue: 10 tags: - Allocation '/v2/org/{org}/nico/allocation/{allocationId}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: allocationId in: path description: ID of the Allocation required: true get: summary: Retrieve Allocation tags: - Allocation responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/Allocation' examples: example-1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: Echo Studios description: Echo Studios resource allocation in SJC4 infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 tenantId: f97df110-f4de-492e-8849-4a6af68026b0 status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' allocationConstraints: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 allocationId: 9ec871ce-3363-4de2-8f79-062881067628 resourceType: InstanceType resourceTypeId: a59ee688-b5e5-4606-9891-f4a605edacd3 constraintType: Reserved constraintValue: 10 derivedResourceId: null instanceType: name: x3.large infrastructureProviderId: 63c29416-8833-4eaf-9e1c-7c0173cc3150 siteId: c9f4f276-6f7a-4209-953c-2b9870ce7cc1 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '403': $ref: '#/components/responses/ForbiddenError' operationId: get-allocation description: |- Retrieve Allocation by ID The Infrastructure Provider and Tenant are inferred from the org's membership. Allocation must belong to the Provider or Tenant associated with the org. User must have authorization role with `PROVIDER_ADMIN` or `TENANT_ADMIN` suffix. parameters: - schema: type: string format: uuid in: query name: infrastructureProviderId deprecated: true description: Filter Allocations by Infrastructure Provider ID. - schema: type: string format: uuid in: query name: tenantId deprecated: true description: Filter Allocations by Tenant ID. - schema: type: string enum: - InfrastructureProvider - Tenant - Site in: query name: includeRelation description: Related entity to expand delete: summary: Delete Allocation operationId: delete-allocation responses: '202': description: Deletion request was accepted content: application/json: schema: $ref: '#/components/schemas/MessageResponse' examples: example-1: value: message: Deletion request was accepted '403': $ref: '#/components/responses/ForbiddenError' description: |- Delete an Allocation by ID. Org must have an Infrastructure Provider entity, and the specified Allocation must have been created by that Provider. Requesting user must have `PROVIDER_ADMIN` role. Tenant management of Allocation is not supported in MVP. tags: - Allocation patch: summary: Update Allocation operationId: update-allocation responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/Allocation' examples: example-1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: Echo Studios Compute description: Echo Studios compute resource allocation in SJC4 infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 tenantId: f97df110-f4de-492e-8849-4a6af68026b0 status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' allocationConstraints: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 allocationId: 9ec871ce-3363-4de2-8f79-062881067628 resourceType: InstanceType resourceTypeId: a59ee688-b5e5-4606-9891-f4a605edacd3 constraintType: Reserved constraintValue: 10 derivedResourceId: null created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' description: |- Update an existing Allocation Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. Provider must own the Allocation. Tenant management of Allocation is not supported in MVP. tags: - Allocation requestBody: content: application/json: schema: $ref: '#/components/schemas/AllocationUpdateRequest' examples: example-1: value: name: Echo Studios Compute description: Echo Studios compute resource allocation in SJC4 '/v2/org/{org}/nico/allocation/{allocationId}/constraint/{allocationConstraintId}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string name: allocationId in: path required: true description: ID of the Allocation - schema: type: string format: uuid name: allocationConstraintId in: path required: true description: ID of the Allocation Constraint patch: summary: Update Allocation Constraint operationId: update-allocation-constraint responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/AllocationConstraint' examples: example-1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 allocationId: 9ec871ce-3363-4de2-8f79-062881067628 resourceType: InstanceType resourceTypeId: a59ee688-b5e5-4606-9891-f4a605edacd3 constraintType: Reserved constraintValue: 20 derivedResourceId: null instanceType: name: x3.large infrastructureProviderId: 63c29416-8833-4eaf-9e1c-7c0173cc3150 siteId: c9f4f276-6f7a-4209-953c-2b9870ce7cc1 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' description: | Update an existing Allocation Constraint by ID Org must have an Infrastructure Provider. Specified Allocation must have been created by the Provider and requesting user must have `PROVIDER_ADMIN` role. Modifying allocations may not be possible if Tenant has started utilizing resources from this allocation. For an InstanceType resource, `constraintValue` can be incremented at any time, but not decremented if doing so requires decommissioning Tenant resources. For an IPBlock resource, `constraintValue` cannot be modified if Tenant resources, e.g., Subnets or VPC Prefixes, reference the block. requestBody: content: application/json: schema: $ref: '#/components/schemas/AllocationConstraintUpdateRequest' examples: example-1: value: constraintValue: 20 tags: - Allocation '/v2/org/{org}/nico/ipblock': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve all IP Blocks tags: - IP Block responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/IpBlock' examples: example-1: value: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: Public Network Overlay for Site SJC4 description: This is the primary IP overlay for SJC4. All IPs are publicly routable siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf tenantId: null routingType: Public prefix: 202.168.1.0 prefixLength: 24 protocolVersion: IPv4 status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy": "CREATED_DESC"}' description: Pagination result in JSON format '403': $ref: '#/components/responses/ForbiddenError' operationId: get-all-ipblock description: |- Retrieve all IP blocks for the org. User must have authorization role with `PROVIDER_ADMIN` or `TENANT_ADMIN` suffix. `infrastructureProviderId` or `tenantId` query parameter may be required for older API versions. parameters: - schema: type: string format: uuid in: query name: infrastructureProviderId deprecated: true description: "Filter IP Blocks by Infrastructure Provider ID. Deprecated: Infrastructure Provider is now inferred from the org's membership." - schema: type: string format: uuid in: query name: tenantId deprecated: true description: "Filter IP Blocks by Tenant ID. Deprecated: Tenant is now inferred from the org's membership." - schema: type: string format: uuid in: query name: siteId description: Filter IP Blocks by Site ID - schema: type: string in: query name: status description: Filter IP Blocks by Status - schema: type: boolean in: query name: includeUsageStats description: Include IP Block usage stats in response - schema: type: string in: query name: query description: 'Search for matches across all IP Blocks. Input will be matched against name, description, and status fields' - schema: type: string enum: - InfrastructureProvider - Tenant - Site in: query name: includeRelation description: Related entity to expand - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - NAME_ASC - NAME_DESC - PREFIX_ASC - PREFIX_DESC - STATUS_ASC - STATUS_DESC - CREATED_ASC - CREATED_DESC - UPDATED_ASC - UPDATED_DESC in: query name: orderBy description: Ordering for pagination query post: summary: Create IP Block operationId: create-ipblock responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/IpBlock' examples: example-1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: Public Network Overlay for Site SJC4 description: This is the primary IP overlay for SJC4. All IPs are publicly routable siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf tenantId: null routingType: Public prefix: 202.168.1.0 prefixLength: 24 protocolVersion: IPv4 status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' description: |- Create an IP block for the org. Only Infrastructure Providers can create a root IP Block. User must have authorization role with `PROVIDER_ADMIN` suffix. Tenant IP Blocks are created via Allocation. requestBody: content: application/json: schema: $ref: '#/components/schemas/IpBlockCreateRequest' examples: example-1: value: name: Public Network Overlay for Site SJC4 description: This is the primary IP overlay for SJC4. All IPs are publicly routable siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 routingType: Public prefix: 202.168.1.0 prefixLength: 24 protocolVersion: IPv4 tags: - IP Block '/v2/org/{org}/nico/ipblock/{ipBlockId}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string name: ipBlockId in: path required: true description: ID of the IP Block get: summary: Retrieve IP Block tags: - IP Block responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/IpBlock' examples: example-1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: Public Network Overlay for Site SJC4 description: This is the primary IP overlay for SJC4. All IPs are publicly routable siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf tenantId: null routingType: Public prefix: 192.168.20.0 prefixLength: 24 protocolVersion: IPv4 usageStats: availableIPs: 256 acquiredIPs: 2 availablePrefixes: - 192.168.20.32/27 - 192.168.20.64/26 - 192.168.20.128/25 availableSmallestPrefixes: 56 acquiredPrefixes: 1 status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '403': $ref: '#/components/responses/ForbiddenError' operationId: get-ipblock description: |- Retrieve an IP Block by ID. User must have authorization role with `PROVIDER_ADMIN` or `TENANT_ADMIN` suffix. parameters: - schema: type: string format: uuid in: query name: infrastructureProviderId deprecated: true description: "Filter IP Blocks by Infrastructure Provider ID. Deprecated: Infrastructure Provider is now inferred from the org's membership." - schema: type: string format: uuid in: query name: tenantId deprecated: true description: "Filter IP Blocks by Tenant ID. Deprecated: Tenant is now inferred from the org's membership." - schema: type: boolean in: query name: includeUsageStats description: Include IP Block usage stats in response - schema: type: string enum: - InfrastructureProvider - Tenant - Site in: query name: includeRelation description: Related entity to expand delete: summary: Delete IP Block operationId: delete-ipblock responses: '202': description: Deletion request was accepted content: application/json: schema: $ref: '#/components/schemas/MessageResponse' examples: example-1: value: message: Deletion request was accepted '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' description: |- Delete an IP block Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. Only root IP Blocks can be deleted if there are no allocations associated with them. Tenant IP Blocks are managed via Allocation. tags: - IP Block patch: summary: Update IP Block operationId: update-ipblock responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/IpBlock' examples: example-1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: Public Network Overlay for Site SJC-4 description: This is the primary IP overlay for SJC-4. All IPs are publicly routable siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf tenantId: null routingType: Public prefix: 202.168.16.0 prefixLength: 20 protocolVersion: IPv4 status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' description: |- Update an existing IP Block Org must have an Infrastructure Provider. Specified IP Block must have been created by the Provider and requesting user must have `PROVIDER_ADMIN` role. Only root IP Blocks can be patched. Tenant IP Blocks are managed via Allocation. requestBody: content: application/json: schema: $ref: '#/components/schemas/IpBlockUpdateRequest' examples: example-1: value: name: Public Network Overlay for Site SJC-4 description: This is the primary IP overlay for SJC-4. All IPs are publicly routable tags: - IP Block '/v2/org/{org}/nico/ipblock/{ipBlockId}/derived': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string name: ipBlockId in: path required: true description: ID of the IP Block get: summary: Retrieve All Derived IP Blocks tags: - IP Block responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/IpBlock' examples: example-1: value: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: Public Network Overlay for Site SJC4 description: This is the primary IP overlay for SJC4. All IPs are publicly routable siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf tenantId: 97c57510-b443-43b4-881c-974d4b86c87c routingType: Public prefix: 202.168.1.0 prefixLength: 24 protocolVersion: IPv4 status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy": "CREATED_DESC"}' description: Pagination result in JSON format '403': $ref: '#/components/responses/ForbiddenError' operationId: get-all-derived-ipblock description: |- Retrieve all child IP Blocks allocated to Tenants from a specific Provider super IP Block. When allocations are created from a super block, individual Tenant IP Blocks are created as a result. The IP Block in URL must belong to the Infrastructure Provider associated with the Org. User must have authorization role with `PROVIDER_ADMIN` suffix. parameters: - schema: type: string in: query name: status description: Filter IP Blocks by Status - schema: type: string in: query name: query description: 'Search for matches across all derived IP Blocks. Input will be matched against name, description, and status fields' - schema: type: string enum: - InfrastructureProvider - Tenant - Site in: query name: includeRelation description: Related entity to expand - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - NAME_ASC - NAME_DESC - PREFIX_ASC - PREFIX_DESC - STATUS_ASC - STATUS_DESC - CREATED_ASC - CREATED_DESC - UPDATED_ASC - UPDATED_DESC in: query name: orderBy description: Ordering for pagination query '/v2/org/{org}/nico/vpc': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve all VPCs tags: - VPC responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/VPC' examples: example-1: value: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: spark-vpc description: Virtual network for machines executing Spark jobs org: xskkpgqpeakn tenantId: 34f5c98e-f430-457b-a812-92637d0c6fd0 siteId: 72771e6a-6f5e-4de4-a5b9-1266c4197811 controllerVpcId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 networkVirtualizationType: ETHERNET_VIRTUALIZER requestedVni: 12001 vni: 12001 networkSecurityGroupId: c602eb90-3039-11f0-997a-b38d4fc8389e networkSecurityGroupPropagationDetails: objectId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 detailedStatus: Partial status: Synchronizing details: '' unpropagatedInstanceIds: - 497f6eca-6276-4993-bfeb-53cbbbba6f08 relatedInstanceIds: - 497f6eca-6276-4993-bfeb-53cbbbba6f08 nvLinkLogicalPartitionId: dd887330-dbd3-45ce-b400-c42fc8e47315 labels: region: us-west-1 env: dev status: Ready statusHistory: - status: Ready message: VPC has been successfully provisioned on Site created: '2019-08-24T16:02:00Z' updated: '2019-08-24T16:02:00Z' - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy": "CREATED_DESC"}' description: Pagination result in JSON format '403': $ref: '#/components/responses/ForbiddenError' operationId: get-all-vpc description: |- Retrieve all VPCs for the org. Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix parameters: - schema: type: string format: uuid in: query name: siteId description: Filter VPCs by Site ID. Can be specified multiple times to filter on more than one Site. - schema: type: string in: query name: status description: Filter VPCs by Status. Can be specified multiple times to filter on more than one Status. - schema: type: string in: query name: networkSecurityGroupId description: Filter VPCs by Network Security Group ID. Can be specified multiple times to filter on more than one Network Security Group. - schema: type: string format: uuid in: query name: nvLinkLogicalPartitionId description: Filter VPCs by NVLink Logical Partition ID. Can be specified multiple times to filter on more than one NVLink Logical Partition. - schema: type: string in: query name: query description: 'Search for matches across all VPCs. Input will be matched against name, description, labels, and status fields' - schema: type: string enum: - InfrastructureProvider - Tenant - Site - NetworkSecurityGroup in: query name: includeRelation description: Related entity to expand - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - NAME_ASC - NAME_DESC - STATUS_ASC - STATUS_DESC - CREATED_ASC - CREATED_DESC - UPDATED_ASC - UPDATED_DESC in: query name: orderBy description: Ordering for pagination query post: summary: Create VPC operationId: create-vpc responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/VPC' examples: example-1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: spark-vpc description: Virtual network for machines executing Spark jobs org: xskkpgqpeakn tenantId: 34f5c98e-f430-457b-a812-92637d0c6fd0 siteId: 72771e6a-6f5e-4de4-a5b9-1266c4197811 controllerVpcId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 networkVirtualizationType: ETHERNET_VIRTUALIZER requestedVni: 12001 vni: 12001 nvLinkLogicalPartitionId: dd887330-dbd3-45ce-b400-c42fc8e47315 labels: region: us-west-1 env: dev status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' description: |- Create a VPC for the org. Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix requestBody: content: application/json: schema: $ref: '#/components/schemas/VpcCreateRequest' examples: example-1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: spark-vpc description: Virtual network for machines executing Spark jobs siteId: 72771e6a-6f5e-4de4-a5b9-1266c4197811 networkVirtualizationType: ETHERNET_VIRTUALIZER vni: 12001 nvLinkLogicalPartitionId: dd887330-dbd3-45ce-b400-c42fc8e47315 labels: region: us-west-1 env: dev description: '' tags: - VPC '/v2/org/{org}/nico/vpc/{vpcId}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: vpcId in: path required: true description: ID of the VPC get: summary: Retrieve a VPC tags: - VPC responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/VPC' examples: example-1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: spark-vpc description: Virtual network for machines executing Spark jobs org: xskkpgqpeakn tenantId: 34f5c98e-f430-457b-a812-92637d0c6fd0 siteId: 72771e6a-6f5e-4de4-a5b9-1266c4197811 controllerVpcId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 networkVirtualizationType: ETHERNET_VIRTUALIZER requestedVni: 12001 vni: 12001 nvLinkLogicalPartitionId: dd887330-dbd3-45ce-b400-c42fc8e47315 labels: region: us-west-1 env: dev status: Ready networkSecurityGroupId: 'c602eb90-3039-11f0-997a-b38d4fc8389e' networkSecurityGroupPropagationDetails: objectId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 detailedStatus: Partial status: Synchronizing details: '' unpropagatedInstanceIds: - 497f6eca-6276-4993-bfeb-53cbbbba6f08 relatedInstanceIds: - 497f6eca-6276-4993-bfeb-53cbbbba6f08 statusHistory: - status: Ready message: VPC has been successfully provisioned on Site created: '2019-08-24T16:02:00Z' updated: '2019-08-24T16:02:00Z' - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '403': $ref: '#/components/responses/ForbiddenError' operationId: get-vpc description: |- Retrieve a specific VPC by ID. Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. parameters: - schema: type: string enum: - InfrastructureProvider - Tenant - Site - NetworkSecurityGroup in: query name: includeRelation description: Related entity to expand delete: summary: Delete a VPC operationId: delete-vpc responses: '202': description: Deletion request was accepted content: application/json: schema: $ref: '#/components/schemas/MessageResponse' examples: example-1: value: message: Deletion request was accepted '403': $ref: '#/components/responses/ForbiddenError' description: |- Delete a specific VPC by ID. Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. tags: - VPC patch: summary: Update VPC operationId: update-vpc responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/VPC' examples: example-1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: spark-vpc-v1 description: Virtual network for machines executing Spark jobs v1 org: xskkpgqpeakn tenantId: 34f5c98e-f430-457b-a812-92637d0c6fd0 siteId: 72771e6a-6f5e-4de4-a5b9-1266c4197811 controllerVpcId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 networkVirtualizationType: ETHERNET_VIRTUALIZER requestedVni: 12001 vni: 12001 nvLinkLogicalPartitionId: dd887330-dbd3-45ce-b400-c42fc8e47315 labels: region: us-west-1 env: dev status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - VPC description: |- Update an existing VPC Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix requestBody: content: application/json: schema: $ref: '#/components/schemas/VpcUpdateRequest' examples: example-1: value: name: spark-vpc-v1 description: Virtual network for machines executing Spark jobs v1 labels: region: us-west-1 env: dev '/v2/org/{org}/nico/vpc/{vpcId}/virtualization': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: vpcId in: path required: true description: ID of the VPC patch: summary: Update VPC Virtualization operationId: update-vpc-virtualization responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/VPC' examples: example-1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: spark-vpc-v1 description: Virtual network for machines executing Spark jobs v1 org: xskkpgqpeakn tenantId: 34f5c98e-f430-457b-a812-92637d0c6fd0 siteId: 72771e6a-6f5e-4de4-a5b9-1266c4197811 controllerVpcId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 networkVirtualizationType: FNN requestedVni: 12001 vni: 12001 nvLinkLogicalPartitionId: dd887330-dbd3-45ce-b400-c42fc8e47315 labels: region: us-west-1 env: dev status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - VPC description: |- Update network virtualization type for a VPC Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix Tenant must own the VPC Request is rejected if the VPC already has Subnets or Instances. requestBody: content: application/json: schema: $ref: '#/components/schemas/VpcVirtualizationUpdateRequest' examples: Example 1: value: networkVirtualizationType: FNN '/v2/org/{org}/nico/vpc-peering': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve all VPC peerings tags: - VPC Peering responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/VpcPeering' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy": "CREATED_DESC"}' description: Pagination result in JSON format '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' operationId: get-all-vpc-peering description: |- Get all VPC peerings. Tenant Admin can get all peerings where the tenant owns at least one VPC. Provider Admin can get all peerings in a site. User must have authorization role with `TENANT_ADMIN` or `PROVIDER_ADMIN` suffix. parameters: - schema: type: string format: uuid in: query name: siteId required: false description: Optional Site ID filter. If provided, caller must have access to the specified Site. - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string in: query name: orderBy description: Ordering for pagination query - schema: type: boolean in: query name: isMultiTenant required: false description: Optional filter by peering tenancy type (single-tenant or multi-tenant). - schema: type: string enum: - Pending - Configuring - Requested - Ready - Deleting - Error in: query name: status required: false description: Optional filter by peering status. Repeat the parameter to match multiple statuses. - schema: type: string format: uuid in: query name: vpcId required: false description: Optional filter by VPC ID involved in the peering as either vpc1 or vpc2. Repeat the parameter to match multiple VPCs. - schema: type: string format: uuid in: query name: peerTenantId required: false description: Optional filter by tenant ID of a VPC involved in the peering. Repeat the parameter to match multiple tenants. - schema: type: string enum: - Vpc1 - Vpc2 - Site - Tenant in: query name: includeRelation required: false description: Related entity to expand post: summary: Create VPC peering tags: - VPC Peering operationId: create-vpc-peering description: |- Create a VPC peering between two VPCs on the same site. Tenant Admin can create single-tenant peerings (both VPCs belong to their tenant). Provider Admin can create multi-tenant peerings (VPCs from different tenants). User must have authorization role with `TENANT_ADMIN` or `PROVIDER_ADMIN` suffix. requestBody: content: application/json: schema: $ref: '#/components/schemas/VpcPeeringCreateRequest' examples: example-1: value: vpc1Id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 vpc2Id: 34f5c98e-f430-457b-a812-92637d0c6fd0 siteId: 72771e6a-6f5e-4de4-a5b9-1266c4197811 required: true responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/VpcPeering' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '/v2/org/{org}/nico/vpc-peering/{id}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: id in: path required: true description: VPC Peering ID get: summary: Retrieve a VPC peering tags: - VPC Peering operationId: get-vpc-peering description: |- Get details of a VPC peering by ID. Tenant Admin can get a peering if at least one VPC belongs to their tenant. Provider Admin can get a peering if it is in a site provided by their org. User must have authorization role with `TENANT_ADMIN` or `PROVIDER_ADMIN` suffix. responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/VpcPeering' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' parameters: - schema: type: string enum: - Vpc1 - Vpc2 - Site - Tenant in: query name: includeRelation required: false description: Related entity to expand delete: summary: Delete a VPC peering tags: - VPC Peering operationId: delete-vpc-peering description: |- Delete a VPC peering by ID. Tenant Admin can delete only peerings where both VPCs belong to their tenant. Provider Admin can delete only multi-tenant peerings in sites they provide. User must have authorization role with `TENANT_ADMIN` or `PROVIDER_ADMIN` suffix. responses: '204': description: No Content '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '/v2/org/{org}/nico/vpc-prefix': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve all VPC Prefixes tags: - VPC Prefix responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/VpcPrefix' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy": "CREATED_DESC"}' description: Pagination result in JSON format '403': $ref: '#/components/responses/ForbiddenError' operationId: get-all-vpc-prefix description: |- Retrieve all VPC Prefixes for the org Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. parameters: - schema: type: string format: uuid in: query name: siteId description: 'Filter VPC Prefixes by Site, required if the vpcId query parameter is not specified' - schema: type: string format: uuid in: query name: vpcId description: Filter VPC Prefixes by VPC - schema: type: string in: query name: status description: Filter VPC Prefixes by Status - schema: type: string in: query name: query description: Search for matches across all VPC Prefixes. Input will be matched against name and status fields - schema: type: string enum: - VPC - Tenant - IPBlock in: query name: includeRelation description: Related entity to expand - schema: type: boolean in: query name: includeUsageStats description: >- When true, each VPC Prefix object includes usage statistics using the same structure as IP Block usage. Prefix and IP usage data is derived by evaluating associated Ethernet interfaces. Each Interface associated with a VPC Prefix consumes a `/31` prefix. - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - NAME_ASC - NAME_DESC - STATUS_ASC - STATUS_DESC - CREATED_ASC - CREATED_DESC - UPDATED_ASC - UPDATED_DESC in: query name: orderBy description: Ordering for pagination query post: summary: Create VPC Prefix operationId: create-vpc-prefix responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/VpcPrefix' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' description: |- Create a VPC Prefix for the org. Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. requestBody: content: application/json: schema: $ref: '#/components/schemas/VpcPrefixCreateRequest' tags: - VPC Prefix '/v2/org/{org}/nico/vpc-prefix/{vpcPrefixId}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: vpcPrefixId in: path required: true description: ID of the VPC Prefix get: summary: Retrieve VPC Prefix tags: - VPC Prefix responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/VpcPrefix' '403': $ref: '#/components/responses/ForbiddenError' operationId: get-vpc-prefix description: |- Retrieve a specific VPC Prefix Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. parameters: - schema: type: string enum: - VPC - Tenant - IPBlock in: query name: includeRelation description: Related entity to expand - schema: type: boolean in: query name: includeUsageStats description: |- When true, each VPC Prefix object includes usage statistics using the same structure as IP Block usage. Prefix and IP usage data is derived by evaluating associated Ethernet interfaces. Each Interface associated with a VPC Prefix consumes a `/31` prefix. delete: summary: Delete VPC Prefix operationId: delete-vpc-prefix responses: '204': description: No Content '403': $ref: '#/components/responses/ForbiddenError' description: |- Delete a specific VPC Prefix by ID. Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. tags: - VPC Prefix patch: summary: Update VPC Prefix operationId: update-vpc-prefix responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/VpcPrefix' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - VPC Prefix description: | Update an existing VPC Prefix Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. requestBody: content: application/json: schema: $ref: '#/components/schemas/VpcPrefixUpdateRequest' '/v2/org/{org}/nico/subnet': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve all Subnets tags: - Subnet responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/Subnet' examples: example-1: value: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: spark-gpu-net siteId: ea144def-d68f-44c3-9485-4b103fa2686f vpcId: 5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3 controllerNetworkSegmentId: abe7b0e8-67db-4e89-903e-fc4f2bd7f034 ipv4Prefix: 202.168.16.0 ipv4BlockId: 8c1d1a06-90a2-4863-8ee1-6029265b9f0a ipv4Gateway: 202.168.0.1 ipv6Prefix: null ipv6BlockId: null ipv6Gateway: null prefixLength: 20 routingType: Public status: Ready statusHistory: - status: Ready message: Subnet has been successfully provisioned on Site created: '2019-08-24T16:02:38Z' updated: '2019-08-24T16:02:38Z' - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy": "CREATED_DESC"}' description: Pagination result in JSON format '403': $ref: '#/components/responses/ForbiddenError' operationId: get-all-subnet description: |- Retrieve all Subnets for the org Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. parameters: - schema: type: string format: uuid in: query name: siteId description: 'Filter subnets by Site, required if the vpcId query parameter is not specified' - schema: type: string format: uuid in: query name: vpcId description: Filter subnets by VPC - schema: type: string in: query name: status description: Filter Subnets by Status - schema: type: string in: query name: query description: 'Search for matches across all Subnets. Input will be matched against name, description, and status fields' - schema: type: string enum: - VPC - Tenant - IPv4Block - IPv6Block in: query name: includeRelation description: Related entity to expand - schema: type: boolean in: query name: includeUsageStats description: |- When true, each Subnet object includes usage statistics using the same structure as IP Block usage. Prefix and IP usage data is derived by evaluating associated Ethernet interfaces. Each Interface associated with a Subnet consumes a single IP. In addition, one gateway and one broadcast IP address are reserved per Subnet. - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - NAME_ASC - NAME_DESC - STATUS_ASC - STATUS_DESC - CREATED_ASC - CREATED_DESC - UPDATED_ASC - UPDATED_DESC in: query name: orderBy description: Ordering for pagination query post: summary: Create Subnet operationId: create-subnet responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/Subnet' examples: example-1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: spark-gpu-net siteId: ea144def-d68f-44c3-9485-4b103fa2686f vpcId: 5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3 controllerNetworkSegmentId: null ipv4Prefix: 202.168.16.0 ipv4BlockId: 8c1d1a06-90a2-4863-8ee1-6029265b9f0a ipv4Gateway: 202.168.0.1 ipv6Prefix: null ipv6BlockId: null ipv6Gateway: null prefixLength: 20 routingType: Public status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' description: |- Create a Subnet for the org. Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. At least one IPv4 IP block or one IPv6 IP block must be specified. requestBody: content: application/json: schema: $ref: '#/components/schemas/SubnetCreateRequest' examples: Example 1: value: name: spark-gpu-net vpcId: 5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3 ipv4BlockId: 8c1d1a06-90a2-4863-8ee1-6029265b9f0a prefixLength: 20 tags: - Subnet '/v2/org/{org}/nico/subnet/{subnetId}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: subnetId in: path required: true description: ID of the Subnet get: summary: Retrieve Subnet tags: - Subnet responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/Subnet' examples: example-1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: spark-gpu-net siteId: ea144def-d68f-44c3-9485-4b103fa2686f vpcId: 5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3 controllerNetworkSegmentId: abe7b0e8-67db-4e89-903e-fc4f2bd7f034 ipv4Prefix: 202.168.16.0 ipv4BlockId: 8c1d1a06-90a2-4863-8ee1-6029265b9f0a ipv4Gateway: 202.168.0.1 ipv6Prefix: null ipv6BlockId: null ipv6Gateway: null prefixLength: 20 routingType: Public status: Ready statusHistory: - status: Ready message: Subnet has been successfully provisioned on Site created: '2019-08-24T16:02:38Z' updated: '2019-08-24T16:02:38Z' - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '403': $ref: '#/components/responses/ForbiddenError' operationId: get-subnet description: |- Retrieve a specific Subnet Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. parameters: - schema: type: string enum: - VPC - Tenant - IPv4Block - IPv6Block in: query name: includeRelation description: Related entity to expand - schema: type: boolean in: query name: includeUsageStats description: |- When true, each Subnet object includes usage statistics using the same structure as IP Block usage. Prefix and IP usage data is derived by evaluating associated Ethernet interfaces. Each Interface associated with a Subnet consumes a single IP. In addition, one gateway and one broadcast IP address are reserved per Subnet. delete: summary: Delete Subnet operationId: delete-subnet responses: '204': description: No Content '403': $ref: '#/components/responses/ForbiddenError' description: |- Delete a specific Subnet by ID. Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. tags: - Subnet patch: summary: Update Subnet operationId: update-subnet responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/Subnet' examples: example-1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: spark-gpu-subnet description: Subnet for dedicated GPU nodes siteId: ea144def-d68f-44c3-9485-4b103fa2686f vpcId: 5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3 controllerNetworkSegmentId: null ipv4Prefix: 212.168.0.250 ipv4BlockId: 8c1d1a06-90a2-4863-8ee1-6029265b9f0a ipv4Gateway: 202.168.0.1 ipv6Prefix: null ipv6BlockId: null ipv6Gateway: null prefixLength: 20 routingType: Public status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Subnet description: | Update an existing Subnet Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. requestBody: content: application/json: schema: $ref: '#/components/schemas/SubnetUpdateRequest' examples: example-1: value: name: spark-gpu-subnet description: Subnet for dedicated GPU nodes '/v2/org/{org}/nico/expected-machine': parameters: - schema: type: string name: org in: path required: true description: Name of the Org post: summary: Create Expected Machine operationId: create-expected-machine description: |- Create an Expected Machine to pre-register Machines expected to be discovered at a Site. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. Alternatively, Tenant Admins with `TargetedInstanceCreation` capability can also create Expected Machines if they have an account with the Site's Infrastructure Provider. requestBody: content: application/json: schema: $ref: '#/components/schemas/ExpectedMachineCreateRequest' examples: example-1: value: siteId: f97df110-f4de-492e-8849-4a6af68026b0 bmcMacAddress: '00:1A:2B:3C:4D:5E' defaultBmcUsername: admin defaultBmcPassword: password123 chassisSerialNumber: CHASSIS-12345 fallbackDPUSerialNumbers: - DPU-001 - DPU-002 labels: environment: production rack: A1 description: Expected Machine creation request required: true responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/ExpectedMachine' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Expected Machine get: summary: Retrieve all Expected Machines operationId: get-all-expected-machine description: |- Retrieve all Expected Machines. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` or `PROVIDER_VIEWER` suffix. Alternatively, Tenant Admins may retrieve Expected Machines across Sites where `TargetedInstanceCreation` is effective. The siteId query parameter is optional and, when provided, further restricts results to that Site. parameters: - schema: type: string format: uuid name: siteId in: query description: ID of the Site to filter Expected Machines by - schema: type: string enum: - Site - Sku in: query name: includeRelation description: Related entity to expand - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - BMC_MAC_ADDRESS_ASC - BMC_MAC_ADDRESS_DESC - CHASSIS_SERIAL_NUMBER_ASC - CHASSIS_SERIAL_NUMBER_DESC - CREATED_ASC - CREATED_DESC - UPDATED_ASC - UPDATED_DESC in: query name: orderBy description: Ordering for pagination query responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/ExpectedMachine' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy": "CREATED_DESC"}' description: Pagination result in JSON format '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Expected Machine '/v2/org/{org}/nico/expected-machine/{expectedMachineId}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string name: expectedMachineId in: path required: true description: ID of the Expected Machine get: summary: Retrieve Expected Machine operationId: get-expected-machine description: |- Retrieve a specific Expected Machine by ID. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` or `PROVIDER_VIEWER` suffix. Alternatively, Tenant Admins with `TargetedInstanceCreation` capability can also retrieve Expected Machines if they have an account with the Site's Infrastructure Provider. parameters: - schema: type: string enum: - Site - Sku in: query name: includeRelation description: Related entity to expand responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ExpectedMachine' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' tags: - Expected Machine patch: summary: Update Expected Machine operationId: update-expected-machine description: |- Update an existing Expected Machine by ID. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. Infrastructure Provider must own the Expected Machine. Alternatively, Tenant Admins with `TargetedInstanceCreation` capability can also update Expected Machines if they have an account with the Site's Infrastructure Provider. parameters: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/ExpectedMachineUpdateRequest' examples: example-1: value: defaultBmcUsername: newadmin defaultBmcPassword: newpassword123 chassisSerialNumber: CHASSIS-54321 labels: environment: staging rack: B2 description: Expected Machine update request required: true responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ExpectedMachine' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' tags: - Expected Machine delete: summary: Delete Expected Machine operationId: delete-expected-machine description: |- Delete an existing Expected Machine by ID. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. Infrastructure Provider must own the Expected Machine. Alternatively, Tenant Admins with `TargetedInstanceCreation` capability can also delete Expected Machines if they have an account with the Site's Infrastructure Provider. parameters: [] responses: '204': description: Expected Machine deleted successfully '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' tags: - Expected Machine '/v2/org/{org}/nico/expected-machine/batch': parameters: - schema: type: string name: org in: path required: true description: Name of the Org post: summary: Batch Create Expected Machines operationId: batch-create-expected-machines description: |- Create multiple Expected Machines in a single request. All machines must belong to the same site. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. Alternatively, Tenant Admins with `TargetedInstanceCreation` capability can also create Expected Machines if they have an account with the Site's Infrastructure Provider. Maximum batch size: 100 Expected Machines per request. requestBody: content: application/json: schema: type: array minItems: 1 maxItems: 100 items: $ref: '#/components/schemas/ExpectedMachineCreateRequest' examples: example-1: value: - siteId: f97df110-f4de-492e-8849-4a6af68026b0 bmcMacAddress: '00:1A:2B:3C:4D:5E' defaultBmcUsername: admin defaultBmcPassword: password123 chassisSerialNumber: CHASSIS-12345 fallbackDPUSerialNumbers: - DPU-001 - DPU-002 labels: environment: production rack: A1 - siteId: f97df110-f4de-492e-8849-4a6af68026b0 bmcMacAddress: '00:1A:2B:3C:4D:5F' defaultBmcUsername: admin defaultBmcPassword: password456 chassisSerialNumber: CHASSIS-12346 fallbackDPUSerialNumbers: - DPU-003 - DPU-004 labels: environment: production rack: A2 description: Array of Expected Machine creation requests required: true responses: '201': description: Created content: application/json: schema: type: array items: $ref: '#/components/schemas/ExpectedMachine' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Expected Machine patch: summary: Batch Update Expected Machines operationId: batch-update-expected-machines description: |- Update multiple Expected Machines in a single request. All machines must belong to the same site. All items in a batch update must provide the same set of fields, except that `bmcIpAddress` may be omitted or set to `null` to preserve that machine's current BMC IP address. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. Infrastructure Provider must own the Expected Machines. Alternatively, Tenant Admins with `TargetedInstanceCreation` capability can also update Expected Machines if they have an account with the Site's Infrastructure Provider. Maximum batch size: 100 Expected Machines per request. requestBody: content: application/json: schema: type: array minItems: 1 maxItems: 100 items: $ref: '#/components/schemas/ExpectedMachineUpdateRequest' examples: example-1: value: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 defaultBmcUsername: newadmin defaultBmcPassword: newpassword123 chassisSerialNumber: CHASSIS-54321 labels: environment: staging rack: B2 - id: 597f6eca-6276-4993-bfeb-53cbbbba6f09 defaultBmcUsername: newadmin2 defaultBmcPassword: newpassword456 chassisSerialNumber: CHASSIS-54322 labels: environment: staging rack: B3 description: Array of Expected Machine update requests required: true responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/ExpectedMachine' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': description: One or more Expected Machines not found content: application/json: schema: $ref: '#/components/schemas/NICoAPIError' tags: - Expected Machine '/v2/org/{org}/nico/expected-power-shelf': parameters: - schema: type: string name: org in: path required: true description: Name of the Org post: summary: Create Expected Power Shelf operationId: create-expected-power-shelf description: |- Create an Expected Power Shelf to pre-register power shelves expected to be discovered at a Site. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. Alternatively, Tenant Admins with `TargetedInstanceCreation` capability can also create Expected Power Shelves if they have an account with the Site's Infrastructure Provider. requestBody: content: application/json: schema: $ref: '#/components/schemas/ExpectedPowerShelfCreateRequest' examples: example-1: value: siteId: f97df110-f4de-492e-8849-4a6af68026b0 bmcMacAddress: '00:1A:2B:3C:4D:5E' defaultBmcUsername: admin defaultBmcPassword: password123 shelfSerialNumber: SHELF-12345 bmcIpAddress: '192.168.1.100' labels: environment: production rack: A1 description: Expected Power Shelf creation request required: true responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/ExpectedPowerShelf' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Expected Power Shelf get: summary: Retrieve all Expected Power Shelves operationId: get-all-expected-power-shelf description: |- Retrieve all Expected Power Shelves. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` or `PROVIDER_VIEWER` suffix. Alternatively, Tenant Admins with `TargetedInstanceCreation` capability can also retrieve Expected Power Shelves if they have an account with the Site's Infrastructure Provider (siteId query parameter is required for Tenants). parameters: - schema: type: string format: uuid name: siteId in: query description: ID of the Site to filter Expected Power Shelves by - schema: type: string enum: - Site in: query name: includeRelation description: Related entity to expand - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - BMC_MAC_ADDRESS_ASC - BMC_MAC_ADDRESS_DESC - SHELF_SERIAL_NUMBER_ASC - SHELF_SERIAL_NUMBER_DESC - CREATED_ASC - CREATED_DESC - UPDATED_ASC - UPDATED_DESC in: query name: orderBy description: Ordering for pagination query responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/ExpectedPowerShelf' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy": "CREATED_DESC"}' description: Pagination result in JSON format '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Expected Power Shelf '/v2/org/{org}/nico/expected-power-shelf/{expectedPowerShelfId}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string name: expectedPowerShelfId in: path required: true description: ID of the Expected Power Shelf get: summary: Retrieve Expected Power Shelf operationId: get-expected-power-shelf description: |- Retrieve a specific Expected Power Shelf by ID. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` or `PROVIDER_VIEWER` suffix. Alternatively, Tenant Admins with `TargetedInstanceCreation` capability can also retrieve Expected Power Shelves if they have an account with the Site's Infrastructure Provider. parameters: - schema: type: string enum: - Site in: query name: includeRelation description: Related entity to expand responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ExpectedPowerShelf' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' tags: - Expected Power Shelf patch: summary: Update Expected Power Shelf operationId: update-expected-power-shelf description: |- Update an existing Expected Power Shelf by ID. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. Infrastructure Provider must own the Expected Power Shelf. Alternatively, Tenant Admins with `TargetedInstanceCreation` capability can also update Expected Power Shelves if they have an account with the Site's Infrastructure Provider. parameters: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/ExpectedPowerShelfUpdateRequest' examples: example-1: value: defaultBmcUsername: newadmin defaultBmcPassword: newpassword123 shelfSerialNumber: SHELF-54321 bmcIpAddress: '192.168.1.200' labels: environment: staging rack: B2 description: Expected Power Shelf update request required: true responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ExpectedPowerShelf' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' tags: - Expected Power Shelf delete: summary: Delete Expected Power Shelf operationId: delete-expected-power-shelf description: |- Delete an existing Expected Power Shelf by ID. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. Infrastructure Provider must own the Expected Power Shelf. Alternatively, Tenant Admins with `TargetedInstanceCreation` capability can also delete Expected Power Shelves if they have an account with the Site's Infrastructure Provider. parameters: [] responses: '204': description: Expected Power Shelf deleted successfully '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' tags: - Expected Power Shelf '/v2/org/{org}/nico/expected-rack': parameters: - schema: type: string name: org in: path required: true description: Name of the Org post: summary: Create Expected Rack operationId: create-expected-rack description: |- Create an Expected Rack to pre-register a rack expected to be discovered at a Site. The `rackId` is an operator-supplied string identifier (not a UUID) that uniquely identifies the rack within the Site. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. Alternatively, Tenant Admins with `TargetedInstanceCreation` capability can also create Expected Racks if they have an account with the Site's Infrastructure Provider. Chassis identity and physical location information are conveyed via well-known label keys in `labels`: - `chassis.manufacturer`, `chassis.serial-number`, `chassis.model` - `location.region`, `location.datacenter`, `location.room`, `location.position` requestBody: content: application/json: schema: $ref: '#/components/schemas/ExpectedRackCreateRequest' examples: example-1: value: siteId: f97df110-f4de-492e-8849-4a6af68026b0 rackId: rack-01 rackProfileId: rp-standard-42u name: Rack 01 description: Production rack in row A labels: chassis.manufacturer: NVIDIA chassis.serial-number: NVRK0001001 chassis.model: GB200-NVL72 location.region: us-west-2 location.datacenter: phx-dc01 location.room: room-1 location.position: A1 description: Expected Rack creation request required: true responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/ExpectedRack' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Expected Rack get: summary: Retrieve all Expected Racks operationId: get-all-expected-rack description: |- Retrieve all Expected Racks. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` or `PROVIDER_VIEWER` suffix. Alternatively, Tenant Admins with `TargetedInstanceCreation` capability can also retrieve Expected Racks if they have an account with the Site's Infrastructure Provider (siteId query parameter is required for Tenants). parameters: - schema: type: string format: uuid name: siteId in: query description: ID of the Site to filter Expected Racks by - schema: type: string enum: - Site in: query name: includeRelation description: Related entity to expand - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - RACK_ID_ASC - RACK_ID_DESC - RACK_PROFILE_ID_ASC - RACK_PROFILE_ID_DESC - CREATED_ASC - CREATED_DESC - UPDATED_ASC - UPDATED_DESC in: query name: orderBy description: Ordering for pagination query responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/ExpectedRack' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy": "CREATED_DESC"}' description: Pagination result in JSON format '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Expected Rack put: summary: Replace all Expected Racks operationId: replace-all-expected-rack description: |- Replace the full set of Expected Racks for a Site with the provided list. All existing Expected Racks for the Site that are not in the request body will be deleted, and any new Expected Racks in the request will be created. Existing Expected Racks with matching `rackId` values will be updated. Every entry in `expectedRacks` must reference the same `siteId` as the top-level `siteId`. `rackId` values must be unique within the request. The `expectedRacks` array may be empty to clear all Expected Racks for the Site. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. Alternatively, Tenant Admins with `TargetedInstanceCreation` capability can also replace Expected Racks if they have an account with the Site's Infrastructure Provider. requestBody: content: application/json: schema: $ref: '#/components/schemas/ExpectedRackList' examples: example-1: value: siteId: f97df110-f4de-492e-8849-4a6af68026b0 expectedRacks: - siteId: f97df110-f4de-492e-8849-4a6af68026b0 rackId: rack-01 rackProfileId: rp-standard-42u name: Rack 01 description: Production rack in row A labels: chassis.manufacturer: NVIDIA chassis.serial-number: NVRK0001001 chassis.model: GB200-NVL72 location.datacenter: phx-dc01 location.position: A1 - siteId: f97df110-f4de-492e-8849-4a6af68026b0 rackId: rack-02 rackProfileId: rp-standard-42u name: Rack 02 description: Production rack in row A labels: chassis.manufacturer: NVIDIA chassis.serial-number: NVRK0001002 chassis.model: GB200-NVL72 location.datacenter: phx-dc01 location.position: A2 description: Replace-all Expected Racks request required: true responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/ExpectedRack' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Expected Rack '/v2/org/{org}/nico/expected-rack/all': parameters: - schema: type: string name: org in: path required: true description: Name of the Org delete: summary: Delete all Expected Racks operationId: delete-all-expected-rack description: |- Delete all Expected Racks for a Site. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. Infrastructure Provider must own the Expected Racks. Alternatively, Tenant Admins with `TargetedInstanceCreation` capability can also delete Expected Racks if they have an account with the Site's Infrastructure Provider. parameters: - schema: type: string format: uuid name: siteId in: query required: true description: ID of the Site whose Expected Racks should be deleted responses: '204': description: All Expected Racks deleted successfully '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Expected Rack '/v2/org/{org}/nico/expected-rack/{id}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: id in: path required: true description: ID of the Expected Rack get: summary: Retrieve Expected Rack operationId: get-expected-rack description: |- Retrieve a specific Expected Rack by its `id`. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` or `PROVIDER_VIEWER` suffix. Alternatively, Tenant Admins with `TargetedInstanceCreation` capability can also retrieve Expected Racks if they have an account with the Site's Infrastructure Provider. parameters: - schema: type: string enum: - Site in: query name: includeRelation description: Related entity to expand responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ExpectedRack' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' tags: - Expected Rack patch: summary: Update Expected Rack operationId: update-expected-rack description: |- Update an existing Expected Rack identified by its `id`. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. Infrastructure Provider must own the Expected Rack. Alternatively, Tenant Admins with `TargetedInstanceCreation` capability can also update Expected Racks if they have an account with the Site's Infrastructure Provider. requestBody: content: application/json: schema: $ref: '#/components/schemas/ExpectedRackUpdateRequest' examples: example-1: value: rackProfileId: rp-standard-48u name: Rack 01 (updated) description: Production rack in row A, upgraded chassis labels: chassis.manufacturer: NVIDIA chassis.serial-number: NVRK0001001 chassis.model: GB200-NVL72 location.datacenter: phx-dc01 location.position: A1 description: Expected Rack update request required: true responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ExpectedRack' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' tags: - Expected Rack delete: summary: Delete Expected Rack operationId: delete-expected-rack description: |- Delete an existing Expected Rack identified by its `id`. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. Infrastructure Provider must own the Expected Rack. Alternatively, Tenant Admins with `TargetedInstanceCreation` capability can also delete Expected Racks if they have an account with the Site's Infrastructure Provider. responses: '204': description: Expected Rack deleted successfully '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' tags: - Expected Rack '/v2/org/{org}/nico/expected-switch': parameters: - schema: type: string name: org in: path required: true description: Name of the Org post: summary: Create Expected Switch operationId: create-expected-switch description: |- Create an Expected Switch to pre-register network switches expected to be discovered at a Site. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. Alternatively, Tenant Admins with `TargetedInstanceCreation` capability can also create Expected Switches if they have an account with the Site's Infrastructure Provider. requestBody: content: application/json: schema: $ref: '#/components/schemas/ExpectedSwitchCreateRequest' examples: example-1: value: siteId: f97df110-f4de-492e-8849-4a6af68026b0 bmcMacAddress: '00:1A:2B:3C:4D:5E' defaultBmcUsername: admin defaultBmcPassword: password123 switchSerialNumber: SWITCH-12345 nvOsUsername: nvadmin nvOsPassword: nvpassword123 nvosMacAddresses: - '00:1A:2B:3C:4D:60' - '00:1A:2B:3C:4D:61' labels: environment: production rack: A1 description: Expected Switch creation request required: true responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/ExpectedSwitch' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Expected Switch get: summary: Retrieve all Expected Switches operationId: get-all-expected-switch description: |- Retrieve all Expected Switches. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` or `PROVIDER_VIEWER` suffix. Alternatively, Tenant Admins with `TargetedInstanceCreation` capability can also retrieve Expected Switches if they have an account with the Site's Infrastructure Provider (siteId query parameter is required for Tenants). parameters: - schema: type: string format: uuid name: siteId in: query description: ID of the Site to filter Expected Switches by - schema: type: string enum: - Site in: query name: includeRelation description: Related entity to expand - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - BMC_MAC_ADDRESS_ASC - BMC_MAC_ADDRESS_DESC - SWITCH_SERIAL_NUMBER_ASC - SWITCH_SERIAL_NUMBER_DESC - CREATED_ASC - CREATED_DESC - UPDATED_ASC - UPDATED_DESC in: query name: orderBy description: Ordering for pagination query responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/ExpectedSwitch' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy": "CREATED_DESC"}' description: Pagination result in JSON format '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Expected Switch '/v2/org/{org}/nico/expected-switch/{expectedSwitchId}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string name: expectedSwitchId in: path required: true description: ID of the Expected Switch get: summary: Retrieve Expected Switch operationId: get-expected-switch description: |- Retrieve a specific Expected Switch by ID. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` or `PROVIDER_VIEWER` suffix. Alternatively, Tenant Admins with `TargetedInstanceCreation` capability can also retrieve Expected Switches if they have an account with the Site's Infrastructure Provider. parameters: - schema: type: string enum: - Site in: query name: includeRelation description: Related entity to expand responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ExpectedSwitch' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' tags: - Expected Switch patch: summary: Update Expected Switch operationId: update-expected-switch description: |- Update an existing Expected Switch by ID. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. Infrastructure Provider must own the Expected Switch. Alternatively, Tenant Admins with `TargetedInstanceCreation` capability can also update Expected Switches if they have an account with the Site's Infrastructure Provider. parameters: [] requestBody: content: application/json: schema: $ref: '#/components/schemas/ExpectedSwitchUpdateRequest' examples: example-1: value: defaultBmcUsername: newadmin defaultBmcPassword: newpassword123 switchSerialNumber: SWITCH-54321 nvOsUsername: newnvadmin nvOsPassword: newnvpassword123 nvosMacAddresses: - '00:1A:2B:3C:4D:62' - '00:1A:2B:3C:4D:63' labels: environment: staging rack: B2 description: Expected Switch update request required: true responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ExpectedSwitch' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' tags: - Expected Switch delete: summary: Delete Expected Switch operationId: delete-expected-switch description: |- Delete an existing Expected Switch by ID. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. Infrastructure Provider must own the Expected Switch. Alternatively, Tenant Admins with `TargetedInstanceCreation` capability can also delete Expected Switches if they have an account with the Site's Infrastructure Provider. parameters: [] responses: '204': description: Expected Switch deleted successfully '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' tags: - Expected Switch '/v2/org/{org}/nico/sku': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve all SKUs operationId: get-all-sku description: |- Retrieve all SKUs (Stock Keeping Units) for a Site. SKUs represent unique hardware configurations discovered at sites. They are automatically derived from machine characteristics. A `siteId` query parameter is required for all requests. For Infrastructure Providers: Org must have an Infrastructure Provider entity and own the Site that the Machine belongs to. User must have authorization role with `PROVIDER_ADMIN` suffix. For Tenants: Org must have a Tenant with `TargetedInstanceCreation` capability enabled and Tenant Account with Machine's Provider. User must have authorization role with `TENANT_ADMIN` suffix. parameters: - schema: type: string format: uuid name: siteId in: query required: true description: ID of the Site to retrieve SKUs from - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - CREATED_ASC - CREATED_DESC - UPDATED_ASC - UPDATED_DESC - ID_ASC - ID_DESC in: query name: orderBy description: Ordering for pagination query responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/Sku' examples: example-1: value: - id: lenovo.sr650v2.cpu.1 siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 deviceType: gpu associatedMachineIds: - fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g components: cpus: - vendor: Intel model: Xeon Platinum 8480+ threadCount: 112 count: 2 gpus: - vendor: NVIDIA model: H100 SXM5 totalMemory: 80GB HBM3 count: 8 memory: - capacityMb: 65536 memoryType: DDR5 count: 16 storage: - vendor: '' model: SAMSUNG MZ1L21T9HCLS-00A07 capacityMb: 0 minSizeMiB: 7680000 maxSizeMiB: 7680000 pciPatterns: - ^/devices/pci.*nvme0$ count: 4 chassis: vendor: Supermicro model: SYS-420GP-TNR created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy": "CREATED_DESC"}' description: Pagination result in JSON format '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - SKU post: summary: Create SKU operationId: create-sku description: |- Create a SKU. The Org must have an Infrastructure Provider that owns the Site. The user must have an authorization role with the `PROVIDER_ADMIN` suffix. requestBody: content: application/json: schema: $ref: '#/components/schemas/SkuCreateRequest' required: true responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/Sku' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - SKU '/v2/org/{org}/nico/sku/{skuId}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string name: skuId in: path required: true description: ID of the SKU get: summary: Retrieve SKU operationId: get-sku description: |- Retrieve a specific SKU (Stock Keeping Unit) by ID. SKUs represent unique hardware configurations discovered at sites. They are automatically derived from machine characteristics. For Infrastructure Providers: Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` or `PROVIDER_VIEWER` suffix. For Tenants: Org must have a Tenant with `TargetedInstanceCreation` capability enabled. User must have authorization role with `TENANT_ADMIN` suffix. The Tenant must have an account with the SKU's Site's Infrastructure Provider. responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/Sku' examples: example-1: value: id: lenovo.sr650v2.cpu.1 siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 deviceType: gpu associatedMachineIds: - fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g components: cpus: - vendor: Intel model: Xeon Platinum 8480+ threadCount: 112 count: 2 gpus: - vendor: NVIDIA model: H100 SXM5 totalMemory: 80GB HBM3 count: 8 memory: - capacityMb: 65536 memoryType: DDR5 count: 16 storage: - vendor: '' model: SAMSUNG MZ1L21T9HCLS-00A07 capacityMb: 0 minSizeMiB: 7680000 maxSizeMiB: 7680000 pciPatterns: - ^/devices/pci.*nvme0$ count: 4 chassis: vendor: Supermicro model: SYS-420GP-TNR created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' tags: - SKU delete: summary: Delete SKU operationId: delete-sku description: |- Delete an unused SKU. The Site is determined from the saved SKU record. The Org must have an Infrastructure Provider that owns the SKU's Site. The user must have an authorization role with the `PROVIDER_ADMIN` suffix. responses: '204': description: No Content '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' tags: - SKU patch: summary: Update SKU operationId: update-sku description: |- Update selected mutable fields on a SKU. The Site is determined from the saved SKU record. Fields omitted from the request retain their current values. If a user updates the components field, the schema version will be updated to the current version (5). The Org must have an Infrastructure Provider that owns the SKU's Site. The user must have an authorization role with the `PROVIDER_ADMIN` suffix. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SkuUpdateRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/Sku' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' tags: - SKU '/v2/org/{org}/nico/infiniband-partition': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve all InfiniBand Partitions responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/InfiniBandPartition' examples: Example 1: value: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: turbo-net description: InfiniBand Partition for model training Instances siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 tenantId: f97df110-f4de-492e-8849-4a6af68026b0 controllerIBPartitionId: 0e60d064-3d38-4812-84d9-c3353bd96eaf partitionKey: '0x1' partitionName: turbo-net serviceLevel: 5 rateLimit: 40 mtu: 4000 enableSharp: true labels: environment: production team: devops status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy": "CREATED_DESC"}' description: Pagination result in JSON format '403': $ref: '#/components/responses/ForbiddenError' operationId: get-all-infiniband-partition description: |- Retrieve all InfiniBand Partitions for the org Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. parameters: - schema: type: string format: uuid in: query name: siteId description: Filter Partitions by Site - schema: type: string in: query name: status description: Filter Partitions by Status - schema: type: string in: query name: query description: 'Search for matches across all InfiniBand Partitions. Input will be matched against name, description, and status fields' - schema: type: string enum: - Site - VPC - Tenant in: query name: includeRelation description: Related entity to expand - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - NAME_ASC - NAME_DESC - STATUS_ASC - STATUS_DESC - CREATED_ASC - CREATED_DESC - UPDATED_ASC - UPDATED_DESC in: query name: orderBy description: Ordering for pagination query tags: - InfiniBand Partition post: summary: Create InfiniBand Partition operationId: create-infiniband-partition responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/InfiniBandPartition' examples: Example 1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: turbo-net description: InfiniBand Partition for model training Instances siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 tenantId: f97df110-f4de-492e-8849-4a6af68026b0 controllerIBPartitionId: 0e60d064-3d38-4812-84d9-c3353bd96eaf partitionKey: '0x1' partitionName: turbo-net serviceLevel: 5 rateLimit: 40 mtu: 4000 enableSharp: true labels: environment: production team: devops status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' description: |- Create an InfiniBand Partition for the org. Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. requestBody: content: application/json: schema: $ref: '#/components/schemas/InfiniBandPartitionCreateRequest' examples: Example 1: value: name: turbo-net siteId: 69dae3c8-3554-4a1f-b391-858c6dc47fff labels: environment: production team: devops tags: - InfiniBand Partition '/v2/org/{org}/nico/infiniband-partition/{infiniBandPartitionId}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string name: infiniBandPartitionId in: path required: true description: ID of the InfiniBand Partition get: summary: Retrieve InfiniBand Partition responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/InfiniBandPartition' examples: Example 1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: turbo-net description: InfiniBand Partition for model training Instances siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 tenantId: f97df110-f4de-492e-8849-4a6af68026b0 controllerIBPartitionId: 0e60d064-3d38-4812-84d9-c3353bd96eaf partitionKey: '0x1' partitionName: turbo-net serviceLevel: 5 rateLimit: 40 mtu: 4000 enableSharp: true labels: environment: production team: devops status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '403': $ref: '#/components/responses/ForbiddenError' operationId: get-infiniband-partition description: |- Retrieve a specific InfiniBand Partition Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. Tenant must own the Partition. parameters: - schema: type: string enum: - Site - VPC - Tenant in: query name: includeRelation description: Related entity to expand tags: - InfiniBand Partition delete: summary: Delete InfiniBand Partition operationId: delete-infiniband-partition responses: '202': description: Deletion request was accepted content: application/json: schema: $ref: '#/components/schemas/MessageResponse' examples: example-1: value: message: Deletion request was accepted '403': $ref: '#/components/responses/ForbiddenError' description: |- Delete a specific InfiniBand Partition by ID. Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. Tenant must own the Partition. tags: - InfiniBand Partition patch: summary: Update InfiniBand Partition operationId: update-infiniband-partition responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/InfiniBandPartition' examples: Example 1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: turbo-net-v2 description: Second version of the model training network siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 tenantId: f97df110-f4de-492e-8849-4a6af68026b0 controllerIBPartitionId: 0e60d064-3d38-4812-84d9-c3353bd96eaf partitionKey: '0x1' partitionName: turbo-net serviceLevel: 5 rateLimit: 40 mtu: 4000 enableSharp: true labels: environment: production team: devops status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' description: |- Update an existing InfiniBand Partition Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. Tenant must own the Partition. requestBody: content: application/json: schema: $ref: '#/components/schemas/InfiniBandPartitionUpdateRequest' examples: Example 1: value: name: turbo-net-v2 description: Second version of the model training network labels: environment: production team: devops tags: - InfiniBand Partition '/v2/org/{org}/nico/nvlink-logical-partition': parameters: - schema: type: string name: org in: path required: true description: Name of the NGC Org get: summary: Retrieve all NVLink Logical Partitions responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/NVLinkLogicalPartition' examples: Example 1: value: - id: ded96bdf-905e-40dd-8a58-3472aab60042 name: partition-east-gpu description: NVLink Logical Partition for model training Instances siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 tenantId: f97df110-f4de-492e-8849-4a6af68026b0 status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy": "CREATED_DESC"}' description: Pagination result in JSON format '403': $ref: '#/components/responses/ForbiddenError' operationId: get-all-nvlink-logical-partition description: |- Retrieve all NVLink Logical Partitions for the org Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. parameters: - schema: type: string format: uuid in: query name: siteId description: Filter NVLink Logical Partitions by Site - schema: type: string in: query name: status description: Filter NVLink Logical Partitions by Status - schema: type: string in: query name: query description: 'Search for matches across all NVLink Logical Partitions. Input will be matched against name, description, and status fields' - schema: type: boolean in: query name: includeInterfaces description: Include NVLink Interfaces in response. - schema: type: boolean in: query name: includeStats description: Include NVLink Logical Partition Stats in response. - schema: type: boolean in: query name: includeVpcs description: Include VPCs in response. - schema: type: string enum: - Site - Tenant in: query name: includeRelation description: Related entity to expand - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - STATUS_ASC - STATUS_DESC - CREATED_ASC - CREATED_DESC - UPDATED_ASC - UPDATED_DESC in: query name: orderBy description: Ordering for pagination query tags: - NVLink Logical Partition post: summary: Create NVLink Logical Partition operationId: create-nvlink-logical-partition responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/NVLinkLogicalPartition' examples: Example 1: value: id: ded96bdf-905e-40dd-8a58-3472aab60042 name: partition-east-gpu description: NVLink Logical Partition for model training Instances siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 tenantId: f97df110-f4de-492e-8849-4a6af68026b0 status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' description: |- Create an NVLink Logical Partition for the org. Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. requestBody: content: application/json: schema: $ref: '#/components/schemas/NVLinkLogicalPartitionCreateRequest' examples: Example 1: value: name: partition-east-gpu siteId: 69dae3c8-3554-4a1f-b391-858c6dc47fff tags: - NVLink Logical Partition '/v2/org/{org}/nico/nvlink-logical-partition/{nvLinkLogicalPartitionId}': parameters: - schema: type: string name: org in: path required: true description: Name of the NGC Org - schema: type: string name: nvLinkLogicalPartitionId in: path required: true description: ID of the NVLink Logical Partition get: summary: Retrieve NVLink Logical Partition responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/NVLinkLogicalPartition' '403': $ref: '#/components/responses/ForbiddenError' operationId: get-nvlink-logical-partition description: |- Retrieve a specific NVLink Logical Partition by ID Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. tags: - NVLink Logical Partition parameters: - schema: type: string in: query name: includeInterfaces description: Include all attached NVLink Interfaces in response - schema: type: boolean in: query name: includeStats description: Include NVLink Logical Partition Stats in response - schema: type: boolean in: query name: includeVpcs description: Include all attached VPCs in response - schema: type: string enum: - Site - Tenant in: query name: includeRelation description: Related entity to expand patch: summary: Update NVLink Logical Partition operationId: update-nvlink-logical-partition responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/NVLinkLogicalPartition' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' description: |- Update a specific NVLink Logical Partition Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. requestBody: content: application/json: schema: $ref: '#/components/schemas/NVLinkLogicalPartitionUpdateRequest' tags: - NVLink Logical Partition delete: summary: Delete NVLink Logical Partition operationId: delete-nvlink-logical-partition responses: '202': description: Deletion request was accepted content: application/json: schema: $ref: '#/components/schemas/MessageResponse' examples: example-1: value: message: Deletion request was accepted '403': $ref: '#/components/responses/ForbiddenError' description: |- Delete an NVLink Logical Partition by ID Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. tags: - NVLink Logical Partition '/v2/org/{org}/nico/instance/type': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve all Instance Types responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/InstanceType' examples: example-1: value: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: x3.large description: 'Part of X family, the X3 Large features increased compute power' infrastructureProviderId: 5f2cc306-76e9-4fca-9186-950c9ef9a74e siteId: 72771e6a-6f5e-4de4-a5b9-1266c4197811 machineCapabilities: - type: CPU name: Intel(R) Xeon(R) Gold 6354 CPU @ 3.00GHz frequency: 3.0GHz cores: 18 threads: 36 count: 2 status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' example-2: value: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: ib.general description: General Purpose InfiniBand Instances infrastructureProviderId: 5f2cc306-76e9-4fca-9186-950c9ef9a74e siteId: 72771e6a-6f5e-4de4-a5b9-1266c4197811 machineCapabilities: - type: InfiniBand name: 'Mellanox Technologies MT28908 Family [ConnectX-6]' vendor: Mellanox Technologies count: 2 machineInstanceTypes: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 machineId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g instanceTypeId: 41e36058-8403-4086-a9b8-39cb5bc9cb98 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' example-3: value: - id: 0327339b-f3b7-4de3-9468-7dc29f9f6914 name: ib.multi-dpu description: Multi DPU Instances infrastructureProviderId: 5f2cc306-76e9-4fca-9186-950c9ef9a74e siteId: 72771e6a-6f5e-4de4-a5b9-1266c4197811 machineCapabilities: - type: Network name: MT42822 BlueField-2 integrated ConnectX-6 Dx network controller vendor: Mellanox Technologies count: 2 deviceType: DPU machineInstanceTypes: - id: 0327339b-f3b7-4de3-9468-7dc29f9f6914 machineId: fm100dsg23d2f4tq4tt5m2hgib5pcldrm3gvefbduau7gj3itgc3iqg3lpg instanceTypeId: 771b066a-f2ff-4550-a65d-baef8551167d created: '2025-05-24T14:15:22Z' updated: '2025-05-24T14:15:22Z' status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2025-05-24T14:15:22Z' updated: '2025-05-24T14:15:22Z' created: '2025-05-24T14:15:22Z' updated: '2025-05-24T14:15:22Z' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy": "CREATED_DESC"}' description: Pagination result in JSON format '403': $ref: '#/components/responses/ForbiddenError' operationId: get-all-instance-type description: | Get all Instance Types for the org. The Infrastructure Provider and Tenant are inferred from the org's membership. User must have authorization role with `PROVIDER_ADMIN` or `TENANT_ADMIN` suffix. Results are returned from both Provider and Tenant perspectives when the org has both roles. parameters: - schema: type: string format: uuid in: query name: siteId description: Filter Instance Types by Site ID - schema: type: string format: uuid in: query name: infrastructureProviderId deprecated: true description: Filter Instance Types by Infrastructure Provider ID. - schema: type: string format: uuid in: query name: tenantId deprecated: true description: Filter Instance Types by Tenant ID. - schema: type: string in: query name: status description: Filter Instance Types by Status - schema: type: string in: query name: query description: 'Search for matches across all Instance Types. Input will be matched against name, display name, description, labels, and status fields' - schema: type: string enum: - InfrastructureProvider - Site in: query name: includeRelation description: Related entity to expand - schema: type: boolean in: query name: includeMachineAssignment description: Include Machine assignments for each Instance Type. Can only be requested by Provider. - schema: type: boolean in: query name: includeAllocationStats description: Include Allocation stats. - schema: type: boolean in: query name: excludeUnallocated description: Excludes Instance Type records that have no allocations from being returned in the result set. Currently can only be requested by Tenant. - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - NAME_ASC - NAME_DESC - STATUS_ASC - STATUS_DESC - CREATED_ASC - CREATED_DESC - UPDATED_ASC - UPDATED_DESC in: query name: orderBy description: Ordering for pagination query tags: - Instance Type post: summary: Create an Instance Type operationId: create-instance-type responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/InstanceType' examples: example-1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: x3.large description: 'Part of X family, the X3 Large features increased compute power' infrastructureProviderId: 5f2cc306-76e9-4fca-9186-950c9ef9a74e siteId: 72771e6a-6f5e-4de4-a5b9-1266c4197811 labels: region: portland env: staging machineCapabilities: - type: CPU name: Intel(R) Xeon(R) Gold 6354 CPU @ 3.00GHz frequency: 3.0GHz cores: 18 threads: 36 count: 2 - type: Memory name: Corsair Vengeance LPX capacity: 32GB count: 4 status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' description: | Create an Instance Type for Infrastructure Provider. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. requestBody: content: application/json: schema: $ref: '#/components/schemas/InstanceTypeCreateRequest' examples: example-1: value: name: x3.large description: 'Part of X family, the X3 Large features increased compute power' siteId: 8d97fa69-9199-49ff-bcf3-168c62d3874e labels: region: portland env: staging machineCapabilities: - type: CPU name: Intel(R) Xeon(R) Gold 6354 CPU @ 3.00GHz frequency: 3.0GHz count: 2 - type: Memory name: Corsair Vengeance LPX capacity: 32GB count: 4 example-2: value: name: infiniband-mt2910-4x2 description: Machines with 2 active InfiniBand MT2910 NICs siteId: 8d97fa69-9199-49ff-bcf3-168c62d3874e labels: region: portland env: dev machineCapabilities: - type: InfiniBand name: 'MT2910 Family [ConnectX-7]' vendor: Mellanox Technologies count: 4 inactiveDevices: - 1 - 3 tags: - Instance Type '/v2/org/{org}/nico/instance/type/{instanceTypeId}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: instanceTypeId in: path required: true description: ID of the Instance Type get: summary: Retrieve an Instance Type tags: - Instance Type responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/InstanceType' examples: example-1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: x3.large description: 'Part of X family, the X3 Large features increased compute power' infrastructureProviderId: 5f2cc306-76e9-4fca-9186-950c9ef9a74e siteId: 72771e6a-6f5e-4de4-a5b9-1266c4197811 labels: region: portland env: staging machineCapabilities: - type: CPU name: Intel(R) Xeon(R) Gold 6354 CPU @ 3.00GHz frequency: 3.0GHz cores: 18 threads: 36 count: 2 allocationStats: assigned: 30 total: 10 used: 3 unused: 7 unusedUsable: 7 maxAllocatable: 20 status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '403': $ref: '#/components/responses/ForbiddenError' operationId: get-instance-type description: |- Get an Instance Type by ID. If the org has an Infrastructure Provider entity that owns the Instance Type, then the Instance Type detail is returned. User must have authorization role with `PROVIDER_ADMIN` suffix. If the org has a Tenant entity and it has a Tenant Account with the Infrastructure Provider of the Instance Type, then the Instance Type detail is returned. User must have authorization role with `TENANT_ADMIN` suffix. parameters: - schema: type: boolean in: query name: includeMachineAssociation description: Include Machine associations for each Instance Type. Can only be requested by Provider - schema: type: boolean in: query name: includeAllocationStats description: Include Allocation stats. Currently can only be requested by Tenant - schema: type: string enum: - InfrastructureProvider - Site in: query name: includeRelation description: Related entity to expand delete: summary: Delete Instance Type operationId: delete-instance-type responses: '202': description: Deletion request was accepted content: application/json: schema: $ref: '#/components/schemas/MessageResponse' examples: example-1: value: message: Deletion request was accepted '403': $ref: '#/components/responses/ForbiddenError' description: |- Delete an Instance Type by ID. Org must have an Infrastructure Provider entity that owns the Instance Type. User must have authorization role with `PROVIDER_ADMIN` suffix. tags: - Instance Type patch: summary: Update Instance Type operationId: update-instance-type responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/InstanceType' examples: example-1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: x3.large description: Updated version of the X3 Large family of machines infrastructureProviderId: 5f2cc306-76e9-4fca-9186-950c9ef9a74e siteId: 72771e6a-6f5e-4de4-a5b9-1266c4197811 labels: region: portland env: staging machineCapabilities: - type: CPU name: Intel(R) Xeon(R) Gold 6354 CPU @ 3.00GHz frequency: 3.0GHz cores: 18 threads: 36 count: 2 status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' description: |- Update an Instance Type by ID. Org must have an Infrastructure Provider entity that owns the Instance Type. User must have authorization role with `PROVIDER_ADMIN` suffix. requestBody: content: application/json: schema: $ref: '#/components/schemas/InstanceTypeUpdateRequest' examples: example-1: value: description: Updated version of the X3 Large family of machines labels: region: portland env: staging machineCapabilities: - type: CPU name: Intel(R) Xeon(R) Gold 6354 CPU @ 3.00GHz frequency: 3.0GHz cores: 18 threads: 36 count: 2 description: '' tags: - Instance Type '/v2/org/{org}/nico/instance/type/{instanceTypeId}/machine': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: instanceTypeId in: path required: true description: ID of the Instance Type get: summary: Retrieve all Machines/Instance Type associations tags: - Instance Type responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/MachineInstanceType' examples: example-1: value: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 machineId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g instanceTypeId: 41e36058-8403-4086-a9b8-39cb5bc9cb98 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - id: f690ffcd-06b7-430c-9c2a-b9afd18d77c3 machineId: fm100htrh18t1lrjg2pqagkh3sfigr9m65dejvkq168ako07sc0uibpp5q0 instanceTypeId: 41e36058-8403-4086-a9b8-39cb5bc9cb98 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy": "CREATED_DESC"}' description: Pagination result in JSON format '403': $ref: '#/components/responses/ForbiddenError' operationId: get-instance-type-machine-association description: |- Get all Machines for a given Instance Type Org must have an Infrastructure Provider entity that owns the Instance Type and the Machine. User must have authorization role with `PROVIDER_ADMIN` suffix. parameters: - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - CREATED_ASC - CREATED_DESC - UPDATED_ASC - UPDATED_DESC in: query name: orderBy description: Ordering for pagination query post: summary: Create a Machine/Instance Type association operationId: create-instance-type-machine-association responses: '201': description: Created content: application/json: schema: type: array items: $ref: '#/components/schemas/MachineInstanceType' examples: example-1: value: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 machineId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g instanceTypeId: 41e36058-8403-4086-a9b8-39cb5bc9cb98 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - id: f690ffcd-06b7-430c-9c2a-b9afd18d77c3 machineId: fm100ht68sf2m52idrpslcjkpdj5r3tb3j5o0bkfubhoglbq47u18nknfog instanceTypeId: 41e36058-8403-4086-a9b8-39cb5bc9cb98 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - id: f690ffcd-06b7-430c-9c2a-b9afd18d77c3 machineId: fm100htrh18t1lrjg2pqagkh3sfigr9m65dejvkq168ako07sc0uibpp5q0 instanceTypeId: 41e36058-8403-4086-a9b8-39cb5bc9cb98 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Instance Type description: |- Associate a Machine to an Instance Type Org must have an Infrastructure Provider entity that owns the Instance Type and the Machine. User must have authorization role with `PROVIDER_ADMIN` suffix. The Machine's capabilities must be a superset of the Instance Type's required capabilities for the association to succeed. requestBody: content: application/json: schema: $ref: '#/components/schemas/MachineInstanceTypeCreateRequest' examples: example-1: value: machineIds: - fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g - fm100htrh18t1lrjg2pqagkh3sfigr9m65dejvkq168ako07sc0uibpp5q0 - fm100ht68sf2m52idrpslcjkpdj5r3tb3j5o0bkfubhoglbq47u18nknfog '/v2/org/{org}/nico/instance/type/{instanceTypeId}/machine/{machineAssociationId}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: instanceTypeId in: path required: true description: ID of the Instance Type - schema: type: string name: machineAssociationId in: path required: true description: Can be ID of the Machine (`machineId`) or ID of Machine/Instance Type Association (`machineAssociationId`). Use of `machineAssociationId` is now deprecated and will no longer be accepted after July 9th, 2026 00:00 UTC. delete: summary: Delete a Machine/Instance Type association operationId: delete-instance-type-machine-association responses: '202': description: Deletion request was accepted content: application/json: schema: $ref: '#/components/schemas/MessageResponse' examples: example-1: value: message: Deletion request was accepted '403': $ref: '#/components/responses/ForbiddenError' description: |- Delete a Machine's association with an Instance Type. `machineAssociationId` path parameter has been renamed to `machineId`. The path parameter will continue to accept both Machine ID and Machine/Instance Type ID until July 9th, 2026 00:00 UTC. After that time, Machine/Instance Type ID will no longer be accepted. Org must have an Infrastructure Provider entity that owns the Instance Type and the Machine. User must have authorization role with `PROVIDER_ADMIN` suffix. tags: - Instance Type '/v2/org/{org}/nico/instance': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve all Instances tags: - Instance responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/Instance' examples: example-1: value: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: spark-monitor-1 description: Node for monitoring Spark tenantId: f97df110-f4de-492e-8849-4a6af68026b0 infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 instanceTypeId: 41e36058-8403-4086-a9b8-39cb5bc9cb98 vpcId: 5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3 machineId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g operatingSystemId: eaeb86ee-c435-444e-9e01-8346f67f194b controllerInstanceId: 158fc2bc-f2fb-4e1f-a5a4-2211062d14df ipxeScript: null alwaysBootWithCustomIpxe: false userData: null labels: region: portland env: staging isUpdatePending: false networkSecurityGroupId: 'c602eb90-3039-11f0-997a-b38d4fc8389e,' networkSecurityGroupPropagationDetails: objectId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 detailedStatus: Partial status: Synchronizing details: '' unpropagatedInstanceIds: - 497f6eca-6276-4993-bfeb-53cbbbba6f08 relatedInstanceIds: - 497f6eca-6276-4993-bfeb-53cbbbba6f08 networkSecurityGroupInherited: false serialConsoleUrl: 'ssh://user@nico.acme.com' interfaces: - id: 64d2028c-ae87-4069-a624-66089d957ef9 instanceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 subnetId: 1f232bf0-7b90-456e-b9b0-38d9fea4171a isPhysical: true device: null deviceInstance: null virtualFunctionId: null macAddress: 2F-FC-34-AE-9C-2A ipAddresses: - 200.32.11.190 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' infinibandInterfaces: - id: c518a0e8-3f49-4a1a-8935-a6d3dee6911e instanceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 partitionId: 05ef7e84-1d4e-4e4d-980d-38589479a0fe device: 'MT2910 Family [ConnectX-7]' deviceInstance: 0 isPhysical: true virtualFunctionId: null guid: 946dae0300339498 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' nvLinkInterfaces: - id: fc19ab3f-1e52-4846-91bd-98743ff2752c instanceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 nvLinkDomainId: 59202b81-65fb-45ec-b3b8-91ab0ad3f34a deviceInstance: 0 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - id: c0ae6ec4-9a77-4358-baad-ee8cc3332c91 instanceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 nvLinkDomainId: 59202b81-65fb-45ec-b3b8-91ab0ad3f34a deviceInstance: 1 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - id: aa44ff62-d86b-4db6-9fa4-90a19b05be01 instanceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 nvLinkDomainId: 59202b81-65fb-45ec-b3b8-91ab0ad3f34a deviceInstance: 2 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - id: a403d1ca-2c07-410a-9678-3eb44d570ad9 instanceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 nvLinkDomainId: 59202b81-65fb-45ec-b3b8-91ab0ad3f34a deviceInstance: 3 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' dpuExtensionServiceDeployments: [] sshKeyGroupIds: - 497f6eca-6276-4993-bfeb-53cbbbba6f08 sshKeyGroups: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: reno-integration-sre description: SRE access SSH keys for Reno Integration version: fbc692b61ffef6fbfc38a3833f6b7e7ae508da75 status: Syncing created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' tpmEkCertificate: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMxVENDQWJ5Z0F3SUJBZ0lVTEE1ZHFPK1E5OXZQM3VYRTRKcjBncVRtOW93d0RRWUpLb1pJaHZjTkFRRUwKQlFBd0xqRUxNQWtHQTFVRUJoTUNWVk14RXpBUkJnTlZCQW9NQ2s1MmFXUnBZU0JEYjNKNw== status: Ready statusHistory: - status: BootCompleted message: The Instance successfully completed boot created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' example-2: value: - id: 37804b21-0a00-4668-81cb-af9e1b07ad3e name: spark-monitor-vpc-prefix-1 description: Node for monitoring Spark VPC prefix region tenantId: f97df110-f4de-492e-8849-4a6af68026b0 infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 instanceTypeId: 41e36058-8403-4086-a9b8-39cb5bc9cb98 vpcId: 5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3 machineId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g operatingSystemId: eaeb86ee-c435-444e-9e01-8346f67f194b controllerInstanceId: 37804b21-0a00-4668-81cb-af9e1b07ad3e ipxeScript: null alwaysBootWithCustomIpxe: false userData: null networkSecurityGroupId: c602eb90-3039-11f0-997a-b38d4fc8389e networkSecurityGroupPropagationDetails: objectId: 37804b21-0a00-4668-81cb-af9e1b07ad3e detailedStatus: Partial status: Synchronizing details: '' unpropagatedInstanceIds: - 37804b21-0a00-4668-81cb-af9e1b07ad3e relatedInstanceIds: - 37804b21-0a00-4668-81cb-af9e1b07ad3e networkSecurityGroupInherited: false labels: region: portland env: staging isUpdatePending: false serialConsoleUrl: 'ssh://user@nico.acme.com' interfaces: - id: 07cd865e-5512-4fe9-8063-8f4c8f442b1a instanceId: 37804b21-0a00-4668-81cb-af9e1b07ad3e vpcPrefixId: 915443b6-d164-48d4-89dd-041968e1f9d7 isPhysical: true virtualFunctionId: null macAddress: 2F-FC-34-AE-9C-2A ipAddresses: - 200.32.11.190 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' infinibandInterfaces: - id: c518a0e8-3f49-4a1a-8935-a6d3dee6911e instanceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 partitionId: 05ef7e84-1d4e-4e4d-980d-38589479a0fe device: 'MT2910 Family [ConnectX-7]' deviceInstance: 0 isPhysical: true virtualFunctionId: null guid: 946dae0300339498 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' dpuExtensionServiceDeployments: - id: 3951ec37-d78f-4ad7-92e1-3fdc76ccf246 dpuExtensionService: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: busybox serviceType: KubernetesPod latestVersion: V1-T1761856992374052 status: Ready version: V1-T1761856992374052 status: Running created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' sshKeyGroupIds: - 497f6eca-6276-4993-bfeb-53cbbbba6f08 sshKeyGroups: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: reno-integration-sre description: SRE access SSH keys for Reno Integration version: fbc692b61ffef6fbfc38a3833f6b7e7ae508da75 status: Syncing created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' status: Ready statusHistory: - status: BootCompleted message: The Instance successfully completed boot created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' example-3: value: - id: bba44e11-facc-4d7f-a2b5-ffdca3935b8b name: spark-monitor-vpc-prefix-multi-dpu description: Node for monitoring Spark VPC prefix region with Multi DPU tenantId: f97df110-f4de-492e-8849-4a6af68026b0 infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 instanceTypeId: 9fda8e2b-9656-4f96-9d79-14d03951e2d2 vpcId: 745f757f-894b-45ef-be63-b1044e76a87d machineId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g operatingSystemId: eaeb86ee-c435-444e-9e01-8346f67f194b controllerInstanceId: 8d76c56e-4a1c-4862-bf1c-8c2b794f3315 ipxeScript: null alwaysBootWithCustomIpxe: false userData: null networkSecurityGroupId: c602eb90-3039-11f0-997a-b38d4fc8389e networkSecurityGroupPropagationDetails: objectId: 37804b21-0a00-4668-81cb-af9e1b07ad3e detailedStatus: Partial status: Synchronizing details: '' unpropagatedInstanceIds: - 37804b21-0a00-4668-81cb-af9e1b07ad3e relatedInstanceIds: - 37804b21-0a00-4668-81cb-af9e1b07ad3e networkSecurityGroupInherited: false labels: region: portland env: staging isUpdatePending: false serialConsoleUrl: 'ssh://user@nico.acme.com' interfaces: - id: fa84f327-cad4-458b-94b7-c320cdf48d4d instanceId: bba44e11-facc-4d7f-a2b5-ffdca3935b8b vpcPrefixId: 915443b6-d164-48d4-89dd-041968e1f9d7 isPhysical: true device: MT42822 BlueField-2 integrated ConnectX-6 Dx network controller deviceInstance: 0 virtualFunctionId: null macAddress: 'A0:88:C2:0C:91:B8' ipAddresses: - 10.217.98.143 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - id: fa84f327-cad4-458b-94b7-c320cdf48d4d instanceId: bba44e11-facc-4d7f-a2b5-ffdca3935b8b vpcPrefixId: 56944877-3bc0-48c9-8290-21f9e0e31eca isPhysical: true device: MT42822 BlueField-2 integrated ConnectX-6 Dx network controller deviceInstance: 1 virtualFunctionId: null macAddress: 'A0:88:C2:0C:91:20' ipAddresses: - 10.217.98.149 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' infinibandInterfaces: [] dpuExtensionServiceDeployments: [] sshKeyGroupIds: - 497f6eca-6276-4993-bfeb-53cbbbba6f08 sshKeyGroups: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: reno-integration-sre description: SRE access SSH keys for Reno Integration version: fbc692b61ffef6fbfc38a3833f6b7e7ae508da75 status: Syncing created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' status: Ready statusHistory: - status: BootCompleted message: The Instance successfully completed boot created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy": "CREATED_DESC"}' description: Pagination result in JSON format '403': $ref: '#/components/responses/ForbiddenError' operationId: get-all-instance description: | Get all Instances for Tenant. Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. parameters: - schema: type: string format: uuid in: query name: infrastructureProviderId deprecated: true description: "Filter by Infrastructure Provider ID. Deprecated: Instances will no longer be filtered by Infrastructure Provider; results are scoped to the org's Tenant. Use the siteId parameter to scope results to a specific Infrastructure Provider's Sites." - schema: type: string format: uuid in: query name: siteId description: Filter by Site ID. Can be specified multiple times to filter on more than one site. - schema: type: string format: uuid in: query name: vpcId description: Filter by VPC ID. Can be specified multiple times to filter on more than one VPC. - schema: type: string format: uuid in: query name: instanceTypeId description: Filter by instance type ID. Can be specified multiple times to filter on more than one instance type. - schema: type: string format: uuid in: query name: operatingSystemId description: Filter by operating system ID. Can be specified multiple times to filter on more than one operating system. - schema: type: string in: query name: machineId description: Filter by machine ID. Can be specified multiple times to filter on more than one machine. - schema: type: string in: query name: name description: Filter by Instance name - schema: type: string in: query name: status description: Filter Instances by Status. Can be specified multiple times to filter on more than one status. - schema: type: string in: query name: ipAddress description: Filter by IP address. Can be specified multiple times to filter on more than one IP address. - schema: type: string in: query name: query description: 'Search for matches across all Instances. Input will be matched against name, description, status, and labels fields' - schema: type: string enum: - InfrastructureProvider - Tenant - Site - InstanceType - Allocation - VPC - Machine - OperatingSystem - NetworkSecurityGroup in: query name: includeRelation description: Related entity to expand - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - NAME_ASC - NAME_DESC - STATUS_ASC - STATUS_DESC - CREATED_ASC - CREATED_DESC - UPDATED_ASC - UPDATED_DESC - MACHINE_ID_ASC - MACHINE_ID_DESC - TENANT_ORG_DISPLAY_NAME_ASC - TENANT_ORG_DISPLAY_NAME_DESC - INSTANCE_TYPE_NAME_ASC - INSTANCE_TYPE_NAME_DESC - HAS_INFINIBAND_ASC - HAS_INFINIBAND_DESC in: query name: orderBy description: Ordering for pagination query - schema: type: string in: query name: networkSecurityGroupId description: Filter by Network Security Group ID. Can be specified multiple times to filter on more than one Network Security Group. post: summary: Create an Instance operationId: create-instance responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/Instance' examples: With iPXE override and Ethernet/InfiniBand Interfaces: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: spark-monitor-1 description: Node for monitoring Spark tenantId: f97df110-f4de-492e-8849-4a6af68026b0 infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 instanceTypeId: 41e36058-8403-4086-a9b8-39cb5bc9cb98 vpcId: 5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3 machineId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g operatingSystemId: eaeb86ee-c435-444e-9e01-8346f67f194b controllerInstanceId: null ipxeScript: |- #!ipxe kernel http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux initrd=initrd.gz initrd http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz boot || imgfree shell alwaysBootWithCustomIpxe: true userData: |- #cloud-config autoinstall: apt: geoip: true preserve_sources_list: false primary: - arches: [amd64, i386] uri: http://archive.ubuntu.com/ubuntu - arches: [default] uri: http://ports.ubuntu.com/ubuntu-ports labels: region: portland env: staging isUpdatePending: false serialConsoleUrl: 'ssh://user@nico.acme.com' interfaces: - id: 64d2028c-ae87-4069-a624-66089d957ef9 instanceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 subnetId: 1f232bf0-7b90-456e-b9b0-38d9fea4171a isPhysical: true virtualFunctionId: null macAddress: null ipAddresses: [] status: Pending created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' infinibandInterfaces: - id: c518a0e8-3f49-4a1a-8935-a6d3dee6911e instanceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 partitionId: 05ef7e84-1d4e-4e4d-980d-38589479a0fe device: 'MT2910 Family [ConnectX-7]' deviceInstance: 0 isPhysical: true virtualFunctionId: null guid: 946dae0300339498 status: Pending created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' nvLinkInterfaces: - id: fc19ab3f-1e52-4846-91bd-98743ff2752c instanceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 nvLinkDomainId: 59202b81-65fb-45ec-b3b8-91ab0ad3f34a deviceInstance: 0 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' dpuExtensionServiceDeployments: [] sshKeyGroupIds: - 497f6eca-6276-4993-bfeb-53cbbbba6f08 sshKeyGroups: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: reno-integration-sre description: SRE access SSH keys for Reno Integration version: fbc692b61ffef6fbfc38a3833f6b7e7ae508da75 status: Syncing created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' With DPU Extension Service Deployments: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: spark-monitor-1 description: Node for monitoring Spark tenantId: f97df110-f4de-492e-8849-4a6af68026b0 infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 instanceTypeId: 41e36058-8403-4086-a9b8-39cb5bc9cb98 vpcId: 5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3 machineId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g operatingSystemId: eaeb86ee-c435-444e-9e01-8346f67f194b controllerInstanceId: null labels: region: portland env: staging isUpdatePending: false serialConsoleUrl: 'ssh://user@nico.acme.com' interfaces: - id: 64d2028c-ae87-4069-a624-66089d957ef9 instanceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 subnetId: 1f232bf0-7b90-456e-b9b0-38d9fea4171a isPhysical: true virtualFunctionId: null macAddress: null ipAddresses: [] status: Pending created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' dpuExtensionServiceDeployments: - id: 3951ec37-d78f-4ad7-92e1-3fdc76ccf246 dpuExtensionService: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: busybox serviceType: KubernetesPod latestVersion: V1-T1761856992374052 status: Ready version: V1-T1761856992374052 status: Running created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' sshKeyGroupIds: - 497f6eca-6276-4993-bfeb-53cbbbba6f08 sshKeyGroups: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: reno-integration-sre description: SRE access SSH keys for Reno Integration version: fbc692b61ffef6fbfc38a3833f6b7e7ae508da75 status: Syncing created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '429': $ref: '#/components/responses/ResourceExhaustedError' description: | Create an Instance for Tenant. Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. requestBody: content: application/json: schema: $ref: '#/components/schemas/InstanceCreateRequest' examples: With Subnet/InfiniBand Interfaces & iPXE Override: value: name: spark-monitor-1 description: Node for monitoring Spark tenantId: f97df110-f4de-492e-8849-4a6af68026b0 instanceTypeId: 41e36058-8403-4086-a9b8-39cb5bc9cb98 vpcId: 5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3 operatingSystemId: eaeb86ee-c435-444e-9e01-8346f67f194b ipxeScript: |- #!ipxe kernel http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux initrd=initrd.gz initrd http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz boot || imgfree shell alwaysBootWithCustomIpxe: true userData: |- #cloud-config autoinstall: apt: geoip: true preserve_sources_list: false primary: - arches: [amd64, i386] uri: http://archive.ubuntu.com/ubuntu - arches: [default] uri: http://ports.ubuntu.com/ubuntu-ports labels: region: portland env: staging interfaces: - subnetId: 1f232bf0-7b90-456e-b9b0-38d9fea4171a isPhysical: true infinibandInterfaces: - partitionId: 4f4decba-7d7f-46b9-9e5f-e5d71c2e0666 device: 'MT2910 Family [ConnectX-7]' deviceInstance: 0 isPhysical: true virtualFunctionId: null nvLinkInterfaces: - nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 deviceInstance: 0 - nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 deviceInstance: 1 - nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 deviceInstance: 2 - nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 deviceInstance: 3 sshKeyGroupIds: - 497f6eca-6276-4993-bfeb-53cbbbba6f08 With Machine ID & VPC Prefix Interface: value: name: spark-monitor-3 description: Node for monitoring Spark tenantId: f97df110-f4de-492e-8849-4a6af68026b0 machineId: fm100htq4o8j3bere298as19mdgnbu6hg6guiqp32tghj7gogv05hlr7lgg vpcId: ebcd2d2a-deca-4ac4-b079-d7a97fff8a6b operatingSystemId: eaeb86ee-c435-444e-9e01-8346f67f194b labels: region: portland env: staging interfaces: - vpcPrefixId: 000bc42b-f946-472e-83d4-ddf7e365e148 isPhysical: true sshKeyGroupIds: - a7bf2f9c-12f0-4673-be47-12be6d9e16c8 With Multiple Ethernet Device Interfaces: value: name: spark-monitor-3 description: Node for monitoring Spark tenantId: f97df110-f4de-492e-8849-4a6af68026b0 machineId: fm100htq4o8j3bere298as19mdgnbu6hg6guiqp32tghj7gogv05hlr7lgg vpcId: ebcd2d2a-deca-4ac4-b079-d7a97fff8a6b operatingSystemId: eaeb86ee-c435-444e-9e01-8346f67f194b labels: region: portland env: staging interfaces: - vpcPrefixId: 8c7422d7-abf5-41ae-8b6d-9d62442a8b31 isPhysical: true device: MT43244 BlueField-3 integrated ConnectX-7 network controller deviceInstance: 0 - vpcPrefixId: 8988dbd3-f038-4338-b961-8e5cbf89a77e isPhysical: true device: MT43244 BlueField-3 integrated ConnectX-7 network controller deviceInstance: 1 sshKeyGroupIds: - a7bf2f9c-12f0-4673-be47-12be6d9e16c8 With DPU Extension Services: value: name: llm-training-1 description: Node for training LLMs tenantId: f97df110-f4de-492e-8849-4a6af68026b0 machineId: fm100htq4o8j3bere298as19mdgnbu6hg6guiqp32tghj7gogv05hlr7lgg vpcId: ebcd2d2a-deca-4ac4-b079-d7a97fff8a6b operatingSystemId: eaeb86ee-c435-444e-9e01-8346f67f194b labels: region: portland env: staging interfaces: - vpcPrefixId: 8c7422d7-abf5-41ae-8b6d-9d62442a8b31 isPhysical: true device: MT43244 BlueField-3 integrated ConnectX-7 network controller deviceInstance: 0 - vpcPrefixId: 8988dbd3-f038-4338-b961-8e5cbf89a77e isPhysical: true device: MT43244 BlueField-3 integrated ConnectX-7 network controller deviceInstance: 1 dpuExtensionServiceDeployments: - dpuExtensionServiceId: 3bddb7b4-0963-4278-b311-c212dc758357 version: V1-T1761856992374052 - dpuExtensionServiceId: cd4a8168-c206-430a-9a4b-bf7dbbac3b40 version: V1-T1762294647497908 sshKeyGroupIds: - a7bf2f9c-12f0-4673-be47-12be6d9e16c8 tags: - Instance '/v2/org/{org}/nico/instance/batch': parameters: - schema: type: string name: org in: path required: true description: Name of the Org post: summary: Batch Create Instances operationId: batch-create-instance responses: '201': description: Created content: application/json: schema: type: array items: $ref: '#/components/schemas/Instance' examples: Batch created Instances: value: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: worker-abc123 description: Worker node for distributed training tenantId: f97df110-f4de-492e-8849-4a6af68026b0 infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 instanceTypeId: 41e36058-8403-4086-a9b8-39cb5bc9cb98 vpcId: 5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3 machineId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g operatingSystemId: eaeb86ee-c435-444e-9e01-8346f67f194b controllerInstanceId: null status: Pending created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - id: 85c5e7b2-89f1-4e32-9d3a-8e1f5a2c7d90 name: worker-def456 description: Worker node for distributed training tenantId: f97df110-f4de-492e-8849-4a6af68026b0 infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 instanceTypeId: 41e36058-8403-4086-a9b8-39cb5bc9cb98 vpcId: 5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3 machineId: gn200iu5w5ndf3rtukol9081ook4jf7fdfl5nuok38qfb5lsf6hub50kh1h operatingSystemId: eaeb86ee-c435-444e-9e01-8346f67f194b controllerInstanceId: null status: Pending created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '429': $ref: '#/components/responses/ResourceExhaustedError' description: | Batch create multiple Instances for Tenant with NVLink domain-aware machine allocation. This endpoint creates multiple instances in a single atomic transaction. All instances share the same configuration (interfaces, OS, SSH keys, etc.) but are assigned different machines. When `topologyOptimized` is true (default), all instances must be allocated on machines within the same NVLink domain. If insufficient machines are available in a single NVLink domain, the request will fail. When `topologyOptimized` is false, instances can be spread across different NVLink domains. Instance names are automatically generated using the `namePrefix` with a random 6-character suffix (e.g., "worker" becomes "worker-abc123", "worker-def456"). Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. requestBody: content: application/json: schema: $ref: '#/components/schemas/BatchInstanceCreateRequest' examples: Topology-optimized batch with InfiniBand: value: namePrefix: gpu-worker count: 4 description: GPU worker nodes for distributed training tenantId: f97df110-f4de-492e-8849-4a6af68026b0 instanceTypeId: 41e36058-8403-4086-a9b8-39cb5bc9cb98 vpcId: 5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3 operatingSystemId: eaeb86ee-c435-444e-9e01-8346f67f194b topologyOptimized: true interfaces: - subnetId: 1f232bf0-7b90-456e-b9b0-38d9fea4171a isPhysical: true infinibandInterfaces: - partitionId: 4f4decba-7d7f-46b9-9e5f-e5d71c2e0666 device: 'MT2910 Family [ConnectX-7]' deviceInstance: 0 isPhysical: true nvLinkInterfaces: - nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 deviceInstance: 0 - nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 deviceInstance: 1 sshKeyGroupIds: - 497f6eca-6276-4993-bfeb-53cbbbba6f08 Cross-domain batch with VPC Prefix: value: namePrefix: inference-node count: 8 description: Inference nodes spread across NVLink domains tenantId: f97df110-f4de-492e-8849-4a6af68026b0 instanceTypeId: 83e71f8f-65d3-44ba-92ba-19daac2e497a vpcId: ebcd2d2a-deca-4ac4-b079-d7a97fff8a6b operatingSystemId: eaeb86ee-c435-444e-9e01-8346f67f194b topologyOptimized: false labels: workload: inference tier: production interfaces: - vpcPrefixId: 000bc42b-f946-472e-83d4-ddf7e365e148 isPhysical: true sshKeyGroupIds: - a7bf2f9c-12f0-4673-be47-12be6d9e16c8 tags: - Instance '/v2/org/{org}/nico/instance/{instanceId}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: instanceId in: path required: true description: ID of the Instance get: summary: Retrieve Instance tags: - Instance responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/Instance' examples: example-1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: spark-monitor-1 description: Node for monitoring Spark tenantId: f97df110-f4de-492e-8849-4a6af68026b0 infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 instanceTypeId: 41e36058-8403-4086-a9b8-39cb5bc9cb98 vpcId: 5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3 machineId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g operatingSystemId: eaeb86ee-c435-444e-9e01-8346f67f194b controllerInstanceId: null ipxeScript: null alwaysBootWithCustomIpxe: false userData: null networkSecurityGroupId: c602eb90-3039-11f0-997a-b38d4fc8389e networkSecurityGroupPropagationDetails: objectId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 detailedStatus: Partial status: Synchronizing details: '' unpropagatedInstanceIds: - 497f6eca-6276-4993-bfeb-53cbbbba6f08 relatedInstanceIds: - 497f6eca-6276-4993-bfeb-53cbbbba6f08 networkSecurityGroupInherited: false labels: region: portland env: staging isUpdatePending: false serialConsoleUrl: 'ssh://user@nico.acme.com' interfaces: - id: 64d2028c-ae87-4069-a624-66089d957ef9 instanceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 subnetId: 1f232bf0-7b90-456e-b9b0-38d9fea4171a isPhysical: true virtualFunctionId: null macAddress: 2F-FC-34-AE-9C-2A ipAddresses: - 200.32.11.190 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' infinibandInterfaces: - id: c518a0e8-3f49-4a1a-8935-a6d3dee6911e instanceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 partitionId: 4f4decba-7d7f-46b9-9e5f-e5d71c2e0666 device: 'MT2910 Family [ConnectX-7]' deviceInstance: 0 isPhysical: true virtualFunctionId: null guid: 946dae0300339498 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' nvLinkInterfaces: - id: fc19ab3f-1e52-4846-91bd-98743ff2752c instanceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 nvLinkDomainId: 59202b81-65fb-45ec-b3b8-91ab0ad3f34a deviceInstance: 0 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - id: c0ae6ec4-9a77-4358-baad-ee8cc3332c91 instanceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 nvLinkDomainId: 59202b81-65fb-45ec-b3b8-91ab0ad3f34a deviceInstance: 1 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - id: aa44ff62-d86b-4db6-9fa4-90a19b05be01 instanceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 nvLinkDomainId: 59202b81-65fb-45ec-b3b8-91ab0ad3f34a deviceInstance: 2 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - id: a403d1ca-2c07-410a-9678-3eb44d570ad9 instanceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 nvLinkDomainId: 59202b81-65fb-45ec-b3b8-91ab0ad3f34a deviceInstance: 3 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' dpuExtensionServiceDeployments: - id: 3951ec37-d78f-4ad7-92e1-3fdc76ccf246 dpuExtensionService: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: busybox serviceType: KubernetesPod latestVersion: V1-T1761856992374052 status: Ready version: V1-T1761856992374052 status: Running created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' sshKeyGroupIds: - 497f6eca-6276-4993-bfeb-53cbbbba6f08 sshKeyGroups: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: reno-integration-sre description: SRE access SSH keys for Reno Integration version: fbc692b61ffef6fbfc38a3833f6b7e7ae508da75 status: Syncing created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' tpmEkCertificate: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMxVENDQWJ5Z0F3SUJBZ0lVTEE1ZHFPK1E5OXZQM3VYRTRKcjBncVRtOW93d0RRWUpLb1pJaHZjTkFRRUwKQlFBd0xqRUxNQWtHQTFVRUJoTUNWVk14RXpBUkJnTlZCQW9NQ2s1MmFXUnBZU0JEYjNKNw== status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '403': $ref: '#/components/responses/ForbiddenError' operationId: get-instance description: | Get an Instance by ID Org must have a Tenant entity. Instance must belong to Tenant. User must have authorization role with `TENANT_ADMIN` suffix. parameters: - schema: type: string enum: - InfrastructureProvider - Tenant - Site - InstanceType - Allocation - VPC - OperatingSystem - NetworkSecurityGroup in: query name: includeRelation description: Related entity to expand delete: summary: Delete Instance operationId: delete-instance responses: '202': description: Deletion request was accepted content: application/json: schema: $ref: '#/components/schemas/MessageResponse' examples: example-1: value: message: Deletion request was accepted '403': $ref: '#/components/responses/ForbiddenError' description: |- Delete an Instance by ID Org must have a Tenant entity. Instance must belong to Tenant. User must have authorization role with `TENANT_ADMIN` suffix. tags: - Instance requestBody: content: application/json: schema: $ref: '#/components/schemas/InstanceDeleteRequest' examples: Example 1: value: machineHealthIssue: category: Network summary: Machine has DPU connectivity error details: Tenant observed repeated link flaps on the DPU uplink. isRepairTenant: false description: Optional request data to report health issues with the underlying Machine patch: summary: Update Instance operationId: update-instance responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/Instance' examples: example-1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: spark-monitor-2 description: Spark Monitor Node 1 tenantId: f97df110-f4de-492e-8849-4a6af68026b0 infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 instanceTypeId: 41e36058-8403-4086-a9b8-39cb5bc9cb98 vpcId: 5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3 machineId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g operatingSystemId: eaeb86ee-c435-444e-9e01-8346f67f194b controllerInstanceId: 158fc2bc-f2fb-4e1f-a5a4-2211062d14df ipxeScript: null alwaysBootWithCustomIpxe: false userData: null labels: region: portland env: staging isUpdatePending: false serialConsoleUrl: 'ssh://user@nico.acme.com' interfaces: - id: 64d2028c-ae87-4069-a624-66089d957ef9 instanceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 subnetId: 1f232bf0-7b90-456e-b9b0-38d9fea4171a isPhysical: true virtualFunctionId: null macAddress: 2F-FC-34-AE-9C-2A ipAddresses: - 200.32.11.190 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' infinibandInterfaces: - id: c518a0e8-3f49-4a1a-8935-a6d3dee6911e instanceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 partitionId: 550e8400-e29b-41d4-a716-446655440000 device: 'MT2910 Family [ConnectX-7]' deviceInstance: 0 isPhysical: true virtualFunctionId: null guid: 946dae0300339498 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - id: 3cc0206e-8ac9-4572-8f72-e1dd124c4351 instanceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 partitionId: 6ba7b810-9dad-11d1-80b4-00c04fd430c8 device: 'MT2910 Family [ConnectX-7]' deviceInstance: 1 isPhysical: true virtualFunctionId: null guid: 946dae0300339498 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - id: 84a2cf1e-73fc-42f4-974e-33a4e9889eb9 instanceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 partitionId: 8b05d5c3-8de4-48c8-8d1c-399a8abc3ab8 device: 'MT2910 Family [ConnectX-7]' deviceInstance: 2 isPhysical: true virtualFunctionId: null guid: 946dae0300339498 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' dpuExtensionServiceDeployments: - id: 3951ec37-d78f-4ad7-92e1-3fdc76ccf246 dpuExtensionService: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: busybox serviceType: KubernetesPod latestVersion: V1-T1761856992374052 status: Ready version: V1-T1761856992374052 status: Running created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - id: 60d3ad40-62c6-44ca-b6b1-74bc6dd04f1c dpuExtensionService: id: cd4a8168-c206-430a-9a4b-bf7dbbac3b40 name: openssh-server serviceType: KubernetesPod latestVersion: V1-T1762294647497908 status: Ready version: V1-T1762294647497908 status: Running created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' sshKeyGroupIds: - 497f6eca-6276-4993-bfeb-53cbbbba6f08 sshKeyGroups: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: reno-integration-sre description: SRE access SSH keys for Reno Integration version: fbc692b61ffef6fbfc38a3833f6b7e7ae508da75 status: Syncing created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' tpmEkCertificate: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMxVENDQWJ5Z0F3SUJBZ0lVTEE1ZHFPK1E5OXZQM3VYRTRKcjBncVRtOW93d0RRWUpLb1pJaHZjTkFRRUwKQlFBd0xqRUxNQWtHQTFVRUJoTUNWVk14RXpBUkJnTlZCQW9NQ2s1MmFXUnBZU0JEYjNKNw== status: Rebooting statusHistory: - status: Rebooting message: 'Reboot request received, processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - status: Provisioning message: Instance is being provisioned on Site created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '429': $ref: '#/components/responses/ResourceExhaustedError' description: |- Update an Instance by ID Org must have a Tenant entity. Instance must belong to Tenant. User must have authorization role with `TENANT_ADMIN` suffix. requestBody: content: application/json: schema: $ref: '#/components/schemas/InstanceUpdateRequest' examples: example-1: value: name: spark-monitor-1 description: Spark Monitor Node 1 triggerReboot: true rebootWithCustomIpxe: true applyUpdatesOnReboot: true sshKeyGroupIds: - a7bf2f9c-12f0-4673-be47-12be6d9e16c8 labels: region: portland env: staging interfaces: - vpcPrefixId: 1f492faa-2963-4f21-aab5-9f00b2e40119 device: MT42822 BlueField-2 integrated ConnectX-6 Dx network controller deviceInstance: 0 virtualFunctionId: null isPhysical: true - vpcPrefixId: 1f3677dd-5794-4e57-b9b0-aebaf49b84fe device: MT42822 BlueField-2 integrated ConnectX-6 Dx network controller deviceInstance: 0 virtualFunctionId: 1 isPhysical: false - vpcPrefixId: 29e6f51b-145c-4f89-8c26-accaa8328398 device: MT42822 BlueField-2 integrated ConnectX-6 Dx network controller deviceInstance: 0 virtualFunctionId: 2 isPhysical: false infinibandInterfaces: - partitionId: 550e8400-e29b-41d4-a716-446655440000 device: 'MT2910 Family [ConnectX-7]' deviceInstance: 0 isPhysical: true - partitionId: 6ba7b810-9dad-11d1-80b4-00c04fd430c8 device: 'MT2910 Family [ConnectX-7]' deviceInstance: 1 isPhysical: false - partitionId: 8b05d5c3-8de4-48c8-8d1c-399a8abc3ab8 device: 'MT2910 Family [ConnectX-7]' deviceInstance: 2 isPhysical: false nvLinkInterfaces: - nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 deviceInstance: 0 - nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 deviceInstance: 1 - nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 deviceInstance: 2 - nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 deviceInstance: 3 dpuExtensionServiceDeployments: - dpuExtensionServiceId: 3bddb7b4-0963-4278-b311-c212dc758357 version: V1-T1761856992374052 - dpuExtensionServiceId: cd4a8168-c206-430a-9a4b-bf7dbbac3b40 version: V1-T1762294647497908 description: '' tags: - Instance '/v2/org/{org}/nico/instance/{instanceId}/status-history': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string name: instanceId in: path required: true description: ID of the Instance get: summary: Retrieve Instance status history tags: - Instance responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/StatusDetail' examples: Example 1: value: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' headers: X-Pagination: schema: type: string description: Pagination result in JSON format '403': $ref: '#/components/responses/ForbiddenError' operationId: get-instance-status-history description: | Get Instance status history Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. parameters: - schema: type: integer in: query name: pageNumber description: Page number for pagination query - schema: type: integer in: query name: pageSize description: Page size for pagination query - schema: type: string in: query name: orderBy description: Ordering for pagination query '/v2/org/{org}/nico/instance/{instanceId}/interface': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string name: instanceId in: path required: true description: ID of the Instance get: summary: Retrieve all Interfaces tags: - Instance responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/Interface' examples: Example 1: value: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 instanceId: 64d2028c-ae87-4069-a624-66089d957ef9 subnetId: 1f232bf0-7b90-456e-b9b0-38d9fea4171a isPhysical: true virtualFunctionId: null macAddress: 2F-FC-34-AE-9C-2A ipAddresses: - 200.32.11.190 status: Pending created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 instanceId: d57b373a-5a59-4fa4-b080-50e9a1095aeb vpcPrefixId: 26be5f71-3d51-487b-a940-6513c7725cfd isPhysical: true virtualFunctionId: null macAddress: 2F-FC-34-AE-9C-2A ipAddresses: - 200.32.11.190 status: Pending created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy": "CREATED_DESC"}' description: Pagination result in JSON format '403': $ref: '#/components/responses/ForbiddenError' operationId: get-all-interface description: |- Get all Interfaces for an Instance Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. parameters: - schema: type: string in: query name: status description: Filter Interfaces by Status - schema: type: string enum: - Instance - Subnet in: query name: includeRelation description: Related entity to expand - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - STATUS_ASC - STATUS_DESC - CREATED_ASC - CREATED_DESC - UPDATED_ASC - UPDATED_DESC in: query name: orderBy description: Ordering for pagination query '/v2/org/{org}/nico/instance/{instanceId}/infiniband-interface': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string name: instanceId in: path required: true description: ID of the Instance get: summary: Retrieve all Instance InfiniBand Interfaces tags: - Instance responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/InfiniBandInterface' examples: Example 1: value: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 instanceId: 64d2028c-ae87-4069-a624-66089d957ef9 partitionId: 05ef7e84-1d4e-4e4d-980d-38589479a0fe device: 'MT2910 Family [ConnectX-7]' deviceInstance: 0 isPhysical: true virtualFunctionId: null guid: 946dae0300339498 status: Provisioning created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - id: c518a0e8-3f49-4a1a-8935-a6d3dee6911e instanceId: 64d2028c-ae87-4069-a624-66089d957ef9 partitionId: 6ba7b810-9dad-11d1-80b4-00c04fd430c8 device: 'MT2910 Family [ConnectX-7]' deviceInstance: 1 isPhysical: false virtualFunctionId: 1 guid: 946dae0300339499 status: Provisioning created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy": "CREATED_DESC"}' description: Pagination result in JSON format '403': $ref: '#/components/responses/ForbiddenError' operationId: get-all-instance-infiniband-interface description: |- Get all InfiniBand Interfaces for an Instance Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. parameters: - schema: type: string in: query name: status description: Filter InfiniBand Interfaces by Status - schema: type: string enum: - Instance - InfiniBandPartition in: query name: includeRelation description: Related entity to expand - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - STATUS_ASC - STATUS_DESC - CREATED_ASC - CREATED_DESC - UPDATED_ASC - UPDATED_DESC in: query name: orderBy description: Ordering for pagination query '/v2/org/{org}/nico/instance/{instanceId}/nvlink-interface': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string name: instanceId in: path required: true description: ID of the Instance get: summary: Retrieve all Instance NVLink Interfaces tags: - Instance responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/NVLinkInterface' examples: Example 1: value: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 instanceId: 64d2028c-ae87-4069-a624-66089d957ef9 nvLinkLogicalPartitionId: 05ef7e84-1d4e-4e4d-980d-38589479a0fe nvLinkDomainId: 4b145552-0d8f-45ff-b652-eed105f93e50 deviceInstance: 0 gpuGuid: '5108732638879268442' status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - id: 8a7c3b21-1ffc-4c78-9a00-2a6f3859d099 instanceId: 64d2028c-ae87-4069-a624-66089d957ef9 nvLinkLogicalPartitionId: 05ef7e84-1d4e-4e4d-980d-38589479a0fe nvLinkDomainId: 4b145552-0d8f-45ff-b652-eed105f93e50 deviceInstance: 1 gpuGuid: '5108732638879268443' status: Provisioning created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy": "CREATED_DESC"}' description: Pagination result in JSON format '403': $ref: '#/components/responses/ForbiddenError' operationId: get-all-instance-nvlink-interface description: |- Get all NVLink Interfaces for an Instance Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. parameters: - schema: type: string in: query name: status description: Filter NVLink Interfaces by Status. Can be specified multiple times to filter on more than one status. - schema: type: string enum: - Instance - NVLinkLogicalPartition in: query name: includeRelation description: Related entity to expand - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - STATUS_ASC - STATUS_DESC - CREATED_ASC - CREATED_DESC - UPDATED_ASC - UPDATED_DESC in: query name: orderBy description: Ordering for pagination query '/v2/org/{org}/nico/infiniband-interface': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve all InfiniBand Interfaces tags: - InfiniBand Partition responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/InfiniBandInterface' examples: Example 1: value: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 instanceId: 64d2028c-ae87-4069-a624-66089d957ef9 partitionId: 05ef7e84-1d4e-4e4d-980d-38589479a0fe device: 'MT2910 Family [ConnectX-7]' deviceInstance: 0 isPhysical: true virtualFunctionId: null guid: 946dae0300339498 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy": "CREATED_DESC"}' description: Pagination result in JSON format '403': $ref: '#/components/responses/ForbiddenError' operationId: get-all-infiniband-interface description: |- Get all InfiniBand Interfaces Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. parameters: - schema: type: string in: query name: siteId description: Filter InfiniBand Interfaces by Site ID. Can be specified multiple times to filter on more than one ID. - schema: type: string in: query name: instanceId description: Filter InfiniBand Interfaces by Instance ID. Can be specified multiple times to filter on more than one ID. - schema: type: string in: query name: infinibandPartitionId description: Filter InfiniBand Interfaces by InfiniBand Partition ID. Can be specified multiple times to filter on more than one ID. - schema: type: string in: query name: status description: Filter InfiniBand Interfaces by Status. Can be specified multiple times to filter on more than one status. - schema: type: string enum: - Instance - InfiniBandPartition - Site in: query name: includeRelation description: Related entity to expand - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - STATUS_ASC - STATUS_DESC - CREATED_ASC - CREATED_DESC - UPDATED_ASC - UPDATED_DESC in: query name: orderBy description: Ordering for pagination query '/v2/org/{org}/nico/nvlink-interface': parameters: - schema: type: string name: org in: path required: true description: Name of the NGC Org get: summary: Retrieve all NVLink Interfaces tags: - NVLink Logical Partition responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/NVLinkInterface' examples: Example 1: value: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 instanceId: 64d2028c-ae87-4069-a624-66089d957ef9 nvLinkLogicalPartitionId: 05ef7e84-1d4e-4e4d-980d-38589479a0fe nvLinkDomainId: 4b145552-0d8f-45ff-b652-eed105f93e50 deviceInstance: 0 gpuGuid: '5108732638879268442' status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy": "CREATED_DESC"}' description: Pagination result in JSON format '403': $ref: '#/components/responses/ForbiddenError' operationId: get-all-nvlink-interface description: |- Get all NVLink Interfaces Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. parameters: - schema: type: string in: query name: status description: Filter NVLink Interfaces by Status. Can be specified multiple times to filter on more than one status. - schema: type: string in: query name: siteId description: Filter NVLink Interfaces by Site ID. Can be specified multiple times to filter on more than one ID. - schema: type: string in: query name: instanceId description: Filter NVLink Interfaces by Instance ID. Can be specified multiple times to filter on more than one ID. - schema: type: string in: query name: nvLinkLogicalPartitionId description: Filter NVLink Interfaces by NVLink Logical Partition ID. Can be specified multiple times to filter on more than one ID. - schema: type: string in: query name: nvLinkDomainId description: Filter NVLink Interfaces by NVLink Domain ID. Can be specified multiple times to filter on more than one ID. - schema: type: string enum: - Instance - NVLinkLogicalPartition in: query name: includeRelation description: Related entity to expand - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - STATUS_ASC - STATUS_DESC - CREATED_ASC - CREATED_DESC - UPDATED_ASC - UPDATED_DESC in: query name: orderBy description: Ordering for pagination query '/v2/org/{org}/nico/operating-system': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve all Operating Systems tags: - Operating System responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/OperatingSystem' examples: example-1: value: - id: 42b0f982-5c61-4d2f-a018-41ece61f4641 name: debian-12-amd64 description: Official Debian 12 for AMD/Intel infrastructureProviderId: null tenantId: f97df110-f4de-492e-8849-4a6af68026b0 type: Image imageUrl: 'https://saimei.ftp.acc.umu.se/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2' imageSha: 2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae imageAuthType: Bearer imageAuthToken: acbd18db4cc2f85cedef654fccc4a4d8 imageDisk: /dev/sda rootFsId: 6c2ac315-3040-4728-94eb-b66d320206c1 ipxeScript: null userData: null isCloudInit: false phoneHomeEnabled: false allowOverride: false siteAssociations: - site: id: 4b36152c-f48d-4bcc-a722-0fd8e2ad209a name: sjc-central-1 infrastructureProviderId: 5f2cc306-76e9-4fca-9186-950c9ef9a74e isSerialConsoleEnabled: true isOnline: true capabilities: nativeNetworking: false networkSecurityGroup: true nvLinkPartition: false flow: false imageBasedOperatingSystem: false status: Registered status: Syncing version: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - site: id: 219b7913-4494-4589-940e-e78ca879b302 name: sc-west-4 infrastructureProviderId: 5f2cc306-76e9-4fca-9186-950c9ef9a74e isSerialConsoleEnabled: true isOnline: true capabilities: nativeNetworking: false networkSecurityGroup: false nvLinkPartition: false flow: false imageBasedOperatingSystem: false status: Registered status: Syncing version: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' isActive: true deactivationNote: null status: Syncing statusHistory: - status: Syncing message: 'received Operating System creation request, syncing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' example-2: value: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: ubuntu-22.04 description: Ubuntu 22.04 infrastructureProviderId: null tenantId: f97df110-f4de-492e-8849-4a6af68026b0 type: iPXE ipxeScript: |- #!ipxe kernel http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux initrd=initrd.gz initrd http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz boot || imgfree shell userData: |- #cloud-config autoinstall: apt: geoip: true preserve_sources_list: false primary: - arches: [amd64, i386] uri: http://archive.ubuntu.com/ubuntu - arches: [default] uri: http://ports.ubuntu.com/ubuntu-ports isCloudInit: true phoneHomeEnabled: false allowOverride: false imageAuthToken: null imageAuthType: null imageDisk: null imageSha: null imageUrl: null rootFsId: null rootFsLabel: null isActive: true deactivationNote: null status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy": "CREATED_DESC"}' description: Pagination result in JSON format '403': $ref: '#/components/responses/ForbiddenError' operationId: get-all-operating-system description: |- List Operating Systems visible to the caller. User must have an authorization role with either the `PROVIDER_ADMIN` or `TENANT_ADMIN` suffix for the org. - Provider admin: returns only Operating Systems owned by the org's Infrastructure Provider. - Tenant admin: returns Operating Systems owned by the caller's Tenant, plus Provider-owned Operating Systems that are associated with at least one Site the Tenant can access. - Dual-role (both Provider and Tenant): returns the union of the Tenant's and the Provider's Operating Systems. parameters: - schema: type: string in: query name: siteId description: Filter Operating Systems by Site ID. Can be specified multiple times to filter on more than one ID. - schema: type: string enum: - Image - iPXE - TemplatedIpxe in: query name: type description: Filter Operating Systems by Type - schema: type: string in: query name: status description: Filter Operating Systems by Status. Can be specified multiple times to filter on more than one status. - schema: type: string in: query name: query description: 'Provide query to search for matches. Input will be matched against name, description and status fields' - schema: type: string enum: - InfrastructureProvider - Tenant in: query name: includeRelation description: Related entity to expand - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - NAME_ASC - NAME_DESC - STATUS_ASC - STATUS_DESC - CREATED_ASC - CREATED_DESC - UPDATED_ASC - UPDATED_DESC in: query name: orderBy description: Ordering for pagination query post: summary: Create Operating System operationId: create-operating-system responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/OperatingSystem' examples: example-1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: ubuntu-22.04 description: Ubuntu 22.04 infrastructureProviderId: null tenantId: f97df110-f4de-492e-8849-4a6af68026b0 type: iPXE ipxeScript: |- #!ipxe kernel http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux initrd=initrd.gz initrd http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz boot || imgfree shell userData: |- #cloud-config autoinstall: apt: geoip: true preserve_sources_list: false primary: - arches: [amd64, i386] uri: http://archive.ubuntu.com/ubuntu - arches: [default] uri: http://ports.ubuntu.com/ubuntu-ports isCloudInit: true phoneHomeEnabled: false allowOverride: false imageAuthToken: null imageAuthType: null imageDisk: null imageSha: null imageUrl: null rootFsId: null rootFsLabel: null siteAssociations: [] isActive: true deactivationNote: null status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' description: |- Create an Operating System for the org. Ownership is derived from the caller's role: - Tenant admin (`TENANT_ADMIN`): creates a Tenant-owned Operating System of any type (Image, iPXE, or Templated iPXE). - Provider admin (`PROVIDER_ADMIN`): may only create Provider-owned Operating Systems of type `Templated iPXE`. The `tenantId` field in the request body is deprecated; if provided, it must match the org's Tenant. requestBody: content: application/json: schema: $ref: '#/components/schemas/OperatingSystemCreateRequest' examples: example-1: value: name: ubuntu-official-22.04 description: Official Ubuntu 22.04 tenantId: f97df110-f4de-492e-8849-4a6af68026b0 ipxeScript: |- #!ipxe kernel http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux initrd=initrd.gz initrd http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz boot || imgfree shell userData: |- #cloud-config autoinstall: apt: geoip: true preserve_sources_list: false primary: - arches: [amd64, i386] uri: http://archive.ubuntu.com/ubuntu - arches: [default] uri: http://ports.ubuntu.com/ubuntu-ports isCloudInit: true phoneHomeEnabled: true allowOverride: false example-2: value: name: debian-12-amd64 description: Official Debian 12 for AMD/Intel tenantId: f97df110-f4de-492e-8849-4a6af68026b0 siteIds: - 497f6eca-6276-4993-bfeb-53cbbbba6f08 imageUrl: 'https://saimei.ftp.acc.umu.se/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2' imageSha: 2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae imageAuthType: Bearer imageAuthToken: acbd18db4cc2f85cedef654fccc4a4d8 imageDisk: /dev/sda rootFsId: 6c2ac315-3040-4728-94eb-b66d320206c1 rootFsLabel: null userData: null isCloudInit: false phoneHomeEnabled: false allowOverride: false tags: - Operating System '/v2/org/{org}/nico/operating-system/{operatingSystemId}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string name: operatingSystemId in: path required: true description: ID of the Operating System get: summary: Retrieve Operating System tags: - Operating System responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/OperatingSystem' examples: Image-based OS: value: id: 42b0f982-5c61-4d2f-a018-41ece61f4641 name: debian-12-amd64 description: Official Debian 12 for AMD/Intel infrastructureProviderId: null tenantId: f97df110-f4de-492e-8849-4a6af68026b0 type: Image imageUrl: 'https://saimei.ftp.acc.umu.se/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2' imageSha: 2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae imageAuthType: Bearer imageAuthToken: acbd18db4cc2f85cedef654fccc4a4d8 imageDisk: /dev/sda rootFsId: 6c2ac315-3040-4728-94eb-b66d320206c1 rootFsLabel: null ipxeScript: null userData: null isCloudInit: false phoneHomeEnabled: false allowOverride: false siteAssociations: - site: id: 4b36152c-f48d-4bcc-a722-0fd8e2ad209a name: sjc-central-1 infrastructureProviderId: 5f2cc306-76e9-4fca-9186-950c9ef9a74e isSerialConsoleEnabled: true isOnline: true capabilities: nativeNetworking: false networkSecurityGroup: true nvLinkPartition: false flow: false imageBasedOperatingSystem: false status: Registered status: Syncing version: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - site: id: 219b7913-4494-4589-940e-e78ca879b302 name: sc-west-4 infrastructureProviderId: 5f2cc306-76e9-4fca-9186-950c9ef9a74e isSerialConsoleEnabled: true isOnline: true capabilities: nativeNetworking: false networkSecurityGroup: false nvLinkPartition: false flow: false imageBasedOperatingSystem: false status: Registered status: Syncing version: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' isActive: true deactivationNote: null status: Syncing statusHistory: - status: Syncing message: 'received Operating System creation request, syncing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' iPXE OS: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: ubuntu-22.04 description: Ubuntu 22.04 infrastructureProviderId: null tenantId: f97df110-f4de-492e-8849-4a6af68026b0 type: iPXE ipxeScript: |- #!ipxe kernel http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux initrd=initrd.gz initrd http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz boot || imgfree shell userData: |- #cloud-config autoinstall: apt: geoip: true preserve_sources_list: false primary: - arches: [amd64, i386] uri: http://archive.ubuntu.com/ubuntu - arches: [default] uri: http://ports.ubuntu.com/ubuntu-ports isCloudInit: true phoneHomeEnabled: false allowOverride: false imageAuthToken: null imageAuthType: null imageDisk: null imageSha: null imageUrl: null rootFsId: null rootFsLabel: null siteAssociations: [] isActive: true deactivationNote: null status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '403': $ref: '#/components/responses/ForbiddenError' operationId: get-operating-system description: |- Get an Operating System by ID If the Operating System has `infrastructureProviderId` set, then org must have an Infrastructure Provider entity and its ID should match the Operating System Infrastructure Provider ID. User must have authorization role with `PROVIDER_ADMIN` suffix. If the Operating System has `tenantId` set, then org must have a Tenant entity and its ID should match the Operating System Tenant ID. User must have authorization role with `TENANT_ADMIN` suffix. A Tenant admin may also read a Provider-owned Operating System when it is associated with at least one Site the Tenant can access. parameters: - schema: type: string enum: - InfrastructureProvider - Tenant in: query name: includeRelation description: Related entity to expand delete: summary: Delete Operating System operationId: delete-operating-system responses: '202': description: Deletion request was accepted content: application/json: schema: $ref: '#/components/schemas/MessageResponse' examples: example-1: value: message: Deletion request was accepted '403': $ref: '#/components/responses/ForbiddenError' description: |- Delete an Operating System by ID If the Operating System has `infrastructureProviderId` set, then org must have an Infrastructure Provider entity and its ID should match the Operating System Infrastructure Provider ID. User must have authorization role with `PROVIDER_ADMIN` suffix. If the Operating System has `tenantId` set, then org must have a Tenant entity and its ID should match the Operating System Tenant ID. User must have authorization role with `TENANT_ADMIN` suffix. tags: - Operating System patch: summary: Update Operating System operationId: update-operating-system responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/OperatingSystem' examples: example-1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: ubuntu-22.04-lts description: Ubuntu 22.04 LTS infrastructureProviderId: null tenantId: f97df110-f4de-492e-8849-4a6af68026b0 type: iPXE ipxeScript: |- #!ipxe kernel http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux initrd=initrd.gz initrd http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz boot || imgfree shell userData: |- #cloud-config autoinstall: apt: geoip: true preserve_sources_list: false primary: - arches: [amd64, i386] uri: http://archive.ubuntu.com/ubuntu - arches: [default] uri: http://ports.ubuntu.com/ubuntu-ports isCloudInit: true allowOverride: true phoneHomeEnabled: true imageAuthToken: null imageAuthType: null imageDisk: null imageSha: null imageUrl: null rootFsId: null rootFsLabel: null siteAssociations: [] isActive: true deactivationNote: null status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' description: |- Update an Operating System by ID If the Operating System has `infrastructureProviderId` set, then org must have an Infrastructure Provider entity and its ID should match the Operating System Infrastructure Provider ID. User must have authorization role with `PROVIDER_ADMIN` suffix. Provider must own the Operating System. If the Operating System has `tenantId` set, then org must have a Tenant entity and its ID should match the Operating System Tenant ID. User must have authorization role with `TENANT_ADMIN` suffix. Tenant must own the Operating System. tags: - Operating System requestBody: content: application/json: schema: $ref: '#/components/schemas/OperatingSystemUpdateRequest' examples: example-1: value: name: ubuntu-22.04-lts description: Ubuntu 22.04 LTS allowOverride: true '/v2/org/{org}/nico/machine': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve all Machines tags: - Machine responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/Machine' examples: example-1: value: - id: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 instanceTypeId: null instanceId: null tenantId: null controllerMachineId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g controllerMachineType: x86_64 hwSkuDeviceType: cpu vendor: Lenovo productName: ThinkSystem SR670 V2 serialNumber: J1060ACR.D3KS2CS001G machineCapabilities: - type: CPU name: Intel(R) Xeon(R) Gold 6354 CPU @ 3.00GHz frequency: 3.0GHz cores: 18 threads: 36 count: 2 - type: Memory name: Corsair Vengeance LPX capacity: 32GB count: 4 machineInterfaces: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 machineId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g controllerInterfaceId: ad3dac49-741d-4c1f-815c-c020127c532f controllerSegmentId: f2207a3c-1847-42e5-bf2c-cd015f87a2bc subnetId: 1f232bf0-7b90-456e-b9b0-38d9fea4171a hostname: example.com isPrimary: true macAddress: '00:00:5e:00:53:af' ipAddresses: - 192.156.7.23 - 202.88.37.112 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' maintenanceMessage: null health: source: aggregate-host-health observedAt: null successes: - id: BgpDaemonEnabled target: null - id: BgpStats target: null - id: DhcpServer target: null - id: DpuDiskUtilizationCheck target: null - id: FanSpeed target: System Board Fan1A - id: PowerSupply target: PS1 Status - id: Temperature target: CPU1 Temp - id: Temperature target: System Board Exhaust Temp - id: Voltage target: CPU1 1P8 PG alerts: [] labels: RackIdentifier: GVX11F01C02 ServerName: SITE1-C03-Server-02 status: Ready isUsableByTenant: true statusHistory: - status: Ready message: Machine is online and ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy": "CREATED_DESC"}' description: Pagination result in JSON format '403': $ref: '#/components/responses/ForbiddenError' operationId: get-all-machine description: | Get all Machines visible to the caller. Infrastructure Provider callers receive Machines owned by their Provider. Tenant Admin callers receive Machines only from Sites where `TargetedInstanceCreation` is effective. The siteId query parameter is optional and further restricts either result set. parameters: - schema: type: string in: query name: siteId description: Filter Machines by Site ID - schema: type: string in: query name: id description: Filter Machines by ID. Can be specified multiple times to filter on more than one ID. - schema: type: boolean in: query name: hasInstanceType description: Filter Machines that have been assigned an Instance Type. - schema: type: string in: query name: instanceTypeId description: Filter Machines by Instance Type ID. Can be specified multiple times to filter on more than one Instance Type ID. - schema: type: string in: query name: tenantId description: Filter Machines by ID of tenant of assigned instance. Can be specified multiple times to filter on more than one Tenant ID. - schema: type: boolean in: query name: hasInstance description: Filter Machines that are assigned to an Instance. siteId must be specified when using this param. - schema: type: boolean in: query name: isMissingOnSite description: Filter Machines that are missing on Site. - schema: type: boolean in: query name: includeMetadata description: 'Include Machine metadata e.g. BMC, DPU, GPU and Interface data. Can only be requested by Provider.' - schema: type: string in: query name: status description: Filter Machines by Status. Can be specified multiple times to filter on more than one Status. - schema: type: string in: query name: capabilityType description: Filter Machines by Capability Type - schema: type: string in: query name: capabilityName description: Filter Machines by Capability Name. Can be specified multiple times to filter on more than one Capability Name. - schema: type: string in: query name: hwSkuDeviceType description: 'Filter Machines by hardware SKU Device Type. Example values: "gpu", "cpu", "storage", "cache"' - schema: type: string in: query name: query description: 'Provide query to search for matches. Input will be matched against Machine ID, vendor, product name, hostname and status' - schema: type: string enum: - InfrastructureProvider - Site - InstanceType in: query name: includeRelation description: Related entity to expand - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - STATUS_ASC - STATUS_DESC - CREATED_ASC - CREATED_DESC - UPDATED_ASC - UPDATED_DESC - ID_ASC - ID_DESC in: query name: orderBy description: Ordering for pagination query '/v2/org/{org}/nico/machine/{machineId}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string name: machineId in: path required: true description: ID of the Machine get: summary: Retrieve a Machine tags: - Machine responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/Machine' examples: Without Metadata: value: id: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 instanceTypeId: 2e016c02-2c67-48aa-b289-5d3ca6320c52 instanceId: 59bdaaff-3998-4fd9-a140-8749beeb605e tenantId: 99819e6e-4017-4021-9edd-ea1bdf4dbd59 controllerMachineId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g controllerMachineType: x86_64 hwSkuDeviceType: cpu vendor: Lenovo productName: ThinkSystem SR670 V2 serialNumber: J1060ACR.D3KS2CS001G machineCapabilities: - type: CPU name: Intel(R) Xeon(R) Gold 6354 CPU @ 3.00GHz frequency: 3.0GHz cores: 18 threads: 36 count: 2 - type: Memory name: Corsair Vengeance LPX capacity: 32GB count: 4 - type: Network name: MT42822 BlueField-2 integrated ConnectX-6 Dx network controller count: 2 deviceType: DPU - type: Storage name: Dell Ent NVMe CM6 RI 1.92TB capacity: 1.92TB count: 2 - type: GPU name: NVIDIA A100 PCIe capacity: 80GB count: 2 - type: InfiniBand name: 'MT28908 Family [ConnectX-6]' vendor: Mellanox Technologies count: 2 machineInterfaces: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 machineId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g controllerInterfaceId: ad3dac49-741d-4c1f-815c-c020127c532f controllerSegmentId: f2207a3c-1847-42e5-bf2c-cd015f87a2bc attachedDpuMachineID: 'fm100dsg4ekcb4sdi6hkqn0iojhj18okrr8vct64luh8957lfe8e69vme20,' subnetId: 1f232bf0-7b90-456e-b9b0-38d9fea4171a hostname: example.com isPrimary: true macAddress: '00:00:5e:00:53:af' ipAddresses: - 192.156.7.23 - 202.88.37.112 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' maintenanceMessage: null health: source: aggregate-host-health observedAt: null successes: - id: BgpDaemonEnabled target: null - id: BgpStats target: null - id: DhcpServer target: null - id: DpuDiskUtilizationCheck target: null - id: FanSpeed target: System Board Fan1A - id: PowerSupply target: PS1 Status - id: Temperature target: CPU1 Temp - id: Temperature target: System Board Exhaust Temp - id: Voltage target: CPU1 1P8 PG alerts: [] labels: RackIdentifier: GVX11F01C02 ServerName: SITE1-C03-Server-02 status: Ready isUsableByTenant: true statusHistory: - status: Ready message: Machine is online and ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' With Metadata: value: id: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 instanceTypeId: 2e016c02-2c67-48aa-b289-5d3ca6320c52 instanceId: 59bdaaff-3998-4fd9-a140-8749beeb605e tenantId: 99819e6e-4017-4021-9edd-ea1bdf4dbd59 controllerMachineId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g controllerMachineType: x86_64 hwSkuDeviceType: cpu vendor: Lenovo productName: ThinkSystem SR670 V2 serialNumber: J1060ACR.D3KS2CS001G machineCapabilities: - type: CPU name: Intel(R) Xeon(R) Gold 6354 CPU @ 3.00GHz frequency: 3.0GHz cores: 18 threads: 36 count: 2 - type: Memory name: Corsair Vengeance LPX capacity: 32GB count: 4 - type: Network name: MT42822 BlueField-2 integrated ConnectX-6 Dx network controller count: 2 deviceType: DPU - type: Storage name: Dell Ent NVMe CM6 RI 1.92TB capacity: 1.92TB count: 2 deviceType: DPU - type: GPU name: NVIDIA A100 PCIe capacity: 80GB count: 2 - type: InfiniBand name: 'MT28908 Family [ConnectX-6]' vendor: Mellanox Technologies count: 2 machineInterfaces: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 machineId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g controllerInterfaceId: ad3dac49-741d-4c1f-815c-c020127c532f controllerSegmentId: f2207a3c-1847-42e5-bf2c-cd015f87a2bc attachedDpuMachineID: 'fm100dsg4ekcb4sdi6hkqn0iojhj18okrr8vct64luh8957lfe8e69vme20,' subnetId: 1f232bf0-7b90-456e-b9b0-38d9fea4171a hostname: example.com isPrimary: true macAddress: '00:00:5e:00:53:af' ipAddresses: - 192.156.7.23 - 202.88.37.112 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' maintenanceMessage: null labels: RackIdentifier: GVX11F01C02 ServerName: SITE1-C03-Server-02 health: source: aggregate-host-health observedAt: null successes: - id: BgpDaemonEnabled target: null - id: BgpStats target: null - id: DhcpServer target: null - id: DpuDiskUtilizationCheck target: null - id: FanSpeed target: System Board Fan1A - id: PowerSupply target: PS1 Status - id: Temperature target: CPU1 Temp - id: Temperature target: System Board Exhaust Temp - id: Voltage target: CPU1 1P8 PG alerts: [] metadata: dmiData: boardName: 7Z23CTOLWB boardSerial: .C1KS2CS002G. boardVersion: '06' biosDate: 03/30/2023 biosVersion: U8E122J-1.51 productSerial: J1050ACR chassisSerial: J1050ACR bmcInfo: ip: 10.217.133.5 mac: 'C8:4B:D6:7A:C9:8A' version: '1' firmwareRevision: '6.00' gpus: - name: NVIDIA H100 PCIe serial: '1654422006434' driverVersion: 530.30.02s vbiosVersion: 96.00.30.00.01 inforomVersion: 1010.0200.00.02 totalMemory: 81559 MiB frequency: 1755 MHz pciBusId: '00000000:17:00.0' networkInterfaces: - macAddress: 'c8:4b:d6:7b:ac:a8' vendor: Broadcom Inc. and subsidiaries device: NetXtreme BCM5720 Gigabit Ethernet PCIe (PowerEdge Rx5xx LOM Board) path: '/devices/pci0000:00/0000:00:1c.5/0000:04:00.0/net/eno8303' numaNode: 0 description: NetXtreme BCM5720 Gigabit Ethernet PCIe (PowerEdge Rx5xx LOM Board) slot: '0000:04:00.0' infinibandInterfaces: - guid: 1070fd0300bd43ac vendor: Mellanox Technologies device: 'MT28908 Family [ConnectX-6]' path: '/devices/pci0000:c9/0000:c9:02.0/0000:ca:00.0/infiniband/ibp202s0f0' numaNode: 1 description: 'MT28908 Family [ConnectX-6]' slot: '0000:ca:00.0' status: Ready isUsableByTenant: true statusHistory: - status: Ready message: Machine is online and ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' With Machine Health Alerts: value: id: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 instanceTypeId: 2e016c02-2c67-48aa-b289-5d3ca6320c52 instanceId: 59bdaaff-3998-4fd9-a140-8749beeb605e tenantId: 99819e6e-4017-4021-9edd-ea1bdf4dbd59 controllerMachineId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g controllerMachineType: x86_64 hwSkuDeviceType: cpu vendor: Lenovo productName: ThinkSystem SR670 V2 serialNumber: J1060ACR.D3KS2CS001G machineCapabilities: - type: CPU name: Intel(R) Xeon(R) Gold 6354 CPU @ 3.00GHz frequency: 3.0GHz cores: 18 threads: 36 count: 2 - type: Memory name: Corsair Vengeance LPX capacity: 32GB count: 4 - type: Network name: MT42822 BlueField-2 integrated ConnectX-6 Dx network controller count: 2 deviceType: DPU - type: Storage name: Dell Ent NVMe CM6 RI 1.92TB capacity: 1.92TB count: 2 - type: GPU name: NVIDIA A100 PCIe capacity: 80GB count: 2 - type: InfiniBand name: 'MT28908 Family [ConnectX-6]' vendor: Mellanox Technologies count: 2 machineInterfaces: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 machineId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g controllerInterfaceId: ad3dac49-741d-4c1f-815c-c020127c532f controllerSegmentId: f2207a3c-1847-42e5-bf2c-cd015f87a2bc attachedDpuMachineID: 'fm100dsg4ekcb4sdi6hkqn0iojhj18okrr8vct64luh8957lfe8e69vme20,' subnetId: 1f232bf0-7b90-456e-b9b0-38d9fea4171a hostname: example.com isPrimary: true macAddress: '00:00:5e:00:53:af' ipAddresses: - 192.156.7.23 - 202.88.37.112 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' maintenanceMessage: null labels: RackIdentifier: GVX11F01C02 ServerName: SITE1-C03-Server-02 health: source: aggregate-host-health observedAt: '2024-10-07T18:08:46.715956831Z' successes: - id: BgpDaemonEnabled target: null - id: FanSpeed target: System Board Fan1A - id: FanSpeed target: System Board Fan2A - id: FanSpeed target: System Board Fan3A - id: FanSpeed target: System Board Fan4A - id: FanSpeed target: System Board Fan5A - id: FanSpeed target: System Board Fan6A - id: FileExists target: /var/lib/hbn/etc/frr/daemons - id: PowerSupply target: PS2 Status - id: Voltage target: System Board PS1 PG FAIL - id: Temperature target: GPU Temp 2 - id: Temperature target: CPU1 Temp alerts: - id: HeartbeatTimeout target: hardware-health inAlertSince: '2024-10-07T18:08:46.715149530Z' message: '' tenantMessage: nil classifications: - PreventAllocations - PreventHostStateChanges - id: HeartbeatTimeout target: nico-dpu-agent inAlertSince: '2024-10-07T18:08:46.716147472Z' message: '' tenantMessage: nil classifications: - PreventAllocations - PreventHostStateChanges status: Error isUsableByTenant: false statusHistory: - status: Error message: Machine has one or more health alerts that prevent allocation created: '2019-08-28T14:15:22Z' updated: '2019-08-28T14:15:22Z' - status: Ready message: Machine is online and ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '403': $ref: '#/components/responses/ForbiddenError' operationId: get-machine description: | Org must have either an Infrastructure Provider entity or a Tenant entity. If org has an Infrastructure Provider entity, then a user with `PROVIDER_ADMIN` role can request details for any Machine on any Site owned by the Provider. If org has a Tenant entity, then a user with `TENANT_ADMIN` role can request details for any Machine associated with Tenant's active Instances. parameters: - schema: type: string enum: - InfrastructureProvider - Site - InstanceType in: query name: includeRelation description: Related entity to expand - schema: type: boolean in: query name: includeMetadata description: 'Include Machine metadata e.g. BMC, DPU, GPU and Interface data. Can only be requested by Provider.' patch: summary: Update Machine operationId: update-machine responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/Machine' examples: Example 1: value: id: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 instanceTypeId: 2e016c02-2c67-48aa-b289-5d3ca6320c52 instanceId: 59bdaaff-3998-4fd9-a140-8749beeb605e tenantId: 99819e6e-4017-4021-9edd-ea1bdf4dbd59 controllerMachineId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g controllerMachineType: x86_64 hwSkuDeviceType: cpu vendor: Lenovo productName: ThinkSystem SR670 V2 serialNumber: J1060ACR.D3KS2CS001G machineCapabilities: - type: CPU name: Intel(R) Xeon(R) Gold 6354 CPU @ 3.00GHz frequency: 3.0GHz cores: 18 threads: 36 count: 2 - type: Memory name: Corsair Vengeance LPX capacity: 32GB count: 4 machineInterfaces: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 machineId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g controllerInterfaceId: ad3dac49-741d-4c1f-815c-c020127c532f controllerSegmentId: f2207a3c-1847-42e5-bf2c-cd015f87a2bc subnetId: 1f232bf0-7b90-456e-b9b0-38d9fea4171a hostname: example.com isPrimary: true macAddress: '00:00:5e:00:53:af' ipAddresses: - 192.156.7.23 - 202.88.37.112 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' maintenanceMessage: null health: source: aggregate-host-health observedAt: null successes: - id: BgpDaemonEnabled target: null - id: BgpStats target: null - id: DhcpServer target: null - id: DpuDiskUtilizationCheck target: null - id: FanSpeed target: System Board Fan1A - id: PowerSupply target: PS1 Status - id: Temperature target: CPU1 Temp - id: Temperature target: System Board Exhaust Temp - id: Voltage target: CPU1 1P8 PG alerts: [] labels: RackIdentifier: GVX11F01C02 ServerName: SITE1-C03-Server-02 status: Ready isUsableByTenant: true statusHistory: - status: Ready message: Machine is online and ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Machine description: | Update a Machine Instance Type attribute updates, maintenance attribute updates and labels updates must be specified in separate requests. They cannot be processed at the same time. Some attributes can only be updated by Provider, while others can be updated by Provider or a privileged Tenant. For Infrastructure Providers: Org must have an Infrastructure Provider entity and own the Site that the Machine belongs to. User must have authorization role with `PROVIDER_ADMIN` suffix. For Tenants: Org must have a Tenant with `TargetedInstanceCreation` capability enabled and Tenant Account with Machine's Provider. User must have authorization role with `TENANT_ADMIN` suffix. requestBody: content: application/json: schema: $ref: '#/components/schemas/MachineUpdateRequest' examples: Update Instance Type: value: instanceTypeId: 2e016c02-2c67-48aa-b289-5d3ca6320c52 Clear Instance Type: value: clearInstanceType: true Set Maintenance Message: value: setMaintenanceMode: true maintenanceMessage: Machine requires re-cabling to connect with revised underlay network. Estimated maintenance time is 2 days Remove Maintenance Message: value: setMaintenanceMode: false Update Labels: value: labels: RackIdentifier: GVX11F01C02 ServerName: SITE1-C03-Server-02 RepairStatus: InProgress delete: tags: - Machine summary: Delete a Machine from a Site operationId: delete-machine responses: '202': description: Deletion request was accepted content: application/json: schema: $ref: '#/components/schemas/MessageResponse' examples: example-1: value: message: Deletion request was accepted '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': description: Describes an error response for 404 Not Found $ref: '#/components/responses/GenericHttpError' '422': description: Describes an error response for 422 Unprocessable Content $ref: '#/components/responses/GenericHttpError' '500': description: Describes an error response for 500 Internal Server Error $ref: '#/components/responses/GenericHttpError' description: Org must have an Infrastructure Provider entity. Machine must belong to the Provider. User must have authorization role with `PROVIDER_ADMIN` suffix. Machine must meet certain criteria to be eligible for deletion. '/v2/org/{org}/nico/machine/{machineId}/bmc/reset': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string name: machineId in: path required: true description: ID of the Machine patch: summary: Reset Machine BMC tags: - BMC Reset requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/BMCResetRequest' responses: '202': description: Machine BMC reset request was accepted content: application/json: schema: $ref: '#/components/schemas/MessageResponse' examples: example-1: value: message: Machine BMC reset request was accepted '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '500': $ref: '#/components/responses/GenericHttpError' operationId: reset-machine-bmc description: |- Reset the BMC of a specific Machine. When an Instance is attached to the Machine, `acknowledgeAttachedInstance` must be `true`. If `useIpmiTool` is `true`, the BMC reset request may be silently ignored while the BMC is in lockdown mode. For Infrastructure Providers: Org must have an Infrastructure Provider entity and own the Site that the Machine belongs to. User must have authorization role with `PROVIDER_ADMIN` suffix. For Tenants: Org must have a Tenant with `TargetedInstanceCreation` capability enabled and Tenant Account with Machine's Provider. User must have authorization role with `TENANT_ADMIN` suffix. '/v2/org/{org}/nico/machine/{machineId}/dpu/reprovision': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string name: machineId in: path required: true description: ID of the Machine patch: summary: Reprovision Machine DPUs tags: - DPU Reprovision requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DpuReprovisionRequest' responses: '202': description: DPU reprovisioning request was accepted content: application/json: schema: $ref: '#/components/schemas/MessageResponse' examples: example-1: value: message: DPU reprovisioning request was accepted '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '500': $ref: '#/components/responses/GenericHttpError' operationId: reprovision-machine-dpu description: |- Trigger DPU reprovisioning for a Machine. Before calling this operation, create a Machine health report containing an alert whose ID is `HostUpdateInProgress` and whose classifications include `PreventAllocations`. When an Instance is attached to the Machine, `acknowledgeAttachedInstance` must be `true`. For Infrastructure Providers: Org must have an Infrastructure Provider entity and own the Site that the Machine belongs to. User must have authorization role with `PROVIDER_ADMIN` suffix. For Tenants: Org must have a Tenant with `TargetedInstanceCreation` capability enabled and Tenant Account with Machine's Provider. User must have authorization role with `TENANT_ADMIN` suffix. '/v2/org/{org}/nico/machine/{machineId}/health-report': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string name: machineId in: path required: true description: ID of the Machine get: summary: Retrieve all Machine health reports tags: - Health Report responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/MachineHealthReportEntry' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '500': $ref: '#/components/responses/GenericHttpError' operationId: get-all-machine-health-report description: |- Get all health reports for a specific Machine. For Infrastructure Providers: Org must have an Infrastructure Provider entity and own the Site that the Machine belongs to. User must have authorization role with `PROVIDER_ADMIN` or `PROVIDER_VIEWER` suffix. For Tenants: Org must have a Tenant with `TargetedInstanceCreation` capability enabled and Tenant Account with Machine's Provider. User must have authorization role with `TENANT_ADMIN` suffix. put: summary: Create or update Machine health report tags: - Health Report requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/MachineHealthReportEntryRequest' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/MachineHealthReportEntry' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '500': $ref: '#/components/responses/GenericHttpError' operationId: create-or-update-machine-health-report description: |- Add or update health report override for a specific Machine. For Infrastructure Providers: Org must have an Infrastructure Provider entity and own the Site that the Machine belongs to. User must have authorization role with `PROVIDER_ADMIN` suffix. For Tenants: Org must have a Tenant with `TargetedInstanceCreation` capability enabled and Tenant Account with Machine's Provider. User must have authorization role with `TENANT_ADMIN` suffix. '/v2/org/{org}/nico/machine/{machineId}/health-report/{source}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string name: machineId in: path required: true description: ID of the Machine - schema: type: string name: source in: path required: true description: Health report source delete: summary: Delete Machine health report tags: - Health Report responses: '204': description: Machine health report was successfully removed '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '500': $ref: '#/components/responses/GenericHttpError' operationId: delete-machine-health-report description: |- Remove a health report override for a specific Machine. For Infrastructure Providers: Org must have an Infrastructure Provider entity and own the Site that the Machine belongs to. User must have authorization role with `PROVIDER_ADMIN` suffix. For Tenants: Org must have a Tenant with `TargetedInstanceCreation` capability enabled and Tenant Account with Machine's Provider. User must have authorization role with `TENANT_ADMIN` suffix. '/v2/org/{org}/nico/machine/{machineId}/power': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string name: machineId in: path required: true description: ID of the Machine patch: summary: Machine power control tags: - Machine requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/MachinePowerControlRequest' examples: turn-on: value: action: 'On' force-restart: value: action: ForceRestart responses: '202': description: Machine power control request was accepted. The message is empty unless Core returns a power-manager warning. content: application/json: schema: $ref: '#/components/schemas/MessageResponse' examples: example-1: value: message: '' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '500': $ref: '#/components/responses/GenericHttpError' operationId: machine-power-control-machine description: |- Execute power control actions for a specific Machine. When an Instance is attached to the Machine, `acknowledgeAttachedInstance` must be `true`. Org must have an Infrastructure Provider entity and own the Site that the Machine belongs to. User must have authorization role with `PROVIDER_ADMIN` suffix. '/v2/org/{org}/nico/machine/{machineId}/status-history': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string name: machineId in: path required: true description: ID of the Machine get: summary: Retrieve Machine status history tags: - Machine responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/StatusDetail' examples: Example 1: value: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' headers: X-Pagination: schema: type: string description: Pagination result in JSON format '403': $ref: '#/components/responses/ForbiddenError' operationId: get-machine-status-history description: | Org must have either an Infrastructure Provider entity or a Tenant entity. If org has an Infrastructure Provider entity, then a user with `PROVIDER_ADMIN` role can request details for any Machine on any Site owned by the Provider. If org has a Tenant entity, then a user with `TENANT_ADMIN` role can request details for any Machine associated with Tenant's active Instances. parameters: - schema: type: integer in: query name: pageNumber description: Page number for pagination query - schema: type: integer in: query name: pageSize description: Page size for pagination query - schema: type: string in: query name: orderBy description: Ordering for pagination query '/v2/org/{org}/nico/machine/{machineId}/dpu': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string name: machineId in: path required: true description: ID of the host Machine get: summary: Retrieve DPU Machines attached to a host Machine description: | Retrieve DPU Machines attached to the host Machine, including network configuration fields exposed by the REST API. Internal-only and sensitive fields from the Core configuration are omitted. The response is built by scheduling a synchronous Temporal `GetDpuMachines` workflow against the Machine's Site for the DPU Machine IDs referenced by the host Machine's interfaces. **Authorization:** Access is restricted to users associated with the Machine's Site. Either of the following grants access: * The caller's org has an Infrastructure Provider entity that owns the Machine's Site, and the user has authorization role with `PROVIDER_ADMIN` suffix on that org. * The caller's org has a Tenant entity with `TargetedInstanceCreation` enabled and an active Tenant Account on the Machine's Site's Infrastructure Provider, and the user has authorization role with `TENANT_ADMIN` suffix on that org. tags: - Machine responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/DpuMachine' examples: Example 1: value: - id: fm100dsg4ekcb4sdi6hkqn0iojhj18okrr8vct64luh8957lfe8e69vme20 infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 hostMachineId: fm200hkq8xncf7tgm9plurt4smono52pqvv2gxt97pyk2398qjk2a73qjf64 dpuAgentVersion: 1.0.0 state: Ready labels: env: prod dpuNetworkConfig: asn: 65001 vniDevice: pf0hpf managedHostConfigVersion: v1.2.3 useAdminNetwork: true instanceNetworkConfigVersion: v2.0.1 remoteId: host-machine-123 vpcIsolationBehavior: VPC_ISOLATION_MUTUAL statefulAclsEnabled: true enableDhcp: false isPrimaryDpu: true datacenterAsn: 65000 dhcpServers: - 192.168.1.1 routeServers: - 192.168.2.1 managedHostConfig: loopbackIp: 10.0.0.1 tenantInterfaces: - functionType: VIRTUAL_FUNCTION vlanId: 100 vni: 5000 gateway: 192.168.10.1 ip: 192.168.10.10 interfacePrefix: eth0 prefix: 192.168.10.0/24 fqdn: tenant-vm.example.com vpcVni: 6000 isL2Segment: false '400': $ref: '#/components/responses/GenericHttpError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/GenericHttpError' '500': $ref: '#/components/responses/GenericHttpError' operationId: get-dpu-machines '/v2/org/{org}/nico/machine/gpu/stats': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve GPU stats for machines at a site tags: - Machine responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/MachineGPUStats' '403': $ref: '#/components/responses/ForbiddenError' operationId: get-machine-gpu-stats description: |- Returns GPU summary stats grouped by GPU name for machines at the specified site. User must have authorization role with `PROVIDER_ADMIN` suffix. The specified site must belong to the Provider. parameters: - schema: type: string format: uuid in: query name: siteId required: true description: ID of the Site '/v2/org/{org}/nico/machine/instance-type/stats/summary': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve machine instance type assignment summary for a site tags: - Machine responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/MachineInstanceTypeSummary' '403': $ref: '#/components/responses/ForbiddenError' operationId: get-machine-instance-type-stats-summary description: |- Returns machine counts grouped by assigned (has instance type) vs unassigned, broken down by status. User must have authorization role with `PROVIDER_ADMIN` suffix. The specified site must belong to the Provider. parameters: - schema: type: string format: uuid in: query name: siteId required: true description: ID of the Site '/v2/org/{org}/nico/machine/instance-type/stats': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve detailed per-instance-type machine stats for a site tags: - Machine responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/MachineInstanceTypeStats' '403': $ref: '#/components/responses/ForbiddenError' operationId: get-machine-instance-type-stats description: |- Returns machine stats for each instance type including allocation details and tenant breakdown. User must have authorization role with `PROVIDER_ADMIN` suffix. The specified site must belong to the Provider. parameters: - schema: type: string format: uuid in: query name: siteId required: true description: ID of the Site '/v2/org/{org}/nico/tenant/instance-type/stats': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve per-tenant instance type allocation stats for a site tags: - Tenant responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/TenantInstanceTypeStats' '403': $ref: '#/components/responses/ForbiddenError' operationId: get-tenant-instance-type-stats description: |- Returns instance type allocation stats grouped by tenant for the specified site. User must have authorization role with `PROVIDER_ADMIN` suffix. The specified site must belong to the Provider. parameters: - schema: type: string format: uuid in: query name: siteId required: true description: ID of the Site '/v2/org/{org}/nico/machine-capability': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve all Machine Capabilities tags: - Machine responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/MachineCapability' examples: Example 1: value: - type: CPU name: Intel(R) Xeon(R) Gold 6354 CPU @ 3.00GHz cores: 18 threads: 36 count: 2 - name: Intel(R) Xeon(R) Platinum 8362 CPU @ 2.80GHz cores: 32 threads: 64 count: 2 - type: Network name: MT42822 BlueField-2 integrated ConnectX-6 Dx network controller count: 2 - type: Storage name: Dell Ent NVMe v2 AGN RI U.2 1.92TB capacity: 1.92TB count: 2 - type: Storage name: Dell Ent NVMe CM6 RI 1.92TB capacity: 1.92TB count: 2 - type: InfiniBand name: 'MT28908 Family [ConnectX-6]' vendor: Mellanox Technologies count: 2 headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy": "CREATED_DESC"}' description: Pagination result in JSON format '403': $ref: '#/components/responses/ForbiddenError' operationId: get-all-machine-capabilities description: | Get all distinct Machine Capabilities across all Machines Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. parameters: - schema: type: string in: query name: siteId description: Filter Capabilities by Machines from a particular Site required: true - schema: type: boolean in: query name: hasInstanceType description: Filter Capabilities by Machines that have an Instance Type - schema: type: string in: query name: type description: Filter Capabilities by Type - schema: type: string in: query name: name description: Filter Capabilities by Name - schema: type: string in: query name: frequency description: Filter Capabilities by Frequency value - schema: type: string in: query name: capacity description: Filter Capabilities by Capacity value - schema: type: string in: query name: vendor description: Filter Capabilities by Vendor - schema: type: string in: query name: inactiveDevices description: 'Filter Capabilities by Inactive Devices value. Since the value is an array, multiple query parameters should be specified in the correct order. For example, to filter for [1, 3], specify inactiveDevices=1&inactiveDevices=3' - schema: type: string in: query name: count description: Filter Capabilities by Count - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - STATUS_ASC - STATUS_DESC - CREATED_ASC - CREATED_DESC - UPDATED_ASC - UPDATED_DESC in: query name: orderBy description: Ordering for pagination query '/v2/org/{org}/nico/rack': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve all Racks operationId: get-all-rack description: |- Get all Racks for the specified Site. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. parameters: - schema: type: string format: uuid name: siteId in: query required: true description: ID of the Site to retrieve Racks from - schema: type: boolean in: query name: includeComponents description: Include rack components in response - schema: type: string in: query name: name description: Filter by rack name - schema: type: string in: query name: manufacturer description: Filter by manufacturer - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - NAME_ASC - NAME_DESC - MANUFACTURER_ASC - MANUFACTURER_DESC - MODEL_ASC - MODEL_DESC in: query name: orderBy description: Ordering for pagination query responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/Rack' examples: example-1: value: - id: 550e8400-e29b-41d4-a716-446655440000 name: Rack-01 manufacturer: Dell model: PowerEdge R750 serialNumber: SN-RACK-001 description: Primary compute rack location: region: us-east-1 datacenter: DC-01 room: Room-A position: A1 components: - id: 660e8400-e29b-41d4-a716-446655440001 componentId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g type: ComponentTypeCompute name: Server-01 serialNumber: SN-SRV-001 manufacturer: Dell firmwareVersion: 2.1.0 slotId: 1 trayIdx: 0 hostId: 0 bmcs: - type: BmcTypeHost macAddress: 'AA:BB:CC:DD:EE:01' ipAddress: 10.0.0.101 powerState: 'on' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy":"NAME_ASC"}' description: Pagination result in JSON format '403': $ref: '#/components/responses/ForbiddenError' tags: - Rack '/v2/org/{org}/nico/rack/{id}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: id in: path required: true description: ID of the Rack get: summary: Retrieve a Rack operationId: get-rack description: |- Get a Rack by ID. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. parameters: - schema: type: string format: uuid name: siteId in: query required: true description: ID of the Site - schema: type: boolean in: query name: includeComponents description: Include rack components in response responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/Rack' examples: example-1: value: id: 550e8400-e29b-41d4-a716-446655440000 name: Rack-01 manufacturer: Dell model: PowerEdge R750 serialNumber: SN-RACK-001 description: Primary compute rack location: region: us-east-1 datacenter: DC-01 room: Room-A position: A1 components: - id: 660e8400-e29b-41d4-a716-446655440001 componentId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g type: ComponentTypeCompute name: Server-01 serialNumber: SN-SRV-001 manufacturer: Dell firmwareVersion: 2.1.0 slotId: 1 trayIdx: 0 hostId: 0 bmcs: - type: BmcTypeHost macAddress: 'AA:BB:CC:DD:EE:01' ipAddress: 10.0.0.101 powerState: 'on' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' tags: - Rack '/v2/org/{org}/nico/rack/validation': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Validate Racks operationId: validate-racks description: |- Validate Rack components by comparing expected vs actual state. If no filter is specified, validates all racks in the Site. Filters can narrow the scope to specific racks by name or manufacturer. Compares the expected component configuration against the actual state. Returns a detailed diff report showing missing, extra, and mismatched components. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. parameters: - schema: type: string format: uuid name: siteId in: query required: true description: ID of the Site - schema: type: string name: name in: query required: false description: Filter racks by name - schema: type: string name: manufacturer in: query required: false description: Filter racks by manufacturer responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/RackValidationResult' examples: example-no-diffs: value: diffs: [] totalDiffs: 0 missingCount: 0 unexpectedCount: 0 mismatchCount: 0 matchCount: 10 example-with-diffs: value: diffs: - type: Missing id: 660e8400-e29b-41d4-a716-446655440001 componentId: comp-1 expected: id: 660e8400-e29b-41d4-a716-446655440001 componentId: comp-1 type: ComponentTypeCompute name: Server-01 serialNumber: SN-SRV-001 manufacturer: Dell firmwareVersion: 2.1.0 slotId: 1 trayIdx: 0 hostId: 0 bmcs: - type: BmcTypeHost macAddress: 'AA:BB:CC:DD:EE:01' ipAddress: 10.0.0.101 powerState: 'on' - type: Mismatch id: 770e8400-e29b-41d4-a716-446655440002 componentId: comp-2 fieldDiffs: - fieldName: firmware_version expectedValue: '1.0.0' actualValue: '2.0.0' totalDiffs: 2 missingCount: 1 unexpectedCount: 0 mismatchCount: 1 matchCount: 8 '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Rack '/v2/org/{org}/nico/rack/{id}/validation': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: id in: path required: true description: ID of the Rack get: summary: Validate a Rack operationId: validate-rack description: |- Validate a Rack's components by comparing expected vs actual state. Compares the rack's expected component configuration against the actual state. Returns a detailed diff report showing missing, extra, and mismatched components. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. parameters: - schema: type: string format: uuid name: siteId in: query required: true description: ID of the Site responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/RackValidationResult' examples: example-no-diffs: value: diffs: [] totalDiffs: 0 missingCount: 0 unexpectedCount: 0 mismatchCount: 0 matchCount: 5 example-with-diffs: value: diffs: - type: Missing id: 660e8400-e29b-41d4-a716-446655440001 componentId: comp-1 expected: id: 660e8400-e29b-41d4-a716-446655440001 componentId: comp-1 type: ComponentTypeCompute name: Server-01 serialNumber: SN-SRV-001 manufacturer: Dell firmwareVersion: 2.1.0 slotId: 1 trayIdx: 0 hostId: 0 bmcs: - type: BmcTypeHost macAddress: 'AA:BB:CC:DD:EE:01' ipAddress: 10.0.0.101 powerState: 'on' - type: Mismatch id: 770e8400-e29b-41d4-a716-446655440002 componentId: comp-2 fieldDiffs: - fieldName: firmware_version expectedValue: '1.0.0' actualValue: '2.0.0' totalDiffs: 2 missingCount: 1 unexpectedCount: 0 mismatchCount: 1 matchCount: 3 '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Rack '/v2/org/{org}/nico/rack/power': parameters: - schema: type: string name: org in: path required: true description: Name of the Org patch: summary: Power control Racks operationId: power-control-racks description: |- Power control Racks with optional filters. If no filter is specified, targets all racks in the Site. Supported power states: `on`, `off`, `cycle`, `forceoff`, `forcecycle`. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/BatchUpdateRackPowerStateRequest' examples: power-off-all: value: siteId: 550e8400-e29b-41d4-a716-446655440000 state: 'off' power-on-filtered: value: siteId: 550e8400-e29b-41d4-a716-446655440000 filter: names: - Rack-001 - Rack-002 state: 'on' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/UpdatePowerStateResponse' examples: example-1: value: taskIds: - 550e8400-e29b-41d4-a716-446655440000 - 660e8400-e29b-41d4-a716-446655440001 '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Rack '/v2/org/{org}/nico/rack/{id}/power': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: id in: path required: true description: ID of the Rack patch: summary: Power control a Rack operationId: power-control-rack description: |- Power control a Rack identified by Rack UUID. Supported power states: `on`, `off`, `cycle`, `forceoff`, `forcecycle`. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdatePowerStateRequest' examples: power-on: value: siteId: 550e8400-e29b-41d4-a716-446655440000 state: 'on' power-cycle: value: siteId: 550e8400-e29b-41d4-a716-446655440000 state: cycle force-cycle: value: siteId: 550e8400-e29b-41d4-a716-446655440000 state: forcecycle responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/UpdatePowerStateResponse' examples: example-1: value: taskIds: - 550e8400-e29b-41d4-a716-446655440000 '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Rack '/v2/org/{org}/nico/rack/firmware': parameters: - schema: type: string name: org in: path required: true description: Name of the Org patch: summary: Firmware update Racks operationId: firmware-update-racks description: |- Update firmware on Racks with optional name filter. If no filter is specified, targets all racks in the Site. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/BatchRackFirmwareUpdateRequest' examples: all-racks-latest: value: siteId: 550e8400-e29b-41d4-a716-446655440000 filtered-with-version: value: siteId: 550e8400-e29b-41d4-a716-446655440000 filter: names: - Rack-001 version: '24.11.0' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/FirmwareUpdateResponse' examples: example-1: value: taskIds: - 550e8400-e29b-41d4-a716-446655440000 - 660e8400-e29b-41d4-a716-446655440001 '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Rack '/v2/org/{org}/nico/rack/{id}/firmware': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: id in: path required: true description: ID of the Rack patch: summary: Firmware update a Rack operationId: firmware-update-rack description: |- Update firmware on a Rack identified by Rack UUID. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/FirmwareUpdateRequest' examples: with-version: value: siteId: 550e8400-e29b-41d4-a716-446655440000 version: '24.11.0' without-version: value: siteId: 550e8400-e29b-41d4-a716-446655440000 responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/FirmwareUpdateResponse' examples: example-1: value: taskIds: - 550e8400-e29b-41d4-a716-446655440000 '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Rack '/v2/org/{org}/nico/rack/bringup': parameters: - schema: type: string name: org in: path required: true description: Name of the Org post: summary: Bring up Racks operationId: bringup-racks description: |- Bring up Racks with optional name filter. If no filter is specified, targets all racks in the Site. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/BatchBringUpRackRequest' examples: all-racks: value: siteId: 550e8400-e29b-41d4-a716-446655440000 filtered: value: siteId: 550e8400-e29b-41d4-a716-446655440000 filter: names: - Rack-001 description: Bring up Rack-001 responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/BringUpRackResponse' examples: example-1: value: taskIds: - 550e8400-e29b-41d4-a716-446655440000 - 660e8400-e29b-41d4-a716-446655440001 '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Rack '/v2/org/{org}/nico/rack/{id}/bringup': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: id in: path required: true description: ID of the Rack post: summary: Bring up a Rack operationId: bringup-rack description: |- Bring up a Rack identified by Rack UUID. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/BringUpRackRequest' examples: basic: value: siteId: 550e8400-e29b-41d4-a716-446655440000 with-description: value: siteId: 550e8400-e29b-41d4-a716-446655440000 description: Initial bring up for production rack responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/BringUpRackResponse' examples: example-1: value: taskIds: - 550e8400-e29b-41d4-a716-446655440000 '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Rack '/v2/org/{org}/nico/task/{id}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: id in: path required: true description: UUID of the Task get: summary: Retrieve a Task operationId: get-task description: |- Get a Task by UUID. The same handler is also mounted at `/v2/org/{org}/nico/rack/task/{id}` for backward compatibility; prefer this path for new clients. Tasks are site-scoped; `siteId` must be the Site where the task was created. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. parameters: - schema: type: string format: uuid name: siteId in: query required: true description: ID of the Site that owns the task (tasks are site-scoped). responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/Task' examples: example-1: value: id: 550e8400-e29b-41d4-a716-446655440000 status: Running description: Power on rack components message: 'Processing 3 of 5 components' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' tags: - Task '/v2/org/{org}/nico/task/{id}/cancel': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: id in: path required: true description: UUID of the Task post: summary: Cancel a Task operationId: cancel-task description: |- Cancel a Task. The same handler is also mounted at `/v2/org/{org}/nico/rack/task/{id}/cancel` for backward compatibility; prefer this path for new clients. Cancellation is best-effort and idempotent: tasks in non-terminal states (`Pending`, `Running`, `Waiting`) are marked `Terminated` and any underlying Temporal workflow is terminated. Cancelling an already-`Terminated` task returns the same task without changes. Tasks that have already finished (`Succeeded` or `Failed`) cannot be cancelled. Tasks are site-scoped; `siteId` must be the Site where the task was created. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. requestBody: required: true content: application/json: schema: type: object required: - siteId properties: siteId: type: string format: uuid description: ID of the Site that owns the task (tasks are site-scoped). examples: example-1: value: siteId: 660e8400-e29b-41d4-a716-446655440000 responses: '202': description: |- Accepted. The cancellation request was accepted and the Task's last known state is returned. Clients should `GET` the task to observe the final state, since cancellation is best-effort and the operation may still be terminating. content: application/json: schema: $ref: '#/components/schemas/Task' examples: example-1: value: id: 550e8400-e29b-41d4-a716-446655440000 status: Terminated description: Power on rack components message: Cancelled by user '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' tags: - Task '/v2/org/{org}/nico/task/rule': parameters: - schema: type: string name: org in: path required: true description: Name of the Org post: summary: Create an Operation Rule operationId: create-rule description: |- Create a new Operation Rule on the target Site. The rule definition is validated server-side by Flow; on validation failure no state changes (the request acts as a dry-run by way of its own validation step). Rules are site-scoped and per (operationType, operationCode) tuple. The response echoes the submitted body with the assigned `id`. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateRuleRequest' responses: '201': description: Rule was created. content: application/json: schema: $ref: '#/components/schemas/OperationRule' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Rule get: summary: List Operation Rules operationId: list-rules description: |- List Operation Rules on a Site. Filters compose with AND; results are paginated and the `X-Pagination` response header reports the total count over the post-filter set. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. parameters: - schema: type: string format: uuid name: siteId in: query required: true description: ID of the Site that owns the rules (rules are site-scoped). - schema: type: string enum: - PowerControl - FirmwareControl name: operationType in: query required: false description: Filter by operation type. - schema: type: integer minimum: 1 name: pageNumber in: query required: false description: Page number of results returned (1-indexed). - schema: type: integer minimum: 1 name: pageSize in: query required: false description: Number of results per page. responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/OperationRule' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Rule '/v2/org/{org}/nico/task/rule/{id}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: id in: path required: true description: UUID of the Rule get: summary: Retrieve an Operation Rule operationId: get-rule description: |- Get an Operation Rule by UUID. Rules are site-scoped; `siteId` must be the Site that owns the rule. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. parameters: - schema: type: string format: uuid name: siteId in: query required: true description: ID of the Site that owns the rule (rules are site-scoped). responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/OperationRule' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' tags: - Rule patch: summary: Update an Operation Rule operationId: update-rule description: |- Patch the mutable fields of an Operation Rule: `name`, `description`, and `ruleDefinition`. Unset fields are left unchanged. The rule definition is re-validated server-side; validation failure leaves the rule untouched. `operationType` and `operationCode` are immutable after creation — create a new rule and delete the old one to change them. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateRuleRequest' responses: '204': description: Rule was updated. '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' tags: - Rule delete: summary: Delete an Operation Rule operationId: delete-rule description: |- Delete an Operation Rule by UUID. Flow rejects deletion of rules that are still associated with a Rack or that are the active default for their (operationType, operationCode) tuple; dissociate / un-default first. Rules are site-scoped; `siteId` must be the Site that owns the rule. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. parameters: - schema: type: string format: uuid name: siteId in: query required: true description: ID of the Site that owns the rule (rules are site-scoped). responses: '204': description: Rule was deleted. '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' tags: - Rule '/v2/org/{org}/nico/task/run': parameters: - schema: type: string name: org in: path required: true description: Name of the Org post: summary: Create a Task Run operationId: create-task-run description: |- Create a Task Run: a phased, policy-gated execution of one operation across many Racks. The configuration is validated server-side by Flow; on validation failure no state changes. A Task Run executes exactly one operation (currently firmware) over a candidate set of Racks, narrowed by an optional `selector` and divided into phases by an optional `options.phasePolicy`. The response echoes the assigned `id`; the Task Run always starts in the `Pending` state. Poll `GET /task/run/{id}` for progress. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateTaskRunRequest' responses: '201': description: Task Run was created. content: application/json: schema: $ref: '#/components/schemas/TaskRun' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Task Run get: summary: Retrieve all Task Runs operationId: get-all-task-run description: |- List Task Runs on a Site. Filters compose with AND; results are paginated and the `X-Pagination` response header reports the total count over the post-filter set. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. parameters: - schema: type: string format: uuid name: siteId in: query required: true description: ID of the Site that owns the Task Runs (Task Runs are site-scoped). - schema: type: string enum: - Pending - Running - Paused - Completed - Cancelled - Failed - CompletedWithFailures name: status in: query required: false description: Filter by Task Run status. - schema: type: string enum: - PowerControl - FirmwareControl name: operationType in: query required: false description: Filter by operation type. - schema: type: integer minimum: 1 name: pageNumber in: query required: false description: Page number of results returned (1-indexed). - schema: type: integer minimum: 1 name: pageSize in: query required: false description: Number of results per page. responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/TaskRun' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":2}' description: Pagination result in JSON format '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Task Run '/v2/org/{org}/nico/task/run/{id}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: id in: path required: true description: UUID of the Task Run get: summary: Retrieve a Task Run operationId: get-task-run description: |- Get a Task Run by UUID. Set `includeStats=true` for derived per-phase outcome counts (current phase and cumulative run). Task Runs are site-scoped; `siteId` must be the Site that owns the Task Run. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. parameters: - schema: type: string format: uuid name: siteId in: query required: true description: ID of the Site that owns the Task Run (Task Runs are site-scoped). - schema: type: boolean default: false name: includeStats in: query required: false description: Include derived per-phase outcome stats on the response. responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/TaskRun' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' tags: - Task Run '/v2/org/{org}/nico/task/run/{id}/target': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: id in: path required: true description: UUID of the Task Run get: summary: Retrieve all Task Run Targets operationId: get-all-task-run-target description: |- List a Task Run's materialized per-Rack execution targets. Each target references the Task the Task Run submitted for that Rack via `taskId` (null until the target is submitted); drill into execution detail via `GET /task/{taskId}`. Filters compose with AND. Results are paginated; the `X-Pagination` response header reports the total count over the post-filter set. Task Runs are site-scoped; `siteId` must be the Site that owns the Task Run. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. parameters: - schema: type: string format: uuid name: siteId in: query required: true description: ID of the Site that owns the Task Run. - schema: type: string enum: - Pending - Blocked - Submitted - Completed - Failed - Terminated - Skipped - Claimed name: status in: query required: false description: Filter by target status. - schema: type: string enum: - currentPhase - completedPhases - currentAndCompletedPhases default: currentPhase name: phaseScope in: query required: false description: Restrict targets to the current phase, completed phases, or both. - schema: type: integer minimum: 1 name: pageNumber in: query required: false description: Page number of results returned (1-indexed). - schema: type: integer minimum: 1 name: pageSize in: query required: false description: Number of results per page. responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/TaskRunTarget' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":6}' description: Pagination result in JSON format '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' tags: - Task Run '/v2/org/{org}/nico/task/run/{id}/pause': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: id in: path required: true description: UUID of the Task Run post: summary: Pause a Task Run operationId: pause-task-run description: |- Pause a running Task Run. In-flight target Tasks continue to completion; no new targets are claimed until the Task Run is resumed. Pausing an already-paused Task Run is idempotent. Task Runs are site-scoped; `siteId` must be the Site that owns the Task Run. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TaskRunSiteRequest' responses: '202': description: |- Accepted. The pause request was accepted and the Task Run's last known state is returned. content: application/json: schema: $ref: '#/components/schemas/TaskRun' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' tags: - Task Run '/v2/org/{org}/nico/task/run/{id}/resume': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: id in: path required: true description: UUID of the Task Run post: summary: Resume a Task Run operationId: resume-task-run description: |- Resume an operator-paused Task Run. A Task Run paused at a phase gate (rather than by an operator) must be advanced with the advance endpoint instead; resume applies only to operator pauses. Task Runs are site-scoped; `siteId` must be the Site that owns the Task Run. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TaskRunSiteRequest' responses: '202': description: |- Accepted. The resume request was accepted and the Task Run's last known state is returned. content: application/json: schema: $ref: '#/components/schemas/TaskRun' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' tags: - Task Run '/v2/org/{org}/nico/task/run/{id}/advance': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: id in: path required: true description: UUID of the Task Run post: summary: Advance a Task Run to its next phase operationId: advance-task-run description: |- Open the next phase of a Task Run that is paused at a phase gate. Optionally guard the transition with `expectedPhaseIndex`: when set, the phase that would be opened must match, otherwise Flow rejects the advance so a stale client cannot open the wrong phase. Task Runs are site-scoped; `siteId` must be the Site that owns the Task Run. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AdvanceTaskRunRequest' responses: '202': description: |- Accepted. The advance request was accepted and the Task Run's last known state is returned. content: application/json: schema: $ref: '#/components/schemas/TaskRun' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' tags: - Task Run '/v2/org/{org}/nico/task/run/{id}/cancel': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: id in: path required: true description: UUID of the Task Run post: summary: Cancel a Task Run operationId: cancel-task-run description: |- Cancel a Task Run. Best-effort cancellation cascades to the current phase's in-flight target Tasks; targets not yet claimed are not started. Cancelling an already-terminal Task Run returns its last known state. Task Runs are site-scoped; `siteId` must be the Site that owns the Task Run. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CancelTaskRunRequest' responses: '202': description: |- Accepted. The cancellation request was accepted and the Task Run's last known state is returned. content: application/json: schema: $ref: '#/components/schemas/TaskRun' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' tags: - Task Run '/v2/org/{org}/nico/rack/{id}/task': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: id in: path required: true description: UUID of the Rack get: summary: Retrieve all Tasks for a Rack operationId: get-rack-tasks description: |- List Tasks targeting the specified Rack. Tasks are site-scoped; `siteId` must be the Site that owns the Rack. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. Filters compose with AND: setting `activeOnly=true` restricts the result to tasks that are still in a non-terminal state (`Pending`, `Running`, `Waiting`). Results are paginated; the `X-Pagination` response header reports the total count over the post-filter set. By default the `report` field is omitted from each task in the response. Set `includeReport=true` to include it; this is opt-in because report bodies can be several KB and pulling them across the list path persists the full payload in each caller-side workflow record. Single-task `GET /rack/task/{id}` and `POST /rack/task/{id}/cancel` always include the report. parameters: - schema: type: string format: uuid name: siteId in: query required: true description: ID of the Site that owns the Rack. - schema: type: boolean default: false name: activeOnly in: query description: Restrict results to non-terminal Tasks. - schema: type: boolean default: false name: includeReport in: query description: Include the per-task execution report on each returned task. - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/Task' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":2}' description: Pagination result in JSON format '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' tags: - Rack '/v2/org/{org}/nico/tray': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve all Trays operationId: get-all-tray description: |- Get all Trays (components) for the specified Site. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. **Filter constraints:** - `rackId` and `rackName` are mutually exclusive - `rackId`/`rackName` cannot be combined with `id`/`componentId` (rack-level vs component-level targeting) - `componentId` requires `type` to be specified - `slotId` restricts to trays at that rack slot, requires `rackId` or `rackName`, and composes with the rest of the query via AND parameters: - schema: type: string format: uuid name: siteId in: query required: true description: ID of the Site to retrieve Trays from - schema: type: string format: uuid name: rackId in: query description: Filter by Rack ID - schema: type: string name: rackName in: query description: Filter by Rack name - schema: type: string enum: - compute - switch - powershelf name: type in: query description: Filter by tray type - schema: type: string name: componentId in: query description: Filter by component ID. Can be specified multiple times to filter on more than one component ID. Requires 'type' parameter. - schema: type: string format: uuid name: id in: query description: Filter by tray UUID. Can be specified multiple times to filter on more than one tray ID. - schema: type: integer format: int32 minimum: 0 name: slotId in: query description: |- Restrict to trays at this rack slot (matches `position.slotId`). Requires `rackId` or `rackName`. Composes with the rest of the filter via AND. - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - NAME_ASC - NAME_DESC - MANUFACTURER_ASC - MANUFACTURER_DESC - MODEL_ASC - MODEL_DESC - TYPE_ASC - TYPE_DESC in: query name: orderBy description: Ordering for pagination query responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/Tray' examples: example-1: value: - id: 660e8400-e29b-41d4-a716-446655440001 componentId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g type: compute name: compute-tray-1 manufacturer: NVIDIA model: GB200 serialNumber: TSN001 description: Compute tray in slot 1 firmwareVersion: 2.1.0 powerState: 'on' position: slotId: 1 trayIdx: 0 hostId: 1 rackId: 550e8400-e29b-41d4-a716-446655440000 headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy":"NAME_ASC"}' description: Pagination result in JSON format '403': $ref: '#/components/responses/ForbiddenError' tags: - Tray '/v2/org/{org}/nico/tray/{id}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: id in: path required: true description: ID of the Tray get: summary: Retrieve a Tray operationId: get-tray description: |- Get a Tray by ID. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. parameters: - schema: type: string format: uuid name: siteId in: query required: true description: ID of the Site responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/Tray' examples: example-1: value: id: 660e8400-e29b-41d4-a716-446655440001 componentId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g type: compute name: compute-tray-1 manufacturer: NVIDIA model: GB200 serialNumber: TSN001 description: Compute tray in slot 1 firmwareVersion: 2.1.0 powerState: 'on' position: slotId: 1 trayIdx: 0 hostId: 1 rackId: 550e8400-e29b-41d4-a716-446655440000 '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' tags: - Tray '/v2/org/{org}/nico/tray/validation': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Validate Trays operationId: validate-trays description: |- Validate Tray components by comparing expected vs actual state. If no filter is specified, validates all trays in the Site. Use rackId/rackName to scope to a specific rack, and name/manufacturer/type to filter by tray attributes. Compares the expected component configuration against the actual state. Returns a detailed diff report showing missing, extra, and mismatched components. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. parameters: - schema: type: string format: uuid name: siteId in: query required: true description: ID of the Site - schema: type: string format: uuid name: rackId in: query required: false description: Scope to a specific Rack by ID (mutually exclusive with rackName) - schema: type: string name: rackName in: query required: false description: Scope to a specific Rack by name (mutually exclusive with rackId) - schema: type: string name: name in: query required: false description: Filter trays by name - schema: type: string name: manufacturer in: query required: false description: Filter trays by manufacturer - schema: type: string enum: - compute - switch - powershelf name: type in: query required: false description: Filter trays by type - schema: type: string name: componentId in: query required: false description: Filter by external component ID (requires type; mutually exclusive with rackId/rackName; use repeated params for multiple values) - schema: type: integer format: int32 minimum: 0 name: slotId in: query required: false description: |- Restrict validation to trays at this rack slot (matches `position.slotId`). Requires `rackId` or `rackName`. Composes with the rest of the filter via AND. responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/RackValidationResult' examples: example-no-diffs: value: diffs: [] totalDiffs: 0 missingCount: 0 unexpectedCount: 0 mismatchCount: 0 matchCount: 10 '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Tray '/v2/org/{org}/nico/tray/{id}/validation': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: id in: path required: true description: ID of the Tray get: summary: Validate a Tray operationId: validate-tray description: |- Validate a Tray by comparing expected vs actual state. Compares the expected component configuration against the actual state. Returns a detailed diff report showing missing, extra, and mismatched components. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. parameters: - schema: type: string format: uuid name: siteId in: query required: true description: ID of the Site responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/RackValidationResult' examples: example-no-diffs: value: diffs: [] totalDiffs: 0 missingCount: 0 unexpectedCount: 0 mismatchCount: 0 matchCount: 5 '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Tray '/v2/org/{org}/nico/tray/power': parameters: - schema: type: string name: org in: path required: true description: Name of the Org patch: summary: Power control Trays operationId: power-control-trays description: |- Power control Trays with optional filters. If no filter is specified, targets all trays in the Site. Supported power states: `on`, `off`, `cycle`, `forceoff`, `forcecycle`. **Filter constraints:** - `rackId` and `rackName` are mutually exclusive - `rackId`/`rackName` cannot be combined with `ids`/`componentIds` (rack-level vs component-level targeting) - `componentIds` requires `type` to be specified Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/BatchUpdateTrayPowerStateRequest' examples: power-on-all: value: siteId: 550e8400-e29b-41d4-a716-446655440000 state: 'on' power-off-by-rack: value: siteId: 550e8400-e29b-41d4-a716-446655440000 filter: rackId: 660e8400-e29b-41d4-a716-446655440001 state: 'off' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/UpdatePowerStateResponse' examples: example-1: value: taskIds: - 550e8400-e29b-41d4-a716-446655440000 '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Tray '/v2/org/{org}/nico/tray/{id}/power': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: id in: path required: true description: ID of the Tray patch: summary: Power control a Tray operationId: power-control-tray description: |- Power control a Tray identified by Tray UUID. Supported power states: `on`, `off`, `cycle`, `forceoff`, `forcecycle`. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdatePowerStateRequest' examples: power-on: value: siteId: 550e8400-e29b-41d4-a716-446655440000 state: 'on' power-off: value: siteId: 550e8400-e29b-41d4-a716-446655440000 state: 'off' power-cycle: value: siteId: 550e8400-e29b-41d4-a716-446655440000 state: cycle responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/UpdatePowerStateResponse' examples: example-1: value: taskIds: - 550e8400-e29b-41d4-a716-446655440000 '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Tray '/v2/org/{org}/nico/tray/firmware': parameters: - schema: type: string name: org in: path required: true description: Name of the Org patch: summary: Firmware update Trays operationId: firmware-update-trays description: |- Update firmware on Trays with optional filters. If no filter is specified, targets all trays in the Site. **Filter constraints:** - `rackId` and `rackName` are mutually exclusive - `rackId`/`rackName` cannot be combined with `ids`/`componentIds` (rack-level vs component-level targeting) - `componentIds` requires `type` to be specified Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/BatchTrayFirmwareUpdateRequest' examples: all-trays-latest: value: siteId: 550e8400-e29b-41d4-a716-446655440000 filtered-with-version: value: siteId: 550e8400-e29b-41d4-a716-446655440000 filter: rackId: 660e8400-e29b-41d4-a716-446655440001 version: '24.11.0' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/FirmwareUpdateResponse' examples: example-1: value: taskIds: - 550e8400-e29b-41d4-a716-446655440000 '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Tray '/v2/org/{org}/nico/tray/{id}/firmware': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: id in: path required: true description: ID of the Tray patch: summary: Firmware update a Tray operationId: firmware-update-tray description: |- Update firmware on a Tray identified by Tray UUID. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/FirmwareUpdateRequest' examples: with-version: value: siteId: 550e8400-e29b-41d4-a716-446655440000 version: '24.11.0' without-version: value: siteId: 550e8400-e29b-41d4-a716-446655440000 responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/FirmwareUpdateResponse' examples: example-1: value: taskIds: - 550e8400-e29b-41d4-a716-446655440000 '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - Tray '/v2/org/{org}/nico/tray/{id}/task': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: id in: path required: true description: UUID of the Tray get: summary: Retrieve all Tasks for a Tray operationId: get-tray-tasks description: |- List Tasks targeting the specified Tray. Tasks are site-scoped; `siteId` must be the Site that owns the Tray. Org must have an Infrastructure Provider entity. User must have authorization role with `PROVIDER_ADMIN` suffix. Filters compose with AND: setting `activeOnly=true` restricts the result to tasks that are still in a non-terminal state (`Pending`, `Running`, `Waiting`). Results are paginated; the `X-Pagination` response header reports the total count over the post-filter set. By default the `report` field is omitted from each task in the response. Set `includeReport=true` to include it; this is opt-in because report bodies can be several KB and pulling them across the list path persists the full payload in each caller-side workflow record. Single-task `GET /rack/task/{id}` and `POST /rack/task/{id}/cancel` always include the report. parameters: - schema: type: string format: uuid name: siteId in: query required: true description: ID of the Site that owns the Tray. - schema: type: boolean default: false name: activeOnly in: query description: Restrict results to non-terminal Tasks. - schema: type: boolean default: false name: includeReport in: query description: Include the per-task execution report on each returned task. - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/Task' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":2}' description: Pagination result in JSON format '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' tags: - Tray '/v2/org/{org}/nico/ipxe-template': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Get all iPXE templates description: |- Get all iPXE templates propagated from nico-core. Optionally restrict to one or more sites with the siteId query parameter. The Infrastructure Provider and Tenant are inferred from the org's membership. User must have authorization role with `PROVIDER_ADMIN`, `PROVIDER_VIEWER`, or `TENANT_ADMIN` suffix. operationId: get-all-ipxe-template tags: - iPXE Template parameters: - schema: type: array items: type: string format: uuid name: siteId in: query required: false description: 'Optional site ID(s); may be repeated to restrict results to templates available at any of the sites' - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - NAME_ASC - NAME_DESC - CREATED_ASC - CREATED_DESC - UPDATED_ASC - UPDATED_DESC in: query name: orderBy description: Ordering for pagination query responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/IpxeTemplate' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy": "NAME_ASC"}' description: Pagination result in JSON format '403': $ref: '#/components/responses/ForbiddenError' '/v2/org/{org}/nico/ipxe-template/{ipxeTemplateId}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: ipxeTemplateId in: path required: true description: Stable template ID (UUID from core) get: summary: Retrieve an iPXE template description: |- Retrieve an iPXE template by its stable core ID. The caller must be authorized for at least one Site at which the template is available. The Infrastructure Provider and Tenant are inferred from the org's membership. User must have authorization role with `PROVIDER_ADMIN`, `PROVIDER_VIEWER`, or `TENANT_ADMIN` suffix. operationId: get-ipxe-template tags: - iPXE Template responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/IpxeTemplate' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '/v2/org/{org}/nico/network-security-group': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve all Network Security Groups responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/NetworkSecurityGroup' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy": "CREATED_DESC"}' description: Pagination result in JSON format '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '412': description: Precondition Failed '500': description: Describes an error response for 500 Internal Server Error $ref: '#/components/responses/GenericHttpError' '501': description: Describes an error response for 501 Not Implemented $ref: '#/components/responses/GenericHttpError' operationId: get-all-network-security-group description: | Get all Network Security Groups for Tenant Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. parameters: - schema: type: string format: uuid in: query name: siteId description: Filter By Site ID - schema: type: string in: query name: status description: Filter Network Security Groups by Status - schema: type: string in: query name: query description: 'Search for matches across all Network Security Groups. Input will be matched against name, description, and status fields' - schema: type: string enum: - Tenant - Site in: query name: includeRelation description: Related entity to expand - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - NAME_ASC - NAME_DESC - STATUS_ASC - STATUS_DESC - CREATED_ASC - CREATED_DESC - UPDATED_ASC - UPDATED_DESC in: query name: orderBy description: Ordering for pagination query - schema: type: boolean in: query name: includeAttachmentStats description: Include counts for the number objects that have attached the Network Security Group tags: - Network Security Group post: summary: Create Network Security Group operationId: create-network-security-group responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/NetworkSecurityGroup' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': description: Describes an error response for 404 Not Found $ref: '#/components/responses/GenericHttpError' '412': description: Describes an error response for 412 Precondition Failed $ref: '#/components/responses/GenericHttpError' '500': description: Describes an error response for 500 Internal Server Error $ref: '#/components/responses/GenericHttpError' '501': description: Describes an error response for 501 Not Implemented $ref: '#/components/responses/GenericHttpError' description: | Create a Network Security Group for Tenant. Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. requestBody: content: application/json: schema: $ref: '#/components/schemas/NetworkSecurityGroupCreateRequest' tags: - Network Security Group '/v2/org/{org}/nico/network-security-group/{networkSecurityGroupId}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string name: networkSecurityGroupId in: path required: true description: ID of the Network Security Group get: summary: Retrieve Network Security Group responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/NetworkSecurityGroup' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': description: Describes an error response for 404 Not Found $ref: '#/components/responses/NotFoundError' '500': description: Describes an error response for 500 Internal Server Error $ref: '#/components/responses/GenericHttpError' '501': description: Describes an error response for 501 Not Implemented $ref: '#/components/responses/GenericHttpError' operationId: get-network-security-group description: | Get a Network Security Group by ID Org must have a Tenant entity. Instance must belong to Tenant. User must have authorization role with `TENANT_ADMIN` suffix. parameters: - schema: type: string enum: - Tenant - Site in: query name: includeRelation description: Related entity to expand tags: - Network Security Group patch: summary: Update Network Security Group operationId: update-network-security-group responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/NetworkSecurityGroup' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': description: Describes an error response for 404 Not Found $ref: '#/components/responses/GenericHttpError' '500': description: Describes an error response for 500 Internal Server Error $ref: '#/components/responses/GenericHttpError' '501': description: Describes an error response for 501 Not Implemented $ref: '#/components/responses/GenericHttpError' description: |- Update a Network Security Group by ID Org must have a Tenant entity. Instance must belong to Tenant. User must have authorization role with `TENANT_ADMIN` suffix. After a group has been created, policy updates are absolute. The complete desired policy set must be specified. requestBody: content: application/json: schema: $ref: '#/components/schemas/NetworkSecurityGroupUpdateRequest' tags: - Network Security Group delete: summary: Delete Network Security Group operationId: delete-network-security-group responses: '202': description: Deletion request was accepted content: application/json: schema: $ref: '#/components/schemas/MessageResponse' examples: example-1: value: message: Deletion request was accepted '400': $ref: '#/components/responses/ValidationError' '403': description: Describes an error response for 403 Forbidden $ref: '#/components/responses/GenericHttpError' '404': description: Describes an error response for 404 Not Found $ref: '#/components/responses/GenericHttpError' '412': description: Describes an error response for 412 Precondition Failed $ref: '#/components/responses/GenericHttpError' '500': description: Describes an error response for 500 Internal Server Error $ref: '#/components/responses/GenericHttpError' '501': description: Describes an error response for 501 Not Implemented $ref: '#/components/responses/GenericHttpError' description: |- Delete a Network Security Group by ID Org must have a Tenant entity. Instance must belong to Tenant. User must have authorization role with `TENANT_ADMIN` suffix. Deleting a Network Security Group will also delete all the associations and all policies. tags: - Network Security Group '/v2/org/{org}/nico/dpu-extension-service': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve all DPU Extension Services responses: '200': description: '' content: application/json: schema: type: array items: $ref: '#/components/schemas/DpuExtensionService' headers: X-Pagination: schema: type: string example: '{"pageNumber":1,"pageSize":20,"total":30,"orderBy": "CREATED_DESC"}' description: Pagination result in JSON format '403': $ref: '#/components/responses/ForbiddenError' operationId: get-all-dpu-extension-service description: |- Retrieve all DPU Extension Services for the current Tenant Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. parameters: - schema: type: string in: query name: siteId description: Filter DPU Extension Services by Site ID - schema: type: string enum: - Pending - Ready - Error - Deleting in: query name: status description: Status filter for the DPU Extension Services - schema: type: string in: query name: query description: 'Search for matches across all DPU Extension Services. Input will be matched against name, description, and status fields' - schema: type: string enum: - Site - Tenant in: query name: includeRelation description: Related entity to expand - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - NAME_ASC - NAME_DESC - STATUS_ASC - STATUS_DESC - CREATED_ASC - CREATED_DESC - UPDATED_ASC - UPDATED_DESC in: query name: orderBy description: Ordering for pagination query tags: - DPU Extension Service post: summary: Create DPU Extension Service operationId: create-dpu-extension-service responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/DpuExtensionService' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' description: |- Create a DPU Extension Service for the current Tenant. Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. requestBody: content: application/json: schema: $ref: '#/components/schemas/DpuExtensionServiceCreateRequest' tags: - DPU Extension Service '/v2/org/{org}/nico/dpu-extension-service/{dpuExtensionServiceId}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string name: dpuExtensionServiceId in: path required: true description: ID of the DPU Extension Service get: summary: Retrieve DPU Extension Service operationId: get-dpu-extension-service responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/DpuExtensionService' '403': $ref: '#/components/responses/ForbiddenError' description: |- Retrieve a DPU Extension Service for the current Tenant by ID DPU Extension Service must be owned by current Tenant. Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. tags: - DPU Extension Service delete: summary: Delete DPU Extension Service operationId: delete-dpu-extension-service responses: '204': description: No Content '403': $ref: '#/components/responses/ForbiddenError' description: |- Delete a specific DPU Extension Service by ID. All versions will be deleted. DPU Extension Service must be owned by current Tenant. No versions of the DPU Extension Service can have active deployments. Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. tags: - DPU Extension Service patch: summary: Update DPU Extension Service operationId: update-dpu-extension-service responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/DpuExtensionService' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' description: |- Update a specific DPU Extension Service. DPU Extension Service must be owned by current Tenant. A new version will be created if data or credentials are modified. Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. requestBody: content: application/json: schema: $ref: '#/components/schemas/DpuExtensionServiceUpdateRequest' tags: - DPU Extension Service '/v2/org/{org}/nico/dpu-extension-service/{dpuExtensionServiceId}/version/{version}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string name: dpuExtensionServiceId in: path required: true description: ID of the DPU Extension Service - schema: type: string name: version in: path required: true description: Version of the DPU Extension Service get: summary: Retrieve DPU Extension Service Version operationId: get-dpu-extension-service-version responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/DpuExtensionServiceVersionInfo' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' description: |- Retrieve details for a specific version of a DPU Extension Service. DPU Extension Service must be owned by current Tenant. Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. tags: - DPU Extension Service delete: summary: Delete DPU Extension Service Version operationId: delete-dpu-extension-service-version responses: '204': description: No Content '403': $ref: '#/components/responses/ForbiddenError' description: |- Delete a specific version of a DPU Extension Service. DPU Extension Service must be owned by current Tenant. The version being deleted cannot have active deployments. Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. tags: - DPU Extension Service '/v2/org/{org}/nico/sshkeygroup': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve all SSH Key Groups responses: '200': description: '' content: application/json: schema: type: array items: $ref: '#/components/schemas/SshKeyGroup' examples: Example 1: value: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: reno-integration-sre description: SRE access SSH keys for Reno Integration org: wdksahew1rqf tenantId: f97df110-f4de-492e-8849-4a6af68026b0 version: fbc692b61ffef6fbfc38a3833f6b7e7ae508da75 siteAssociations: - site: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: sjc-central-1 infrastructureProviderId: 5f2cc306-76e9-4fca-9186-950c9ef9a74e isSerialConsoleEnabled: true isOnline: true capabilities: nativeNetworking: false networkSecurityGroup: true nvLinkPartition: false flow: false imageBasedOperatingSystem: false status: Registered status: Syncing version: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' sshKeys: - id: ff06da79-707a-4069-8623-211d49ae96c8 name: sre-ssh-reno org: wdksahew1rqf tenantId: f97df110-f4de-492e-8849-4a6af68026b0 fingerprint: CaK2yoj5fDOhf1swM2kFyjQrd3bwZfDYlWnVjBHgveQ created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' status: Syncing statusHistory: - status: Syncing message: Group is being synced to Sites created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '403': $ref: '#/components/responses/ForbiddenError' operationId: get-all-ssh-key-group description: |- Retrieve all SSH Key Groups for the current Tenant. Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. parameters: - schema: type: string in: query name: siteId description: Filter SSH Key Groups by Site ID - schema: type: string in: query name: instanceId description: Filter SSH Key Groups by Instance ID - schema: type: string enum: - Syncing - Synced - Error - Deleting in: query name: status description: Status filter for the SSH Key Groups - schema: type: string in: query name: query description: Search for matches across all SSH Key Groups. Input will be matched against the name field - schema: type: string enum: - Tenant in: query name: includeRelation description: Related entity to expand - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - NAME_ASC - NAME_DESC - STATUS_ASC - STATUS_DESC - CREATED_ASC - CREATED_DESC - UPDATED_ASC - UPDATED_DESC in: query name: orderBy description: Ordering for pagination query tags: - SSH Key Group post: summary: Create SSH Key Group operationId: create-ssh-key-group responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/SshKeyGroup' examples: Example 1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: reno-integration-sre description: SRE access SSH keys for Reno Integration org: wdksahew1rqf tenantId: f97df110-f4de-492e-8849-4a6af68026b0 version: fbc692b61ffef6fbfc38a3833f6b7e7ae508da75 siteAssociations: - site: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: sjc-central-1 infrastructureProviderId: 5f2cc306-76e9-4fca-9186-950c9ef9a74e isSerialConsoleEnabled: true isOnline: true capabilities: nativeNetworking: true networkSecurityGroup: true status: Registered status: Syncing version: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' sshKeys: - id: ff06da79-707a-4069-8623-211d49ae96c8 name: sre-ssh-reno org: wdksahew1rqf tenantId: f97df110-f4de-492e-8849-4a6af68026b0 fingerprint: CaK2yoj5fDOhf1swM2kFyjQrd3bwZfDYlWnVjBHgveQ created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' status: Syncing statusHistory: - status: Syncing message: Group is being synced to Sites created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' description: |- Create an SSH Key Group for the current Tenant. Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. requestBody: content: application/json: schema: $ref: '#/components/schemas/SshKeyGroupCreateRequest' examples: Example 1: value: name: reno-integration-sre description: SRE access SSH keys for Reno Integration siteIds: - 497f6eca-6276-4993-bfeb-53cbbbba6f08 sshKeyIds: - ff06da79-707a-4069-8623-211d49ae96c8 tags: - SSH Key Group '/v2/org/{org}/nico/sshkeygroup/{sshKeyGroupId}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string name: sshKeyGroupId in: path required: true description: ID of the SSH Key Group get: summary: Retrieve an SSH Key Group responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/SshKeyGroup' examples: Example 1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: reno-integration-sre description: SRE access SSH keys for Reno Integration org: wdksahew1rqf tenantId: f97df110-f4de-492e-8849-4a6af68026b0 version: fbc692b61ffef6fbfc38a3833f6b7e7ae508da75 siteAssociations: - site: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: sjc-central-1 infrastructureProviderId: 5f2cc306-76e9-4fca-9186-950c9ef9a74e isSerialConsoleEnabled: true isOnline: true capabilities: nativeNetworking: true networkSecurityGroup: true nvLinkPartition: false flow: false imageBasedOperatingSystem: false status: Registered status: Syncing version: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' sshKeys: - id: ff06da79-707a-4069-8623-211d49ae96c8 name: sre-ssh-reno org: wdksahew1rqf tenantId: f97df110-f4de-492e-8849-4a6af68026b0 fingerprint: CaK2yoj5fDOhf1swM2kFyjQrd3bwZfDYlWnVjBHgveQ created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' status: Syncing statusHistory: - status: Syncing message: Group is being synced to Sites created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '403': $ref: '#/components/responses/ForbiddenError' operationId: get-ssh-key-group description: |- Retrieve an SSH Key Group for the current Tenant by ID SSH Key Group must be owned by current Tenant. Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. tags: - SSH Key Group delete: summary: Delete an SSH Key Group operationId: delete-ssh-key-group responses: '202': description: Deletion request was accepted content: application/json: schema: $ref: '#/components/schemas/MessageResponse' examples: example-1: value: message: Deletion request was accepted '403': $ref: '#/components/responses/ForbiddenError' description: |- Delete a specific SSH key Group. SSH Key Group must be owned by current Tenant. All Sites associated must be online to proceed. Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. tags: - SSH Key Group patch: summary: Update an SSH Key Group operationId: update-ssh-key-group responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/SshKeyGroup' examples: Example 1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: reno-int-sre description: SRE access SSH keys for Reno Integration Site org: wdksahew1rqf tenantId: f97df110-f4de-492e-8849-4a6af68026b0 version: fbc692b61ffef6fbfc38a3833f6b7e7ae508da75 siteAssociations: - site: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: sjc-central-1 infrastructureProviderId: 5f2cc306-76e9-4fca-9186-950c9ef9a74e isSerialConsoleEnabled: true isOnline: true capabilities: nativeNetworking: true networkSecurityGroup: true status: Registered status: Syncing version: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - site: id: 05d6e108-9f06-44c9-be47-7ab4d62b20d0 name: Reno Integration infrastructureProviderId: 5f2cc306-76e9-4fca-9186-950c9ef9a74e isSerialConsoleEnabled: true isOnline: true capabilities: nativeNetworking: true networkSecurityGroup: true status: Registered status: Syncing version: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' sshKeys: - id: ff06da79-707a-4069-8623-211d49ae96c8 name: sre-ssh-reno org: wdksahew1rqf tenantId: f97df110-f4de-492e-8849-4a6af68026b0 fingerprint: CaK2yoj5fDOhf1swM2kFyjQrd3bwZfDYlWnVjBHgveQ created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - id: 30fc7238-133d-42f7-8d29-866658b0c019 name: sre-ssh-reno-ext org: wdksahew1rqf tenantId: f97df110-f4de-492e-8849-4a6af68026b0 fingerprint: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' status: Syncing statusHistory: - status: Syncing message: Group is being synced to Sites created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' description: |- Update a specific SSH Key Group. SSH Key Group must be owned by current Tenant. All Sites being added or removed must be online to proceed. Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. requestBody: content: application/json: schema: $ref: '#/components/schemas/SshKeyGroupUpdateRequest' examples: Example 1: value: name: reno-int-sre description: SRE access SSH keys for Reno Integration Site siteIds: - 497f6eca-6276-4993-bfeb-53cbbbba6f08 - 05d6e108-9f06-44c9-be47-7ab4d62b20d0 sshKeyIds: - ff06da79-707a-4069-8623-211d49ae96c8 - 30fc7238-133d-42f7-8d29-866658b0c019 version: fbc692b61ffef6fbfc38a3833f6b7e7ae508da75 tags: - SSH Key Group '/v2/org/{org}/nico/sshkey': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve all SSH Keys responses: '200': description: '' content: application/json: schema: type: array items: $ref: '#/components/schemas/SshKey' examples: Example 1: value: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: staging-sre-access org: xskkpgqpeakn tenantId: f97df110-f4de-492e-8849-4a6af68026b0 fingerprint: CaK2yoj5fDOhf1swM2kFyjQrd3bwZfDYlWnVjBHgveQ created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '403': $ref: '#/components/responses/ForbiddenError' operationId: get-all-ssh-key description: |- Retrieve all SSH Keys for the current Tenant. Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. tags: - SSH Key parameters: - schema: type: string in: query name: sshKeyGroupId description: ID of the SSH Key Group - schema: type: string in: query name: query description: Search for matches across all SSH Keys. Input will be matched against the name field - schema: type: string enum: - Tenant in: query name: includeRelation description: Related entity to expand - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - NAME_ASC - NAME_DESC - STATUS_ASC - STATUS_DESC - CREATED_ASC - CREATED_DESC - UPDATED_ASC - UPDATED_DESC in: query name: orderBy description: Ordering for pagination query post: summary: Create SSH Key operationId: create-ssh-key responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/SshKey' examples: Example 1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: reno-sre-access org: xskkpgqpeakn tenantId: f97df110-f4de-492e-8849-4a6af68026b0 fingerprint: CaK2yoj5fDOhf1swM2kFyjQrd3bwZfDYlWnVjBHgveQ created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' tags: - SSH Key description: |- Create an SSH Key for the current Tenant. If an SSH Key Group is specified, all Sites associated with the SSH Key Group must be online. Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. requestBody: content: application/json: schema: $ref: '#/components/schemas/SshKeyCreateRequest' examples: Example 1: value: name: reno-sre-access publicKey: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICip4hl6WjuVHs60PeikVUs0sWE/kPhk2D0rRHWsIuyL jdoe@test.com sshKeyGroupId: 86ca8cab-b285-4c2d-9e00-25c88810dc2e '/v2/org/{org}/nico/sshkey/{sshKeyId}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string name: sshKeyId in: path required: true description: ID of the SSH Key get: summary: Retrieve an SSH key responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/SshKey' examples: Example 1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: staging-sre-access org: xskkpgqpeakn tenantId: f97df110-f4de-492e-8849-4a6af68026b0 fingerprint: CaK2yoj5fDOhf1swM2kFyjQrd3bwZfDYlWnVjBHgveQ created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '403': $ref: '#/components/responses/ForbiddenError' operationId: get-ssh-key description: |- Retrieve an SSH key for the current Tenant by ID SSH Key must be owned by current Tenant. Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. tags: - SSH Key delete: summary: Delete an SSH Key operationId: delete-ssh-key responses: '202': description: Deletion request was accepted content: application/json: schema: $ref: '#/components/schemas/MessageResponse' examples: example-1: value: message: Deletion request was accepted '403': $ref: '#/components/responses/ForbiddenError' description: |- Delete an SSH key for the current Tenant by ID. SSH Key must be owned by current Tenant. All Site associated with the SSH Key Groups this SSH Key is part of must be online to proceed. Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. tags: - SSH Key patch: summary: Update an SSH Key operationId: update-ssh-key responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/SshKey' examples: Example 1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: reno-sre-access-v2 org: xskkpgqpeakn tenantId: f97df110-f4de-492e-8849-4a6af68026b0 fingerprint: CaK2yoj5fDOhf1swM2kFyjQrd3bwZfDYlWnVjBHgveQ created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' description: |- Update an SSH Key for the current Tenant by ID. SSH Key must be owned by current Tenant. Org must have a Tenant entity. User must have authorization role with `TENANT_ADMIN` suffix. To add this SSH Key to various SSH Key Groups or remove it from an SSH Key Group, please use SSH Key Group update endpoint. requestBody: content: application/json: schema: $ref: '#/components/schemas/SshKeyUpdateRequest' examples: Example 1: value: name: reno-sre-access-v2 tags: - SSH Key '/v2/org/{org}/nico/user/current': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve Current User tags: - User responses: '200': description: User Found content: application/json: schema: $ref: '#/components/schemas/User' examples: example-1: value: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 email: janed@nvidia.com firstName: Jane lastName: Doe created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' '401': $ref: '#/components/responses/UnauthorizedError' operationId: get-user description: Retrieve details of the current user. '/v2/org/{org}/nico/metadata': get: summary: Retrieve metadata about the API server tags: - Metadata responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/Metadata' examples: example-1: value: version: 0.1.24 buildTime: '2019-08-24T14:15:22Z' '401': $ref: '#/components/responses/UnauthorizedError' operationId: get-metadata description: Retrieve system metadata providing information about the API server parameters: - schema: type: string name: org in: path required: true description: Name of the Org '/v2/org/{org}/nico/audit': parameters: - schema: type: string name: org in: path required: true description: Name of the Org get: summary: Retrieve all Audit Log Entries tags: - Audit responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/AuditEntry' examples: Example 1: value: - id: e313b3ca-c47a-4ec1-a79b-a147fad51a50 endpoint: /v2/org/test-org-1/nico/ep queryParams: '{"test":["1234"]}' method: POST body: '{"key1":"value1"}' statusCode: 200 clientIP: 12.123.43.112 userID: 5d9fe319-14d4-40e3-8e5a-7d79e680d55b user: id: 5d9fe319-14d4-40e3-8e5a-7d79e680d55b firstName: John lastName: Doe email: jdoe@test.com orgName: test-org-1 timestamp: '2024-12-04T21:06:33.849293-08:00' durationMs: 250 apiVersion: 0.1.91 - id: e313b3ca-c47a-4ec1-a79b-a147fad51a50 endpoint: /v2/org/test-org-1/nico/ep queryParams: '{"test":["1234"]}' method: POST body: '{"key1":"value1"}' statusCode: 403 statusMessage: User does not have permissions clientIP: 12.123.43.112 userID: 5d9fe319-14d4-40e3-8e5a-7d79e680d55b user: id: 5d9fe319-14d4-40e3-8e5a-7d79e680d55b firstName: John lastName: Doe email: jdoe@test.com orgName: test-org-1 timestamp: '2024-12-04T21:06:33.849293-08:00' durationMs: 50 apiVersion: 0.1.91 '403': $ref: '#/components/responses/ForbiddenError' operationId: get-all-audit-entry description: | Get all Audit Log entries User must have authorization role with `PROVIDER_ADMIN` or `TENANT_ADMIN` suffix. parameters: - schema: type: boolean in: query name: failedOnly description: Return only audit log entries that have failed status code (>= 400) - schema: type: integer example: 1 default: 1 minimum: 1 in: query name: pageNumber description: Page number for pagination query - schema: type: integer minimum: 1 maximum: 100 example: 20 in: query name: pageSize description: Page size for pagination query - schema: type: string enum: - TIMESTAMP_ASC - TIMESTAMP_DESC in: query name: orderBy description: Ordering for pagination query '/v2/org/{org}/nico/audit/{auditEntryId}': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string name: auditEntryId in: path required: true description: ID of the Audit Log Entry get: summary: Retrieve Audit Log Entry tags: - Audit responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/AuditEntry' examples: example-1: value: id: e313b3ca-c47a-4ec1-a79b-a147fad51a50 endpoint: /v2/org/test-org-1/nico/ep queryParams: '{"test":["1234"]}' method: POST body: '{"key1":"value1"}' statusCode: 200 clientIP: 12.123.43.112 userID: 5d9fe319-14d4-40e3-8e5a-7d79e680d55b user: id: 5d9fe319-14d4-40e3-8e5a-7d79e680d55b firstName: John lastName: Doe email: jdoe@test.com orgName: test-org-1 timestamp: '2024-12-04T21:06:33.849293-08:00' durationMs: 250 apiVersion: 0.1.91 '403': $ref: '#/components/responses/ForbiddenError' operationId: get-audit-entry description: |- Retrieve a specific Audit Log Entry by ID User must have authorization role with `PROVIDER_ADMIN` or `TENANT_ADMIN` suffix '/v2/org/{org}/nico/firmware-config/host': parameters: - schema: type: string name: org in: path required: true description: Name of the Org put: summary: Create or Update Host Firmware Config tags: - Host Firmware Config operationId: create-or-update-host-firmware-config description: |- Create or update host firmware config for the org/site. The target Site is specified by `siteId` in the request body. User must have authorization role with `PROVIDER_ADMIN` suffix in the URL `{org}`. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/HostFirmwareConfigCreateOrUpdateRequest' responses: '200': description: Host firmware config replaced/updated content: application/json: schema: $ref: '#/components/schemas/HostFirmwareConfig' '201': description: Host firmware config created on first call content: application/json: schema: $ref: '#/components/schemas/HostFirmwareConfig' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '500': description: Internal server error while loading the Provider or Site, contacting the Core gRPC API, starting the Host Firmware Config create or update workflow, or after the workflow timed out and was terminated. $ref: '#/components/responses/GenericHttpError' '503': $ref: '#/components/responses/HostFirmwareConfigCoreUnavailable' delete: summary: Delete Host Firmware Config tags: - Host Firmware Config operationId: delete-host-firmware-config description: |- Delete host firmware config for the org/site. The target Site is specified by `siteId` in the request body; the configuration is keyed by `(vendor, model)`. User must have authorization role with `PROVIDER_ADMIN` suffix in the URL `{org}`. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/HostFirmwareConfigDeleteRequest' responses: '204': description: Host firmware config deleted '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '500': description: Internal server error while loading the Provider or Site, contacting the Core gRPC API, starting the Host Firmware Config delete workflow, or after the workflow timed out and was terminated. $ref: '#/components/responses/GenericHttpError' '503': $ref: '#/components/responses/HostFirmwareConfigCoreUnavailable' '/v2/org/{org}/nico/site/{siteID}/tenant-identity/config': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: siteID in: path required: true description: ID of the Site put: summary: Create or Update Tenant Identity Configuration tags: - Tenant Identity operationId: create-or-update-tenant-identity-config description: |- Create or update tenant identity (JWT-SVID) configuration for the org/site. User must have authorization role with `TENANT_ADMIN` suffix in the URL `{org}`. On first call the Core gRPC API generates a new ES256 signing keypair; on subsequent calls the existing keypair is reused unless `rotateKey: true` is supplied. Returns `201 Created` on first call, `200 OK` on subsequent updates. See the Tenant Identity tag description for upsert semantics and the `enabled` vs DELETE distinction. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TenantIdentityConfigCreateOrUpdateRequest' responses: '200': description: Tenant identity configuration replaced/updated content: application/json: schema: $ref: '#/components/schemas/TenantIdentityConfig' '201': description: Tenant identity configuration created on first call content: application/json: schema: $ref: '#/components/schemas/TenantIdentityConfig' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '500': description: Internal server error while loading the Tenant or Site, contacting the Core gRPC API, starting the configuration workflow, or after the workflow timed out and was terminated. $ref: '#/components/responses/GenericHttpError' '503': $ref: '#/components/responses/TenantIdentityCoreUnavailable' get: summary: Retrieve Tenant Identity Configuration for current Org tags: - Tenant Identity operationId: get-tenant-identity-config description: |- Retrieve the tenant identity configuration and signing key metadata. User must have authorization role with `TENANT_ADMIN` suffix in the URL `{org}`. The response reflects the stored configuration. Fields you omitted on PUT may be filled in by Core: `allowedAudiences` defaults to `[defaultAudience]`, and `subjectPrefix` defaults to the issuer's trust domain. `signingKeys` lists one entry normally, or two during a key-rotation overlap. responses: '200': description: Tenant identity configuration retrieved content: application/json: schema: $ref: '#/components/schemas/TenantIdentityConfig' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '500': description: Internal server error while loading the Tenant or Site, contacting the Core gRPC API, starting the get workflow, or after the workflow timed out and was terminated. $ref: '#/components/responses/GenericHttpError' '503': $ref: '#/components/responses/TenantIdentityCoreUnavailable' delete: summary: Delete Tenant Identity Configuration tags: - Tenant Identity operationId: delete-tenant-identity-config description: |- Delete the tenant identity configuration and destroy the per-org signing keypair. User must have authorization role with `TENANT_ADMIN` suffix in the URL `{org}`. After DELETE, JWKS and OIDC discovery for this org begin returning `404`; previously-issued JWT-SVIDs become unverifiable once consumers refresh their JWKS cache. To pause issuance without destroying signing keys, PUT with `enabled: false` instead. responses: '204': description: Tenant identity configuration deleted '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '500': description: Internal server error while loading the Tenant or Site, contacting the Core gRPC API, starting the delete workflow, or after the workflow timed out and was terminated. $ref: '#/components/responses/GenericHttpError' '503': $ref: '#/components/responses/TenantIdentityCoreUnavailable' '/v2/org/{org}/nico/site/{siteID}/tenant-identity/token-delegation': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: siteID in: path required: true description: ID of the Site put: summary: Create or Update Token Delegation tags: - Tenant Identity operationId: create-or-update-tenant-identity-token-delegation description: |- Register an RFC 8693 token exchange callback for the tenant. When configured, the Core gRPC API issues a short-lived intermediate JWT-SVID to the tenant's exchange server instead of signing workload tokens directly. User must have authorization role with `TENANT_ADMIN` suffix in the URL `{org}`. Requires a pre-existing `/tenant-identity/config` on this org/site (returns `404` otherwise). Because PUT is full-replace, omitting `clientSecretBasic` on an update clears any stored credentials and switches the org back to no-auth; re-supply `clientId` / `clientSecret` on every PUT to keep basic auth (the raw secret is never returned by GET). Returns `201 Created` on first call, `200 OK` on subsequent updates. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TenantIdentityTokenDelegationCreateOrUpdateRequest' responses: '200': description: Token delegation replaced/updated content: application/json: schema: $ref: '#/components/schemas/TenantIdentityTokenDelegation' '201': description: Token delegation created on first call content: application/json: schema: $ref: '#/components/schemas/TenantIdentityTokenDelegation' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': description: |- Returned when the org has no tenant identity configuration on this site yet; create it via PUT `/tenant-identity/config` before registering a token-delegation callback. $ref: '#/components/responses/NotFoundError' '500': description: Internal server error while loading the Tenant or Site, contacting the Core gRPC API, starting the token-delegation update workflow, or after the workflow timed out and was terminated. $ref: '#/components/responses/GenericHttpError' '503': $ref: '#/components/responses/TenantIdentityCoreUnavailable' get: summary: Retrieve Token Delegation for current Org tags: - Tenant Identity operationId: get-tenant-identity-token-delegation description: |- Retrieve the registered token exchange callback for the tenant. User must have authorization role with `TENANT_ADMIN` suffix in the URL `{org}`. The raw `clientSecret` is never returned; only its SHA-256 hash. responses: '200': description: Token delegation retrieved content: application/json: schema: $ref: '#/components/schemas/TenantIdentityTokenDelegation' '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '500': description: Internal server error while loading the Tenant or Site, contacting the Core gRPC API, starting the token-delegation get workflow, or after the workflow timed out and was terminated. $ref: '#/components/responses/GenericHttpError' '503': $ref: '#/components/responses/TenantIdentityCoreUnavailable' delete: summary: Delete Token Delegation tags: - Tenant Identity operationId: delete-tenant-identity-token-delegation description: |- Delete the RFC 8693 token exchange callback for the tenant. User must have authorization role with `TENANT_ADMIN` suffix in the URL `{org}`. Subsequent Instance Metadata Service requests for the tenant revert to direct (non-delegated) signing by the Core gRPC API. responses: '204': description: Token delegation deleted '400': $ref: '#/components/responses/ValidationError' '403': $ref: '#/components/responses/ForbiddenError' '404': $ref: '#/components/responses/NotFoundError' '500': description: Internal server error while loading the Tenant or Site, contacting the Core gRPC API, starting the token-delegation delete workflow, or after the workflow timed out and was terminated. $ref: '#/components/responses/GenericHttpError' '503': $ref: '#/components/responses/TenantIdentityCoreUnavailable' '/v2/org/{org}/nico/site/{siteID}/.well-known/jwks.json': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: siteID in: path required: true description: ID of the Site get: summary: Retrieve OIDC JWKS for current Org tags: - Tenant Identity operationId: get-jwks description: |- Public RFC 7517 JSON Web Key Set for JWT-SVID signature verification (`use: sig`). No authentication required. NICo currently issues `ES256` signatures over `P-256` keys. Returns `404 Not Found` when no identity configuration exists for this org/site, and `502 Bad Gateway` when the Core gRPC API returns a malformed body. See the Tenant Identity tag description for consumer guidance during key rotation. security: [] responses: '200': description: JWKS document. content: application/json: schema: $ref: '#/components/schemas/TenantIdentityJWKS' '404': description: No identity configuration exists for this org/site. $ref: '#/components/responses/NotFoundError' '500': description: Internal server error while resolving the Site or Tenant, retrieving the Temporal client, starting the JWKS workflow, or after the workflow timed out and was terminated. $ref: '#/components/responses/GenericHttpError' '502': description: Core gRPC API returned a malformed JWKS body that could not be parsed as a keyset. $ref: '#/components/responses/GenericHttpError' '503': description: Core gRPC API is unavailable. $ref: '#/components/responses/GenericHttpError' '/v2/org/{org}/nico/site/{siteID}/.well-known/openid-configuration': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: siteID in: path required: true description: ID of the Site get: summary: Retrieve OpenID Configuration for current Org tags: - Tenant Identity operationId: get-openid-configuration description: |- Public OIDC discovery document pointing at the JWKS URIs. No authentication required. `id_token_signing_alg_values_supported` is intentionally empty because NICo issues bearer access JWTs, not OIDC `id_token`s; strict OIDC client libraries that require a non-empty algorithm list will reject this document. Use the JWKS endpoint directly for signature verification. Returns `404` when no identity material exists for this org/site. security: [] responses: '200': description: OpenID discovery document content: application/json: schema: $ref: '#/components/schemas/OpenIDConfiguration' '404': $ref: '#/components/responses/NotFoundError' '500': description: Internal server error while resolving the Site or Tenant, retrieving the Temporal client, starting the OpenID Configuration workflow, or after the workflow timed out and was terminated. $ref: '#/components/responses/GenericHttpError' '503': description: Core gRPC API is unavailable. $ref: '#/components/responses/GenericHttpError' '/v2/org/{org}/nico/site/{siteID}/.well-known/spiffe/jwks.json': parameters: - schema: type: string name: org in: path required: true description: Name of the Org - schema: type: string format: uuid name: siteID in: path required: true description: ID of the Site get: summary: Retrieve SPIFFE JWKS for current Org tags: - Tenant Identity operationId: get-spiffe-jwks description: |- SPIFFE trust-domain JWKS — same key material as the OIDC JWKS but with `use: jwt-svid` for SPIFFE-native verifiers. No authentication required. Not-configured and malformed-body behavior matches the OIDC JWKS endpoint. security: [] responses: '200': description: SPIFFE JWKS document. content: application/json: schema: $ref: '#/components/schemas/TenantIdentityJWKS' '404': description: No identity configuration exists for this org/site. $ref: '#/components/responses/NotFoundError' '500': description: Internal server error while resolving the Site or Tenant, retrieving the Temporal client, starting the SPIFFE JWKS workflow, or after the workflow timed out and was terminated. $ref: '#/components/responses/GenericHttpError' '502': description: Core gRPC API returned a malformed SPIFFE JWKS body that could not be parsed as a keyset. $ref: '#/components/responses/GenericHttpError' '503': description: Core gRPC API is unavailable. $ref: '#/components/responses/GenericHttpError' components: schemas: MeasuredBootTrustedMachineCreateRequest: type: object title: MeasuredBootTrustedMachineCreateRequest description: Request to approve a Machine for automatic promotion of measured-boot reports. required: - siteId - machineId - approvalType properties: siteId: type: string format: uuid description: ID of the Site where the approval applies. machineId: type: string description: Machine UUID, or `*` to approve all Machines at the Site. approvalType: type: string enum: - Oneshot - Persist description: Whether the approval is consumed once or persists for future reports. pcrRegisters: type: string description: Optional comma-separated PCR register selector. All registers are used when omitted. comments: type: string description: Optional operator comments about the approval. MeasuredBootTrustedMachine: type: object title: MeasuredBootTrustedMachine description: A measured-boot trusted Machine approval. required: - approvalId - machineId - approvalType - pcrRegisters - comments - created properties: approvalId: type: string format: uuid description: Unique approval ID. machineId: type: string description: Machine UUID, or `*` when the approval applies to all Machines. approvalType: type: string enum: - Oneshot - Persist description: Whether the approval is consumed once or persists for future reports. pcrRegisters: type: string description: Optional comma-separated PCR register selector. comments: type: string description: Optional operator comments about the approval. created: type: - string - 'null' format: date-time description: Time when the approval was created, or null when Core did not return a timestamp. MeasuredBootTrustedProfileCreateRequest: type: object title: MeasuredBootTrustedProfileCreateRequest description: Request to approve a system profile for automatic promotion of measured-boot reports. required: - siteId - profileId - approvalType properties: siteId: type: string format: uuid description: ID of the Site where the approval applies. profileId: type: string format: uuid description: ID of the measured-boot system profile. approvalType: type: string enum: - Oneshot - Persist description: Whether the approval is consumed once or persists for future reports. pcrRegisters: type: string description: Optional comma-separated PCR register selector. All registers are used when omitted. comments: type: string description: Optional operator comments about the approval. MeasuredBootTrustedProfile: type: object title: MeasuredBootTrustedProfile description: A measured-boot trusted system profile approval. required: - approvalId - profileId - approvalType - pcrRegisters - comments - created properties: approvalId: type: string format: uuid description: Unique approval ID. profileId: type: string format: uuid description: ID of the measured-boot system profile. approvalType: type: string enum: - Oneshot - Persist description: Whether the approval is consumed once or persists for future reports. pcrRegisters: type: string description: Optional comma-separated PCR register selector. comments: type: string description: Optional operator comments about the approval. created: type: - string - 'null' format: date-time description: Time when the approval was created, or null when Core did not return a timestamp. BMCCredentialRequest: type: object title: BMCCredentialRequest description: Request to create or update a BMC credential. required: - siteId - kind - password properties: siteId: type: string format: uuid description: ID of the Site where the credential is stored. kind: type: string description: Which BMC credential to store. enum: - SiteWideRoot - BMCRoot password: type: string minLength: 1 description: Credential password. username: type: string description: Optional username; Core defaults to "root" for BMCRoot when omitted. macAddress: type: string description: BMC MAC address. Required for kind BMCRoot, ignored for SiteWideRoot. BMCCredential: type: object title: BMCCredential description: BMC credential metadata returned after create or update. Password is never returned. required: - siteId - kind properties: siteId: type: string format: uuid description: ID of the Site where the credential is stored. kind: type: string description: Which BMC credential was stored. enum: - SiteWideRoot - BMCRoot username: type: string description: Optional username; Core defaults to "root" for BMCRoot when omitted. macAddress: type: string description: BMC MAC address. Required for kind BMCRoot, ignored for SiteWideRoot. UEFICredentialRequest: type: object title: UEFICredentialRequest description: Request to create a site-default UEFI credential. required: - siteId - kind - password properties: siteId: type: string format: uuid description: ID of the Site where the credential is stored. kind: type: string description: Which site-default UEFI credential to create. enum: - Host - DPU password: type: string minLength: 1 description: Credential password. UEFICredential: type: object title: UEFICredential description: UEFI credential metadata returned after creation. The password is never returned. required: - siteId - kind properties: siteId: type: string format: uuid description: ID of the Site where the credential is stored. kind: type: string description: Which site-default UEFI credential was created. enum: - Host - DPU CredentialRotationRequest: type: object title: CredentialRotationRequest description: Request to stage a site-wide credential rotation. required: - siteId - credentialType properties: siteId: type: string format: uuid description: ID of the Site whose credential family is rotated. credentialType: type: string description: Credential family to rotate. enum: - BMC - HostUEFI - DPUUEFI - NVOS - LockdownIKM password: type: string minLength: 1 description: Explicit rotate-to password. When omitted, a strong password is auto-generated. Never returned. reason: type: string description: Free-form operator note recorded with the rotation. Must not contain secrets. CredentialRotationResult: type: object title: CredentialRotationResult description: Result returned when a credential rotation is staged. The password is never returned. required: - credentialType - targetVersion properties: credentialType: type: string description: Credential family that was rotated. enum: - BMC - HostUEFI - DPUUEFI - NVOS - LockdownIKM targetVersion: type: integer format: int64 description: Newly published site-wide target version that devices converge to. started: type: - string - 'null' format: date-time description: When the rotation was staged. CredentialRotationStatus: type: object title: CredentialRotationStatus description: Convergence status of an in-flight or completed site-wide credential rotation. required: - targetVersion - converged - pending - quarantined - complete properties: targetVersion: type: integer format: int64 description: Current site-wide target version for this family. converged: type: integer format: int64 description: Number of devices at or beyond the target version. pending: type: integer format: int64 description: Number of devices not yet converged and eligible to rotate. quarantined: type: integer format: int64 description: Number of devices currently in a rotation backoff window. quarantinedDeviceMacs: type: - array - 'null' items: type: string description: MAC addresses of the quarantined devices. started: type: - string - 'null' format: date-time description: When the current target version was staged. complete: type: boolean description: True only when every device in the queried set has reached the target with none pending and none quarantined. device: $ref: '#/components/schemas/DeviceCredentialRotationStatus' DeviceCredentialRotationStatus: type: object title: DeviceCredentialRotationStatus description: Per-device convergence detail, returned only for a MAC-targeted status query. required: - deviceMac - converged - quarantined - rotateAttempts properties: deviceMac: type: string description: The device this status describes. currentVersion: type: - integer - 'null' format: int64 description: Credential version live on the hardware. Null when not yet established. rotatingToVersion: type: - integer - 'null' format: int64 description: Set while a rotation is mid-flight on this device. converged: type: boolean description: True once the current version reaches the site-wide target. quarantined: type: boolean description: True while the device is in a rotation backoff window. quarantinedUntil: type: - string - 'null' format: date-time description: When the current backoff window expires; set only while quarantined. rotateAttempts: type: integer format: int64 description: Number of rotation attempts recorded for this device. lastAttempted: type: - string - 'null' format: date-time description: When the last rotation attempt ran; null if none. lastError: type: - string - 'null' description: Redacted last-error string for observability; never a secret. SiteExplorerEndpointActionRequest: type: object title: SiteExplorerEndpointActionRequest description: Request to trigger a Site Explorer action for explored endpoints. required: - siteId - action - target properties: siteId: type: string format: uuid description: ID of the Site whose explored endpoints are targeted. action: type: string description: Site Explorer endpoint action to trigger. enum: - ClearError - ReExplore target: type: string description: Endpoint set to target. enum: - All - EndpointIds endpointIds: type: array description: BMC IP addresses to target when target is EndpointIds. items: type: string SiteExplorerEndpointAction: type: object title: SiteExplorerEndpointAction description: Completed Site Explorer endpoint action. required: - siteId - action - target - endpointIds properties: siteId: type: string format: uuid description: ID of the Site whose explored endpoints were targeted. action: type: string description: Site Explorer endpoint action that completed. enum: - ClearError - ReExplore target: type: string description: Endpoint set that was selected. enum: - All - EndpointIds endpointIds: type: array description: BMC IP addresses for which the action completed. items: type: string BMCResetRequest: type: object title: BMCResetRequest description: Request to reset a Machine BMC properties: useIpmiTool: type: boolean default: false description: Reset the BMC via ipmitool instead of Redfish. The request may be silently ignored while the BMC is in lockdown mode. acknowledgeAttachedInstance: type: boolean description: Acknowledges that an Instance is currently attached to the Machine and this action may disrupt Tenant workload on the Instance. examples: - useIpmiTool: true DpuReprovisionRequest: type: object title: DpuReprovisionRequest description: Request to trigger DPU reprovisioning for a Machine required: - mode properties: mode: type: string description: Use `Set` to start reprovisioning, `Clear` to remove a pending request, or `Restart` to restart DPUs that already have a request. Restart accepts a host Machine ID only. enum: - Set - Clear - Restart updateFirmware: type: boolean default: false deprecated: true description: Deprecated compatibility field. Firmware is always verified and updated during reprovisioning. acknowledgeAttachedInstance: type: boolean description: Acknowledges that an Instance is currently attached to the Machine and this action may disrupt Tenant workload on the Instance. examples: - mode: Set updateFirmware: false MachineHealthReportEntry: type: object title: MachineHealthReportEntry description: Machine health report entry required: - source - mode properties: source: type: string description: Health report source. triggeredBy: type: string description: Person or system that triggered this health report. observedAt: type: string format: date-time description: Date/time when the health report was observed. successes: type: array items: $ref: '#/components/schemas/MachineHealthProbeSuccess' description: Results from successful health probes for the Machine. alerts: type: array items: $ref: '#/components/schemas/MachineHealthProbeAlert' description: Results from failed health probes for the Machine. mode: type: string description: How this health report was updated enum: - Merge - Replace examples: - source: maintenance.dpu-reprovision triggeredBy: operator observedAt: '2026-06-24T12:00:00Z' mode: Merge alerts: - id: HostUpdateInProgress message: DPU reprovisioning in progress classifications: - PreventAllocations MachineHealthReportEntryRequest: type: object title: MachineHealthReportEntryRequest description: Request to add or update a Machine health report override. required: - source - mode properties: source: type: string description: Health report source. successes: type: array items: $ref: '#/components/schemas/MachineHealthProbeSuccess' description: Results from successful health probes for the Machine. alerts: type: array items: $ref: '#/components/schemas/MachineHealthProbeAlert' description: Results from failed health probes for the Machine. mode: type: string description: How updates to this health report should be handled enum: - Merge - Replace examples: - source: maintenance.dpu-reprovision mode: Merge alerts: - id: HostUpdateInProgress message: DPU reprovisioning in progress classifications: - PreventAllocations HostFirmwareArtifact: type: object title: HostFirmwareArtifact description: Location of a firmware artifact used during host firmware updates. required: - url properties: url: type: string minLength: 1 description: URL from which the firmware artifact can be downloaded. sha256: type: string description: Optional SHA-256 digest of the artifact, in lowercase hex. example: url: https://firmware.example.invalid/28.47.2682/fw.bin sha256: a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456 HostFirmwareVersionConfig: type: object title: HostFirmwareVersionConfig description: One known firmware version for a host firmware component. required: - version - artifacts properties: version: type: string minLength: 1 description: Firmware version string reported by inventory and stored in Core. default: type: boolean default: false description: When `true`, marks this version as the default target for the component. artifacts: type: array minItems: 1 items: $ref: '#/components/schemas/HostFirmwareArtifact' description: Artifact locations used to install this firmware version. installOnlySpecified: type: boolean default: false description: When `true`, install only the artifacts explicitly listed for this version. powerDrainsNeeded: type: integer minimum: 0 description: Optional number of power drains required after installing this version. preUpdateResets: type: boolean default: false description: When `true`, perform pre-update resets before installing this version. preingestionExclusiveConfig: type: boolean description: |- Optional. When `true`, this firmware version applies only during BMC pre-ingestion. Omitted on update preserves the stored value; set to `false` to clear a previously stored value. example: version: '28.47.2682' default: true artifacts: - url: https://firmware.example.invalid/28.47.2682/fw.bin sha256: a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456 installOnlySpecified: false preUpdateResets: false preingestionExclusiveConfig: false HostFirmwareComponentConfig: type: object title: HostFirmwareComponentConfig description: One component entry in a host firmware config upsert request. required: - type - firmware properties: type: $ref: '#/components/schemas/HostFirmwareComponentType' firmware: type: array minItems: 1 items: $ref: '#/components/schemas/HostFirmwareVersionConfig' description: Known firmware versions for this component. Versions are merged by version string on update. preingestUpgradeWhenBelow: type: string minLength: 1 description: |- Optional minimum firmware version required before BMC pre-ingestion can complete. Omitted on update preserves the stored value. HostFirmwareComponent: type: object title: HostFirmwareComponent description: One component entry in a stored host firmware config response. required: - type - firmware properties: type: $ref: '#/components/schemas/HostFirmwareComponentType' currentVersionDetectionRegEx: type: string readOnly: true description: Inventory regex Core uses to match reported versions for this component. preingestUpgradeWhenBelow: type: string readOnly: true description: Minimum firmware version required before BMC pre-ingestion can complete. firmware: type: array items: $ref: '#/components/schemas/HostFirmwareVersionConfig' description: Known firmware versions currently stored for this component. HostFirmwareConfigCreateOrUpdateRequest: type: object title: HostFirmwareConfigCreateOrUpdateRequest description: |- Host firmware configuration upsert payload. Configurations are keyed by `(vendor, model)` on the Site's Core instance. On first create, `ordering` must list every component being configured. On update, newly added components must also appear in `ordering`. required: - siteId - vendor - model - components properties: siteId: type: string format: uuid description: ID of the Site where the host firmware config is stored. vendor: type: string minLength: 1 description: Hardware vendor for the configuration (for example `Nvidia`, `Dell`). model: type: string minLength: 1 description: Hardware model for the configuration (for example `DGXH100`). components: type: array minItems: 1 items: $ref: '#/components/schemas/HostFirmwareComponentConfig' description: Component firmware entries to create or merge. explicitStartNeeded: type: boolean description: |- Optional. When `true`, host firmware updates for this vendor/model require an explicit start. Omitted on update leaves the stored value unchanged. ordering: type: array items: $ref: '#/components/schemas/HostFirmwareComponentType' description: |- Update order for configured components. Required on first create. Must include every configured component and must be updated when adding a new component on subsequent PUTs. examples: - siteId: 00000000-0000-0000-0000-000000000001 vendor: Nvidia model: DGXH100 explicitStartNeeded: true ordering: - Cx7 - BMC components: - type: Cx7 firmware: - version: '28.47.2682' default: true installOnlySpecified: true powerDrainsNeeded: 1 preUpdateResets: true artifacts: - url: https://firmware.example.invalid/28.47.2682/fw.bin sha256: a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456 HostFirmwareConfigDeleteRequest: type: object title: HostFirmwareConfigDeleteRequest description: Host firmware configuration delete payload. required: - siteId - vendor - model properties: siteId: type: string format: uuid description: ID of the Site where the host firmware config is stored. vendor: type: string minLength: 1 description: Hardware vendor for the configuration (for example `Nvidia`, `Dell`). model: type: string minLength: 1 description: Hardware model for the configuration (for example `DGXH100`). examples: - siteId: 00000000-0000-0000-0000-000000000001 vendor: Nvidia model: DGXH100 HostFirmwareConfig: type: object title: HostFirmwareConfig description: Stored host firmware configuration returned after create or update. required: - vendor - model - components - explicitStartNeeded - ordering - created - updated properties: vendor: type: string readOnly: true description: Hardware vendor for the configuration. model: type: string readOnly: true description: Hardware model for the configuration. components: type: array items: $ref: '#/components/schemas/HostFirmwareComponent' description: Stored component firmware entries. explicitStartNeeded: type: boolean readOnly: true description: Whether host firmware updates require an explicit start. ordering: type: array items: $ref: '#/components/schemas/HostFirmwareComponentType' readOnly: true description: Stored update order for configured components. created: type: string format: date-time readOnly: true description: When this vendor/model configuration was first created. updated: type: string format: date-time readOnly: true description: When this vendor/model configuration was last updated. examples: - vendor: Nvidia model: DGXH100 explicitStartNeeded: true ordering: - Cx7 - BMC components: - type: BMC firmware: - version: '2.3.7' default: true installOnlySpecified: false powerDrainsNeeded: 0 preUpdateResets: false artifacts: - url: https://firmware.example.invalid/2.3.7/fw.bin sha256: a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456 - type: Cx7 firmware: - version: '28.47.2682' default: true installOnlySpecified: true powerDrainsNeeded: 1 preUpdateResets: true artifacts: - url: https://firmware.example.invalid/28.47.2682/fw.bin sha256: a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456 created: '2025-08-24T14:15:22Z' updated: '2025-08-24T14:15:22Z' HostFirmwareComponentType: type: string title: HostFirmwareComponentType description: Host firmware component type exposed by the REST API. enum: - BMC - CEC - UEFI - NIC - CpldMb - CpldPdb - HgxBmc - CombinedBmcUefi - GPU - Cx7 MachinePowerControlRequest: type: object title: MachinePowerControlRequest description: Request to power control a Machine required: - action properties: action: type: string description: Redfish power control action to apply to the Machine. ACPowercycle is not supported on Viking systems. enum: - On - GracefulShutdown - ForceOff - GracefulRestart - ForceRestart - ACPowercycle acknowledgeAttachedInstance: type: boolean description: Acknowledges that an Instance is currently attached to the Machine and this action may disrupt Tenant workload on the Instance. examples: - action: ForceRestart acknowledgeAttachedInstance: true InfrastructureProvider: description: Infrastructure providers own and manage datacenters type: object title: InfrastructureProvider examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 org: rf43bbtnb9c5 orgDisplayName: Dell Corporation created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' properties: id: type: string description: 'Unique UUID v4 identifier for the Infrastructure Provider' format: uuid readOnly: true org: type: string description: 'Name of the org this Infrastructure Provider belongs to' orgDisplayName: type: - string - 'null' description: 'Display name of the org this Infrastructure Provider belongs to' created: type: string description: 'Date/time when the Infrastructure Provider was created' format: date-time readOnly: true updated: type: string description: 'Date/time when the Infrastructure Provider was last updated' format: date-time readOnly: true InfrastructureProviderStats: title: InfrastructureProviderStats type: object description: Provide operational stats for Infrastructure Provider examples: - machine: total: 27 initializing: 8 assigned: 12 ready: 5 error: 2 decommissioned: 0 unknown: 0 ipBlock: total: 4 pending: 1 provisioning: 1 ready: 2 deleting: 0 error: 0 tenantAccount: total: 8 pending: 0 invited: 3 ready: 5 error: 0 properties: machine: $ref: '#/components/schemas/MachineCountByStatus' description: 'Machine status counts for the Infrastructure Provider' ipBlock: $ref: '#/components/schemas/IpBlockCountByStatus' description: 'IP Block status counts for the Infrastructure Provider' tenantAccount: $ref: '#/components/schemas/TenantAccountCountByStatus' description: 'Tenant Account status counts for the Infrastructure Provider' MachineCountByStatus: title: MachineCountByStatus type: object description: Describes count of Machines in various statuses examples: - total: 27 initializing: 8 assigned: 12 ready: 5 error: 2 decommissioned: 0 unknown: 0 properties: total: type: integer description: 'Total number of Machines' initializing: type: integer description: 'Number of Machines in Initializing status' reset: type: integer description: 'Number of Machines in Reset status' assigned: type: integer description: 'Number of Machines in Assigned status' ready: type: integer description: 'Number of Machines in Ready status' error: type: integer description: 'Number of Machines in Error status' decommissioned: type: integer description: 'Number of Machines in Decommissioned status' unknown: type: integer description: 'Number of Machines in Unknown status' IpBlockCountByStatus: title: IpBlockCountByStatus type: object description: Describes counts of IP Blocks in various statuses examples: - total: 4 pending: 1 provisioning: 1 ready: 2 deleting: 0 error: 0 properties: total: type: integer description: 'Total number of IP Blocks' pending: type: integer description: 'Number of IP Blocks in Pending status' provisioning: type: integer description: 'Number of IP Blocks in Provisioning status' ready: type: integer description: 'Number of IP Blocks in Ready status' deleting: type: integer description: 'Number of IP Blocks in Deleting status' error: type: integer description: 'Number of IP Blocks in Error status' TenantAccountCountByStatus: title: TenantAccountCountByStatus type: object description: Describes counts of Tenant Accounts in various statuses examples: - total: 8 pending: 0 invited: 3 ready: 5 error: 0 properties: total: type: integer description: 'Total number of Tenant Accounts' pending: type: integer description: 'Number of Tenant Accounts in Pending status' invited: type: integer description: 'Number of Tenant Accounts in Invited status' ready: type: integer description: 'Number of Tenant Accounts in Ready status' error: type: integer description: 'Number of Tenant Accounts in Error status' Tenant: title: Tenant type: object description: Tenant is the consumer of resources that Infrastructure Providers serve examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 org: qygdmg8oqik8 orgDisplayName: Echo Corporation created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' capabilities: targetedInstanceCreation: true deprecations: - attribute: capabilities.targetedInstanceCreation replacedBy: tenantAccount.siteCapabilities takeActionBy: '2026-10-01T00:00:00Z' notice: '''capabilities.targetedInstanceCreation'' is being deprecated in favor of ''tenantAccount.siteCapabilities''. Please take action prior to the specified date' properties: id: type: string format: uuid description: Unique ID of the Tenant readOnly: true org: type: string description: Name/external ID of Tenant's organization orgDisplayName: type: - string - 'null' description: Display name of Tenant's organization created: type: string format: date-time description: Date/time the Tenant was created readOnly: true updated: type: string format: date-time description: Date/time when Tenant was last updated capabilities: $ref: '#/components/schemas/TenantCapabilities' description: Deprecated read-only aggregate of tenant-wide feature flags. Source of truth is Tenant Account `siteCapabilities`. deprecations: type: array items: $ref: '#/components/schemas/Deprecation' description: Deprecation notices for Tenant fields TenantCapabilities: title: TenantCapabilities type: object description: |- Deprecated tenant-wide capability summary. TargetedInstanceCreation is no longer stored on the Tenant entity; it is configured on Tenant Account `siteCapabilities` (and may be overridden per Site via Tenant Site configuration). On GET `/tenant/current`, `targetedInstanceCreation` is present and `true` only when the Tenant has at least one Ready Tenant Account, every Ready Tenant Account has the capability enabled by default, and no Tenant Site explicitly disables it. Otherwise the property is omitted. Embedded `TenantSummary.capabilities` objects in nested resources also omit the property. examples: - targetedInstanceCreation: true properties: targetedInstanceCreation: type: boolean deprecated: true readOnly: true description: Deprecated in favor of TenantAccount.siteCapabilities. On GET `/tenant/current`, the property is present and true only when every Ready Tenant Account enables TargetedInstanceCreation and no Tenant Site explicitly disables it; otherwise it is omitted. It is also omitted from embedded TenantSummary objects. TenantStats: title: TenantStats type: object description: Provide operational stats for Tenant examples: - instance: total: 18 pending: 2 provisioning: 1 configuring: 2 ready: 8 rebooting: 1 repairing: 1 terminating: 2 error: 1 updating: 0 unknown: 0 vpc: total: 4 pending: 1 provisioning: 1 ready: 2 deleting: 0 error: 0 subnet: total: 4 pending: 1 provisioning: 1 ready: 2 deleting: 0 error: 0 tenantAccount: total: 8 pending: 0 invited: 3 ready: 5 error: 0 properties: instance: $ref: '#/components/schemas/InstanceCountByStatus' description: 'Instance status counts for the Tenant' vpc: $ref: '#/components/schemas/VpcCountByStatus' description: 'VPC status counts for the Tenant' subnet: $ref: '#/components/schemas/SubnetCountByStatus' description: 'Subnet status counts for the Tenant' tenantAccount: $ref: '#/components/schemas/TenantAccountCountByStatus' description: 'Tenant Account status counts for the Tenant' InstanceCountByStatus: title: InstanceCountByStatus type: object description: Describes count of Instances in various statuses examples: - total: 18 pending: 2 provisioning: 1 configuring: 2 ready: 8 rebooting: 1 repairing: 1 terminating: 2 error: 1 updating: 0 unknown: 0 properties: total: type: integer description: 'Total number of Instances' pending: type: integer description: 'Number of Instances in Pending status' provisioning: type: integer description: 'Number of Instances in Provisioning status' configuring: type: integer description: 'Number of Instances in Configuring status' ready: type: integer description: 'Number of Instances in Ready status' rebooting: type: integer description: 'Number of Instances in Rebooting status' repairing: type: integer description: 'Number of Instances in Repairing status' terminating: type: integer description: 'Number of Instances in Terminating status' error: type: integer description: 'Number of Instances in Error status' updating: type: integer description: 'Number of Instances in Updating status' unknown: type: integer description: 'Number of Instances in Unknown status' VpcCountByStatus: title: VpcCountByStatus type: object description: Describes counts of VPCs in various statuses examples: - total: 4 pending: 1 provisioning: 1 ready: 2 deleting: 0 error: 0 properties: total: type: integer description: 'Total number of VPCs' pending: type: integer description: 'Number of VPCs in Pending status' provisioning: type: integer description: 'Number of VPCs in Provisioning status' ready: type: integer description: 'Number of VPCs in Ready status' deleting: type: integer description: 'Number of VPCs in Deleting status' error: type: integer description: 'Number of VPCs in Error status' SubnetCountByStatus: title: SubnetCountByStatus type: object description: Describes counts of Subnets in various statuses examples: - total: 4 pending: 1 provisioning: 1 ready: 2 deleting: 0 error: 0 properties: total: type: integer description: 'Total number of Subnets' pending: type: integer description: 'Number of Subnets in Pending status' provisioning: type: integer description: 'Number of Subnets in Provisioning status' ready: type: integer description: 'Number of Subnets in Ready status' deleting: type: integer description: 'Number of Subnets in Deleting status' error: type: integer description: 'Number of Subnets in Error status' TenantAccount: title: TenantAccount type: object description: Associates a Tenant with an Infrastructure Provider examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf infrastructureProviderOrg: xskkpgqpeakn tenantId: f97df110-f4de-492e-8849-4a6af68026b0 tenantOrg: rf43bbtnb9c5 tenantContact: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 email: janed@nvidia.com firstName: Jane lastName: Doe created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' allocationCount: 0 status: Ready statusHistory: - status: Ready message: 'Account ready, Tenant accepted invite' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' siteCapabilities: - targetedInstanceCreation: true created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' properties: id: type: string description: 'Unique UUID v4 identifier for the Tenant Account' format: uuid readOnly: true infrastructureProviderId: type: string description: 'ID of the Infrastructure Provider' format: uuid infrastructureProviderOrg: type: string description: 'Organization name of the Infrastructure Provider' tenantId: type: - string - 'null' description: 'ID of the Tenant' format: uuid tenantOrg: type: - string - 'null' description: 'Org of the Tenant' tenantContact: $ref: '#/components/schemas/User' description: 'Contact user for the Tenant' allocationCount: type: integer description: 'Number of Allocations for the Tenant Account' status: $ref: '#/components/schemas/TenantAccountStatus' description: 'Status of the Tenant Account' statusHistory: type: array items: $ref: '#/components/schemas/StatusDetail' description: 'Chronological status history for the Tenant Account' deprecations: type: array description: Deprecations active for this resource. Returned only if there are active deprecations. items: $ref: '#/components/schemas/Deprecation' created: type: string description: 'Date/time when the Tenant Account was created' format: date-time readOnly: true updated: type: string description: 'Date/time when the Tenant Account was last updated' format: date-time readOnly: true siteCapabilities: type: array description: |- Provider-scoped TargetedInstanceCreation settings for this Tenant Account. Replaces the deprecated tenant-level capabilities.targetedInstanceCreation attribute. When present on a Tenant Account response, the array always includes one entry with omitted `siteIds` derived from TenantAccount.config, followed by zero or more entries with `siteIds` for per-site overrides that differ from the account default. minItems: 1 items: $ref: '#/components/schemas/TenantAccountSiteCapability' TenantAccountSiteCapability: title: TenantAccountSiteCapability type: object description: |- TargetedInstanceCreation capability for the Tenant Account default or an explicit Site list. Update payloads must satisfy all of the following when siteCapabilities is sent on PATCH: - the siteCapabilities array must contain at least one entry - exactly one entry must omit siteIds or provide an empty siteIds array - each siteId may appear at most once across all entries - every provided siteId must be a valid Site UUID - every provided siteId must identify a Site associated with the Tenant and owned by the Tenant Account's Infrastructure Provider; otherwise the server rejects the request with 400 PATCH uses replace semantics: previously configured per-site overrides whose siteId is omitted from the new payload are cleared. required: - targetedInstanceCreation properties: siteIds: type: array description: Sites to configure. An omitted or empty array identifies the Tenant Account default entry. Each value must be a valid Site UUID, may appear only once across all siteCapabilities entries in the same request, must be associated with the Tenant, and must be owned by the Tenant Account's Infrastructure Provider; otherwise the server rejects the request with 400. items: type: string format: uuid targetedInstanceCreation: type: boolean description: Whether TargetedInstanceCreation is enabled for the Tenant Account default or listed Sites. When true, Tenant Admins with a Ready Tenant Account on the Site's Infrastructure Provider may create Instances by Machine ID and perform related privileged actions on that Site. TenantAccountStatus: title: TenantAccountStatus type: string description: Status values for Tenant Account objects enum: - Pending - Invited - Ready - Error TenantAccountCreateRequest: title: TenantAccountCreateRequest type: object description: Request data to create a TenantAccount examples: - infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf tenantOrg: rf43bbtnb9c5 properties: infrastructureProviderId: type: string format: uuid deprecated: true description: |- Deprecated; inferred from the caller's org Infrastructure Provider when omitted. When provided, the value must match the org's Infrastructure Provider — mismatched values are rejected with 400. tenantOrg: type: string pattern: '^[A-Za-z0-9_-]+$' minLength: 1 description: Must be a valid Org name required: - tenantOrg TenantAccountUpdateRequest: title: TenantAccountUpdateRequest type: object description: |- Request data to update a TenantAccount. Provider Admins may replace `siteCapabilities` only. Tenant Admins may accept an invite via `tenantContactId` only. Requests containing both fields are rejected with 400. When `siteCapabilities` is included, the replace payload must contain at least one entry, include exactly one entry with empty or omitted `siteIds`, and must not repeat any `siteId` across entries. Every provided `siteId` must be a valid UUID for a Site associated with the Tenant and owned by the Tenant Account's Infrastructure Provider; otherwise the server rejects the request with 400. Previously configured per-site overrides whose `siteId` is omitted from the replacement payload are cleared. examples: - tenantContactId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 - siteCapabilities: - siteIds: [] targetedInstanceCreation: true - siteIds: - 3fa85f64-5717-4562-b3fc-2c963f66afa6 targetedInstanceCreation: false properties: tenantContactId: type: string format: uuid description: Tenant Admin invite acceptance; must match the requesting user siteCapabilities: type: array minItems: 1 description: |- Provider Admin replace payload for TargetedInstanceCreation configuration. Required to be non-empty when sent. PATCH uses replace semantics: previously configured per-site overrides whose siteId is omitted from the new payload are cleared. Server validation rules: - must contain at least one entry - must contain exactly one entry with omitted or empty siteIds - must not repeat any siteId across entries - every provided siteId must be a valid Site UUID - every provided siteId must identify a Site associated with the Tenant and owned by the Tenant Account's Infrastructure Provider; otherwise the server rejects the request with 400 items: $ref: '#/components/schemas/TenantAccountSiteCapability' Site: title: Site type: object description: Site is a datacenter that is running NVIDIA Infra Controller (NICo) services examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: San Jose Central 4 description: Datacenter serving the San Jose central region org: qygdmg8oqik8 infrastructureProviderId: 5f2cc306-76e9-4fca-9186-950c9ef9a74e siteControllerVersion: '0.1' siteAgentVersion: '0.1' registrationToken: J7KO-89RR-Y7WQ-AD90 registrationTokenExpiration: '2019-08-25T12:00:00Z' serialConsoleHostname: sjc.nico.acme.com isSerialConsoleEnabled: true serialConsoleIdleTimeout: 60 serialConsoleMaxSessionLength: 3600 isSerialConsoleSSHKeysEnabled: true machineStats: total: 15 totalByStatus: Initializing: 0 Ready: 7 Reset: 0 Maintenance: 0 InUse: 3 Error: 5 Decommissioned: 0 Unknown: 0 totalByHealth: healthy: 12 unhealthy: 3 totalByStatusAndHealth: Initializing: healthy: 0 unhealthy: 0 Ready: healthy: 5 unhealthy: 0 Reset: healthy: 0 unhealthy: 0 Maintenance: healthy: 5 unhealthy: 0 InUse: healthy: 3 unhealthy: 0 Error: healthy: 2 unhealthy: 3 Decommissioned: healthy: 0 unhealthy: 0 Unknown: healthy: 0 unhealthy: 0 totalByAllocation: allocatedInUse: 3 allocatedNotInUse: 3 unallocated: 5 gpuStats: - name: NVIDIA GB200 gpus: 64 machines: 16 capabilities: nativeNetworking: true networkSecurityGroup: true nvLinkPartition: false flow: false imageBasedOperatingSystem: false isOnline: false status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' location: city: San Jose state: CA country: USA contact: email: johndoe@nvidia.com properties: id: type: string description: 'Unique UUID v4 identifier for the Site in NICo Cloud' format: uuid readOnly: true name: type: string minLength: 2 maxLength: 256 description: Name of the Site description: type: - string - 'null' description: Optional description for the Site org: type: string description: 'NGC organization ID of the Infrastructure Provider that owns the Site' infrastructureProviderId: type: string description: 'ID of the Infrastructure Provider that owns the Site' format: uuid siteControllerVersion: type: - string - 'null' description: Version of the Site Controller software siteAgentVersion: type: - string - 'null' description: Version of the Site Agent software registrationToken: type: - string - 'null' description: Token that can be used to register a Site. Value only exposed to Provider registrationTokenExpiration: type: - string - 'null' format: date-time description: Date/time when registration token expires. Value only exposed to Provider readOnly: true serialConsoleHostname: type: - string - 'null' description: 'Serial console hostname of the site controller' format: hostname isSerialConsoleEnabled: type: boolean description: Indicates if Serial Console is enabled for the Site by the Provider serialConsoleIdleTimeout: type: - integer - 'null' description: Maximum idle time in seconds before Serial Console is disconnected serialConsoleMaxSessionLength: type: - integer - 'null' description: Maximum length of Serial Console session in seconds isSerialConsoleSSHKeysEnabled: type: boolean description: Only visible to Tenant retrieving the Site. Indicates if Serial Console access using SSH Keys is enabled by Tenant isOnline: type: boolean description: Indicates if the Site is currently reachable from Cloud status: $ref: '#/components/schemas/SiteStatus' description: 'Status of the Site' readOnly: true statusHistory: type: array items: $ref: '#/components/schemas/StatusDetail' description: 'Chronological status history for the Site' created: type: string description: 'Date/time when the Site was created' format: date-time updated: type: string description: 'Date/time when the Site was last updated' format: date-time location: $ref: '#/components/schemas/SiteLocation' description: 'Site location information' contact: $ref: '#/components/schemas/SiteContact' description: 'Site contact information' capabilities: $ref: '#/components/schemas/SiteCapabilities' description: 'Site capabilities used for feature availability and configuration' machineStats: $ref: '#/components/schemas/SiteMachineStats' description: 'Machine counts by status for the Site' gpuStats: type: array items: $ref: '#/components/schemas/MachineGPUStats' description: 'GPU counts grouped by GPU type for the Site. Populated when includeGpuStats is set' SiteSummary: title: SiteSummary type: object description: 'SiteSummary contains a subset of data for Site object, used when nesting in other objects' examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: San Jose Central 4 infrastructureProviderId: 5f2cc306-76e9-4fca-9186-950c9ef9a74e isSerialConsoleEnabled: true isOnline: false capabilities: nativeNetworking: false networkSecurityGroup: true nvLinkPartition: false flow: false imageBasedOperatingSystem: false status: Pending properties: id: type: string description: 'Unique UUID v4 identifier for the Site' format: uuid readOnly: true name: type: string minLength: 2 maxLength: 256 description: Name of the Site infrastructureProviderId: type: string description: 'ID of the Infrastructure Provider that owns the Site' format: uuid isSerialConsoleEnabled: type: boolean description: Indicates if Serial Console is enabled for the Site by the Provider isOnline: type: boolean description: Indicates if the Site is currently reachable from Cloud capabilities: $ref: '#/components/schemas/SiteCapabilities' description: 'Site capabilities used for feature availability and configuration' status: $ref: '#/components/schemas/SiteStatus' description: 'Status of the Site' readOnly: true SiteStatus: title: SiteStatus type: string description: Status values for Site objects enum: - Pending - Registered - Error SiteCapabilities: title: SiteCapabilities type: object description: Boolean flags to indicate features supported by a Site properties: nativeNetworking: type: boolean description: 'Whether the Site supports native networking' networkSecurityGroup: type: boolean description: 'Whether the Site supports Network Security Groups' nvLinkPartition: type: boolean description: 'Whether the Site supports NVLink partitioning' flow: type: boolean description: 'Whether the Site supports Flow-based operations' imageBasedOperatingSystem: type: boolean description: 'Whether the Site supports image-based operating system provisioning' SiteMachineStats: title: SiteMachineStats type: object description: Machine stats for a Site properties: total: type: integer description: 'Total number of Machines at the Site' totalByStatus: $ref: '#/components/schemas/SiteMachineStatsByStatus' description: 'Machine counts grouped by Machine status' totalByHealth: $ref: '#/components/schemas/SiteMachineStatsByHealth' description: 'Machine counts grouped by health state' totalByStatusAndHealth: $ref: '#/components/schemas/SiteMachineStatsByStatusAndHealth' description: 'Machine health counts grouped by Machine status' totalByAllocation: $ref: '#/components/schemas/SiteMachineStatsByAllocation' description: 'Machine counts grouped by allocation and usage state' SiteMachineStatsByAllocation: title: SiteMachineStatsByAllocation type: object description: Machine stats for a Site by allocation properties: allocatedInUse: type: integer description: 'Number of allocated Machines currently in use' allocatedNotInUse: type: integer description: 'Number of allocated Machines not currently in use' unallocated: type: integer description: 'Number of Machines not currently allocated' SiteMachineStatsByHealth: title: SiteMachineStatsByHealth type: object description: Machine stats for a Site by health properties: healthy: type: integer description: 'Number of healthy Machines' unhealthy: type: integer description: 'Number of unhealthy Machines' SiteMachineStatsByStatus: title: SiteMachineStatsByStatus type: object description: Machine stats for a Site by status properties: Decommissioned: type: integer description: 'Number of Machines in Decommissioned status' Error: type: integer description: 'Number of Machines in Error status' Initializing: type: integer description: 'Number of Machines in Initializing status' InUse: type: integer description: 'Number of Machines in InUse status' Maintenance: type: integer description: 'Number of Machines in Maintenance status' Ready: type: integer description: 'Number of Machines in Ready status' Reset: type: integer description: 'Number of Machines in Reset status' Unknown: type: integer description: 'Number of Machines in Unknown status' SiteMachineStatsByStatusAndHealth: title: SiteMachineStatsByStatusAndHealth type: object description: Machine stats for a Site by status and health properties: Decommissioned: $ref: '#/components/schemas/SiteMachineStatsByHealth' description: 'Health breakdown for Machines in Decommissioned status' Error: $ref: '#/components/schemas/SiteMachineStatsByHealth' description: 'Health breakdown for Machines in Error status' Initializing: $ref: '#/components/schemas/SiteMachineStatsByHealth' description: 'Health breakdown for Machines in Initializing status' InUse: $ref: '#/components/schemas/SiteMachineStatsByHealth' description: 'Health breakdown for Machines in InUse status' Maintenance: $ref: '#/components/schemas/SiteMachineStatsByHealth' description: 'Health breakdown for Machines in Maintenance status' Ready: $ref: '#/components/schemas/SiteMachineStatsByHealth' description: 'Health breakdown for Machines in Ready status' Reset: $ref: '#/components/schemas/SiteMachineStatsByHealth' description: 'Health breakdown for Machines in Reset status' Unknown: $ref: '#/components/schemas/SiteMachineStatsByHealth' description: 'Health breakdown for Machines in Unknown status' SiteCreateRequest: title: SiteCreateRequest type: object description: Request data to create a Site examples: - name: sjc4 description: Datacenter serving San Jose central region, zone 4 serialConsoleHostname: nico.acme.com location: city: San Jose state: CA country: USA contact: email: johndoe@nvidia.com properties: name: type: string description: Name for the Site minLength: 2 maxLength: 256 description: type: - string - 'null' description: Description for the Site serialConsoleHostname: type: - string - 'null' description: Hostname to reach Serial Console for the Site format: hostname location: $ref: '#/components/schemas/SiteLocation' description: 'Site location information' contact: $ref: '#/components/schemas/SiteContact' description: 'Site contact information' required: - name SiteCapabilitiesUpdateRequest: title: SiteCapabilitiesUpdateRequest type: object description: Request to modify Site's capabilities. Partial update allowed, only specify capabilities that should be updated. properties: nativeNetworking: type: - boolean - 'null' description: Enable or disable native networking for the Site networkSecurityGroup: type: - boolean - 'null' description: Enable or disable network security groups for the Site nvLinkPartition: type: - boolean - 'null' description: Enable or disable NVLink partition support for the Site flow: type: - boolean - 'null' description: Enable or disable NICo Flow for the Site imageBasedOperatingSystem: type: - boolean - 'null' description: Enable or disable image-based operating system support for the Site SiteUpdateRequest: title: SiteUpdateRequest type: object description: Request data to update a Site examples: - name: sjc04 description: Datacenter 4 serving central San Jose renewRegistrationToken: true serialConsoleHostname: sol.nico.acme.com location: city: San Jose state: CA country: USA contact: email: johndoe@nvidia.com properties: name: type: - string - 'null' description: Update name of the Site. Can only be updated by Provider description: type: - string - 'null' description: Update description for the Site. Can only be updated by Provider renewRegistrationToken: type: boolean description: Set to true to issue a new registration token. Can only be updated by Provider serialConsoleHostname: type: - string - 'null' description: Hostname to reach Serial Console for the Site. Can only be updated by Provider format: hostname isSerialConsoleEnabled: type: boolean description: Enable/disable Serial Console. Can only be updated by Provider. Modifying this attribute has no actual effect on SOL. It will be removed in a future API version. deprecated: true serialConsoleIdleTimeout: type: integer description: Maximum idle time in seconds before Serial Console is disconnected. Can only be updated by Provider. Modifying this attribute has no actual effect on SOL. It will be removed in a future API version. deprecated: true serialConsoleMaxSessionLength: type: integer description: Maximum length of Serial Console session in seconds. Can only be updated by Provider. Modifying this attribute has no actual effect on SOL. It will be removed in a future API version. deprecated: true isSerialConsoleSSHKeysEnabled: type: boolean description: Enable/disable Serial Console access using SSH Keys. Previously updateable only by Tenants, modifying this value is no longer supported, update SSH Key Groups to remove Site instead. deprecated: true location: $ref: '#/components/schemas/SiteLocation' description: 'Updated Site location information' contact: $ref: '#/components/schemas/SiteContact' description: 'Updated Site contact information' capabilities: $ref: '#/components/schemas/SiteCapabilitiesUpdateRequest' description: Modify Site capabilities. Can only be updated by Provider. Partial update allowed, only specify capabilities that should be updated. SiteLocation: title: SiteLocation type: object description: Location of the Site examples: - city: San Jose state: CA country: USA properties: city: type: string description: City where the site is located state: type: string description: State where the site is located country: type: string description: Country where the site is located SiteContact: title: SiteContact type: object description: Contact for the Site examples: - email: johndoe@nvidia.com properties: email: type: string description: Email address of the Site contact Allocation: title: Allocation type: object description: Specifies a group of resources on a Site that has been allocated to a Tenant examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: Echo Studios Allocations description: Echo Studios resource allocation in SJC4 infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 tenantId: f97df110-f4de-492e-8849-4a6af68026b0 status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' allocationConstraints: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 allocationId: 9ec871ce-3363-4de2-8f79-062881067628 resourceType: InstanceType resourceTypeId: a59ee688-b5e5-4606-9891-f4a605edacd3 constraintType: Reserved constraintValue: 10 derivedResourceId: null created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' properties: id: type: string description: ID of the Allocation format: uuid readOnly: true name: type: string description: Concise and descriptive name of the Allocation minLength: 2 maxLength: 256 description: type: - string - 'null' description: Detailed description of the Allocation infrastructureProviderId: type: string description: ID of the Infrastructure Provider that created the Allocation format: uuid tenantId: type: string description: ID of the Tenant that received the Allocation format: uuid siteId: type: string description: ID of the Site where resources are allocated format: uuid status: $ref: '#/components/schemas/AllocationStatus' description: 'Status of the Allocation' readOnly: true statusHistory: type: array items: $ref: '#/components/schemas/StatusDetail' description: 'Chronological status history for the Allocation' readOnly: true allocationConstraints: type: array items: $ref: '#/components/schemas/AllocationConstraint' description: 'List of Allocation Constraints for the Allocation' created: type: string description: Date/time when the Allocation was created format: date-time readOnly: true updated: type: string description: Date/time when the Allocation was last updated format: date-time readOnly: true AllocationStatus: title: AllocationStatus type: string description: Status values for Allocation objects enum: - Pending - Registered - Deleting - Error AllocationCreateRequest: title: AllocationCreateRequest type: object description: Request data to create an Allocation examples: - name: Echo Studios description: Echo Studios resource allocation in SJC4 tenantId: f97df110-f4de-492e-8849-4a6af68026b0 siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 allocationConstraints: - resourceType: InstanceType resourceTypeId: bd5a0240-eb62-4bff-91f7-335e6bb86459 constraintType: Reserved constraintValue: 10 properties: name: type: string description: Concise and descriptive name for the Allocation minLength: 2 maxLength: 256 description: type: - string - 'null' description: Detailed description for the Allocation tenantId: type: string format: uuid description: ID of the Tenant that should receive the Allocation siteId: type: string format: uuid description: ID of the Site where resources should be allocated allocationConstraints: type: array items: $ref: '#/components/schemas/AllocationConstraintCreateRequest' description: 'List of Allocation Constraint objects' required: - name - tenantId - siteId AllocationUpdateRequest: title: AllocationUpdateRequest type: object description: Request data to update an Allocation examples: - name: Echo Studios Compute description: Echo Studios resource allocation in SJC4 properties: name: type: - string - 'null' description: Update name of the Allocation minLength: 2 maxLength: 256 description: type: - string - 'null' description: Update description of the Allocation AllocationConstraint: title: AllocationConstraint type: object description: Constraints on an Allocation that specify limits for different resource types examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 allocationId: 9ec871ce-3363-4de2-8f79-062881067628 resourceType: InstanceType resourceTypeId: a59ee688-b5e5-4606-9891-f4a605edacd3 constraintType: Reserved constraintValue: 10 derivedResourceId: null instanceType: name: x3.large infrastructureProviderId: 63c29416-8833-4eaf-9e1c-7c0173cc3150 siteId: c9f4f276-6f7a-4209-953c-2b9870ce7cc1 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 allocationId: 9ec871ce-3363-4de2-8f79-062881067628 resourceType: IPBlock resourceTypeId: a59ee688-b5e5-4606-9891-f4a605edacd3 constraintType: Reserved constraintValue: 20 derivedResourceId: 6b7d0abe-8403-4e9f-9300-a788d6377648 ipBlock: name: Public Network Overlay for Site SJC4 routingType: Public prefix: 202.168.16.0 prefixLength: 20 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' properties: id: type: string description: ID of the Allocation Constraint format: uuid readOnly: true allocationId: type: string format: uuid description: ID of the Allocation that contains the Allocation Constraint resourceType: type: string description: Type of the Resource that the Allocation Constraint applies to enum: - InstanceType - IPBlock resourceTypeId: type: string format: uuid description: 'ID of the resource that acts as the source of the Allocation. For resource type `InstanceType`, this is the ID of the Instance Type whose associated Machines are allocated to the Tenant. For resource type `IPBlock`, this is the ID of the Site-level IP Block from which a prefix is allocated to the Tenant.' constraintType: type: string description: 'Type of the Allocation Constraint. `Reserved` is the only constraint type supported by current implementation.' enum: - Reserved - OnDemand - Preemptible constraintValue: type: integer description: |- Value of the Allocation Constraint. For resource type: `InstanceType`, this value represents number of Machines associated with the Instance Type that is allocated to the Tenant. For resource type `IPBlock`, this value represents the prefix length of the IP Block allocated to the Tenant. derivedResourceId: type: - string - 'null' description: ID of the allocated Tenant IP Block when resource type is IPBlock instanceType: $ref: '#/components/schemas/InstanceTypeSummary' description: 'Summary of the Instance Type' ipBlock: $ref: '#/components/schemas/IpBlockSummary' description: 'Summary of the IP Block' deprecations: type: array description: Deprecations active for this resource. Returned only if there are active deprecations. items: $ref: '#/components/schemas/Deprecation' created: type: string description: Date/time when the Allocation Constraint was created format: date-time readOnly: true updated: type: string description: Date/time when the Allocation Constraint was last updated format: date-time readOnly: true AllocationConstraintCreateRequest: title: AllocationConstraintCreateRequest type: object description: Request data to create an AllocationConstraint examples: - resourceType: InstanceType resourceTypeId: bd5a0240-eb62-4bff-91f7-335e6bb86459 constraintType: Reserved constraintValue: 10 - resourceType: IPBlock resourceTypeId: 67de813e-37ec-4ff3-ae38-c22351855de8 constraintType: Reserved constraintValue: 24 properties: resourceType: type: string description: Type of the Resource that the Allocation Constraint applies to enum: - InstanceType - IPBlock resourceTypeId: type: string format: uuid description: ID of the Resource Type that the Allocation Constraint applies to. For InstanceType, this is the ID of the Instance Type. For IPBlock, this is the ID of the IP Block. constraintType: type: string description: Type of the Allocation Constraint. Please note that OnDemand and Preemptible are not supported by current implementation. enum: - Reserved - OnDemand - Preemptible constraintValue: type: integer description: Value of the Allocation Constraint. For InstanceType, this value represents number of Machines allocated for Tenant. For IPBlock, this value represents the prefix Length of the IP Block. required: - resourceType - resourceTypeId - constraintType - constraintValue AllocationConstraintUpdateRequest: title: AllocationConstraintUpdateRequest type: object description: Request data to update an AllocationConstraint examples: - constraintValue: 10 properties: constraintValue: type: integer description: Value of the Allocation Constraint. For InstanceType, this value represents number of Machines allocated for Tenant. For IPBlock, this value represents the prefix Length of the IP Block. required: - constraintValue VPC: title: VPC type: object description: VPCs are grouping constructs that bind resources together examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: spark-vpc description: Virtual network for machines executing Spark jobs org: xskkpgqpeakn tenantId: 34f5c98e-f430-457b-a812-92637d0c6fd0 siteId: 72771e6a-6f5e-4de4-a5b9-1266c4197811 labels: region: us-west-1 env: dev controllerVpcId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 networkVirtualizationType: ETHERNET_VIRTUALIZER requestedVni: 12001 vni: 12001 networkSecurityGroupId: c602eb90-3039-11f0-997a-b38d4fc8389e networkSecurityGroupPropagationDetails: objectId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 detailedStatus: Partial status: Synchronizing details: '' unpropagatedInstanceIds: - b1a5a05e-303c-11f0-b618-7f2e7f9b64ed relatedInstanceIds: - b1a5a05e-303c-11f0-b618-7f2e7f9b64ed nvLinkLogicalPartitionId: dd887330-dbd3-45ce-b400-c42fc8e47315 status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' properties: id: type: string format: uuid readOnly: true description: ID of the VPC name: type: string minLength: 2 maxLength: 256 description: Name of the VPC description: type: - string - 'null' description: 'Description of the VPC, can be empty' org: type: string readOnly: true description: Organization the VPC belongs to tenantId: type: string format: uuid readOnly: true description: ID of the Tenant the VPC belongs to siteId: type: string format: uuid description: ID of the Site the VPC belongs to controllerVpcId: type: - string - 'null' format: uuid description: 'Legacy attribute, contains the same value as ID' networkVirtualizationType: type: - string - 'null' enum: - ETHERNET_VIRTUALIZER - FNN - FLAT description: 'Network virtualization type of the VPC. Flat VPCs hold instances on zero-DPU hosts (or hosts with their DPU in NIC mode); their interfaces are bound to underlay (HostInband) network segments and NICo does not drive their data plane.' routingProfile: type: - string - 'null' minLength: 3 maxLength: 64 description: Routing profile type for the VPC. Populated when Site has Native Networking enabled and network virtualization type is `FNN`. requestedVni: type: - integer - 'null' minimum: 1 maximum: 65535 readOnly: true description: Explicitly requested VNI for the VPC if one was requested at creation time vni: type: - integer - 'null' minimum: 1 maximum: 65535 readOnly: true description: Active VNI assigned to the VPC networkSecurityGroupId: type: - string - 'null' description: ID of the Network Security Group attached to the VPC networkSecurityGroupPropagationDetails: $ref: '#/components/schemas/NetworkSecurityGroupPropagationDetails' description: Propagation details for the attached Network Security Group nvLinkLogicalPartitionId: type: - string - 'null' format: uuid description: ID of the default NVLink Logical Partition that GPUs for all Instances in the VPC will attach to labels: $ref: '#/components/schemas/Labels' description: String key-value pairs describing VPC labels status: $ref: '#/components/schemas/VpcStatus' readOnly: true description: Status of the VPC statusHistory: type: array items: $ref: '#/components/schemas/StatusDetail' readOnly: true description: History of status changes for the VPC created: type: string format: date-time readOnly: true description: Date/time when VPC was created updated: type: string format: date-time readOnly: true description: Date/time when VPC was last updated VpcStatus: title: VpcStatus type: string description: Status values for VPC objects enum: - Pending - Provisioning - Ready - Configuring - Deleting - Error VpcCreateRequest: title: VpcCreateRequest type: object description: Request data to create a VPC examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: spark-id-vpc description: Virtual network with user-specified VPC ID siteId: 72771e6a-6f5e-4de4-a5b9-1266c4197811 networkVirtualizationType: ETHERNET_VIRTUALIZER vni: 12001 - name: spark-ethernet-virtualization-vpc description: Virtual network for machines executing Spark jobs siteId: 72771e6a-6f5e-4de4-a5b9-1266c4197811 networkVirtualizationType: ETHERNET_VIRTUALIZER vni: 12001 networkSecurityGroupId: c602eb90-3039-11f0-997a-b38d4fc8389e - name: spark-fnn-vpc description: Virtual network for machines executing Spark jobs siteId: 72771e6a-6f5e-4de4-a5b9-1266c4197811 networkVirtualizationType: FNN routingProfile: internal vni: 12001 nvLinkLogicalPartitionId: dd887330-dbd3-45ce-b400-c42fc8e47315 labels: region: us-west-1 env: dev properties: id: type: string format: uuid description: Optional user-specified UUID for the VPC name: type: string minLength: 2 maxLength: 256 description: Name of the VPC description: type: - string - 'null' description: Optional description for the VPC siteId: type: string format: uuid description: ID of the Site where the VPC should be created networkVirtualizationType: type: - string - 'null' enum: - ETHERNET_VIRTUALIZER - FNN - FLAT description: 'Network virtualization type of the VPC. If no value is specified, then defaults to `FNN` if Site has native networking enabled, or `ETHERNET_VIRTUALIZER` if native networking is disabled. Flat VPCs hold instances on zero-DPU hosts (or hosts with their DPU in NIC mode) and are never auto-selected -- `FLAT` must be specified explicitly.' routingProfile: type: - string - 'null' minLength: 3 maxLength: 64 description: Specify routing profile for the VPC. Only supported when `networkVirtualizationType` is set to `FNN`, or when `networkVirtualizationType` is omitted and Site has Native Networking enabled. Requires Tenant to have elevated privilege. Current accepted values are `privileged-internal`, `internal`, and `external`. networkSecurityGroupId: type: - string - 'null' description: ID of the Network Security Group to attach to the VPC vni: type: - integer - 'null' minimum: 1 maximum: 65535 description: Explicitly requested VNI for the VPC nvLinkLogicalPartitionId: type: - string - 'null' format: uuid description: ID of the default NVLink Logical Partition that GPUs for all Instances in the VPC will attach to labels: $ref: '#/components/schemas/Labels' description: String key-value pairs describing VPC labels. Up to 10 key-value pairs can be specified required: - name - siteId VpcUpdateRequest: title: VpcUpdateRequest type: object description: Request data to update a VPC examples: - name: spark-vpc-v1 description: Virtual network for machines executing Spark jobs v1 properties: name: type: - string - 'null' minLength: 2 maxLength: 256 description: Updated name of the VPC description: type: - string - 'null' description: Updated description of the VPC networkSecurityGroupId: type: - string - 'null' description: ID of the Network Security Group to attach to the VPC nvLinkLogicalPartitionId: type: - string - 'null' format: uuid description: ID of the default NVLink Logical Partition that GPUs for all Instances in the VPC will attach to. Can only be updated if VPC currently has no active Instances labels: $ref: '#/components/schemas/Labels' description: 'Update labels of the VPC. Up to 10 key-value pairs can be specified. The labels will be replaced with the labels sent in the request. Any labels not included in the request will be removed. To retain existing labels, fetch them first and include them in this request.' VpcVirtualizationUpdateRequest: title: VpcVirtualizationUpdateRequest type: object description: Request data to update network virtualization type for VPC. Requests are rejected if the VPC already has Subnets or Instances. examples: - networkVirtualizationType: FNN properties: networkVirtualizationType: type: string enum: - FNN description: Network virtualization type of the VPC. Can only be updated to `FNN` VpcPeeringCreateRequest: title: VpcPeeringCreateRequest type: object description: Request data to create a VPC peering between two VPCs, the ordering of VPCs is not important required: - vpc1Id - vpc2Id - siteId properties: vpc1Id: type: string format: uuid description: ID of the first VPC in the peering vpc2Id: type: string format: uuid description: ID of the second VPC to peer with siteId: type: string format: uuid description: ID of the Site where the peering exists VpcPeeringTenantSummary: title: VpcPeeringTenantSummary type: object description: Summarizes a Tenant in context of a VPC Peering properties: id: type: string format: uuid readOnly: true description: ID of the Tenant org: type: string readOnly: true description: Name of the org this tenant belongs to orgDisplayName: type: - string - 'null' readOnly: true description: Display name of the org the Tenant belongs to VpcPeeringVpcSummary: title: VpcPeeringVpcSummary type: object description: Summarizes a VPC in context of a VPC Peering properties: id: type: string format: uuid readOnly: true description: ID of the VPC name: type: string minLength: 2 maxLength: 256 description: Name of the VPC tenantId: type: string format: uuid readOnly: true description: ID of the tenant tenant: $ref: '#/components/schemas/VpcPeeringTenantSummary' readOnly: true description: Summary of the tenant networkVirtualizationType: type: - string - 'null' enum: - ETHERNET_VIRTUALIZER - FNN - FLAT description: Network virtualization type of the VPC status: $ref: '#/components/schemas/VpcStatus' readOnly: true description: Status of the VPC TenantSummary: title: TenantSummary type: object description: Summarizes a Tenant properties: org: type: string readOnly: true description: Name of the org this tenant belongs to orgDisplayName: type: - string - 'null' readOnly: true description: Display name of the org the Tenant belongs to capabilities: $ref: '#/components/schemas/TenantCapabilities' readOnly: true description: 'Deprecated compatibility object. The targetedInstanceCreation property is omitted; use Tenant Account siteCapabilities for the authoritative configuration.' deprecations: type: array items: $ref: '#/components/schemas/Deprecation' readOnly: true description: Deprecation notices for Tenant fields VpcPeering: title: VpcPeering type: object description: VPC peering connection between two VPCs on the same site properties: id: type: string format: uuid readOnly: true description: Unique identifier of the VPC peering vpc1Id: type: string format: uuid readOnly: true description: ID of the first VPC in the peering vpc1: $ref: '#/components/schemas/VpcPeeringVpcSummary' readOnly: true description: Summary of the first VPC in the peering. vpc2Id: type: string format: uuid readOnly: true description: ID of the second VPC in the peering vpc2: $ref: '#/components/schemas/VpcPeeringVpcSummary' readOnly: true description: Summary of the second VPC in the peering. siteId: type: string format: uuid readOnly: true description: ID of the Site where the peering exists site: $ref: '#/components/schemas/SiteSummary' readOnly: true description: Summary of the Site where the peering exists. tenantId: type: string format: uuid readOnly: true description: ID of the tenant that created the VPC peering. tenant: $ref: '#/components/schemas/TenantSummary' readOnly: true description: Summary of the tenant that created the VPC peering. isMultiTenant: type: boolean readOnly: true description: Indicates if this is a multi-tenant peering (VPCs from different tenants) status: $ref: '#/components/schemas/VpcPeeringStatus' readOnly: true description: Status of the VPC peering created: type: string format: date-time readOnly: true description: Date and time when the VPC peering was created updated: type: string format: date-time readOnly: true description: Date and time when the VPC peering was last updated VpcPeeringStatus: title: VpcPeeringStatus type: string description: Status values for VPC peering objects enum: - Pending - Configuring - Requested - Ready - Deleting - Error VpcPrefix: title: VpcPrefix type: object description: VPC Prefixes are network grouping constructs for baremetal machines. examples: - id: 0c03ba01-d86b-4a57-a41e-cc359b380a6f name: east-vpc-traffic-net siteId: ea144def-d68f-44c3-9485-4b103fa2686f vpcId: 5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3 prefix: 192.168.1.0/24 ipBlockId: 8c1d1a06-90a2-4863-8ee1-6029265b9f0a prefixLength: 24 status: Ready usageStats: availableIPs: 256 acquiredIPs: 2 availablePrefixes: - 192.168.1.0/28 - 192.168.1.16/30 - 192.168.1.24/29 - 192.168.1.32/27 - 192.168.1.64/26 - 192.168.1.128/25 availableSmallestPrefixes: 63 acquiredPrefixes: 1 statusHistory: - status: Ready message: 'Received VPC prefix creation request, ready' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - id: 42624127-ec6a-4829-b9ca-2f6ffb5d4215 name: northern-vpc-traffic-net siteId: ea144def-d68f-44c3-9485-4b103fa2686f vpcId: 4ea05fc4-2be8-4823-b574-e633b5ad3c4c prefix: 10.217.98.100/30 ipBlockId: 65e14c37-5a8f-4c41-9b1c-f2e162bee11c prefixLength: 30 status: Ready usageStats: availableIPs: 4 acquiredIPs: 0 availablePrefixes: - 10.217.98.100/30 availableSmallestPrefixes: 1 acquiredPrefixes: 0 statusHistory: - status: Ready message: 'Received VPC prefix creation request, ready' created: '2025-05-28T14:15:22Z' updated: '2025-05-28T14:15:22Z' created: '2025-05-28T14:15:22Z' updated: '2025-05-28T14:15:22Z' properties: id: type: string description: 'Unique UUID v4 identifier for the VPCPrefix' format: uuid readOnly: true name: type: string minLength: 2 maxLength: 256 description: Name of the VPC Prefix siteId: type: string format: uuid description: ID of the Site the VPC Prefix belongs to vpcId: type: string format: uuid description: ID of the VPC the VPC Prefix belongs to ipBlockId: type: - string - 'null' format: uuid description: ID of the IP Block that contains the prefix of the VPC Prefix prefix: type: - string - 'null' description: The network prefix including prefix length in CIDR notation prefixLength: type: integer minimum: 8 maximum: 31 example: 24 description: Length of the prefix. Valid range is 8 to 31, and max usable value depends on prefix length of parent IP Block. status: $ref: '#/components/schemas/VpcPrefixStatus' readOnly: true description: Status of the VPC Prefix usageStats: $ref: '#/components/schemas/IpBlockUsageStats' readOnly: true description: |- Present when query parameter `includeUsageStats=true`. Prefix and IP usage data is derived by evaluating associated Ethernet interfaces. Each Interface associated with a VPC Prefix consumes a `/31` prefix. statusHistory: type: array items: $ref: '#/components/schemas/StatusDetail' readOnly: true description: Details of 20 most recent status changes created: type: string format: date-time readOnly: true description: Date and time when the VPC Prefix was created updated: type: string format: date-time readOnly: true description: Date and time when the VPC Prefix was updated VpcPrefixStatus: title: VpcPrefixStatus type: string description: Status values for VPC Prefix objects enum: - Provisioning - Ready - Deleting - Deleted - Error VpcPrefixCreateRequest: title: VpcPrefixCreateRequest type: object examples: - name: east-vpc-traffic-net vpcId: 5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3 ipBlockId: 8c1d1a06-90a2-4863-8ee1-6029265b9f0a prefixLength: 20 description: Request data for creating VPC Prefix properties: name: type: string minLength: 2 maxLength: 256 description: Human readable name for the VPC Prefix vpcId: type: string format: uuid description: ID of the VPC ipBlockId: type: string format: uuid description: ID of the IP Block to allocate the VPC Prefix from prefixLength: type: integer minimum: 8 maximum: 31 description: Prefix length for the VPC Prefix. Valid range is 8 to 31, and max usable value depends on prefix length of parent IP Block. required: - name - vpcId - ipBlockId - prefixLength VpcPrefixUpdateRequest: title: VpcPrefixUpdateRequest type: object examples: - name: east-vpc-traffic-net description: Request data for updating a VPC Prefix properties: name: type: string description: 'Name of the VPCPrefix' minLength: 2 maxLength: 256 required: - name Subnet: title: Subnet type: object description: Subnets are network grouping constructs for baremetal machines. examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: spark-gpu-net description: Subnet for GPU nodes siteId: ea144def-d68f-44c3-9485-4b103fa2686f vpcId: 5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3 controllerNetworkSegmentId: abe7b0e8-67db-4e89-903e-fc4f2bd7f034 ipv4Prefix: 204.168.0.250 ipv4BlockId: 8c1d1a06-90a2-4863-8ee1-6029265b9f0a ipv4Gateway: 204.168.0.1 ipv6Prefix: null ipv6BlockId: null ipv6Gateway: null prefixLength: 20 routingType: Public status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - id: 82e4c3a7-5b4d-4c8e-a2f1-1c09d06e9120 name: inference-training-net description: Provisioned subnet with IPv4 usage (includeUsageStats=true) siteId: ea144def-d68f-44c3-9485-4b103fa2686f vpcId: 5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3 controllerNetworkSegmentId: abe7b0e8-67db-4e89-903e-fc4f2bd7f034 ipv4Prefix: 10.217.98.64 ipv4BlockId: 8c1d1a06-90a2-4863-8ee1-6029265b9f0a ipv4Gateway: 10.217.98.65 ipv6Prefix: null ipv6BlockId: null ipv6Gateway: null prefixLength: 28 routingType: Public status: Ready usageStats: availableIPs: 16 acquiredIPs: 6 availablePrefixes: - 10.217.98.64/28 availableSmallestPrefixes: 4 acquiredPrefixes: 0 statusHistory: - status: Ready message: Subnet has been successfully provisioned on Site created: '2019-08-24T16:02:38Z' updated: '2019-08-24T16:02:38Z' - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T16:02:38Z' properties: id: type: string description: 'Unique UUID v4 identifier for the Subnet' format: uuid readOnly: true name: type: string description: 'Name of the Subnet' minLength: 2 maxLength: 256 description: type: - string - 'null' description: 'Description of the Subnet' siteId: type: string description: 'ID of the Site containing the Subnet' format: uuid vpcId: type: string description: 'ID of the VPC containing the Subnet' format: uuid controllerNetworkSegmentId: type: - string - 'null' description: 'ID of the Site Controller network segment corresponding to the Subnet' format: uuid ipv4Prefix: type: - string - 'null' format: ipv4 description: The prefix that gets assigned to the subnet if ipv4 block is chosen ipv4BlockId: type: - string - 'null' description: 'ID of the derived Tenant IPv4 Block from an Allocation' format: uuid ipv4Gateway: type: - string - 'null' description: 'Address of the IPv4 gateway in the Subnet' format: ipv4 ipv6Prefix: type: - string - 'null' description: 'Prefix of the network in CIDR notation' format: ipv6 ipv6BlockId: type: - string - 'null' description: 'ID of the derived Tenant IPv6 Block from an Allocation' format: uuid ipv6Gateway: type: - string - 'null' description: 'Address of the IPv6 gateway in the Subnet' format: ipv6 mtu: type: integer description: Maximum Transmission Unit size in bytes. This property is system-determined and read-only. readOnly: true prefixLength: type: integer example: 24 description: Max value depends on prefix length of parent IP Block routingType: type: - string - 'null' description: 'Routing type of the Subnet' enum: - Public - DatacenterOnly status: $ref: '#/components/schemas/SubnetStatus' description: 'Status of the Subnet' readOnly: true usageStats: $ref: '#/components/schemas/IpBlockUsageStats' readOnly: true description: |- Present when query parameter `includeUsageStats=true`. Prefix and IP usage data is derived by evaluating associated Ethernet interfaces. Each Interface associated with a Subnet consumes a single IP. In addition, one gateway and one broadcast IP address are reserved per Subnet. statusHistory: type: array items: $ref: '#/components/schemas/StatusDetail' description: 'Chronological status history for the Subnet' readOnly: true created: type: string description: 'Date/time when the Subnet was created' format: date-time readOnly: true updated: type: string description: 'Date/time when the Subnet was last updated' format: date-time readOnly: true SubnetStatus: title: SubnetStatus type: string description: Status values for Subnet objects enum: - Pending - Provisioning - Ready - Deleting - Error SubnetCreateRequest: title: SubnetCreateRequest type: object examples: - name: spark-gpu-net vpcId: 5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3 ipv4BlockId: 8c1d1a06-90a2-4863-8ee1-6029265b9f0a prefixLength: 20 description: Request data for creating Subnet properties: name: type: string description: 'Name of the Subnet' minLength: 2 maxLength: 256 description: type: - string - 'null' description: 'Description of the Subnet' vpcId: type: string description: 'ID of the VPC containing the Subnet' format: uuid ipv4BlockId: type: - string - 'null' description: 'ID of the derived Tenant IPv4 Block from an Allocation' format: uuid ipv6BlockId: type: - string - 'null' description: 'ID of the derived Tenant IPv6 Block from an Allocation' format: uuid prefixLength: type: integer description: 'Length of the prefix' required: - name - vpcId - prefixLength SubnetUpdateRequest: title: SubnetUpdateRequest type: object examples: - name: spark-gpu-subnet description: Subnet for dedicated GPU nodes description: Request data for updating a Subnet properties: name: type: string description: 'Name of the Subnet' minLength: 2 maxLength: 256 description: type: - string - 'null' description: 'Description of the Subnet' required: - name InfiniBandPartition: title: InfiniBandPartition type: object description: InfiniBand Partitions are network segments utilizing InfiniBand topology examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: turbo-net description: InfiniBand Partition for model training Instances siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 tenantId: f97df110-f4de-492e-8849-4a6af68026b0 controllerIBPartitionId: 0e60d064-3d38-4812-84d9-c3353bd96eaf partitionKey: '0x1' partitionName: turbo-net serviceLevel: 5 rateLimit: 40 mtu: 4000 enableSharp: true status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' properties: id: type: string description: 'Unique UUID v4 identifier for the InfiniBand Partition' format: uuid readOnly: true name: type: string description: 'Name of the InfiniBand Partition' minLength: 2 maxLength: 256 description: type: - string - 'null' description: 'Description of the InfiniBand Partition' siteId: type: string description: 'ID of the Site' format: uuid tenantId: type: string description: 'ID of the Tenant' format: uuid controllerIBPartitionId: type: - string - 'null' description: 'ID of the Site Controller InfiniBand partition corresponding to this InfiniBand Partition' format: uuid partitionKey: type: - string - 'null' description: 'Partition key assigned to the InfiniBand Partition' readOnly: true partitionName: type: - string - 'null' description: 'Partition name assigned to the InfiniBand Partition' readOnly: true serviceLevel: type: - integer - 'null' description: 'Service level configured for the InfiniBand Partition' minimum: 0 maximum: 15 readOnly: true rateLimit: type: - number - 'null' description: 'Rate limit configured for the InfiniBand Partition' enum: - 2 - 5 - 10 - 14 - 20 - 25 - 30 - 40 - 56 - 60 - 80 - 100 - 112 - 120 - 168 - 200 - 300 readOnly: true mtu: type: - integer - 'null' description: 'MTU configured for the InfiniBand Partition' enum: - 4000 - 8000 readOnly: true enableSharp: type: boolean description: 'Whether SHARP is enabled for the InfiniBand Partition' readOnly: true labels: $ref: '#/components/schemas/Labels' description: String key-value pairs describing InfiniBand Partition labels. Up to 10 key-value pairs can be specified status: $ref: '#/components/schemas/InfiniBandPartitionStatus' description: 'Status of the InfiniBand Partition' readOnly: true statusHistory: type: array items: $ref: '#/components/schemas/StatusDetail' description: 'Chronological status history for the InfiniBand Partition' readOnly: true created: type: string description: 'Date/time when the InfiniBand Partition was created' format: date-time readOnly: true updated: type: string description: 'Date/time when the InfiniBand Partition was last updated' format: date-time readOnly: true InfiniBandPartitionStatus: title: InfiniBandPartitionStatus type: string description: Status values for InfiniBand Partition objects enum: - Pending - Provisioning - Ready - Configuring - Deleting - Error InfiniBandPartitionCreateRequest: title: InfiniBandPartitionCreateRequest type: object examples: - name: turbo-net siteId: 8c43e859-d301-4ecf-9d0e-46bf374473c4 description: Request data to create an InfiniBand Partition properties: name: type: string minLength: 2 maxLength: 256 description: Name of the Partition to create description: type: - string - 'null' description: Optional description of the Partition siteId: type: string format: uuid description: ID of the Site the Partition should belong to labels: $ref: '#/components/schemas/Labels' description: String key-value pairs describing Partition labels. Up to 10 key-value pairs can be specified required: - name - siteId InfiniBandPartitionUpdateRequest: title: InfiniBandPartitionUpdateRequest type: object examples: - name: turbo-net description: InfiniBand Partition for model training Instances description: Request data to update an InfiniBand Partition properties: name: type: string description: 'Name of the InfiniBand Partition' minLength: 2 maxLength: 256 description: type: - string - 'null' description: 'Description of the InfiniBand Partition' labels: $ref: '#/components/schemas/Labels' description: String key-value pairs describing Partition labels. Up to 10 key-value pairs can be specified required: - name NVLinkLogicalPartition: title: NVLinkLogicalPartition type: object description: NVLink Logical Partitions are logical GPU fabric segments for high bandwidth communication among selective GPUs examples: - id: ded96bdf-905e-40dd-8a58-3472aab60042 name: partition-east-gpu description: Partition for model training Instances siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 tenantId: f97df110-f4de-492e-8849-4a6af68026b0 status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' properties: id: type: string format: uuid readOnly: true description: Unique ID of the NVLink Logical Partition name: type: string minLength: 2 maxLength: 256 description: Name of the NVLink Logical Partition description: type: - string - 'null' description: Optional description of the NVLink Logical Partition siteId: type: string format: uuid description: ID of the Site the NVLink Logical Partition belongs to tenantId: type: string format: uuid description: ID of the Tenant the NVLink Logical Partition belongs to status: $ref: '#/components/schemas/NVLinkLogicalPartitionStatus' readOnly: true description: Status of the NVLink Logical Partition statusHistory: type: array items: $ref: '#/components/schemas/StatusDetail' description: Details of status changes for the NVLink Logical Partition over time readOnly: true nvLinkLogicalPartitionStats: $ref: '#/components/schemas/NVLinkLogicalPartitionStats' description: GPU and Instance usage counts for the NVLink Logical Partition. Returned if the `includeStats` query parameter is set to true in retrieval endpoints created: type: string format: date-time readOnly: true description: Date and time the NVLink Logical Partition was created updated: type: string format: date-time readOnly: true description: Date and time the NVLink Logical Partition was last updated NVLinkLogicalPartitionStats: title: NVLinkLogicalPartitionStats type: object description: GPU and Instance counts for an NVLink Logical Partition properties: totalGpus: type: integer description: Total number of GPUs associated with the NVLink Logical Partition totalDistinctInstances: type: integer description: Total number of distinct Instances associated with the NVLink Logical Partition NVLinkLogicalPartitionStatus: title: NVLinkLogicalPartitionStatus type: string description: Status values for NVLink Logical Partition objects enum: - Pending - Provisioning - Configuring - Ready - Deleting - Error NVLinkLogicalPartitionCreateRequest: title: NVLinkLogicalPartitionCreateRequest type: object examples: - name: partition-east-gpu siteId: 69dae3c8-3554-4a1f-b391-858c6dc47fff description: Request data to create an NVLink Logical Partition properties: name: type: string minLength: 2 maxLength: 256 description: Name of the NVLink Logical Partition to create description: type: - string - 'null' description: Optional description of the NVLink Logical Partition siteId: type: string format: uuid description: ID of the Site the NVLink Logical Partition should belong to required: - name - siteId NVLinkLogicalPartitionUpdateRequest: title: NVLinkLogicalPartitionUpdateRequest type: object examples: - name: partition-east-gpu description: NVLink Logical Partition for model training Instances description: Request data to update an NVLink Logical Partition properties: name: type: - string - 'null' minLength: 2 maxLength: 256 description: Updated name for the NVLink Logical Partition description: type: - string - 'null' description: Updated description for the NVLink Logical Partition OperatingSystem: title: OperatingSystem type: object description: Describes the attributes of the operating system/bootloader that can be used on instances examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: ubuntu-22.04 description: Ubuntu 22.04 infrastructureProviderId: null tenantId: f97df110-f4de-492e-8849-4a6af68026b0 ipxeScript: |- #!ipxe kernel http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux initrd=initrd.gz initrd http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz boot || imgfree shell userData: |- #cloud-config autoinstall: apt: geoip: true preserve_sources_list: false primary: - arches: [amd64, i386] uri: http://archive.ubuntu.com/ubuntu - arches: [default] uri: http://ports.ubuntu.com/ubuntu-ports phone_home: url: http://169.254.169.254:7777/latest/meta-data/phone_home post: all isCloudInit: true phoneHomeEnabled: true isActive: true deactivationNote: null allowOverride: false status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - id: 42b0f982-5c61-4d2f-a018-41ece61f4641 name: debian-12-amd64 description: Official Debian 12 for AMD/Intel infrastructureProviderId: null tenantId: f97df110-f4de-492e-8849-4a6af68026b0 type: Image imageUrl: 'https://saimei.ftp.acc.umu.se/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2' imageSha: 2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae imageAuthType: Bearer imageAuthToken: acbd18db4cc2f85cedef654fccc4a4d8 imageDisk: /dev/sda rootFsId: 6c2ac315-3040-4728-94eb-b66d320206c1 rootFsLabel: null ipxeScript: null userData: null isCloudInit: false phoneHomeEnabled: false isActive: true deactivationNote: null allowOverride: false siteAssociations: - site: id: 4b36152c-f48d-4bcc-a722-0fd8e2ad209a name: sjc-central-1 infrastructureProviderId: 5f2cc306-76e9-4fca-9186-950c9ef9a74e isSerialConsoleEnabled: true isOnline: true capabilities: nativeNetworking: false networkSecurityGroup: true nvLinkPartition: false flow: false imageBasedOperatingSystem: false status: Registered status: Syncing version: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - site: id: 219b7913-4494-4589-940e-e78ca879b302 name: sc-west-4 infrastructureProviderId: 5f2cc306-76e9-4fca-9186-950c9ef9a74e isSerialConsoleEnabled: true isOnline: true capabilities: nativeNetworking: false networkSecurityGroup: false nvLinkPartition: false flow: false imageBasedOperatingSystem: false status: Registered status: Syncing version: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: ubuntu-22.04 description: Ubuntu 22.04 infrastructureProviderId: null tenantId: f97df110-f4de-492e-8849-4a6af68026b0 ipxeScript: |- #!ipxe kernel http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux initrd=initrd.gz initrd http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz boot || imgfree shell userData: |- #cloud-config autoinstall: apt: geoip: true preserve_sources_list: false primary: - arches: [amd64, i386] uri: http://archive.ubuntu.com/ubuntu - arches: [default] uri: http://ports.ubuntu.com/ubuntu-ports phone_home: url: http://169.254.169.254:7777/latest/meta-data/phone_home post: all isCloudInit: true phoneHomeEnabled: true isActive: false deactivationNote: 'iPXE script is referencing a URL that is unreachable, needs to be researched' allowOverride: false status: Deactivated statusHistory: - status: Deactivated message: Operating System has been deactivated created: '2019-08-24T20:25:17Z' updated: '2019-08-24T20:25:17Z' - status: Ready message: Operating System is now ready to use created: '2019-08-24T14:17:34Z' updated: '2019-08-24T14:17:34Z' - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' properties: id: type: string format: uuid description: ID of the Operating System readOnly: true name: type: string minLength: 2 maxLength: 256 description: Name of the Operating System description: type: - string - 'null' description: Optional description of the Operating System infrastructureProviderId: type: - string - 'null' format: uuid description: Specified if a Provider owns the Operating System tenantId: type: - string - 'null' format: uuid description: Specified if a Tenant owns the Operating System type: type: - string - 'null' description: Type of the Operating System enum: - iPXE - Image - TemplatedIpxe imageUrl: type: - string - 'null' format: uri description: Original URL from which the Operating System image can be retrieved imageSha: type: - string - 'null' description: 'SHA hash of the image file, only present for image-based OS' imageAuthType: type: - string - 'null' description: Authentication type for image URL, e.g., 'Basic' or 'Bearer' imageAuthToken: type: - string - 'null' description: Auth token to retrieve the image from image URL imageDisk: type: - string - 'null' description: Disk path where the image should be mounted rootFsId: type: - string - 'null' description: 'Root filesystem UUID, only applicable for image-based Operating System' rootFsLabel: type: - string - 'null' description: 'Root filesystem label, only applicable for image-based Operating System' ipxeScript: type: - string - 'null' description: 'iPXE script or URL, only applicable for iPXE-based Operating System' ipxeTemplateId: type: - string - 'null' description: 'ID of the iPXE template used, only present for Templated iPXE Operating System' ipxeTemplateParameters: type: array items: $ref: '#/components/schemas/OperatingSystemIpxeParameter' description: 'Parameters passed to the iPXE template (Templated iPXE only)' ipxeTemplateArtifacts: type: array items: $ref: '#/components/schemas/OperatingSystemIpxeArtifact' description: 'Artifacts for the iPXE OS definition (Templated iPXE only). authToken is redacted.' userData: type: - string - 'null' description: User data for the Operating System isCloudInit: type: boolean description: Whether the Operating System is cloud-init based; true if there is non-empty `userData`, false otherwise. phoneHomeEnabled: type: boolean description: Indicates whether the Phone Home service should be enabled or disabled for Operating System isActive: type: boolean description: Indicates if the Operating System is active deactivationNote: type: - string - 'null' description: Optional deactivation note if OS is inactive allowOverride: type: boolean description: Indicates if the user data can be overridden at Instance creation time siteAssociations: type: array description: Sites the Operating System is synced to items: $ref: '#/components/schemas/OperatingSystemSiteAssociation' status: $ref: '#/components/schemas/OperatingSystemStatus' description: Status of the Operating System statusHistory: type: array description: History of status changes over time items: $ref: '#/components/schemas/StatusDetail' created: type: string format: date-time description: Date/time when the Operating System was created readOnly: true updated: type: string format: date-time description: Date/time when the Operating System was updated readOnly: true OperatingSystemStatus: title: OperatingSystemStatus type: string description: Status values for Operating System objects enum: - Pending - Provisioning - Syncing - Ready - Deleting - Error - Deactivated OperatingSystemIpxeParameter: title: OperatingSystemIpxeParameter type: object description: A name/value parameter passed to an iPXE template required: - name - value properties: name: type: string description: Parameter name (used as a variable in the template) value: type: string description: Parameter value OperatingSystemIpxeArtifact: title: OperatingSystemIpxeArtifact type: object description: An artifact (kernel, initrd, ISO, ...) referenced by an iPXE OS definition required: - name - url properties: name: type: string description: Artifact name url: type: string description: Original URL for the artifact sha: type: - string - 'null' description: Optional SHA256 checksum authType: type: - string - 'null' description: 'Optional auth type: Basic or Bearer' authToken: type: - string - 'null' description: 'Optional auth token. Redacted in API responses.' cacheStrategy: type: string enum: - CacheAsNeeded - LocalOnly - CachedOnly - RemoteOnly description: How to handle caching for this artifact IpxeTemplate: title: IpxeTemplate type: object description: An iPXE script template propagated (read-only) from nico-core required: - id - name - template - requiredParams - reservedParams - requiredArtifacts - visibility examples: - id: 3fa85f64-5717-4562-b3fc-2c963f66afa6 name: ubuntu-autoinstall template: | #!ipxe kernel ${kernel_url} initrd=initrd autoinstall initrd ${initrd_url} boot requiredParams: - kernel_url - initrd_url reservedParams: - mac requiredArtifacts: - kernel - initrd visibility: Public created: '2026-07-14T14:15:22Z' updated: '2026-07-14T14:15:22Z' properties: id: type: string format: uuid description: Stable template UUID assigned by core name: type: string description: Globally unique template name template: type: string description: Raw iPXE script content requiredParams: type: array items: type: string description: Parameters that must be provided to render the template reservedParams: type: array items: type: string description: Parameters reserved by the template and not user-supplied requiredArtifacts: type: array items: type: string description: Artifact names required for the template visibility: type: string description: 'Template visibility: Internal or Public' created: type: string format: date-time readOnly: true updated: type: string format: date-time readOnly: true OperatingSystemSiteAssociation: title: OperatingSystemSiteAssociation type: object description: Describes the relationship between Operating Systems and Sites examples: - site: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: sjc-central4 infrastructureProviderId: 5f2cc306-76e9-4fca-9186-950c9ef9a74e isSerialConsoleEnabled: true isOnline: false capabilities: nativeNetworking: false networkSecurityGroup: false nvLinkPartition: false flow: false imageBasedOperatingSystem: false status: Pending status: Syncing version: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' properties: site: $ref: '#/components/schemas/SiteSummary' description: 'Summary of the Site' status: $ref: '#/components/schemas/SshKeyGroupStatus' description: 'Status of the Operating SystemSiteAssociation' version: type: - string - 'null' description: Version of the Key Group on Site example: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 created: type: string description: 'Date/time when the Site was created' format: date-time readOnly: true updated: type: string description: 'Date/time when the Site was last updated' format: date-time readOnly: true OperatingSystemCreateRequest: title: OperatingSystemCreateRequest type: object examples: - name: ubuntu-official-22.04 description: Official Ubuntu 22.04 tenantId: f97df110-f4de-492e-8849-4a6af68026b0 ipxeScript: |- #!ipxe kernel http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux initrd=initrd.gz initrd http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz boot || imgfree shell userData: |- #cloud-config autoinstall: apt: geoip: true preserve_sources_list: false primary: - arches: [amd64, i386] uri: http://archive.ubuntu.com/ubuntu - arches: [default] uri: http://ports.ubuntu.com/ubuntu-ports phoneHomeEnabled: true isCloudInit: true allowOverride: false - name: debian-12-amd64 description: Official Debian 12 for AMD/Intel tenantId: f97df110-f4de-492e-8849-4a6af68026b0 siteIds: - 497f6eca-6276-4993-bfeb-53cbbbba6f08 imageUrl: 'https://saimei.ftp.acc.umu.se/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2' imageSha: 2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae imageAuthType: Bearer imageAuthToken: acbd18db4cc2f85cedef654fccc4a4d8 imageDisk: /dev/sda rootFsId: 6c2ac315-3040-4728-94eb-b66d320206c1 isCloudInit: false allowOverride: false description: Request data to create an OperatingSystem properties: name: type: string minLength: 2 maxLength: 256 description: Name of the Operating System description: type: - string - 'null' description: Optional description of the Operating System infrastructureProviderId: type: - string - 'null' format: uuid description: 'Deprecated: Infrastructure Provider is now inferred from org membership.' deprecated: true tenantId: type: - string - 'null' format: uuid description: 'Deprecated: Tenant is now inferred from org membership.' deprecated: true siteIds: type: array minItems: 1 maxItems: 1 items: type: string format: uuid description: >- Target Site for the Operating System. For image-based and Templated iPXE Operating Systems exactly one Site is required, even though this field is an array. The list is fixed at creation and cannot be changed on update. Not applicable to raw iPXE OS. ipxeScript: type: - string - 'null' deprecated: true description: >- Deprecated: raw iPXE Operating Systems are superseded by Templated iPXE (ipxeTemplateId). iPXE script or URL, only applicable for iPXE-based OS. Cannot be specified if imageUrl is specified. imageUrl: type: - string - 'null' format: uri description: 'Original URL from which the Operating System image can be retrieved; required for image-based OS. Cannot be specified if ipxeScript is specified' imageSha: type: - string - 'null' description: 'SHA hash of the image file, required for image-based OS' imageAuthType: type: - string - 'null' description: 'Authentication type for image URL, if needed, e.g., basic/bearer/token; required if imageAuthToken is specified' imageAuthToken: type: - string - 'null' description: 'Auth token to retrieve the image from image URL, required if imageAuthType is specified' imageDisk: type: - string - 'null' description: 'Disk path where the image should be mounted, optional' rootFsId: type: - string - 'null' description: 'Root filesystem UUID; this or `rootFsLabel` is required for image-based OS' rootFsLabel: type: - string - 'null' description: 'Root filesystem label; this or `rootFsId` is required for image-based OS' phoneHomeEnabled: type: - boolean - 'null' description: Indicates whether the Phone Home service should be enabled or disabled for Operating System userData: type: - string - 'null' description: User data for the Operating System isCloudInit: type: boolean deprecated: true description: 'Deprecated and ignored: whether the Operating System is cloud-init based. Value now derived from `userData`.' allowOverride: type: boolean description: Indicates if the user data can be overridden at Instance creation time ipxeTemplateId: type: - string - 'null' description: 'ID of the iPXE template to use; identifies a Templated iPXE Operating System. Mutually exclusive with ipxeScript and imageUrl.' ipxeTemplateParameters: type: array items: $ref: '#/components/schemas/OperatingSystemIpxeParameter' description: 'Parameters passed to the iPXE template (Templated iPXE only).' ipxeTemplateArtifacts: type: array items: $ref: '#/components/schemas/OperatingSystemIpxeArtifact' description: 'Artifacts (kernel, initrd, ISO, ...) for the iPXE OS definition (Templated iPXE only).' required: - name OperatingSystemUpdateRequest: title: OperatingSystemUpdateRequest type: object examples: - name: ubuntu-22.04 description: Ubuntu 22.04 phoneHomeEnabled: true allowOverride: false - name: debian-12-amd64 description: Official Debian 12 for AMD/Intel imageAuthType: Bearer imageAuthToken: acbd18db4cc2f85cedef654fccc4a4d8 imageDisk: /dev/sda rootFsId: 6c2ac315-3040-4728-94eb-b66d320206c1 isCloudInit: false allowOverride: false - isActive: false deactivationNote: 'iPXE script is referencing a URL that is unreachable, needs to be researched' description: 'Request data to update an Operating System. For image-based OS, mutable image attributes (image authentication, root filesystem, image disk) can be updated; imageUrl and imageSha identify the underlying image and are immutable after creation. Only iPXE attributes can be updated for iPXE-based OS. A Templated iPXE Operating System can only be updated when it is associated with exactly one Site.' properties: name: type: - string - 'null' minLength: 2 maxLength: 256 description: Name of the Operating System description: type: - string - 'null' description: Optional description of the Operating System ipxeScript: type: - string - 'null' description: 'iPXE script or URL, only applicable for iPXE-based OS. Cannot be specified if imageUrl is specified' imageUrl: type: - string - 'null' format: uri description: 'Original URL from which the Operating System image can be retrieved. Immutable after creation: it may be re-sent unchanged, but changing it is rejected. Create a new Operating System to use a different image.' imageSha: type: - string - 'null' description: 'SHA hash of the image file. Immutable after creation: it may be re-sent unchanged, but changing it is rejected.' imageAuthType: type: - string - 'null' description: 'Authentication type for image URL, if needed, e.g., basic/bearer/token; required if imageAuthToken is specified. Can be updated independently without re-sending imageUrl/imageSha.' imageAuthToken: type: - string - 'null' description: 'Auth token to retrieve the image from image URL, required if imageAuthType is specified. Can be updated independently without re-sending imageUrl/imageSha.' imageDisk: type: - string - 'null' description: 'Disk path where the image should be mounted, optional' rootFsId: type: - string - 'null' description: 'Root filesystem UUID; this or `rootFsLabel` is required for image-based OS' rootFsLabel: type: - string - 'null' description: 'Root filesystem label; this or `rootFsId` is required for image-based OS' phoneHomeEnabled: type: - boolean - 'null' description: Indicates whether the Phone Home service should be enabled or disabled for Operating System userData: type: - string - 'null' description: User data for the Operating System isCloudInit: type: - boolean - 'null' deprecated: true description: 'Deprecated and ignored: whether the Operating System is cloud-init based. Value now derived from `userData`.' allowOverride: type: - boolean - 'null' description: Indicates if the user data can be overridden at Instance creation time isActive: type: - boolean - 'null' description: Indicates if the Operating System is active deactivationNote: type: - string - 'null' description: Optional deactivation note if OS is inactive ipxeTemplateId: type: - string - 'null' description: 'ID of the iPXE template to use (Templated iPXE only). Mutually exclusive with ipxeScript and imageUrl.' ipxeTemplateParameters: type: array items: $ref: '#/components/schemas/OperatingSystemIpxeParameter' description: 'Parameters passed to the iPXE template (Templated iPXE only).' ipxeTemplateArtifacts: type: array items: $ref: '#/components/schemas/OperatingSystemIpxeArtifact' description: 'Artifacts (kernel, initrd, ISO, ...) for the iPXE OS definition (Templated iPXE only).' InstanceType: title: InstanceType type: object description: Instance types describe a set of machines that match a certain criteria examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: x3.large description: 'Part of X family, the X3 Large features increased compute power' infrastructureProviderId: 5f2cc306-76e9-4fca-9186-950c9ef9a74e siteId: 72771e6a-6f5e-4de4-a5b9-1266c4197811 labels: region: portland env: staging machineCapabilities: - type: CPU name: Intel(R) Xeon(R) Gold 6354 CPU @ 3.00GHz frequency: 3.0GHz cores: 18 threads: 36 count: 2 machineInstanceTypes: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 machineId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g instanceTypeId: 41e36058-8403-4086-a9b8-39cb5bc9cb98 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' properties: id: type: string description: 'Unique UUID v4 identifier for the Instance Type' format: uuid readOnly: true name: type: string description: 'Name of the Instance Type' minLength: 2 maxLength: 256 description: type: - string - 'null' description: 'Description of the Instance Type' controllerMachineType: type: - string - 'null' description: 'Machine type assigned by Site Controller' infrastructureProviderId: type: string description: 'ID of the Infrastructure Provider that owns the Instance Type' format: uuid siteId: type: string description: 'ID of the Site that owns the Instance Type' format: uuid labels: $ref: '#/components/schemas/Labels' description: 'User-defined key-value labels for the Instance Type' machineCapabilities: type: array items: $ref: '#/components/schemas/MachineCapability' description: 'List of capabilities that are supported by the Machine''s of this Instance Type' machineInstanceTypes: type: array description: Available only for Providers items: $ref: '#/components/schemas/MachineInstanceType' allocationStats: $ref: '#/components/schemas/InstanceTypeAllocationStats' description: summary of machine counts by allocation status status: $ref: '#/components/schemas/InstanceTypeStatus' description: 'Status of the Instance Type' statusHistory: type: array items: $ref: '#/components/schemas/StatusDetail' description: 'Chronological status history for the Instance Type' deprecations: type: array items: $ref: '#/components/schemas/Deprecation' description: Deprecations active for this resource. Returned only if there are active deprecations. created: type: string description: 'Date/time when the InstanceType was created' format: date-time readOnly: true updated: type: string description: 'Date/time when the InstanceType was last updated' format: date-time readOnly: true InstanceTypeSummary: title: InstanceTypeSummary type: object description: Describes a subset of core attributes of an Instance Type examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: x3.large infrastructureProviderId: 5f2cc306-76e9-4fca-9186-950c9ef9a74e siteId: 72771e6a-6f5e-4de4-a5b9-1266c4197811 status: Pending properties: id: type: string description: 'ID of the Instance Type' format: uuid readOnly: true name: type: string description: 'Name of the Instance Type, only lowercase characters, digits, hyphens and cannot begin/end with hyphen' minLength: 2 maxLength: 256 infrastructureProviderId: type: string description: 'ID of the Infrastructure Provider that owns the Instance Type' format: uuid siteId: type: string description: 'ID of the Site that owns the Instance Type' format: uuid status: $ref: '#/components/schemas/InstanceTypeStatus' description: 'Status of the Instance Type' InstanceTypeStatus: title: InstanceTypeStatus type: string description: Status values for Instance Type objects enum: - Pending - Registering - Ready - Deleting - Error InstanceTypeAllocationStats: title: InstanceTypeAllocationStats type: object examples: - assigned: 30 total: 10 used: 3 unused: 7 unusedUsable: 7 maxAllocatable: 20 description: Allocation statistics for Instance Type properties: assigned: type: integer description: Total number of Machines assigned to this Instance Type total: type: integer description: Total number of Machines allocated to different Tenants for this Instance Type used: type: integer description: Total number of allocated Machines of this Instance Type currently being used by Tenants unused: type: integer description: Total number of allocated Machines of this Instance Type that is currently not being used by Tenants unusedUsable: type: integer description: 'Total number of allocated Machines of this Instance Type that is currently not in use but in Ready state, therefore can be provisioned by Tenant' maxAllocatable: type: integer description: Maximum number of Machines of this Instance Type that can be allocated to a Tenant InstanceTypeCreateRequest: title: InstanceTypeCreateRequest type: object examples: - name: x3.large description: 'Part of X family, the X3 Large features increased compute power' siteId: 8d97fa69-9199-49ff-bcf3-168c62d3874e labels: region: portland env: staging machineCapabilities: - type: CPU name: Intel(R) Xeon(R) Gold 6354 CPU @ 3.00GHz frequency: 3.0GHz count: 2 - type: Memory name: Corsair Vengeance LPX capacity: 32GB count: 4 description: Request data to create an Instance Type properties: name: type: string description: 'Name of the Instance Type' minLength: 2 maxLength: 256 description: type: - string - 'null' description: 'Description of the Instance Type' siteId: type: string description: 'ID of the site' format: uuid labels: $ref: '#/components/schemas/Labels' description: 'User-defined key-value labels for the Instance Type' controllerMachineType: type: - string - 'null' description: 'Site Controller assigned Machine type' machineCapabilities: type: array items: $ref: '#/components/schemas/InstanceTypeCapabilityCreateRequest' description: 'List of Machine Capabilities to match' required: - name - siteId InstanceTypeUpdateRequest: title: InstanceTypeUpdateRequest type: object examples: - description: Updated version of the X3 Large family of machines description: Request data to update an Instance Type properties: name: type: - string - 'null' description: 'Name of the Instance Type' minLength: 2 maxLength: 256 description: type: - string - 'null' description: 'Description of the Instance Type' labels: $ref: '#/components/schemas/Labels' description: 'User-defined key-value labels for the Instance Type' machineCapabilities: type: array items: $ref: '#/components/schemas/MachineCapability' description: 'List of Machine Capabilities to match' InstanceTypeCapabilityCreateRequest: title: InstanceTypeCapabilityCreateRequest type: object description: Describes request attributes for Instance Type Capability examples: - type: CPU name: Intel(R) Xeon(R) Gold 6354 CPU @ 3.00GHz frequency: 3.0GHz count: 2 - type: Memory name: DDR4 capacity: 131072GB count: 4 - type: Network name: MT42822 BlueField-2 integrated ConnectX-6 Dx network controller deviceType: DPU count: 2 - type: Storage name: Dell Ent NVMe CM6 RI 1.92TB capacity: 1.92TB count: 2 - type: GPU name: NVIDIA A100 PCIe capacity: 80GB count: 2 - type: InfiniBand name: 'MT2910 Family [ConnectX-7]' vendor: Mellanox Technologies inactiveDevices: - 1 - 3 count: 4 - type: DPU name: DPU count: 2 properties: type: type: string enum: - CPU - Memory - Storage - Network - GPU - InfiniBand - DPU description: Type of the Capability name: type: - string description: Name of the Capability component frequency: type: - string - 'null' description: 'Frequency of the Capability component, if available' capacity: type: - string - 'null' description: 'Capacity of the Capability component, if applicable' vendor: type: - string - 'null' description: 'Vendor of the Capability component, if available' count: type: - integer - 'null' description: Count of the Capability component inactiveDevices: type: array description: 'Indices of those devices that are inactive, only valid for InfiniBand Capability type' items: type: integer deviceType: type: - string - 'null' description: 'Device Type of the Capability component, if available' Instance: title: Instance type: object description: Instance is a baremetal Machine that has been provisioned for a Tenant examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: spark-monitor-1 description: Node for monitoring Spark tenantId: f97df110-f4de-492e-8849-4a6af68026b0 infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 instanceTypeId: 41e36058-8403-4086-a9b8-39cb5bc9cb98 vpcId: 5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3 machineId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g operatingSystemId: eaeb86ee-c435-444e-9e01-8346f67f194b controllerInstanceId: null ipxeScript: null alwaysBootWithCustomIpxe: false networkSecurityGroupId: c602eb90-3039-11f0-997a-b38d4fc8389e networkSecurityGroupPropagationDetails: objectId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 detailedStatus: Partial status: Synchronizing details: '' unpropagatedInstanceIds: - 497f6eca-6276-4993-bfeb-53cbbbba6f08 relatedInstanceIds: - 497f6eca-6276-4993-bfeb-53cbbbba6f08 networkSecurityGroupInherited: false userData: null labels: region: portland env: staging isUpdatePending: false serialConsoleUrl: 'ssh://user@nico.acme.com' interfaces: - id: 64d2028c-ae87-4069-a624-66089d957ef9 instanceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 subnetId: 1f232bf0-7b90-456e-b9b0-38d9fea4171a isPhysical: true virtualFunctionId: null macAddress: null ipAddresses: [] status: Pending created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' infinibandInterfaces: - id: c518a0e8-3f49-4a1a-8935-a6d3dee6911e instanceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 partitionId: 05ef7e84-1d4e-4e4d-980d-38589479a0fe device: 'MT2910 Family [ConnectX-7]' deviceInstance: 0 isPhysical: true virtualFunctionId: null guid: 946dae0300339498 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' nvLinkInterfaces: - id: fc19ab3f-1e52-4846-91bd-98743ff2752c instanceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 nvLinkDomainId: 59202b81-65fb-45ec-b3b8-91ab0ad3f34a deviceInstance: 0 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - id: fc19ab3f-1e52-4846-91bd-98743ff2752c instanceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 nvLinkDomainId: 59202b81-65fb-45ec-b3b8-91ab0ad3f34a deviceInstance: 1 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - id: fc19ab3f-1e52-4846-91bd-98743ff2752c instanceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 nvLinkDomainId: 59202b81-65fb-45ec-b3b8-91ab0ad3f34a deviceInstance: 2 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - id: fc19ab3f-1e52-4846-91bd-98743ff2752c instanceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 nvLinkDomainId: 59202b81-65fb-45ec-b3b8-91ab0ad3f34a deviceInstance: 3 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' dpuExtensionServiceDeployments: [] sshKeyGroupIds: - 497f6eca-6276-4993-bfeb-53cbbbba6f08 sshKeyGroups: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: reno-integration-sre description: SRE access SSH keys for Reno Integration version: fbc692b61ffef6fbfc38a3833f6b7e7ae508da75 status: Syncing created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' tpmEkCertificate: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMxVENDQWJ5Z0F3SUJBZ0lVTEE1ZHFPK1E5OXZQM3VYRTRKcjBncVRtOW93d0RRWUpLb1pJaHZjTkFRRUwKQlFBd0xqRUxNQWtHQTFVRUJoTUNWVk14RXpBUkJnTlZCQW9NQ2s1MmFXUnBZU0JEYjNKNw== status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - id: f61fbc1b-ba32-4476-aab5-5ac7c64c3f26 name: spark-monitor-2 description: Node for monitoring Spark tenantId: f97df110-f4de-492e-8849-4a6af68026b0 infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 instanceTypeId: 41e36058-8403-4086-a9b8-39cb5bc9cb98 vpcId: ebcd2d2a-deca-4ac4-b079-d7a97fff8a6b secondaryVpcIds: - 5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3 machineId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g operatingSystemId: eaeb86ee-c435-444e-9e01-8346f67f194b controllerInstanceId: null ipxeScript: null alwaysBootWithCustomIpxe: false userData: null labels: region: portland env: staging isUpdatePending: false serialConsoleUrl: 'ssh://user@nico.acme.com' interfaces: - id: 64d2028c-ae87-4069-a624-66089d957ef9 instanceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 vpcPrefixId: 000bc42b-f946-472e-83d4-ddf7e365e148 isPhysical: true virtualFunctionId: null macAddress: null ipAddresses: [] status: Pending created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' infinibandInterfaces: - id: c518a0e8-3f49-4a1a-8935-a6d3dee6911e instanceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 partitionId: 05ef7e84-1d4e-4e4d-980d-38589479a0fe device: 'MT2910 Family [ConnectX-7]' deviceInstance: 0 isPhysical: true virtualFunctionId: null guid: 946dae0300339498 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' dpuExtensionServiceDeployments: - id: 3951ec37-d78f-4ad7-92e1-3fdc76ccf246 dpuExtensionService: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: busybox serviceType: KubernetesPod latestVersion: V1-T1761856992374052 status: Ready version: V1-T1761856992374052 status: Running created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' sshKeyGroupIds: - 497f6eca-6276-4993-bfeb-53cbbbba6f08 sshKeyGroups: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: reno-integration-sre description: SRE access SSH keys for Reno Integration version: fbc692b61ffef6fbfc38a3833f6b7e7ae508da75 status: Syncing created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' tpmEkCertificate: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMxVENDQWJ5Z0F3SUJBZ0lVTEE1ZHFPK1E5OXZQM3VYRTRKcjBncVRtOW93d0RRWUpLb1pJaHZjTkFRRUwKQlFBd0xqRUxNQWtHQTFVRUJoTUNWVk14RXpBUkJnTlZCQW9NQ2s1MmFXUnBZU0JEYjNKNw== status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' properties: id: type: string format: uuid description: Unique identifier for the Instance readOnly: true name: type: string description: Name for the Instance minLength: 2 maxLength: 256 description: type: - string - 'null' description: Description for the Instance tenantId: type: string format: uuid description: ID of the Tenant the Instance belongs to infrastructureProviderId: type: string format: uuid description: ID of the Infrastructure Provider that owns the Site where the Instance is located siteId: type: string format: uuid description: ID of the Site where the Instance is located instanceTypeId: type: - string - 'null' description: 'ID of the Instance Type' format: uuid vpcId: type: string description: 'ID of the VPC' format: uuid secondaryVpcIds: type: array description: IDs of VPCs attached to the Instance through non-primary interfaces items: type: string format: uuid machineId: type: - string - 'null' description: 'ID of the Machine' operatingSystemId: type: - string - 'null' description: 'ID of the Operating System' format: uuid networkSecurityGroupId: type: - string - 'null' description: 'ID of the attached Network Security Group, if any' networkSecurityGroupPropagationDetails: $ref: '#/components/schemas/NetworkSecurityGroupPropagationDetails' description: Propagation details for the attached Network Security Group networkSecurityGroupInherited: type: boolean description: Indicates if the Network Security Group is inherited from VPC controllerInstanceId: type: - string - 'null' description: 'ID of the Instance in Site Controller' format: uuid ipxeScript: type: - string - 'null' description: 'Attribute which is inherited from Operating System' alwaysBootWithCustomIpxe: type: boolean description: Indicates whether the Instance should always execute custom iPXE script when rebooting phoneHomeEnabled: type: boolean description: Indicates whether the Phone Home service should be enabled or disabled for the Instance userData: type: - string - 'null' description: 'UserData is inherited from Operating System or specified by user if allowed' labels: $ref: '#/components/schemas/Labels' description: 'User-specified Instance labels' isUpdatePending: type: boolean description: Indicates whether an update is available for the Instance. Updates can be applied on reboot serialConsoleUrl: type: - string - 'null' description: 'Serial Console URL for the Instance. Format: ssh://@siteSerialConsoleHostname' autoNetwork: type: boolean description: 'True when this Instance uses NICo auto-resolved networking from the host''s underlay (HostInband) network segments. When true, the caller''s request `interfaces` list was empty, this `interfaces` field remains empty on readback, and the resolved per-interface details surface under `status.network.interfaces`.' interfaces: type: array items: $ref: '#/components/schemas/Interface' description: 'Interfaces are list of the subnet associated with the Instance' infinibandInterfaces: type: array items: $ref: '#/components/schemas/InfiniBandInterface' description: 'InfiniBandInterfaces are list of the InfiniBandInterface associated with the Instance' nvLinkInterfaces: type: array items: $ref: '#/components/schemas/NVLinkInterface' description: 'NVLinkInterfaces are list of the NVLinkInterface associated with the Instance' dpuExtensionServiceDeployments: type: array description: DPU Extension Services deployed on DPUs of this Instance items: $ref: '#/components/schemas/DpuExtensionServiceDeployment' sshKeyGroupIds: type: array description: IDs of SSH Key Groups associated with this Instance items: type: string format: uuid sshKeyGroups: type: array description: IDs of SSH Key Groups associated with this Instance items: $ref: '#/components/schemas/SshKeyGroup' tpmEkCertificate: type: - string - 'null' description: base64 encoded TPM EK Certificate associated with this Instance status: $ref: '#/components/schemas/InstanceStatus' description: 'Status of the Instance' readOnly: true statusHistory: type: array items: $ref: '#/components/schemas/StatusDetail' description: 'Chronological status history for the Instance' deprecations: type: array items: $ref: '#/components/schemas/Deprecation' description: Deprecations active for this resource. Returned only if there are active deprecations. created: type: string description: 'Date/time when the Instance was created' format: date-time readOnly: true updated: type: string description: 'Date/time when the Instance was last updated' format: date-time readOnly: true InstanceStatus: title: InstanceStatus type: string description: Status values for Instance objects enum: - Pending - Provisioning - Configuring - Ready - Updating - Repairing - Rebooting - Terminating - Error InstanceCreateRequest: title: InstanceCreateRequest type: object examples: - name: spark-monitor-1 description: Node for monitoring Spark tenantId: f97df110-f4de-492e-8849-4a6af68026b0 instanceTypeId: 41e36058-8403-4086-a9b8-39cb5bc9cb98 vpcId: 5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3 operatingSystemId: eaeb86ee-c435-444e-9e01-8346f67f194b ipxeScript: |- #!ipxe kernel http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux initrd=initrd.gz initrd http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz boot || imgfree shell alwaysBootWithCustomIpxe: true phoneHomeEnabled: true userData: |- #cloud-config autoinstall: apt: geoip: true preserve_sources_list: false primary: - arches: [amd64, i386] uri: http://archive.ubuntu.com/ubuntu - arches: [default] uri: http://ports.ubuntu.com/ubuntu-ports phone_home: url: http://169.254.169.254:7777/latest/meta-data/phone_home post: all labels: region: portland env: staging interfaces: - subnetId: 1f232bf0-7b90-456e-b9b0-38d9fea4171a isPhysical: false - subnetId: 31074c90-3061-4d90-bc62-eaf479989b97 isPhysical: true infinibandInterfaces: - partitionId: 4f4decba-7d7f-46b9-9e5f-e5d71c2e0666 device: 'MT2910 Family [ConnectX-7]' deviceInstance: 0 isPhysical: true virtualFunctionId: null nvLinkInterfaces: - nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 deviceInstance: 0 - nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 deviceInstance: 1 - nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 deviceInstance: 2 - nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 deviceInstance: 3 sshKeyGroupIds: - a7bf2f9c-12f0-4673-be47-12be6d9e16c8 - name: spark-monitor-2 description: Node for monitoring Spark tenantId: f97df110-f4de-492e-8849-4a6af68026b0 instanceTypeId: 41e36058-8403-4086-a9b8-39cb5bc9cb98 vpcId: ebcd2d2a-deca-4ac4-b079-d7a97fff8a6b operatingSystemId: eaeb86ee-c435-444e-9e01-8346f67f194b ipxeScript: |- #!ipxe kernel http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux initrd=initrd.gz initrd http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz boot || imgfree shell alwaysBootWithCustomIpxe: true phoneHomeEnabled: true userData: |- #cloud-config autoinstall: apt: geoip: true preserve_sources_list: false primary: - arches: [amd64, i386] uri: http://archive.ubuntu.com/ubuntu - arches: [default] uri: http://ports.ubuntu.com/ubuntu-ports phone_home: url: http://169.254.169.254:7777/latest/meta-data/phone_home post: all labels: region: portland env: staging interfaces: - vpcPrefixId: 000bc42b-f946-472e-83d4-ddf7e365e148 isPhysical: true - vpcPrefixId: 72bfbc86-34eb-4108-8509-2ffd7ca45e04 isPhysical: true sshKeyGroupIds: - a7bf2f9c-12f0-4673-be47-12be6d9e16c8 - name: llm-training-1 description: Node for LLM Training tenantId: f97df110-f4de-492e-8849-4a6af68026b0 vpcId: ebcd2d2a-deca-4ac4-b079-d7a97fff8a6b instanceTypeId: 83e71f8f-65d3-44ba-92ba-19daac2e497a operatingSystemId: eaeb86ee-c435-444e-9e01-8346f67f194b labels: region: portland env: staging interfaces: - vpcPrefixId: 000bc42b-f946-472e-83d4-ddf7e365e148 isPhysical: true dpuExtensionServiceDeployments: - dpuExtensionServiceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 version: V1-T1761856992374052 sshKeyGroupIds: - a7bf2f9c-12f0-4673-be47-12be6d9e16c8 - name: gitlab-runner-1 description: Node for GitLab Runner tenantId: f97df110-f4de-492e-8849-4a6af68026b0 machineId: fm100htq4o8j3bere298as19mdgnbu6hg6guiqp32tghj7gogv05hlr7lgg vpcId: ebcd2d2a-deca-4ac4-b079-d7a97fff8a6b operatingSystemId: eaeb86ee-c435-444e-9e01-8346f67f194b labels: region: portland env: staging interfaces: - vpcPrefixId: 000bc42b-f946-472e-83d4-ddf7e365e148 isPhysical: true sshKeyGroupIds: - a7bf2f9c-12f0-4673-be47-12be6d9e16c8 allowUnhealthyMachine: true description: Request data to create Instance properties: name: type: string minLength: 2 maxLength: 256 description: Name of the Instance description: type: - string - 'null' description: 'Description of the Instance, optional' maxLength: 1024 tenantId: type: string format: uuid description: ID of the Tenant creating the Instance instanceTypeId: type: - string - 'null' format: uuid description: ID of the Instance Type to use for Instance machineId: type: - string - 'null' description: ID of of specific Machine to use for Instance. Requires Targeted Instance Creation capability enabled for Tenant vpcId: type: string format: uuid description: ID of the VPC the Instance should belong to secondaryVpcIds: type: array uniqueItems: true description: IDs of additional VPCs the Instance should attach to through non-primary interfaces. This field may only be specified when every entry in `interfaces` uses `vpcPrefixId` or `vpcId`. IDs must be unique, must be valid UUIDs, and must not include the primary `vpcId`. items: type: string format: uuid userData: type: - string - 'null' description: Can only be specified if allowOverride is set to true in Operating System operatingSystemId: type: - string - 'null' format: uuid description: Must be specified if iPXE Script field is empty networkSecurityGroupId: type: - string - 'null' description: 'ID of the desired Network Security Group to attach to the Instance' ipxeScript: type: - string - 'null' description: 'Override iPXE script specified in OS, must be specified if Operating System is not specified' alwaysBootWithCustomIpxe: type: boolean description: 'When set to true, the iPXE script specified by OS or overridden here will always be run when rebooting the Instance. OS must be of iPXE type.' phoneHomeEnabled: type: boolean description: 'When set to true, the Instance will be enabled with the Phone Home service.' labels: $ref: '#/components/schemas/Labels' description: 'User-defined key-value labels' interfaces: type: array description: 'At least one interface must be specified unless `autoNetwork` is true. Interfaces must all be Subnet-backed or all be VPC-backed; VPC-backed interfaces may use an explicit `vpcPrefixId` or ask the Controller to select a prefix using `vpcId` and `ipFamilies`. Only one network can be attached over a physical interface. If only one Subnet is specified, it will be attached over a physical interface regardless of `isPhysical`. Mutually exclusive with `autoNetwork`: when `autoNetwork` is true this list MUST be empty.' items: $ref: '#/components/schemas/InterfaceCreateRequest' autoNetwork: type: boolean description: 'When true, asks NICo to auto-resolve the Instance''s network interfaces from the host''s underlay (HostInband) network segments. Intended for instances on zero-DPU hosts (or hosts with their DPU in NIC mode). When true: (1) the target VPC''s `networkVirtualizationType` MUST be `FLAT`, (2) `interfaces` MUST be empty or omitted, and (3) `secondaryVpcIds` MUST be empty or omitted. Resolved interfaces surface on the Instance''s read response.' infinibandInterfaces: type: array description: Associate one or more Partitions with this Instance items: $ref: '#/components/schemas/InfiniBandInterfaceCreateRequest' dpuExtensionServiceDeployments: type: array description: DPU Extension Services to deploy to the DPUs of this Instance items: $ref: '#/components/schemas/DpuExtensionServiceDeploymentRequest' nvLinkInterfaces: type: array description: Define Interfaces to associate Instance GPUs with NVLink Logical Partitions. A subset of GPUs may be specified (it is not required to include all GPUs). Each item references one GPU index (`deviceInstance`) and one NVLink Logical Partition. Different interfaces may reference different NVLink Logical Partitions. items: $ref: '#/components/schemas/NVLinkInterfaceCreateOrUpdateRequest' sshKeyGroupIds: type: array description: Specify list of SSH Key Group IDs that will provide Serial over LAN access items: type: string format: uuid allowUnhealthyMachine: type: boolean description: Set to true in order to target Machines are in maintenance or have health alerts preventing regular provision flow. Requires Targeted Instance Creation capability enabled for Tenant required: - name - tenantId - vpcId BatchInstanceCreateRequest: title: BatchInstanceCreateRequest type: object description: Request data to batch create multiple Instances with topology-optimized machine allocation. Explicit interface `ipAddress` values are not supported in batch requests. examples: - namePrefix: gpu-worker count: 4 description: GPU worker nodes for distributed training tenantId: f97df110-f4de-492e-8849-4a6af68026b0 instanceTypeId: 41e36058-8403-4086-a9b8-39cb5bc9cb98 vpcId: 5e28ad7c-5fb7-46d6-a28a-fc0ba6fdc4a3 operatingSystemId: eaeb86ee-c435-444e-9e01-8346f67f194b topologyOptimized: true labels: workload: training env: production interfaces: - subnetId: 1f232bf0-7b90-456e-b9b0-38d9fea4171a isPhysical: true infinibandInterfaces: - partitionId: 4f4decba-7d7f-46b9-9e5f-e5d71c2e0666 device: 'MT2910 Family [ConnectX-7]' deviceInstance: 0 isPhysical: true nvLinkInterfaces: - nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 deviceInstance: 0 - nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 deviceInstance: 1 sshKeyGroupIds: - a7bf2f9c-12f0-4673-be47-12be6d9e16c8 - namePrefix: inference-node count: 8 description: Inference nodes spread across racks tenantId: f97df110-f4de-492e-8849-4a6af68026b0 instanceTypeId: 83e71f8f-65d3-44ba-92ba-19daac2e497a vpcId: ebcd2d2a-deca-4ac4-b079-d7a97fff8a6b operatingSystemId: eaeb86ee-c435-444e-9e01-8346f67f194b topologyOptimized: false interfaces: - vpcPrefixId: 000bc42b-f946-472e-83d4-ddf7e365e148 isPhysical: true dpuExtensionServiceDeployments: - dpuExtensionServiceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 version: V1-T1761856992374052 sshKeyGroupIds: - a7bf2f9c-12f0-4673-be47-12be6d9e16c8 properties: namePrefix: type: string minLength: 2 maxLength: 240 description: Prefix for instance names. Instances will be named with this prefix followed by a random 6-character suffix (e.g., "worker" becomes "worker-abc123") count: type: integer minimum: 2 maximum: 18 description: Number of instances to create in this batch. Minimum 2, maximum 18 (limited by topology domain size) description: type: - string - 'null' description: 'Description applied to all instances in the batch, optional' maxLength: 1024 tenantId: type: string format: uuid description: ID of the Tenant creating the Instances instanceTypeId: type: string format: uuid description: ID of the Instance Type to use for all Instances in the batch vpcId: type: string format: uuid description: ID of the VPC the Instances should belong to secondaryVpcIds: type: array uniqueItems: true description: IDs of additional VPCs the Instances should attach to through non-primary interfaces. This field may only be specified when every entry in `interfaces` uses `vpcPrefixId` or `vpcId`. IDs must be unique, must be valid UUIDs, and must not include the primary `vpcId`. items: type: string format: uuid userData: type: - string - 'null' description: User data applied to all instances. Can only be specified if allowOverride is set to true in Operating System operatingSystemId: type: - string - 'null' format: uuid description: Must be specified if iPXE Script field is empty networkSecurityGroupId: type: - string - 'null' format: uuid description: ID of a Network Security Group to attach to all instances ipxeScript: type: - string - 'null' description: 'Override iPXE script specified in OS, must be specified if Operating System is not specified' alwaysBootWithCustomIpxe: type: boolean description: 'When set to true, the iPXE script specified by OS or overridden here will always be run when rebooting the Instances. OS must be of iPXE type.' phoneHomeEnabled: type: boolean description: 'When set to true, the Instances will be enabled with the Phone Home service.' labels: $ref: '#/components/schemas/Labels' description: 'Key-value objects to be applied to all instances (shared across all instances)' interfaces: type: array description: 'Interface configuration shared across all instances. At least one interface must be specified unless `autoNetwork` is true. Interfaces must all be Subnet-backed or all be VPC-backed; VPC-backed interfaces may use an explicit `vpcPrefixId` or ask the Controller to select a prefix using `vpcId` and `ipFamilies`. Each batch member is resolved independently and may use a different prefix. Only one network can be attached over a physical interface. Interface `ipAddress` is not supported for batch instance creation requests. Mutually exclusive with `autoNetwork`: when `autoNetwork` is true this list MUST be empty.' items: $ref: '#/components/schemas/InterfaceCreateRequest' autoNetwork: type: boolean description: 'When true, asks NICo to auto-resolve each Instance''s network interfaces from the host''s underlay (HostInband) network segments. Intended for instances on zero-DPU hosts (or hosts with their DPU in NIC mode). When true: (1) the target VPC''s `networkVirtualizationType` MUST be `FLAT`, (2) `interfaces` MUST be empty or omitted, and (3) `secondaryVpcIds` MUST be empty or omitted.' infinibandInterfaces: type: array description: InfiniBand interface configuration shared across all instances items: $ref: '#/components/schemas/InfiniBandInterfaceCreateRequest' dpuExtensionServiceDeployments: type: array description: DPU Extension Services to deploy to all instances in the batch items: $ref: '#/components/schemas/DpuExtensionServiceDeploymentRequest' nvLinkInterfaces: type: array description: NVLink interface configuration shared across all instances. A subset of GPUs may be specified. Each item references one GPU index (`deviceInstance`) and one NVLink Logical Partition. Different interfaces may reference different NVLink Logical Partitions. items: $ref: '#/components/schemas/NVLinkInterfaceCreateOrUpdateRequest' sshKeyGroupIds: type: array description: SSH Key Group IDs that will provide Serial over LAN access to all instances items: type: string format: uuid topologyOptimized: type: boolean default: true description: 'When true (default), all instances must be allocated on machines within the same NVLink domain. When false, instances can be spread across different NVLink domains.' required: - namePrefix - count - tenantId - instanceTypeId - vpcId InstanceUpdateRequest: title: InstanceUpdateRequest type: object examples: - name: spark-monitor-1 description: Spark Monitor Node 1 alwaysBootWithCustomIpxe: true sshKeyGroupIds: - a7bf2f9c-12f0-4673-be47-12be6d9e16c8 operatingSystemId: eaeb86ee-c435-444e-9e01-8346f67f194b ipxeScript: |- #!ipxe kernel http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux initrd=initrd.gz initrd http://archive.ubuntu.com/ubuntu/dists/xenial/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz boot || imgfree shell userData: |- #cloud-config autoinstall: apt: geoip: true preserve_sources_list: false primary: - arches: [amd64, i386] uri: http://archive.ubuntu.com/ubuntu - arches: [default] uri: http://ports.ubuntu.com/ubuntu-ports phone_home: url: http://169.254.169.254:7777/latest/meta-data/phone_home post: all labels: region: portland env: staging interfaces: - subnetId: 1f492faa-2963-4f21-aab5-9f00b2e40119 isPhysical: true infinibandInterfaces: - partitionId: 550e8400-e29b-41d4-a716-446655440000 device: 'MT2910 Family [ConnectX-7]' deviceInstance: 0 isPhysical: true virtualFunctionId: null - partitionId: 6ba7b810-9dad-11d1-80b4-00c04fd430c8 device: 'MT2910 Family [ConnectX-7]' deviceInstance: 1 isPhysical: false virtualFunctionId: null - partitionId: 8b05d5c3-8de4-48c8-8d1c-399a8abc3ab8 device: 'MT2910 Family [ConnectX-7]' deviceInstance: 2 isPhysical: false virtualFunctionId: null dpuExtensionServiceDeployments: - dpuExtensionServiceId: 497f6eca-6276-4993-bfeb-53cbbbba6f08 version: V1-T1761856992374052 nvLinkInterfaces: - nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 deviceInstance: 0 - nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 deviceInstance: 1 - nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 deviceInstance: 2 - nvLinkLogicalPartitionId: 2f8676fd-d228-4db5-ac76-1cfc74f48a23 deviceInstance: 3 - triggerReboot: true rebootWithCustomIpxe: true applyUpdatesOnReboot: true description: Request data to update Instance properties: name: type: - string - 'null' minLength: 2 maxLength: 256 description: Updated name for the Instance description: type: - string - 'null' description: Updated description of the Instance maxLength: 1024 triggerReboot: type: - boolean - 'null' description: Trigger power cycle for Instance rebootWithCustomIpxe: type: - boolean - 'null' description: 'When specified along with triggerReboot, the Instance will boot using the custom iPXE specified by OS. If Instance has alwaysBootWithCustomIpxe flag set then this value will be ignored.' applyUpdatesOnReboot: type: - boolean - 'null' description: 'When specified, pending Instance updates such as DPU reprovisioning are applied on reboot' operatingSystemId: type: - string - 'null' description: The UUID of the desired operating system. ipxeScript: type: - string - 'null' description: The iPXE script content to be used for booting. sshKeyGroupIds: type: array description: Specify a new list of SSH Key Group IDs that will provide Serial over LAN and SSH access. This will overwrite an existing list. items: type: string format: uuid networkSecurityGroupId: type: - string - 'null' description: 'ID of the Network Security Group to attach to the Instance' userData: type: - string - 'null' description: 'Any user-data to be sent to the booting OS. For example, cloud-init data.' alwaysBootWithCustomIpxe: type: - boolean - 'null' description: Whether the custom iPXE data should be used for every boot. phoneHomeEnabled: type: - boolean - 'null' description: Indicates whether the Phone Home service should be enabled or disabled for the Instance labels: $ref: '#/components/schemas/Labels' description: 'Update labels of the Instance. The labels will be replaced with the labels sent in the request. Any labels not included in the request will be removed. To retain existing labels, fetch them first and include them in this request.' secondaryVpcIds: type: array uniqueItems: true description: IDs of additional VPCs the Instance should attach to through non-primary interfaces. This field may only be specified when every entry in `interfaces` uses `vpcPrefixId` or `vpcId`. IDs must be unique, must be valid UUIDs, and must not include the primary `vpcId`. items: type: string format: uuid interfaces: type: array description: 'Complete updated Interface configuration for the Instance. Interfaces must all be Subnet-backed or all be VPC-backed; VPC-backed interfaces may use an explicit `vpcPrefixId` or ask the Controller to select a prefix using `vpcId` and `ipFamilies`. Mutually exclusive with `autoNetwork`: when `autoNetwork` is true this list MUST be empty.' items: $ref: '#/components/schemas/InterfaceCreateRequest' autoNetwork: type: - boolean - 'null' description: 'When set, asks NICo to auto-resolve the Instance''s network interfaces from the host''s underlay (HostInband) segments. `null` leaves the value unchanged; `true` (re-)resolves; `false` returns to explicit interface configuration. When `true`, the Instance''s VPC MUST already have `networkVirtualizationType: FLAT`, `interfaces` MUST be empty or omitted, and `secondaryVpcIds` MUST be empty or omitted.' infinibandInterfaces: type: array description: Update InfiniBand Interfaces of the Instance items: $ref: '#/components/schemas/InfiniBandInterfaceCreateRequest' nvLinkInterfaces: type: array description: Update NVLink Interfaces of the Instance. A subset of GPUs may be specified. Each item references a GPU index (`deviceInstance`) and an NVLink Logical Partition. Different interfaces may reference different NVLink Logical Partitions. Partial updates are not allowed; specified interfaces will delete or replace existing Interfaces. Updating is not allowed if the Instance's VPC has the `nvLinkLogicalPartitionId` attribute set. items: $ref: '#/components/schemas/NVLinkInterfaceCreateOrUpdateRequest' dpuExtensionServiceDeployments: type: array description: Updated set of DPU Extension Services to deploy to the DPUs of this Instance items: $ref: '#/components/schemas/DpuExtensionServiceDeploymentRequest' InstanceDeleteRequest: title: InstanceDeleteRequest type: object examples: - machineHealthIssue: category: Network summary: Machine has DPU connectivity error details: Tenant observed repeated link flaps on the DPU uplink. isRepairTenant: false description: Request data to delete Instance properties: machineHealthIssue: $ref: '#/components/schemas/MachineHealthIssue' description: Information regarding issue with the underlying Machine experienced by Tenant isRepairTenant: type: - boolean - 'null' description: Should be set to true for Tenants who are performing investigation/repairing the Machine. Otherwise omit or set to false Interface: title: Interface type: object examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 instanceId: 64d2028c-ae87-4069-a624-66089d957ef9 subnetId: 1f232bf0-7b90-456e-b9b0-38d9fea4171a isPhysical: true virtualFunctionId: null macAddress: 2F-FC-34-AE-9C-2A ipAddresses: - 200.32.11.190 status: Pending created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - id: 94c4c8c0-c3c4-4a52-9518-3e165b1de036 instanceId: 371ddf80-a7ff-4ff6-9a37-0557cec8b9be vpcPrefixId: 1f232bf0-7b90-456e-b9b0-38d9fea4171a requestedIpAddress: 10.0.0.191 isPhysical: true device: MT42822 BlueField-2 integrated ConnectX-6 Dx network controller deviceInstance: 0 virtualFunctionId: null macAddress: 2F-FC-34-AE-9C-2B ipAddresses: - 200.32.11.191 status: Pending created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - id: 4c53d2f4-2a51-4ac5-90c9-87ad215c5091 instanceId: 371ddf80-a7ff-4ff6-9a37-0557cec8b9be vpcId: bdd3d1af-b4a8-4675-a59c-56548716ef45 ipFamilies: - IPv4 isPhysical: true macAddress: 2F-FC-34-AE-9C-2D ipAddresses: - 200.32.11.196 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - id: 45d89d4f-2dde-4fc5-a20d-9f96faa4e9fa instanceId: 371ddf80-a7ff-4ff6-9a37-0557cec8b9be vpcPrefixId: d89d8cc6-d66e-4bf2-bf62-40238837cc90 requestedIpAddress: 10.0.0.193 isPhysical: false device: MT42822 BlueField-2 integrated ConnectX-6 Dx network controller deviceInstance: 0 virtualFunctionId: 1 macAddress: 2F-FC-34-AM-9C-2C ipAddresses: - 200.32.11.193 status: Pending created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - id: 236ee9d1-5f61-4aaa-abf3-0f72693e1189 instanceId: 371ddf80-a7ff-4ff6-9a37-0557cec8b9be vpcPrefixId: d5dd56e2-1b0b-4913-927e-b5896d7aca7b requestedIpAddress: 10.0.0.195 isPhysical: true device: MT42822 BlueField-2 integrated ConnectX-6 Dx network controller deviceInstance: 1 virtualFunctionId: null macAddress: 2F-FC-34-AM-9C-2C ipAddresses: - 200.32.11.194 status: Pending created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' description: Associates an Instance with a Subnet or VPC-backed network properties: id: type: string description: 'Unique UUID v4 identifier for the Interface' minLength: 1 format: uuid instanceId: type: string description: 'ID of the associated Instance' format: uuid subnetId: type: - string - 'null' description: 'ID of the associated Subnet' format: uuid vpcPrefixId: type: - string - 'null' description: ID of the VPC Prefix explicitly selected by the caller format: uuid vpcId: type: string description: ID of the VPC from which the Controller selects a prefix format: uuid ipFamilies: type: array description: Address families requested for Controller prefix selection items: $ref: '#/components/schemas/IPFamily' isPhysical: type: boolean description: Indicates whether the network is bound on a physical Interface device: type: - string - 'null' description: Name of the device to use deviceInstance: type: - integer - 'null' description: 'Index of the device, used to identify which interface card to attache the Partition to' virtualFunctionId: type: - integer - 'null' description: Must be specified if isPhysical is false macAddress: type: - string - 'null' description: 'MAC address of the Interface' ipAddresses: type: array description: A list of IPv4 or IPv6 addresses items: type: string requestedIpAddress: type: - string - 'null' description: Explicitly requested IP address for the interface. This is only used with an explicit `vpcPrefixId` and is not valid with `subnetId` or VPC-selected interfaces. The least-significant host bit must be 1. inlineRoutingProfile: oneOf: - $ref: '#/components/schemas/InterfaceInlineRoutingProfile' - type: 'null' description: Inline interface-local routing profile options. Only valid for VPC-backed interfaces. status: $ref: '#/components/schemas/InterfaceStatus' description: 'Status of the Interface' created: type: string description: 'Date/time when the Interface was created' format: date-time readOnly: true updated: type: string description: 'Date/time when the Interface was last updated' format: date-time readOnly: true InterfaceStatus: title: InterfaceStatus type: string description: Status values for Interface objects enum: - Pending - Provisioning - Ready - Deleting - Error IPFamily: title: IPFamily type: string description: Address family requested for a VPC-selected Interface enum: - IPv4 - IPv6 InterfaceInlineRoutingProfile: title: InterfaceInlineRoutingProfile type: object description: Interface-local routing profile options that narrow the owning VPC's routing profile. properties: allowedAnycastPrefixes: type: array description: CIDR prefixes this interface is allowed to announce as anycast routes. default: [] items: type: string example: 192.0.2.0/24 InterfaceCreateRequest: title: InterfaceCreateRequest type: object examples: - subnetId: 1f232bf0-7b90-456e-b9b0-38d9fea4171a isPhysical: true - vpcPrefixId: 000bc42b-f946-472e-83d4-ddf7e365e148 ipAddress: 10.0.0.11 isPhysical: true - vpcId: bdd3d1af-b4a8-4675-a59c-56548716ef45 ipFamilies: - IPv4 isPhysical: true description: |- Request data to create an Interface for an Instance by associating it with a Subnet, an explicit VPC Prefix, or a VPC from which the Controller selects a prefix. Exactly one of `subnetId`, `vpcPrefixId`, or `vpcId` must be specified. If the VPC specified in the request has FNN virtualization type, all interfaces must specify either `vpcPrefixId` or `vpcId`. If the VPC has Ethernet network virtualization type then all interfaces must specify Subnet. properties: subnetId: type: string description: 'ID of the Subnet to attach to the Interface' format: uuid vpcPrefixId: type: string description: 'ID of the VPC Prefix to attach to the Interface' format: uuid vpcId: type: string description: ID of the VPC from which the Controller should select a prefix. `ipFamilies` must also be specified, and `ipAddress` cannot be specified. format: uuid ipFamilies: type: array minItems: 1 description: Address families requested for Controller prefix selection. Required with `vpcId` and prohibited otherwise. Only `IPv4` is currently accepted. items: type: string enum: - IPv4 ipAddress: type: - string - 'null' description: Explicitly requested IP address for the interface. It can only be specified with an explicit `vpcPrefixId`. The least-significant host bit must be 1. inlineRoutingProfile: oneOf: - $ref: '#/components/schemas/InterfaceInlineRoutingProfile' - type: 'null' description: Inline interface-local routing profile options. It cannot be specified for Subnet-based interfaces. isPhysical: type: boolean description: Specifies whether this network should be attached to the Instance over a physical interface. device: type: string description: Name of the device to use deviceInstance: type: integer description: 'Index of the device, used to identify which interface card to attache the Partition to' virtualFunctionId: type: - integer - 'null' description: 'Index of the virtual function to use, must be specified if isPhysical is false' minimum: 0 maximum: 15 oneOf: - required: - subnetId - required: - vpcPrefixId - required: - vpcId dependentRequired: vpcId: - ipFamilies ipFamilies: - vpcId dependentSchemas: subnetId: properties: ipAddress: type: 'null' inlineRoutingProfile: type: 'null' vpcId: properties: ipAddress: type: 'null' InfiniBandInterface: title: InfiniBandInterface type: object examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 instanceId: 64d2028c-ae87-4069-a624-66089d957ef9 partitionId: 05ef7e84-1d4e-4e4d-980d-38589479a0fe device: 'MT2910 Family [ConnectX-7]' deviceInstance: 0 isPhysical: true virtualFunctionId: null guid: 946dae0300339498 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' description: Defines an interface created by associating an Instance with an InfiniBand Partition properties: id: type: string description: 'Unique UUID v4 identifier for the InfiniBandInterface' minLength: 1 format: uuid instanceId: type: string description: 'ID of the associated Instance' format: uuid partitionId: type: string format: uuid description: ID of the InfiniBand Partition associated with this interface device: type: string description: Name of the InfiniBand device associated with this interface vendor: type: - string - 'null' description: Name of the InfiniBand device vendor associated with this interface deviceInstance: type: integer description: 'Index of the device where partition attach to' isPhysical: type: boolean description: Indicates whether this is a physical interface virtualFunctionId: type: - integer - 'null' description: 'Must be specified if isPhysical is false' guid: type: - string - 'null' description: 'Must be specified if isPhysical is false' status: $ref: '#/components/schemas/InfiniBandInterfaceStatus' description: 'Status of the InfiniBandInterface' created: type: string description: 'Date/time when the InfiniBandInterface was created' format: date-time readOnly: true updated: type: string description: 'Date/time when the InfiniBandInterface was last updated' format: date-time readOnly: true InfiniBandInterfaceStatus: title: InfiniBandInterfaceStatus type: string description: Status values for InfiniBand Interface objects enum: - Pending - Provisioning - Ready - Deleting - Error InfiniBandInterfaceCreateRequest: title: InfiniBandInterfaceCreateRequest type: object examples: - partitionId: 4f4decba-7d7f-46b9-9e5f-e5d71c2e0666 device: 'MT2910 Family [ConnectX-7]' deviceInstance: 0 isPhysical: true virtualFunctionId: null - partitionId: 4f4decba-7d7f-46b9-9e5f-e5d71c2e0666 device: 'MT2910 Family [ConnectX-7]' deviceInstance: 3 isPhysical: false virtualFunctionId: 2 description: Request data to create an InfiniBand Interface for an Instance by associating it with an InfiniBand Partition properties: partitionId: type: string format: uuid description: ID of the Partition the Interface should attach to device: type: string description: Name of the InfiniBand device to use vendor: type: - string - 'null' description: 'Name of the InfiniBand device vendor, optional' deviceInstance: type: integer description: 'Index of the device, used to identify which interface card to attache the Partition to' isPhysical: type: boolean description: Specifies whether this Partition should be attached to the Instance over physical interface virtualFunctionId: type: - integer - 'null' description: Must be specified if isPhysical is false NVLinkInterface: title: NVLinkInterface type: object examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 instanceId: 64d2028c-ae87-4069-a624-66089d957ef9 nvLinkLogicalPartitionId: 05ef7e84-1d4e-4e4d-980d-38589479a0fe nvLinkDomainId: 59202b81-65fb-45ec-b3b8-91ab0ad3f34a deviceInstance: 0 gpuGuid: 4fe82bc6-1e30-4dfd-8839-996596209883 status: Ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' description: Defines an interface created by associating a GPU of an Instance with an NVLink Logical Partition properties: id: type: string description: 'Unique UUID v4 identifier for the NVLinkInterface' minLength: 1 format: uuid instanceId: type: string description: 'ID of the associated Instance' format: uuid nvLinkLogicalPartitionId: type: string format: uuid description: ID of the NVLink Logical Partition associated with this interface nvLinkDomainId: type: - string - 'null' format: uuid description: ID of the NVLink Domain associated with this Interface deviceInstance: type: integer description: 'Index of the device, used to identify the GPU associated with this Interface' gpuGuid: type: - string - 'null' description: Unique ID of the GPU status: $ref: '#/components/schemas/NVLinkInterfaceStatus' description: 'Status of the NVLinkInterface' created: type: string description: 'Date/time when the NVLinkInterface was created' format: date-time readOnly: true updated: type: string description: 'Date/time when the NVLinkInterface was last updated' format: date-time readOnly: true deprecations: type: array description: Deprecations active for this resource. Returned only if there are active deprecations. items: $ref: '#/components/schemas/Deprecation' NVLinkInterfaceStatus: title: NVLinkInterfaceStatus type: string description: Status values for NVLink Interface objects enum: - Pending - Provisioning - Ready - Deleting - Error NVLinkInterfaceCreateOrUpdateRequest: title: NVLinkInterfaceCreateOrUpdateRequest type: object examples: - nvLinkLogicalPartitionId: 505e07bc-86bf-489a-807d-92dc8b80e6ff deviceInstance: 0 - nvLinkLogicalPartitionId: 4f4decba-7d7f-46b9-9e5f-e5d71c2e0666 deviceInstance: 1 description: Request data to create an NVLink Interface for an Instance by associating a specific GPU index with an NVLink Logical Partition. properties: nvLinkLogicalPartitionId: type: string format: uuid description: ID of the NVLink Logical Partition the Interface should attach to deviceInstance: type: integer minimum: 0 description: GPU index for this NVLink interface. Must be non-negative, unique within the request, and within the GPU count exposed by the selected Machine or Instance Type. MachineCapability: title: MachineCapability type: object description: Describes capabilities of a Machine examples: - type: CPU name: Intel(R) Xeon(R) Gold 6354 CPU @ 3.00GHz frequency: 3.0GHz cores: 18 threads: 36 count: 2 - type: Memory name: DDR4 capacity: 131072GB count: 4 - type: Network name: MT43244 BlueField-3 integrated ConnectX-7 network controller vendor: Mellanox Technologies deviceType: DPU count: 2 - type: Storage name: Dell Ent NVMe CM6 RI 1.92TB capacity: 1.92TB count: 2 - type: GPU name: NVIDIA A100 PCIe capacity: 80GB count: 2 - type: InfiniBand name: 'MT28908 Family [ConnectX-6]' vendor: Mellanox Technologies count: 2 - type: DPU name: DPU count: 2 properties: type: type: string enum: - CPU - Memory - Storage - Network - GPU - InfiniBand - DPU description: Type of the Capability name: type: - string description: Name of the Capability component frequency: type: - string - 'null' description: 'Frequency of the Capability component, if available' cores: type: - integer - 'null' description: 'Number of Cores in the Capability component, if applicable' threads: type: - integer - 'null' description: 'Number of Threads in the Capability component, if applicable' capacity: type: - string - 'null' description: 'Capacity of the Capability component, if applicable' vendor: type: - string - 'null' description: 'Vendor of the Capability component, if available' hardwareRevision: type: - string - 'null' description: Hardware revision of the Capability component, if available inactiveDevices: type: array description: A list of inactive devices items: type: integer count: type: - integer - 'null' description: Count of the Capability component deviceType: type: - string - 'null' description: 'Device Type of the Capability component, if available' Rack: title: Rack type: object description: Rack represents a physical rack in the datacenter examples: - id: 550e8400-e29b-41d4-a716-446655440000 name: Rack-01 manufacturer: Dell model: PowerEdge R750 serialNumber: SN-RACK-001 description: Primary compute rack location: region: us-east-1 datacenter: DC-01 room: Room-A position: A1 components: - id: 660e8400-e29b-41d4-a716-446655440001 componentId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g type: ComponentTypeCompute name: Server-01 serialNumber: SN-SRV-001 manufacturer: Dell firmwareVersion: 2.1.0 slotId: 1 trayIdx: 0 hostId: 0 bmcs: - type: BmcTypeHost macAddress: 'AA:BB:CC:DD:EE:01' ipAddress: 10.0.0.101 powerState: 'on' properties: id: type: string format: uuid description: Unique identifier of the Rack name: type: string description: Name of the Rack manufacturer: type: string description: Manufacturer of the Rack model: type: string description: Model of the Rack serialNumber: type: string description: Serial number of the Rack description: type: string description: Description of the Rack location: $ref: '#/components/schemas/RackLocation' description: 'Physical or logical location of the Rack' components: type: array description: Components within the Rack. Only returned when includeComponents is true. items: $ref: '#/components/schemas/RackComponent' RackLocation: title: RackLocation type: object description: Physical location of a Rack properties: region: type: string description: Region where the rack is located datacenter: type: string description: Datacenter where the rack is located room: type: string description: Room within the datacenter position: type: string description: Position of the rack within the room RackValidationResult: title: RackValidationResult type: object description: Result of validating a rack's components by comparing expected vs actual state properties: diffs: type: array description: List of component differences found during validation items: $ref: '#/components/schemas/ComponentDiff' totalDiffs: type: integer description: Total number of component differences found missingCount: type: integer description: Number of components expected but missing from the source system unexpectedCount: type: integer description: Number of components found in the source system but not expected mismatchCount: type: integer description: Number of components present in both but with field differences matchCount: type: integer description: Number of components that match between expected and actual ComponentDiff: title: ComponentDiff type: object description: A single component difference found during rack validation properties: type: type: string description: 'Type of difference: Unknown, Missing, Unexpected, or Mismatch' enum: - Unknown - Missing - Unexpected - Mismatch id: type: string format: uuid description: Flow internal component UUID componentId: type: string description: Component ID assigned by the component manager service expected: $ref: '#/components/schemas/RackComponent' description: 'Expected component value' actual: $ref: '#/components/schemas/RackComponent' description: 'Actual component value reported by the system' fieldDiffs: type: array description: List of field differences (populated when type is Mismatch) items: $ref: '#/components/schemas/FieldDiff' FieldDiff: title: FieldDiff type: object description: A single field difference between expected and actual component state properties: fieldName: type: string description: 'Name of the field that differs (e.g. firmware_version, position.slot_id)' expectedValue: type: string description: Expected value of the field actualValue: type: string description: Actual value of the field RackComponent: title: RackComponent type: object description: A component within a Rack (e.g. compute node, switch, PDU) properties: id: type: string format: uuid description: Unique identifier of the component componentId: type: string description: ID of the component rackId: type: string format: uuid description: ID of the rack this component belongs to type: type: string description: Type of the component (e.g. ComponentTypeCompute, ComponentTypeNVSwitch) name: type: string description: Name of the component serialNumber: type: string description: Serial number of the component manufacturer: type: string description: Manufacturer of the component model: type: string description: Model of the component description: type: string description: Description of the component (JSON string) firmwareVersion: type: string description: Firmware version of the component slotId: type: integer description: Slot ID of the component within the rack trayIdx: type: integer description: Tray index of the component hostId: type: integer description: Host ID of the component bmcs: type: array description: BMC (Baseboard Management Controller) entries for the component items: $ref: '#/components/schemas/BMCInfo' powerState: type: string description: Current power state of the component operationStatus: type: string enum: - Unknown - Initializing - Ready - InUse - Error - Deleting description: Flow-derived operability phase of the component leakStatus: type: string enum: - Unknown - NoLeak - Leaking description: Whether the component is considered leaking coolant BMCInfo: title: BMCInfo type: object description: BMC (Baseboard Management Controller) information properties: type: type: string description: BMC type (e.g. BmcTypeHost, BmcTypeDpu) macAddress: type: string description: MAC address of the BMC ipAddress: type: string description: IP address of the BMC Tray: title: Tray type: object description: 'Tray represents a component within a rack (e.g. compute node, NVSwitch, power shelf)' examples: - id: 660e8400-e29b-41d4-a716-446655440001 componentId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g type: compute name: compute-tray-1 manufacturer: NVIDIA model: GB200 serialNumber: TSN001 description: Compute tray in slot 1 firmwareVersion: 2.1.0 powerState: 'on' position: slotId: 1 trayIdx: 0 hostId: 1 bmcs: - type: BmcTypeHost macAddress: '00:11:22:33:44:55' ipAddress: 192.168.1.100 rackId: 550e8400-e29b-41d4-a716-446655440000 properties: id: type: string format: uuid description: Unique identifier of the Tray componentId: type: string description: ID of the component type: type: string enum: - compute - switch - powershelf description: Type of the tray name: type: string description: Name of the tray manufacturer: type: string description: Manufacturer of the tray model: type: string description: Model of the tray serialNumber: type: string description: Serial number of the tray description: type: string description: Description of the tray firmwareVersion: type: string description: Firmware version of the tray powerState: type: string description: Current power state of the tray operationStatus: type: string enum: - Unknown - Initializing - Ready - InUse - Error - Deleting description: Flow-derived operability phase of the tray leakStatus: type: string enum: - Unknown - NoLeak - Leaking description: Whether the tray is considered leaking coolant position: $ref: '#/components/schemas/TrayPosition' description: 'Position of the Tray within the Rack' bmcs: type: array description: BMC (Baseboard Management Controller) entries for the tray items: $ref: '#/components/schemas/BMCInfo' rackId: type: string format: uuid description: ID of the rack this tray belongs to TrayPosition: title: TrayPosition type: object description: Position of a tray within a rack properties: slotId: type: integer description: Slot number of the tray in the rack trayIdx: type: integer description: Index of the tray within its slot hostId: type: integer description: Host ID associated with the tray RackFilter: title: RackFilter type: object description: Filter criteria for selecting racks in batch operations. If omitted or empty, all racks in the site are targeted. properties: names: type: array items: type: string description: Filter racks by name TrayFilter: title: TrayFilter type: object description: |- Filter criteria for selecting trays in batch operations. If omitted or empty, all trays in the site are targeted. Constraints: `rackId` and `rackName` are mutually exclusive. `rackId`/`rackName` cannot be combined with `ids`/`componentIds`. `componentIds` requires `type`. `slotId` requires `rackId` or `rackName`, must be >= 0, and composes with the rest of the filter via AND. properties: rackId: type: string format: uuid description: Filter by Rack ID rackName: type: string description: Filter by Rack name type: type: string enum: - compute - switch - powershelf description: Filter by tray type componentIds: type: array items: type: string description: Filter by component ID. Requires 'type'. ids: type: array items: type: string format: uuid description: Filter by tray UUID slotId: type: integer format: int32 minimum: 0 description: |- Restrict to trays at this rack slot (matches `position.slotId`). Requires `rackId` or `rackName`. Composes with the rest of the filter via AND. BatchUpdateRackPowerStateRequest: title: BatchUpdateRackPowerStateRequest type: object description: Request body for batch rack power control operations required: - siteId - state properties: siteId: type: string format: uuid description: ID of the Site filter: $ref: '#/components/schemas/RackFilter' description: 'Filter that selects Racks whose power state should be updated' state: type: string enum: - 'on' - 'off' - cycle - forceoff - forcecycle description: Target power state ruleId: type: string format: uuid description: |- Optional Operation Rule UUID. When set, pins every task spawned by this batch to the named rule and overrides Flow's default rule resolution. overrideReadinessCheck: type: boolean default: false description: |- When true, proceed even if one or more target components (or hosts on the owning rack for rack-scoped components) are reported as not ready by their persisted status. Intended for operator-supervised maintenance. BatchUpdateTrayPowerStateRequest: title: BatchUpdateTrayPowerStateRequest type: object description: Request body for batch tray power control operations required: - siteId - state properties: siteId: type: string format: uuid description: ID of the Site filter: $ref: '#/components/schemas/TrayFilter' description: 'Filter that selects Trays whose power state should be updated' state: type: string enum: - 'on' - 'off' - cycle - forceoff - forcecycle description: Target power state ruleId: type: string format: uuid description: |- Optional Operation Rule UUID. When set, pins every task spawned by this batch to the named rule and overrides Flow's default rule resolution. overrideReadinessCheck: type: boolean default: false description: |- When true, proceed even if one or more target components (or hosts on the owning rack for rack-scoped components) are reported as not ready by their persisted status. Intended for operator-supervised maintenance. BatchRackFirmwareUpdateRequest: title: BatchRackFirmwareUpdateRequest type: object description: Request body for batch rack firmware update operations required: - siteId properties: siteId: type: string format: uuid description: ID of the Site filter: $ref: '#/components/schemas/RackFilter' description: 'Filter that selects Racks targeted for firmware update' version: type: - string - 'null' description: Target firmware version. ruleId: type: string format: uuid description: |- Optional Operation Rule UUID. When set, pins every task spawned by this batch to the named rule and overrides Flow's default rule resolution. overrideReadinessCheck: type: boolean default: false description: |- When true, proceed even if one or more target components (or hosts on the owning rack for rack-scoped components) are reported as not ready by their persisted status. Intended for operator-supervised maintenance. BringUpRackRequest: title: BringUpRackRequest type: object description: Request body for single-rack bring up operations required: - siteId properties: siteId: type: string format: uuid description: ID of the Site description: type: string description: Optional description for the bring up operation ruleId: type: string format: uuid description: |- Optional Operation Rule UUID. When set, pins this bring-up to the named rule and overrides Flow's default rule resolution. overrideReadinessCheck: type: boolean default: false description: |- When true, proceed even if one or more target components (or hosts on the owning rack) are reported as not ready by their persisted status. Intended for operator-supervised maintenance. examples: - siteId: 550e8400-e29b-41d4-a716-446655440000 - siteId: 550e8400-e29b-41d4-a716-446655440000 description: Initial bring up for production rack BatchBringUpRackRequest: title: BatchBringUpRackRequest type: object description: Request body for batch rack bring up operations required: - siteId properties: siteId: type: string format: uuid description: ID of the Site filter: $ref: '#/components/schemas/RackFilter' description: 'Filter that selects Racks targeted for bring-up' description: type: string description: Optional description for the bring up operation ruleId: type: string format: uuid description: |- Optional Operation Rule UUID. When set, pins every bring-up task spawned by this batch to the named rule and overrides Flow's default rule resolution. overrideReadinessCheck: type: boolean default: false description: |- When true, proceed even if one or more target components (or hosts on the owning rack) are reported as not ready by their persisted status. Intended for operator-supervised maintenance. BringUpRackResponse: title: BringUpRackResponse type: object description: Response for bring up operations containing task IDs for tracking properties: taskIds: type: array items: type: string format: uuid description: List of task IDs created for the bring up operation (one per rack) examples: - taskIds: - 550e8400-e29b-41d4-a716-446655440000 Task: title: Task type: object description: A task representing an asynchronous, site-scoped operation against rack, tray, or other site infrastructure. properties: id: type: string format: uuid description: Unique identifier of the task. status: type: string enum: - Unknown - Pending - Waiting - Running - Succeeded - Failed - Terminated description: Current state of the task. description: type: string description: Human-readable description provided when the task was created. message: type: string description: Optional status or error message describing the current state or result. ruleId: type: - string - 'null' format: uuid description: |- Operation Rule that Flow resolved for this task — either because the caller pinned one via `ruleId` on the originating request or because Flow's default rule resolution picked it. Null if Flow has not yet recorded a resolution. started: type: string format: date-time description: Timestamp when the task started execution. finished: type: string format: date-time description: Timestamp when the task finished (succeeded, failed or terminated). created: type: string format: date-time description: Timestamp when the task was created. updated: type: string format: date-time description: Timestamp when the task was last updated. report: allOf: - $ref: '#/components/schemas/TaskReportV1' description: | Structured v1 execution report for the task. Populated on single-task `GET` and `cancel` responses, and on list responses only when `includeReport=true` is set. Omitted when the task has not yet produced a report (e.g. still queued) or when the caller did not opt in on list endpoints. A future schema revision will be exposed as a new `TaskReportV2` schema referenced from a parallel response field; v1 consumers are not disturbed by that bump. examples: - id: 550e8400-e29b-41d4-a716-446655440000 status: Running description: Power on rack components message: 'Processing 3 of 5 components' ruleId: 7c9e6679-7425-40de-944b-e07fc1f90ae7 report: version: 1 stages: - number: 1 status: completed startedAt: '2026-06-08T18:00:00Z' finishedAt: '2026-06-08T18:00:42Z' steps: - componentType: Compute status: completed totalComponents: 4 startedAt: '2026-06-08T18:00:00Z' finishedAt: '2026-06-08T18:00:42Z' - number: 2 status: running startedAt: '2026-06-08T18:00:42Z' steps: - componentType: NVLSwitch status: running totalComponents: 2 startedAt: '2026-06-08T18:00:42Z' - componentType: PowerShelf status: skipped totalComponents: 0 OperationRule: title: OperationRule type: object description: |- An Operation Rule template for a single (operationType, operationCode) tuple. The `ruleDefinition` carries the executable schedule (stages, per-component concurrency, actions, retry) Flow runs when this rule is selected for an operation. required: - id - name - operationType - operationCode - ruleDefinition - isDefault - created - updated properties: id: type: string format: uuid description: Unique identifier of the rule. name: type: string description: Human-readable name of the rule. Required and non-empty. description: type: string description: Optional free-form description. operationType: type: string enum: - PowerControl - FirmwareControl description: Type of operation this rule applies to. Immutable after creation. operationCode: type: string description: |- Operation code within the operation type (e.g. `power_on`, `power_off`, `upgrade`). Server-side validated against Flow's allow-list for the type. Immutable after creation. ruleDefinition: $ref: '#/components/schemas/RuleDefinition' isDefault: type: boolean description: |- Whether this rule is currently the default for its `(operationType, operationCode)` tuple. created: type: string format: date-time description: Timestamp when the rule was created. updated: type: string format: date-time description: Timestamp when the rule was last updated. RuleDefinition: title: RuleDefinition type: object description: |- Executable definition of a rule. Mirrors Flow's wire schema 1:1 so existing YAML rule files can be converted to JSON without any key renaming (nested fields use `snake_case`). required: - version properties: version: type: string description: Schema version. Currently always `v1`. enum: - v1 steps: type: array description: |- Ordered execution steps. Steps with the same `stage` run in parallel, stages run sequentially in ascending numerical order. May be empty for operations whose sequencing is hardcoded in Flow (e.g. bring-up, firmware update). items: $ref: '#/components/schemas/SequenceStep' SequenceStep: title: SequenceStep type: object description: A single execution step inside a `RuleDefinition`. required: - componentType - stage - mainOperation properties: componentType: type: string description: |- Component type this step targets (e.g. `Compute`, `NVLSwitch`, `PowerShelf`). Validated against Flow's component-type set. stage: type: integer minimum: 1 description: |- Stage number; steps with the same stage run in parallel, lower stages run first. Component types must be unique within a stage. maxParallel: type: integer minimum: 0 description: |- Maximum number of components of this type processed concurrently. `0` means unlimited, `1` means strictly sequential. timeout: type: string description: |- Optional child-workflow timeout for this step, as a Go duration string (e.g. `30s`, `2m`). Applies to pre + main + post combined. retry: $ref: '#/components/schemas/RetryPolicy' preOperation: type: array description: Actions to run before the main operation. items: $ref: '#/components/schemas/ActionConfig' mainOperation: $ref: '#/components/schemas/ActionConfig' postOperation: type: array description: Actions to run after the main operation. items: $ref: '#/components/schemas/ActionConfig' delayAfter: type: string description: |- Deprecated legacy field — sleep duration after this step, as a Go duration string. Prefer encoding the wait as an explicit `Sleep` post-operation action. ActionConfig: title: ActionConfig type: object description: Configuration for a single action within a step. required: - name properties: name: type: string enum: - Sleep - PowerControl - VerifyPowerStatus - VerifyReachability - GetPowerStatus - FirmwareControl - VerifyFirmwareVersion - VerifyFirmwareConsistency - BringUpControl - WaitBringUp - InjectExpectation description: |- Executor-agnostic action name. Server-side validated; unknown names fail the rule definition. timeout: type: string description: |- Optional per-action timeout override as a Go duration string (e.g. `30s`, `2m`). pollInterval: type: string description: |- Poll interval for actions that loop (e.g. `FirmwareControl`, `VerifyPowerStatus`) as a Go duration string. parameters: type: object additionalProperties: true description: |- Action-specific parameters. Validated server-side against the action's schema. Examples: - `Sleep`: `{ duration: "30s" }` - `PowerControl`: `{ operation: "on" }` - `VerifyPowerStatus`: `{ expected_status: "on" }` - `VerifyReachability`: `{ component_types: ["Compute"], require_all: true }` - `FirmwareControl`: `{ poll_interval: "10s", poll_timeout: "30m" }` RetryPolicy: title: RetryPolicy type: object description: Retry behavior for a step's child workflow. required: - maxAttempts - initialInterval - backoffCoefficient properties: maxAttempts: type: integer minimum: 1 description: Maximum number of attempts including the first. initialInterval: type: string description: Initial retry interval, as a Go duration string (e.g. `1s`). backoffCoefficient: type: number minimum: 1 description: Exponential backoff multiplier; must be `>= 1.0`. maxInterval: type: string description: Optional cap on retry interval, as a Go duration string. CreateRuleRequest: title: CreateRuleRequest type: object description: Request body for creating an Operation Rule. required: - siteId - name - operationType - operationCode - ruleDefinition properties: siteId: type: string format: uuid description: ID of the Site to create the rule on. name: type: string description: Human-readable name of the rule. description: type: string description: Optional free-form description. operationType: type: string enum: - PowerControl - FirmwareControl description: Operation type the rule applies to. operationCode: type: string description: Operation code within the operation type (e.g. `power_on`). ruleDefinition: $ref: '#/components/schemas/RuleDefinition' UpdateRuleRequest: title: UpdateRuleRequest type: object description: |- Request body for patching an Operation Rule. All mutable fields are optional; unset fields are left unchanged. At least one of `name`, `description`, `ruleDefinition` must be provided. required: - siteId properties: siteId: type: string format: uuid description: ID of the Site that owns the rule. name: type: string description: New rule name. Must be non-empty when provided. description: type: string description: New free-form description. ruleDefinition: $ref: '#/components/schemas/RuleDefinition' TaskRun: title: TaskRun type: object description: |- A Task Run is a phased, policy-gated execution of one operation across many Racks. List responses populate the summary fields; the single-Task-Run `GET` additionally populates `stats` when `includeStats=true`. required: - id - name - operationType - status - statusReason - totalPhases - created - updated properties: id: type: string format: uuid description: Unique identifier of the Task Run. name: type: string description: Human-readable name of the Task Run. description: type: string description: Optional free-form description. operationType: type: string enum: - PowerControl - FirmwareControl description: Type of operation this Task Run executes. Currently always `FirmwareControl`. operationCode: type: string description: Operation code within the operation type (e.g. `upgrade`). status: type: string enum: - Unknown - Pending - Running - Paused - Completed - Cancelled - Failed - CompletedWithFailures description: Current lifecycle state of the Task Run. statusReason: type: string enum: - Unknown - None - OperatorPaused - PhaseGate - SafetyGate - ConflictRetryTimeout description: |- Why the Task Run is paused or terminal (e.g. `PhaseGate`, `SafetyGate`). `None` when there is no qualifying reason. statusMessage: type: string description: Optional human-readable detail for the current status. totalPhases: type: integer description: Total number of phases the selected targets were divided into. created: type: string format: date-time description: Timestamp when the Task Run was created. updated: type: string format: date-time description: Timestamp when the Task Run was last updated. started: type: - string - 'null' format: date-time description: Timestamp when the Task Run started execution. Null before it starts. finished: type: - string - 'null' format: date-time description: Timestamp when the Task Run reached a terminal state. Null while active. stats: allOf: - $ref: '#/components/schemas/TaskRunStats' description: |- Derived per-phase outcome stats. Present only on the single-Task-Run `GET` when `includeStats=true`; omitted otherwise. TaskRunStats: title: TaskRunStats type: object description: Summarizes target outcomes for the active phase and cumulatively across all phases processed so far. required: - currentPhase - cumulativePhase properties: currentPhase: $ref: '#/components/schemas/TaskRunPhaseStats' cumulativePhase: $ref: '#/components/schemas/TaskRunPhaseStats' TaskRunPhaseStats: title: TaskRunPhaseStats type: object description: Summarizes target outcomes for one phase scope. required: - phaseIndex - selectedTargets - outcomeCounts properties: phaseIndex: type: integer description: Zero-based index of the phase this scope refers to. selectedTargets: type: integer description: Number of targets selected within the scope. outcomeCounts: $ref: '#/components/schemas/TaskRunOutcomeCounts' TaskRunOutcomeCounts: title: TaskRunOutcomeCounts type: object description: Counts terminal target outcomes within a phase scope. required: - completed - failed - terminated - skipped properties: completed: type: integer description: Targets that completed successfully. failed: type: integer description: Targets that failed. terminated: type: integer description: Targets that were terminated (e.g. by cancellation). skipped: type: integer description: Targets that were skipped. TaskRunTarget: title: TaskRunTarget type: object description: |- One materialized per-Rack execution target of a Task Run. Each target drives at most one Task; `taskId` references it (null until the target is submitted). required: - id - runId - rackId - sequenceIndex - phaseIndex - status - created - updated properties: id: type: string format: uuid description: Unique identifier of the target. runId: type: string format: uuid description: ID of the Task Run that owns this target. rackId: type: string format: uuid description: ID of the Rack this target operates on. sequenceIndex: type: integer description: Position of this target in the Task Run's overall processing order. phaseIndex: type: integer description: Zero-based index of the phase this target belongs to. taskId: type: - string - 'null' format: uuid description: |- ID of the Task this target submitted. Null until the target is submitted; drill into execution detail via `GET /task/{taskId}`. status: type: string enum: - Unknown - Pending - Blocked - Submitted - Completed - Failed - Terminated - Skipped - Claimed description: Current execution state of the target. message: type: string description: Optional human-readable detail for the current target status. created: type: string format: date-time description: Timestamp when the target was created. updated: type: string format: date-time description: Timestamp when the target was last updated. TaskRunSiteRequest: title: TaskRunSiteRequest type: object description: Shared request body for the pause and resume lifecycle actions. required: - siteId properties: siteId: type: string format: uuid description: ID of the Site that owns the Task Run (Task Runs are site-scoped). AdvanceTaskRunRequest: title: AdvanceTaskRunRequest type: object description: Request body for advancing a Task Run to its next phase. required: - siteId properties: siteId: type: string format: uuid description: ID of the Site that owns the Task Run. expectedPhaseIndex: type: integer description: |- Optional guard: when set, the phase that would be opened must match this zero-based index, otherwise the advance is rejected. CancelTaskRunRequest: title: CancelTaskRunRequest type: object description: Request body for cancelling a Task Run. required: - siteId properties: siteId: type: string format: uuid description: ID of the Site that owns the Task Run. reason: type: string description: Optional free-form reason recorded with the cancellation. CreateTaskRunRequest: title: CreateTaskRunRequest type: object description: |- Request body for creating a Task Run. `operationType` is inferred from the operation and is not accepted here. Flow performs semantic validation (selector ranges, phase math, operation code membership) server-side. required: - siteId - name - options - operation properties: siteId: type: string format: uuid description: ID of the Site to create the Task Run on. name: type: string description: Human-readable name of the Task Run. description: type: string description: Optional free-form description. selector: allOf: - $ref: '#/components/schemas/TaskRunSelector' description: |- Narrows the candidate Racks. Omit to target the full candidate scope (100%). options: $ref: '#/components/schemas/TaskRunOptions' operation: $ref: '#/components/schemas/TaskRunOperation' TaskRunSelector: title: TaskRunSelector type: object description: Selects a subset of candidate Racks. Percentage is the only supported selector today. properties: percentage: $ref: '#/components/schemas/TaskRunPercentageSelector' TaskRunPercentageSelector: title: TaskRunPercentageSelector type: object description: |- Selects a percentage of the candidate Racks. `seed` is optional; when omitted Flow generates and stores one so the cohort is deterministic and auditable. required: - percent properties: percent: type: integer minimum: 0 maximum: 100 description: Percentage of candidate Racks to select. seed: type: string description: Optional seed for the deterministic selection. TaskRunOptions: title: TaskRunOptions type: object description: Execution policy for the Task Run. required: - maxConcurrentTargets properties: maxConcurrentTargets: type: integer minimum: 1 description: |- Caps how many targets may have active child Tasks at once. Must be greater than zero. safetyPolicy: $ref: '#/components/schemas/TaskRunSafetyPolicy' conflictPolicy: $ref: '#/components/schemas/TaskRunConflictPolicy' orderingPolicy: $ref: '#/components/schemas/TaskRunOrderingPolicy' phasePolicy: $ref: '#/components/schemas/TaskRunPhasePolicy' TaskRunSafetyPolicy: title: TaskRunSafetyPolicy type: object description: A set of gates that pause the Task Run when any one of them trips (OR composition). properties: gates: type: array description: Safety gates evaluated after each target outcome. items: $ref: '#/components/schemas/TaskRunSafetyGate' TaskRunSafetyGate: title: TaskRunSafetyGate type: object description: Exactly one of `failureRate` or `failureCount` must be set. properties: failureRate: $ref: '#/components/schemas/TaskRunFailureRateGate' failureCount: $ref: '#/components/schemas/TaskRunFailureCountGate' TaskRunFailureRateGate: title: TaskRunFailureRateGate type: object description: Pauses when the failed/planned ratio reaches `thresholdPercent` for the scope. required: - thresholdPercent properties: scope: type: string enum: - currentPhase - cumulativeRun default: currentPhase description: Whether the ratio is evaluated over the current phase or the cumulative run. thresholdPercent: type: integer minimum: 0 maximum: 100 description: Failure-rate percentage at which the gate trips. TaskRunFailureCountGate: title: TaskRunFailureCountGate type: object description: Pauses when the number of failed targets reaches `thresholdCount` for the scope. required: - thresholdCount properties: scope: type: string enum: - currentPhase - cumulativeRun default: currentPhase description: Whether the count is evaluated over the current phase or the cumulative run. thresholdCount: type: integer minimum: 0 description: Number of failed targets at which the gate trips. TaskRunConflictPolicy: title: TaskRunConflictPolicy type: object description: Configures how blocked targets are retried. Retry is the only supported strategy today. properties: retry: $ref: '#/components/schemas/TaskRunConflictRetry' TaskRunConflictRetry: title: TaskRunConflictRetry type: object description: |- Retry backoff for blocked targets. Durations are Go duration strings (e.g. `30m`, `10s`); an empty value means "use the operation default". properties: retryTimeout: type: string description: Total time to keep retrying a blocked target before giving up. initialRetryDelay: type: string description: Delay before the first retry. maxRetryDelay: type: string description: Cap on the exponentially growing retry delay. TaskRunOrderingPolicy: title: TaskRunOrderingPolicy type: object description: Controls the order in which targets are processed. Random is the only supported ordering today. properties: random: $ref: '#/components/schemas/TaskRunRandomOrdering' TaskRunRandomOrdering: title: TaskRunRandomOrdering type: object description: Orders targets randomly. `seed` is optional; Flow generates and stores one when omitted. properties: seed: type: string description: Optional seed for the deterministic random ordering. TaskRunPhasePolicy: title: TaskRunPhasePolicy type: object description: |- Divides the selected targets into phases. Set at most one of `equal`, `percentage`, or `count`; omit the whole policy for a single phase covering all targets. properties: equal: $ref: '#/components/schemas/TaskRunEqualPhases' percentage: $ref: '#/components/schemas/TaskRunPercentagePhases' count: $ref: '#/components/schemas/TaskRunCountPhases' autoAdvance: type: boolean default: false description: |- When true, phases advance automatically as long as safety gates are not tripped. When false (default) each completed phase pauses at a phase gate until advanced explicitly. TaskRunEqualPhases: title: TaskRunEqualPhases type: object description: Splits targets into `phaseCount` roughly equal phases. required: - phaseCount properties: phaseCount: type: integer minimum: 1 description: Number of equally sized phases. TaskRunPercentagePhases: title: TaskRunPercentagePhases type: object description: Splits targets by percentage. Values must sum to 100. required: - phases properties: phases: type: array description: Per-phase percentages, in phase order; must sum to 100. items: type: integer minimum: 0 maximum: 100 TaskRunCountPhases: title: TaskRunCountPhases type: object description: Splits targets by explicit counts. A generated final phase covers any remaining targets. required: - phases properties: phases: type: array description: Per-phase target counts, in phase order. items: type: integer minimum: 0 TaskRunOperation: title: TaskRunOperation type: object description: The operation the Task Run executes. Firmware is the only supported operation today. required: - firmware properties: firmware: $ref: '#/components/schemas/TaskRunFirmwareOperation' excludeRunIds: type: array description: |- Excludes Racks materialized by prior Task Runs from this Task Run's candidate scope. items: type: string format: uuid TaskRunFirmwareOperation: title: TaskRunFirmwareOperation type: object description: Configures a firmware rollout. required: - version properties: version: type: string description: Target firmware version to roll out. ruleId: type: - string - 'null' format: uuid description: |- Operation Rule to pin for each target's firmware Task. Null to let Flow's default rule resolution pick one. overrideReadinessCheck: type: boolean default: false description: Skip the pre-flight readiness check when true. subTargets: type: array description: Optional subset of firmware sub-targets to update. items: type: string TaskReportV1: title: TaskReportV1 type: object description: | Structured execution report (version 1) for a Flow-scheduled task. The document mirrors the structure of the operation rule that drives the workflow: each `Stage` corresponds to one rule stage and each `Step` within a stage corresponds to one rule sequence step at the same index. Clients pick the decoder by the `version` field; future report schemas will be exposed as `TaskReportV2` etc. and conveyed via a parallel response field, leaving v1 consumers untouched. required: - version - stages properties: version: type: integer enum: [1] description: Schema version of this report. Always `1` for `TaskReportV1`. stages: type: array items: $ref: '#/components/schemas/TaskReportV1Stage' error: type: string description: | Top-level failure summary: the message from the first stage that fails in this report. Not overwritten by subsequent failures, so it remains the canonical task-level error. Truncated to 512 bytes by the producer. TaskReportV1Stage: title: TaskReportV1Stage type: object description: | Execution state of one rule stage. `number` is the canonical key for joining a stage record back to its rule entry. required: - number - status - steps properties: number: type: integer minimum: 1 description: 1-based rule stage number. status: $ref: '#/components/schemas/TaskReportV1Status' steps: type: array items: $ref: '#/components/schemas/TaskReportV1Step' startedAt: type: string format: date-time description: Set when the stage leaves `pending`. finishedAt: type: string format: date-time description: Set when the stage reaches a terminal state. error: type: string description: Failure summary when `status == failed`. Truncated to 512 bytes. TaskReportV1Step: title: TaskReportV1Step type: object description: | Execution state of one rule sequence step. Pairs 1:1 with the rule's ordered steps within the containing stage and shares its index. required: - componentType - status properties: componentType: type: string description: 'Component class this step targets, e.g. `Compute`, `NVLSwitch`, `PowerShelf`.' status: $ref: '#/components/schemas/TaskReportV1Status' totalComponents: type: integer description: | Count of components of `componentType` this step targets. Surfaced here because the task representation does not include the per-type component map. completedComponents: type: integer description: | Reserved for a future best-effort activity contract that reports per-component outcomes. Not written under the current fail-fast contract and omitted by the producer. failedComponents: type: integer description: Reserved (see `completedComponents`). startedAt: type: string format: date-time description: Set when the step leaves `pending`. `skipped` steps carry no timestamp. finishedAt: type: string format: date-time description: Set when the step reaches a terminal state. error: type: string description: Failure summary when `status == failed`. Truncated to 512 bytes. TaskReportV1Status: title: TaskReportV1Status type: string description: | Per-stage and per-step execution status. - `pending` — workflow has not yet reached this stage/step. - `running` — execution is in progress. - `completed` — execution finished successfully. - `failed` — execution finished with an error; see `error`. - `skipped` — the rule lists this component type but the task targets no components of that type, so the workflow will not invoke it. enum: - pending - running - completed - failed - skipped BatchTrayFirmwareUpdateRequest: title: BatchTrayFirmwareUpdateRequest type: object description: Request body for batch tray firmware update operations required: - siteId properties: siteId: type: string format: uuid description: ID of the Site filter: $ref: '#/components/schemas/TrayFilter' description: 'Filter that selects Trays targeted for firmware update' version: type: - string - 'null' description: Target firmware version. targets: type: array items: type: string minLength: 1 enum: - bmc - cpld - bios - nvos - pmc - psu - dpu description: |- Optional subset of firmware targets to update within each matched tray. Names are lowercase and select sub-parts of the tray (BMC, BIOS, etc.). The accepted set per tray type comes from the Flow service's NICo proto bindings (which mirror Core's per-tray-type enums in `NICo-core/crates/rpc/proto/forge.proto`), so the supported values track Core as new sub-parts are added: - switch trays (NvSwitchComponent): currently bmc, cpld, bios, nvos - powershelf trays (PowerShelfComponent): currently pmc, psu - compute trays (ComputeTrayComponent): currently bmc, bios (currently NOT honored end-to-end: the NICo compute-firmware path goes through SetFirmwareUpdateTimeWindow + auto-update, which has no per-target selection; the request is logged and the whole bundle is applied. Will be honored once compute moves to UpdateComponentFirmware.) Omitted or empty means "update everything in the bundle" (the historical default) for compute-tray-internal targets. Unknown names are rejected. Requires `version` to be set. The special target `dpu`, valid only on compute trays, requests DPU reprovisioning on each matched host. Unlike the other targets, `dpu` is NOT covered by the "omitted/empty means everything" default — it must be listed explicitly. `version` is ignored on the `dpu` branch; the target firmware version comes from site configuration. ruleId: type: string format: uuid description: |- Optional Operation Rule UUID. When set, pins every task spawned by this batch to the named rule and overrides Flow's default rule resolution. overrideReadinessCheck: type: boolean default: false description: |- When true, proceed even if one or more target components (or hosts on the owning rack for rack-scoped components) are reported as not ready by their persisted status. Intended for operator-supervised maintenance. examples: - siteId: 550e8400-e29b-41d4-a716-446655440000 filter: type: switch version: '24.11.0' targets: [bmc, nvos] UpdatePowerStateRequest: title: UpdatePowerStateRequest type: object description: Request body for single-resource power control operations required: - siteId - state properties: siteId: type: string format: uuid description: ID of the Site state: type: string enum: - 'on' - 'off' - cycle - forceoff - forcecycle description: |- Power control state to apply: - `on`: Power on the target(s) - `off`: Graceful power off - `cycle`: Graceful power cycle (restart) - `forceoff`: Forced power off (immediate) - `forcecycle`: Forced power cycle (immediate restart) ruleId: type: string format: uuid description: |- Optional Operation Rule UUID. When set, pins this operation to the named rule and overrides Flow's default rule resolution. overrideReadinessCheck: type: boolean default: false description: |- When true, proceed even if one or more target components (or hosts on the owning rack for rack-scoped components) are reported as not ready by their persisted status. Intended for operator-supervised maintenance. examples: - siteId: 550e8400-e29b-41d4-a716-446655440000 state: 'on' - siteId: 550e8400-e29b-41d4-a716-446655440000 state: 'off' - siteId: 550e8400-e29b-41d4-a716-446655440000 state: cycle UpdatePowerStateResponse: title: UpdatePowerStateResponse type: object description: Response for power control operations containing task IDs for tracking properties: taskIds: type: array items: type: string format: uuid description: List of task IDs created for the power control operation (one per rack) examples: - taskIds: - 550e8400-e29b-41d4-a716-446655440000 FirmwareUpdateRequest: title: FirmwareUpdateRequest type: object description: Request body for firmware update operations. required: - siteId properties: siteId: type: string format: uuid description: ID of the Site version: type: - string - 'null' description: Target firmware version. targets: type: array items: type: string minLength: 1 enum: - bmc - cpld - bios - nvos - pmc - psu - dpu description: |- Optional subset of firmware targets to update within the targeted tray. Names are lowercase and select sub-parts of the tray (BMC, BIOS, etc.). The accepted set per tray type comes from the Flow service's NICo proto bindings (which mirror Core's per-tray-type enums in `NICo-core/crates/rpc/proto/forge.proto`), so the supported values track Core as new sub-parts are added: - switch trays (NvSwitchComponent): currently bmc, cpld, bios, nvos - powershelf trays (PowerShelfComponent): currently pmc, psu - compute trays (ComputeTrayComponent): currently bmc, bios (currently NOT honored end-to-end: the NICo compute-firmware path goes through SetFirmwareUpdateTimeWindow + auto-update, which has no per-target selection; the request is logged and the whole bundle is applied. Will be honored once compute moves to UpdateComponentFirmware.) Omitted or empty means "update everything in the bundle" (the historical default) for compute-tray-internal targets. Unknown names are rejected. Requires `version` to be set. The special target `dpu`, valid only on compute trays, requests DPU reprovisioning on the matched host. Unlike the other targets, `dpu` is NOT covered by the "omitted/empty means everything" default — it must be listed explicitly. `version` is ignored on the `dpu` branch; the target firmware version comes from site configuration. ruleId: type: string format: uuid description: |- Optional Operation Rule UUID. When set, pins this firmware update to the named rule and overrides Flow's default rule resolution. overrideReadinessCheck: type: boolean default: false description: |- When true, proceed even if one or more target components (or hosts on the owning rack for rack-scoped components) are reported as not ready by their persisted status. Intended for operator-supervised maintenance. examples: - siteId: 550e8400-e29b-41d4-a716-446655440000 version: '24.11.0' - siteId: 550e8400-e29b-41d4-a716-446655440000 version: '24.11.0' targets: [bmc, nvos] - siteId: 550e8400-e29b-41d4-a716-446655440000 FirmwareUpdateResponse: title: FirmwareUpdateResponse type: object description: Response for firmware update operations containing task IDs for tracking properties: taskIds: type: array items: type: string format: uuid description: List of task IDs created for the firmware update operation examples: - taskIds: - 550e8400-e29b-41d4-a716-446655440000 Machine: title: Machine type: object description: Machine is the baremetal server that sits in the datacenter examples: - id: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 instanceTypeId: 2e016c02-2c67-48aa-b289-5d3ca6320c52 instanceId: 59bdaaff-3998-4fd9-a140-8749beeb605e tenantId: 99819e6e-4017-4021-9edd-ea1bdf4dbd59 controllerMachineId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g controllerMachineType: x86_64 hwSkuDeviceType: cpu vendor: Lenovo productName: ThinkSystem SR670 V2 serialNumber: J1060ACR.D3KS2CS001G machineCapabilities: - type: CPU name: Intel(R) Xeon(R) Gold 6354 CPU @ 3.00GHz frequency: 3.0GHz cores: 18 threads: 36 count: 2 - type: Memory name: Corsair Vengeance LPX capacity: 32GB count: 4 machineInterfaces: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 machineId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g controllerInterfaceId: ad3dac49-741d-4c1f-815c-c020127c532f controllerSegmentId: f2207a3c-1847-42e5-bf2c-cd015f87a2bc subnetId: 1f232bf0-7b90-456e-b9b0-38d9fea4171a hostname: example.com isPrimary: true macAddress: '00:00:5e:00:53:af' ipAddresses: - 192.156.7.23 - 202.88.37.112 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' maintenanceMessage: null scoutVersion: 2.6.1 health: source: aggregate-host-health observedAt: null successes: - id: BgpDaemonEnabled target: null - id: BgpStats target: null - id: DhcpServer target: null - id: DpuDiskUtilizationCheck target: null - id: FanSpeed target: System Board Fan1A - id: PowerSupply target: PS1 Status - id: Temperature target: CPU1 Temp - id: Temperature target: System Board Exhaust Temp - id: Voltage target: CPU1 1P8 PG alerts: - id: FailedValidationTest target: DcgmFullShort inAlertSince: null message: |- Failed validation test: Name:DcgmFullShort Command:dcgmi Args:diag -r 2 tenantMessage: null classifications: - PreventAllocations labels: RackIdentifier: GVX11F01C02 ServerName: SITE1-C03-Server-02 status: Ready isUsableByTenant: true statusHistory: - status: Ready message: Machine is online and ready created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' properties: id: type: string description: Unique ID of Machine readOnly: true infrastructureProviderId: type: string format: uuid description: ID of the Provider that owns the Machine readOnly: true siteId: type: string format: uuid description: ID of the Site the Machine belongs to instanceTypeId: type: - string - 'null' format: uuid description: 'ID of the Instance Type, if assigned' instanceId: type: - string - 'null' format: uuid description: ID of the Instance if this Machine is assigned to one tenantId: type: - string - 'null' format: uuid description: ID of the Tenant that owns the Instance if the Machine is assigned to one controllerMachineId: type: string description: 'ID of the Machine at Site, now same as the primary ID' controllerMachineType: type: - string - 'null' description: Denotes architecture (x86 vs ARM) of the Machine hwSkuDeviceType: type: - string - 'null' description: 'SKU derived device type of the machine, e.g. cpu, gpu, cache, storage, etc.' vendor: type: - string - 'null' description: Name of the vendor of the Machine productName: type: - string - 'null' description: Product name of the Machine serialNumber: type: - string - 'null' description: 'Serial number of the Machine, only visible to Provider' machineCapabilities: type: array items: $ref: '#/components/schemas/MachineCapability' description: 'List of capabilities of the machine' machineInterfaces: type: array items: $ref: '#/components/schemas/MachineInterface' description: 'List of admin interfaces of the machine' associatedDpuMachineIds: type: array items: type: string description: 'IDs of the DPU Machines attached to this host Machine' readOnly: true placementInRack: $ref: '#/components/schemas/PlacementInRack' description: 'Physical placement of the Machine within its Rack, when known' maintenanceMessage: type: - string - 'null' description: 'If the Machine is in maintenance mode, this message will typically describe the reason and how long it is expected to be in maintenance' scoutVersion: type: - string - 'null' description: 'Scout version reported by the Machine, if known' readOnly: true health: $ref: '#/components/schemas/MachineHealth' description: 'Health information about the machine' metadata: $ref: '#/components/schemas/MachineMetadata' description: Only available to Providers. Returned if the `includeMetadata` query parameter is specified. Otherwise attribute is omitted from response. labels: $ref: '#/components/schemas/Labels' description: 'User-specified Machine labels' status: $ref: '#/components/schemas/MachineStatus' description: 'Status represents the status of the machine' readOnly: true isUsableByTenant: type: boolean description: Indicates whether the machine is usable by or currently in use by a tenant. readOnly: true statusHistory: type: array items: $ref: '#/components/schemas/StatusDetail' description: 'Chronological status history for the Machine' created: type: string description: 'Date/time when the Machine was created' format: date-time readOnly: true updated: type: string description: 'Date/time when the Machine was last updated' format: date-time readOnly: true MachineStatus: title: MachineStatus type: string description: Status values for Machine objects enum: - Initializing - Ready - Reset - Maintenance - InUse - Error - Decommissioned - Unknown MachineSummary: title: MachineSummary type: object description: Describes a subset of core attributes for a Machine examples: - id: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g controllerMachineId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g controllerMachineType: x86_64 hwSkuDeviceType: cpu vendor: Lenovo productName: ThinkSystem SR670 V2 maintenanceMessage: null status: Ready properties: id: type: string description: Unique ID of Machine readOnly: true controllerMachineId: type: string description: 'ID of the Machine at Site, now same as the primary ID' controllerMachineType: type: - string - 'null' description: Denotes architecture (x86 vs ARM) of the Machine hwSkuDeviceType: type: - string - 'null' description: 'SKU derived device type of the machine, e.g. cpu, gpu, cache, storage, etc.' vendor: type: - string - 'null' description: Name of the vendor of the Machine productName: type: - string - 'null' description: Product name of the Machine maintenanceMessage: type: - string - 'null' description: 'If the Machine is in maintenance mode, this message will typically describe the reason and how long it is expected to be in maintenance' status: $ref: '#/components/schemas/MachineStatus' description: 'Status represents the status of the machine' readOnly: true MachineHealthIssue: title: MachineHealthIssue type: object required: - category - summary - details properties: category: type: string enum: - Hardware - Network - Performance - Storage - Software - Other description: High-level category for the tenant-reported issue. summary: type: - string - 'null' maxLength: 512 description: Brief description of the issue for operators. details: type: - string - 'null' maxLength: 8192 description: Diagnostic information, logs, ticket numbers, etc. MachineOnlineRepairPolicy: title: MachineOnlineRepairPolicy type: object required: - allowAutoInstanceDeletionOnFailure properties: allowAutoInstanceDeletionOnFailure: type: boolean description: When true, escalation to offline breakfix (permanent delete / deallocate) is allowed if online repair cannot be completed. MachineOnlineRepairAcknowledgments: title: MachineOnlineRepairAcknowledgments type: object required: - acceptDataCorruptionRisk - acceptRepairTeamAccess - acceptInstanceDeletionRisk properties: acceptDataCorruptionRisk: type: boolean enum: [true] description: Tenant confirms data may be corrupted during repair. acceptRepairTeamAccess: type: boolean enum: [true] description: Tenant confirms the dedicated repair team will have access to the instance. acceptInstanceDeletionRisk: type: boolean enum: [true] description: Tenant confirms risk of instance deletion if escalation to offline breakfix occurs. MachineOnlineRepair: title: MachineOnlineRepair type: object required: - enabled description: |- Enable or disable online repair of a Machine. Online repair facilitates repairing a Machine without the Tenant having to release the Machine by deleting the Instance. When `enabled` is true, `policy` and `acknowledgments` are required inside this object, and `healthIssue` is required at the top level of the MachineUpdateRequest. When `enabled` is false, none of those fields may be set. properties: enabled: type: boolean description: |- When true, initiates the online repair process by sending a merge-mode health override with source: `request-online-repair` and sets the associated Instance status to Repairing. When false, exits online repair by clearing the merge-mode health override and returns the Instance to Ready status. Cannot be combined with instance type, maintenance, or label updates in the same request. policy: $ref: '#/components/schemas/MachineOnlineRepairPolicy' description: 'Online repair policy to apply to the Machine' acknowledgments: $ref: '#/components/schemas/MachineOnlineRepairAcknowledgments' description: 'Acknowledgments required before online repair can proceed' MachineUpdateRequest: title: MachineUpdateRequest type: object examples: - instanceTypeId: 2e016c02-2c67-48aa-b289-5d3ca6320c52 - clearInstanceType: true - setMaintenanceMode: true maintenanceMessage: Machine requires re-cabling to connect with revised underlay network. Estimated maintenance time is 2 days - setMaintenanceMode: false - labels: RackIdentifier: GVX11F01C02 ServerName: SITE1-C03-Server-02 RepairStatus: InProgress - onlineRepair: enabled: true policy: allowAutoInstanceDeletionOnFailure: false acknowledgments: acceptDataCorruptionRisk: true acceptRepairTeamAccess: true acceptInstanceDeletionRisk: true - healthIssue: category: Storage summary: Disk errors on OSD details: 'Ticket FORGE-12345; smartctl logs attached' description: 'Request data to update Machine. Instance Type attribute updates, maintenance attribute updates, labels updates, and in-pool online repair (enter or exit) must be specified in separate requests. They cannot be processed at the same time.' properties: instanceTypeId: type: - string - 'null' minLength: 2 maxLength: 256 format: uuid description: Update the Instance Type of the Machine. Cannot be specified when clearing Instance Type. Can only be updated by Provider. clearInstanceType: type: - boolean - 'null' description: Set to true to clear the existing Instance Type. Cannot be specified if Instance Type ID is specified. Can only be set by Provider. setMaintenanceMode: type: - boolean - 'null' description: Set to `true` to enable maintenance mode and to `false` to disable maintenance mode. Can be set by Provider or privileged Tenant. maintenanceMessage: type: - string - 'null' description: Optional message describing the reason for moving Machine into maintenance mode. Can be updated by Provider or privileged Tenant. minLength: 5 maxLength: 256 labels: description: 'Machine labels will be overwritten, include existing labels to preserve them. Can be updated by Provider or privileged Tenant.' $ref: '#/components/schemas/Labels' onlineRepair: $ref: '#/components/schemas/MachineOnlineRepair' description: 'Request to enter/exit online repair' healthIssue: description: Required when `onlineRepair.enabled` is true. Must not be set when exiting online repair (`onlineRepair.enabled` false). $ref: '#/components/schemas/MachineHealthIssue' MachineInterface: title: MachineInterface type: object description: Describes an interface attached to a machine examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 machineId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g controllerInterfaceId: ad3dac49-741d-4c1f-815c-c020127c532f controllerSegmentId: f2207a3c-1847-42e5-bf2c-cd015f87a2bc attachedDpuMachineID: fm100dsg4ekcb4sdi6hkqn0iojhj18okrr8vct64luh8957lfe8e69vme20 subnetId: 1f232bf0-7b90-456e-b9b0-38d9fea4171a hostname: example.com isPrimary: true macAddress: '00:00:5e:00:53:af' ipAddresses: - 192.156.7.23 - 202.88.37.112 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' properties: id: type: string description: 'Unique UUID v4 identifier for the Machine Interface' format: uuid machineId: type: string description: 'ID of the Machine' controllerInterfaceId: type: - string - 'null' description: 'ID of the interface in Site Controller' format: uuid controllerSegmentId: type: - string - 'null' description: 'ID of the network segment in Site Controller' format: uuid attachedDpuMachineID: type: - string - 'null' description: 'ID of the DPU attached to this interface in the Site Controller' subnetId: type: - string - 'null' description: 'ID of the Subnet' format: uuid hostname: type: - string - 'null' description: 'Hostname of the Machine Interface' format: hostname isPrimary: type: boolean description: 'Boolean which indicates if the Machine Interface is primary' macAddress: type: - string - 'null' description: 'Mac address of the Machine Interface' ipAddresses: type: array description: Array of IP addresses items: type: string created: type: string description: 'Date/time when the Machine Interface was created' format: date-time readOnly: true updated: type: string description: 'Date/time when the Machine Interface was last updated' format: date-time readOnly: true MachineMetadata: title: MachineMetadata type: object description: Describes metadata for various Machine components examples: - dmiData: boardName: 7Z23CTOLWB boardSerial: .C1KS2CS002G. boardVersion: '06' biosDate: 03/30/2023 biosVersion: U8E122J-1.51 productSerial: J1050ACR chassisSerial: J1050ACR bmcInfo: ip: 10.217.133.5 mac: 'C8:4B:D6:7A:C9:8A' version: '1' firmwareRevision: '6.00' gpus: - name: NVIDIA H100 PCIe serial: '1654422006434' driverVersion: 530.30.02 vbiosVersion: 96.00.30.00.01 inforomVersion: 1010.0200.00.02 totalMemory: 81559 MiB frequency: 1755 MHz pciBusId: '00000000:17:00.0' networkInterfaces: - macAddress: 'c8:4b:d6:7b:ac:a8' vendor: Broadcom Inc. and subsidiaries device: NetXtreme BCM5720 Gigabit Ethernet PCIe (PowerEdge Rx5xx LOM Board) path: '/devices/pci0000:00/0000:00:1c.5/0000:04:00.0/net/eno8303' numaNode: 0 description: NetXtreme BCM5720 Gigabit Ethernet PCIe (PowerEdge Rx5xx LOM Board) slot: '0000:04:00.0' infinibandInterfaces: - guid: 1070fd0300bd43ac vendor: Mellanox Technologies device: 'MT28908 Family [ConnectX-6]' path: '/devices/pci0000:c9/0000:c9:02.0/0000:ca:00.0/infiniband/ibp202s0f0' numaNode: 1 description: 'MT28908 Family [ConnectX-6]' slot: '0000:ca:00.0' properties: dmiData: $ref: '#/components/schemas/MachineDMIData' description: 'DMI data of the machine' bmcInfo: $ref: '#/components/schemas/MachineBMCInfo' description: 'BMC Info of the machine' gpus: type: array items: $ref: '#/components/schemas/MachineGPUInfo' description: 'GPU inventory reported for the Machine' networkInterfaces: type: array items: $ref: '#/components/schemas/MachineNetworkInterface' description: 'List of Ethernet interfaces of the machine' infinibandInterfaces: type: array items: $ref: '#/components/schemas/MachineInfiniBandInterface' description: 'List of InfiniBand interfaces of the machine' MachineBMCInfo: title: MachineBMCInfo type: object description: Describes BMC information of a Machine examples: - ip: 10.217.133.5 mac: 'C8:4B:D6:7A:C9:8A' version: '1' firmwareRevision: '6.00' properties: ip: type: - string - 'null' description: 'IP address of the Machine BMC' format: ipv4 mac: type: - string - 'null' description: 'MAC address of the Machine BMC' version: type: - string - 'null' description: 'Version reported by the Machine BMC' firmwareRevision: type: - string - 'null' description: 'Firmware revision reported by the Machine BMC' MachineDMIData: title: MachineDMIData type: object description: Describes DMI data of a Machine examples: - boardName: 7Z23CTOLWB boardSerial: .C1KS2CS002G. boardVersion: '06' biosDate: 03/30/2023 biosVersion: U8E122J-1.51 productSerial: J1050ACR chassisSerial: J1050ACR properties: boardName: type: - string - 'null' description: 'DMI board name reported by the Machine' boardSerial: type: - string - 'null' description: 'DMI board serial number reported by the Machine' boardVersion: type: - string - 'null' description: 'DMI board version reported by the Machine' biosDate: type: - string - 'null' description: 'DMI BIOS release date reported by the Machine' biosVersion: type: - string - 'null' description: 'DMI BIOS version reported by the Machine' productName: type: - string - 'null' description: 'DMI product name reported by the Machine' productSerial: type: - string - 'null' description: 'DMI product serial number reported by the Machine' chassisSerial: type: - string - 'null' description: 'DMI chassis serial number reported by the Machine' sysVendor: type: - string - 'null' description: 'DMI system vendor reported by the Machine' MachineGPUInfo: title: MachineGPUInfo type: object description: Describes information about GPU of a Machine examples: - name: NVIDIA H100 PCIe serial: '1654422006434' driverVersion: 530.30.02 vbiosVersion: 96.00.30.00.01 inforomVersion: 1010.0200.00.02 totalMemory: 81559 MiB frequency: 1755 MHz pciBusId: '00000000:17:00.0' properties: name: type: - string - 'null' description: 'Name of the Machine''s GPU' serial: type: - string - 'null' description: 'Serial number of the Machine''s GPU' driverVersion: type: - string - 'null' description: 'Version of the Machine''s GPU driver' vbiosVersion: type: - string - 'null' description: 'Bios version of the Machine''s GPU' inforomVersion: type: - string - 'null' description: 'Info rom version of the Machine''s GPU' totalMemory: type: - string - 'null' description: 'Total memory of the Machine''s GPU' frequency: type: - string - 'null' description: 'Frequency of the Machine''s GPU' pciBusId: type: - string - 'null' description: 'PCI BusId of the Machine''s GPU' MachineHealth: title: MachineHealth type: object description: Describes results of various Machine health probes and alerts examples: - source: aggregate-host-health observedAt: null successes: - id: BgpDaemonEnabled target: null - id: BgpStats target: null - id: DhcpServer target: null - id: DpuDiskUtilizationCheck target: null - id: FanSpeed target: System Board Fan1A - id: PowerSupply target: PS1 Status - id: Temperature target: CPU1 Temp - id: Temperature target: System Board Exhaust Temp - id: Voltage target: CPU1 1P8 PG alerts: - id: FailedValidationTest target: DcgmFullShort inAlertSince: null message: |- Failed validation test: Name:DcgmFullShort Command:dcgmi Args:diag -r 2 tenantMessage: null classifications: - PreventAllocations properties: source: type: string description: Describes how the health report was generated observedAt: type: - string - 'null' description: Date/time when health report was generated successes: type: array items: $ref: '#/components/schemas/MachineHealthProbeSuccess' description: Results from successful health probes for the Machine alerts: type: array items: $ref: '#/components/schemas/MachineHealthProbeAlert' description: Results from failed health probes for the Machine MachineHealthProbeSuccess: title: MachineHealthProbeSuccess type: object description: Describes results of successful Machine health probe required: - id examples: - id: FanSpeed target: System Board Fan1A properties: id: type: string description: Health probe identifier target: type: - string - 'null' description: Specific component targeted by health probe MachineHealthProbeAlert: title: MachineHealthProbeAlert type: object description: Describes results of a failed Machine health probe required: - id - message examples: - id: FailedValidationTest target: DcgmFullShort inAlertSince: null message: |- Failed validation test: Name:DcgmFullShort Command:dcgmi Args:diag -r 2 tenantMessage: null classifications: - PreventAllocations properties: id: type: string description: Health probe identifier target: type: - string - 'null' description: Specific component targeted by health probe inAlertSince: type: - string - 'null' format: date-time description: Date/time since the alert has been in effect message: type: string description: Details of the failed health probe result tenantMessage: type: - string - 'null' description: 'Information provided by Tenant, if any' classifications: type: array items: type: string description: 'Classifications for this alert, category or impact' PlacementInRack: title: PlacementInRack type: object description: Physical placement of a Machine within its Rack examples: - slotNumber: 1 trayIndex: 0 properties: slotNumber: type: - integer - 'null' format: int32 description: Rack slot the Machine occupies trayIndex: type: - integer - 'null' format: int32 description: Index of the Machine's tray within its slot MachineNetworkInterface: title: MachineNetworkInterface type: object description: Describes information about an Ethernet Interface of a Machine examples: - macAddress: 'c8:4b:d6:7b:ac:a8' vendor: Broadcom Inc. and subsidiaries device: NetXtreme BCM5720 Gigabit Ethernet PCIe (PowerEdge Rx5xx LOM Board) path: '/devices/pci0000:00/0000:00:1c.5/0000:04:00.0/net/eno8303' numaNode: 0 description: NetXtreme BCM5720 Gigabit Ethernet PCIe (PowerEdge Rx5xx LOM Board) slot: '0000:04:00.0' properties: macAddress: type: - string - 'null' description: 'Name of the Machine''s NetworkInterface' vendor: type: - string - 'null' description: 'Serial number of the Machine''s NetworkInterface' device: type: - string - 'null' description: 'Device number of the Machine''s NetworkInterface' path: type: - string - 'null' description: 'Bios path of the Machine''s NetworkInterface' numaNode: type: integer description: 'Info of numa node Machine''s NetworkInterface' description: type: - string - 'null' description: 'Description the Machine''s NetworkInterface' slot: type: - string - 'null' description: 'Slot number of the Machine''s NetworkInterface' MachineInfiniBandInterface: title: MachineInfiniBandInterface description: Describes information about an Infiniband Interface of a Machine type: object examples: - guid: 1070fd0300bd43ac vendor: Mellanox Technologies device: 'MT28908 Family [ConnectX-6]' path: '/devices/pci0000:c9/0000:c9:02.0/0000:ca:00.0/infiniband/ibp202s0f0' numaNode: 1 description: 'MT28908 Family [ConnectX-6]' slot: '0000:ca:00.0' properties: guid: type: - string - 'null' description: 'Guid of the Machine''s InfiniBandInterface' vendor: type: - string - 'null' description: 'Serial number of the Machine''s InfiniBandInterface' device: type: - string - 'null' description: 'Device number of the Machine''s InfiniBandInterface' path: type: - string - 'null' description: 'Bios path of the Machine''s InfiniBandInterface' numaNode: type: integer description: 'Info of numa node Machine''s InfiniBandInterface' description: type: - string - 'null' description: 'Description the Machine''s InfiniBandInterface' slot: type: - string - 'null' description: 'Slot number of the Machine''s InfiniBandInterface' MachineInstanceType: title: MachineInstanceType type: object description: Associates a machine with an Instance Type examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 machineId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g instanceTypeId: 41e36058-8403-4086-a9b8-39cb5bc9cb98 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' properties: id: type: string format: uuid readOnly: true description: 'Deprecated: Use `machineId` when identifying a Machine/Instance Type association. This field will be removed on July 9th, 2026 0:00 UTC.' deprecated: true machineId: type: string description: 'ID of the associated Machine' instanceTypeId: type: string description: 'ID of the associated Instance Type' format: uuid deprecations: type: array items: $ref: '#/components/schemas/Deprecation' description: Deprecations active for this resource. Returned only if there are active deprecations. created: type: string description: 'Date and time the Machine Instance Type was created' format: date-time readOnly: true updated: type: string description: 'Date and time the Machine Instance Type was last updated' format: date-time MachineInstanceTypeCreateRequest: title: MachineInstanceTypeCreateRequest type: object description: |- Associates one or more Machines with an Instance Type. The Machine's capabilities must be a superset of the Instance Type's required capabilities for the association to succeed. examples: - machineIds: - fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g - fm100htrh18t1lrjg2pqagkh3sfigr9m65dejvkq168ako07sc0uibpp5q0 - fm100ht68sf2m52idrpslcjkpdj5r3tb3j5o0bkfubhoglbq47u18nknfog properties: machineIds: type: array description: 'ID of the Machine' minItems: 1 items: type: string required: - machineIds HostLifecycleProfile: title: HostLifecycleProfile type: object description: Per-host lifecycle settings that affect how NICo progresses a host through its state machine. properties: disableLockdown: type: - boolean - 'null' description: When true, the server is not locked down during host lifecycle management. When omitted, the existing value is preserved. ExpectedMachine: title: ExpectedMachine type: object description: |- An Expected Machine represents a physical machine that is expected to be discovered at a site, with hardware identifiers and metadata. Note: BMC credentials (username/password) are only accepted during creation and updates but are not returned in responses. examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 siteId: f97df110-f4de-492e-8849-4a6af68026b0 bmcMacAddress: '00:1A:2B:3C:4D:5E' bmcIpAddress: '192.168.1.100' chassisSerialNumber: CHASSIS-12345 fallbackDPUSerialNumbers: - DPU-001 - DPU-002 skuId: lenovo.sr650v2.cpu.1 machineId: fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g rackId: rack-01 isDpfEnabled: true manufacturer: Lenovo labels: environment: production rack: A1 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' properties: id: type: string format: uuid description: Unique identifier for the Expected Machine readOnly: true siteId: type: string format: uuid description: ID of the site the Expected Machine belongs to readOnly: true bmcMacAddress: type: string pattern: '^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$' description: MAC address of the Expected Machine's BMC (Baseboard Management Controller) chassisSerialNumber: type: string description: Serial number of the Expected Machine's chassis fallbackDPUSerialNumbers: type: array description: Serial numbers of the Expected Machine's fallback DPUs (Data Processing Units) items: type: string skuId: type: - string - 'null' description: Optional ID of the SKU associated with this Expected Machine sku: $ref: '#/components/schemas/Sku' description: SKU information for this Expected Machine (populated when includeRelation=Sku is specified) machineId: type: - string - 'null' description: Optional ID of the Machine associated with this Expected Machine machine: $ref: '#/components/schemas/MachineSummary' description: Machine information for this Expected Machine (populated when includeRelation=Machine is specified) rackId: type: - string - 'null' description: Optional rack identifier for this component bmcIpAddress: type: - string - 'null' description: Optional BMC IP address (IPv4 or IPv6). When set, pre-allocates a reserved IP for the BMC. name: type: - string - 'null' description: Display name for this component manufacturer: type: - string - 'null' description: Manufacturer of this component model: type: - string - 'null' description: Model of this component description: type: - string - 'null' description: Description of this component slotId: type: - integer - 'null' format: int32 description: Slot ID within the rack trayIdx: type: - integer - 'null' format: int32 description: Tray index within the rack hostId: type: - integer - 'null' format: int32 description: Host ID within the tray isDpfEnabled: type: boolean description: |- When true, this host is eligible for DPF-based provisioning. labels: $ref: '#/components/schemas/Labels' description: User-defined key-value pairs for organizing and categorizing Expected Machines hostLifecycleProfile: $ref: '#/components/schemas/HostLifecycleProfile' description: Optional per-host lifecycle profile created: type: string format: date-time description: ISO 8601 datetime when the Expected Machine was created readOnly: true updated: type: string format: date-time description: ISO 8601 datetime when the Expected Machine was last updated readOnly: true ExpectedMachineCreateRequest: title: ExpectedMachineCreateRequest type: object description: |- Request data to create a new ExpectedMachine. Note: BMC credentials (username/password) are only accepted during creation and updates but are not returned in responses. examples: - siteId: f97df110-f4de-492e-8849-4a6af68026b0 bmcMacAddress: '00:1A:2B:3C:4D:5E' bmcIpAddress: '192.168.1.100' defaultBmcUsername: admin defaultBmcPassword: password123 chassisSerialNumber: CHASSIS-12345 fallbackDPUSerialNumbers: - DPU-001 - DPU-002 skuId: lenovo.sr650v2.cpu.1 rackId: rack-01 isDpfEnabled: true manufacturer: Lenovo labels: environment: production rack: A1 properties: siteId: type: string format: uuid description: ID of the site the Expected Machine belongs to bmcMacAddress: type: string pattern: '^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$' description: MAC address of the Expected Machine's BMC (Baseboard Management Controller) defaultBmcUsername: type: - string - 'null' maxLength: 20 description: Username for accessing the Expected Machine's BMC defaultBmcPassword: type: - string - 'null' maxLength: 50 description: Password for accessing the Expected Machine's BMC chassisSerialNumber: type: string minLength: 1 maxLength: 100 description: Serial number of the Expected Machine's chassis fallbackDPUSerialNumbers: type: - array - 'null' description: Serial numbers of the Expected Machine's fallback DPUs (Data Processing Units) items: type: string skuId: type: - string - 'null' description: Optional ID of the SKU to associate with this Expected Machine rackId: type: - string - 'null' description: Optional rack identifier for this component bmcIpAddress: type: - string - 'null' description: Optional BMC IP address (IPv4 or IPv6). When set, pre-allocates a reserved IP for the BMC. name: type: - string - 'null' description: Display name for this component manufacturer: type: - string - 'null' description: Manufacturer of this component model: type: - string - 'null' description: Model of this component description: type: - string - 'null' description: Description of this component slotId: type: - integer - 'null' format: int32 description: Slot ID within the rack trayIdx: type: - integer - 'null' format: int32 description: Tray index within the rack hostId: type: - integer - 'null' format: int32 description: Host ID within the tray isDpfEnabled: type: - boolean - 'null' description: |- When true, this host is eligible for DPF-based provisioning. labels: $ref: '#/components/schemas/Labels' description: User-defined key-value pairs for organizing and categorizing Expected Machines hostLifecycleProfile: $ref: '#/components/schemas/HostLifecycleProfile' description: Optional per-host lifecycle profile required: - siteId - bmcMacAddress - chassisSerialNumber ExpectedMachineUpdateRequest: title: ExpectedMachineUpdateRequest type: object description: |- Request data to update an existing Expected Machine. Note: BMC credentials (username/password) are only accepted during creation and updates but are not returned in responses. For single updates (PATCH /expected-machine/{id}), the id field is optional in body and will be ignored if provided (the ID from the URL path is used). For batch updates (PATCH /expected-machine/batch), the id field is required to identify which Expected Machine to update. examples: - defaultBmcUsername: newadmin defaultBmcPassword: newpassword123 chassisSerialNumber: CHASSIS-54321 skuId: sku-xyz789 rackId: rack-02 isDpfEnabled: false manufacturer: Lenovo labels: environment: staging rack: B2 properties: id: type: - string - 'null' format: uuid description: |- ID of the Expected Machine to update. Optional for individual Expected Machine update (ignored if provided, ID from URL path is used). Required for batch update operations. bmcMacAddress: type: - string - 'null' pattern: '^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$' deprecated: true description: |- The Expected Machine's BMC MAC address is immutable after creation. Omit this field, or provide another case/separator spelling of the current MAC as a compatibility no-op. defaultBmcUsername: type: - string - 'null' maxLength: 20 description: Username for accessing the Expected Machine's BMC defaultBmcPassword: type: - string - 'null' maxLength: 50 description: Password for accessing the Expected Machine's BMC chassisSerialNumber: type: - string - 'null' minLength: 1 maxLength: 100 description: Serial number of the Expected Machine's chassis fallbackDPUSerialNumbers: type: - array - 'null' description: Serial numbers of the Expected Machine's fallback DPUs (Data Processing Units) items: type: string skuId: type: - string - 'null' description: Optional ID of the SKU to associate with this Expected Machine rackId: type: - string - 'null' description: Optional rack identifier for this component bmcIpAddress: type: - string - 'null' description: |- Optional BMC IP address (IPv4 or IPv6). A non-empty address sets the value and pre-allocates a reserved IP for the BMC. An empty string clears the value. Omission or null preserves the current value. name: type: - string - 'null' description: Display name for this component manufacturer: type: - string - 'null' description: Manufacturer of this component model: type: - string - 'null' description: Model of this component description: type: - string - 'null' description: Description of this component slotId: type: - integer - 'null' format: int32 description: Slot ID within the rack trayIdx: type: - integer - 'null' format: int32 description: Tray index within the rack hostId: type: - integer - 'null' format: int32 description: Host ID within the tray isDpfEnabled: type: - boolean - 'null' description: |- When true, this host is eligible for DPF-based provisioning. labels: $ref: '#/components/schemas/Labels' description: User-defined key-value pairs for organizing and categorizing Expected Machines hostLifecycleProfile: $ref: '#/components/schemas/HostLifecycleProfile' description: Optional per-host lifecycle profile ExpectedPowerShelf: title: ExpectedPowerShelf type: object description: |- An Expected Power Shelf represents a power shelf that is expected to be discovered at a site, with hardware identifiers and metadata. Note: BMC credentials (username/password) are only accepted during creation and updates but are not returned in responses. examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 siteId: f97df110-f4de-492e-8849-4a6af68026b0 bmcMacAddress: '00:1A:2B:3C:4D:5E' shelfSerialNumber: SHELF-12345 bmcIpAddress: '192.168.1.100' rackId: rack-01 manufacturer: Delta labels: environment: production rack: A1 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' properties: id: type: string format: uuid description: Unique identifier for the Expected Power Shelf readOnly: true siteId: type: string format: uuid description: ID of the site the Expected Power Shelf belongs to readOnly: true bmcMacAddress: type: string pattern: '^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$' description: MAC address of the Expected Power Shelf's BMC (Baseboard Management Controller) shelfSerialNumber: type: string description: Serial number of the Expected Power Shelf bmcIpAddress: type: - string - 'null' description: Optional BMC IP address (IPv4 or IPv6). When set, pre-allocates a reserved IP for the BMC. rackId: type: - string - 'null' description: Optional rack identifier for this component name: type: - string - 'null' description: Display name for this component manufacturer: type: - string - 'null' description: Manufacturer of this component model: type: - string - 'null' description: Model of this component description: type: - string - 'null' description: Description of this component slotId: type: - integer - 'null' format: int32 description: Slot ID within the rack trayIdx: type: - integer - 'null' format: int32 description: Tray index within the rack hostId: type: - integer - 'null' format: int32 description: Host ID within the tray labels: $ref: '#/components/schemas/Labels' description: User-defined key-value pairs for organizing and categorizing Expected Power Shelves created: type: string format: date-time description: ISO 8601 datetime when the Expected Power Shelf was created readOnly: true updated: type: string format: date-time description: ISO 8601 datetime when the Expected Power Shelf was last updated readOnly: true ExpectedPowerShelfCreateRequest: title: ExpectedPowerShelfCreateRequest type: object description: |- Request data to create a new Expected Power Shelf. Note: BMC credentials (username/password) are only accepted during creation and updates but are not returned in responses. examples: - siteId: f97df110-f4de-492e-8849-4a6af68026b0 bmcMacAddress: '00:1A:2B:3C:4D:5E' defaultBmcUsername: admin defaultBmcPassword: password123 shelfSerialNumber: SHELF-12345 bmcIpAddress: '192.168.1.100' rackId: rack-01 manufacturer: Delta labels: environment: production rack: A1 properties: siteId: type: string format: uuid description: ID of the site the Expected Power Shelf belongs to bmcMacAddress: type: string pattern: '^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$' description: MAC address of the Expected Power Shelf's BMC (Baseboard Management Controller) defaultBmcUsername: type: - string - 'null' maxLength: 16 description: Username for accessing the Expected Power Shelf's BMC defaultBmcPassword: type: - string - 'null' maxLength: 20 description: Password for accessing the Expected Power Shelf's BMC shelfSerialNumber: type: string minLength: 1 maxLength: 32 description: Serial number of the Expected Power Shelf bmcIpAddress: type: - string - 'null' description: Optional BMC IP address (IPv4 or IPv6). When set, pre-allocates a reserved IP for the BMC. rackId: type: - string - 'null' description: Optional rack identifier for this component name: type: - string - 'null' description: Display name for this component manufacturer: type: - string - 'null' description: Manufacturer of this component model: type: - string - 'null' description: Model of this component description: type: - string - 'null' description: Description of this component slotId: type: - integer - 'null' format: int32 description: Slot ID within the rack trayIdx: type: - integer - 'null' format: int32 description: Tray index within the rack hostId: type: - integer - 'null' format: int32 description: Host ID within the tray labels: $ref: '#/components/schemas/Labels' description: User-defined key-value pairs for organizing and categorizing Expected Power Shelves required: - siteId - bmcMacAddress - shelfSerialNumber ExpectedPowerShelfUpdateRequest: title: ExpectedPowerShelfUpdateRequest type: object description: |- Request data to update an existing Expected Power Shelf. Note: BMC credentials (username/password) are only accepted during creation and updates but are not returned in responses. examples: - defaultBmcUsername: newadmin defaultBmcPassword: newpassword123 shelfSerialNumber: SHELF-54321 bmcIpAddress: '192.168.1.200' rackId: rack-02 manufacturer: Delta labels: environment: staging rack: B2 properties: id: type: - string - 'null' format: uuid description: ID of the Expected Power Shelf to update (ignored for single update, used for identification in batch operations). bmcMacAddress: type: - string - 'null' pattern: '^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$' description: MAC address of the Expected Power Shelf's BMC (Baseboard Management Controller) defaultBmcUsername: type: - string - 'null' maxLength: 16 description: Username for accessing the Expected Power Shelf's BMC defaultBmcPassword: type: - string - 'null' maxLength: 20 description: Password for accessing the Expected Power Shelf's BMC shelfSerialNumber: type: - string - 'null' minLength: 1 maxLength: 32 description: Serial number of the Expected Power Shelf bmcIpAddress: type: - string - 'null' description: Optional BMC IP address (IPv4 or IPv6). When set, pre-allocates a reserved IP for the BMC. rackId: type: - string - 'null' description: Optional rack identifier for this component name: type: - string - 'null' description: Display name for this component manufacturer: type: - string - 'null' description: Manufacturer of this component model: type: - string - 'null' description: Model of this component description: type: - string - 'null' description: Description of this component slotId: type: - integer - 'null' format: int32 description: Slot ID within the rack trayIdx: type: - integer - 'null' format: int32 description: Tray index within the rack hostId: type: - integer - 'null' format: int32 description: Host ID within the tray labels: $ref: '#/components/schemas/Labels' description: User-defined key-value pairs for organizing and categorizing Expected Power Shelves ExpectedRack: title: ExpectedRack type: object description: |- An Expected Rack represents a rack that is expected to be discovered at a Site. The `rackId` is an operator-supplied string identifier (not a UUID) that uniquely identifies the rack within the Site. Each Expected Rack references a Rack Profile that describes the rack's expected layout and capabilities. Chassis identity and physical location information are conveyed via well-known label keys in `labels`: - `chassis.manufacturer`, `chassis.serial-number`, `chassis.model` - `location.region`, `location.datacenter`, `location.room`, `location.position` examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 rackId: rack-01 siteId: f97df110-f4de-492e-8849-4a6af68026b0 rackProfileId: rp-standard-42u name: Rack 01 description: Production rack in row A labels: chassis.manufacturer: NVIDIA chassis.serial-number: NVRK0001001 chassis.model: GB200-NVL72 location.region: us-west-2 location.datacenter: phx-dc01 location.room: room-1 location.position: A1 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' properties: id: type: string format: uuid description: Unique identifier (UUID) for the Expected Rack readOnly: true rackId: type: string description: Operator-supplied identifier for the rack (string, not UUID). Unique within a Site. readOnly: true siteId: type: string format: uuid description: ID of the Site the Expected Rack belongs to readOnly: true rackProfileId: type: string description: Identifier of the Rack Profile this rack conforms to name: type: string description: Human-readable name of the Expected Rack description: type: string description: Human-readable description of the Expected Rack labels: $ref: '#/components/schemas/Labels' description: |- User-defined key-value pairs for organizing and categorizing Expected Racks. Well-known keys (`chassis.*`, `location.*`) are used to convey chassis identity and physical location. created: type: string format: date-time description: ISO 8601 datetime when the Expected Rack was created readOnly: true updated: type: string format: date-time description: ISO 8601 datetime when the Expected Rack was last updated readOnly: true ExpectedRackCreateRequest: title: ExpectedRackCreateRequest type: object description: |- Request data to create a new Expected Rack. The `rackId` is an operator-supplied string identifier (not a UUID) that must be unique within the Site. Chassis identity and physical location information are conveyed via well-known label keys in `labels`: - `chassis.manufacturer`, `chassis.serial-number`, `chassis.model` - `location.region`, `location.datacenter`, `location.room`, `location.position` examples: - siteId: f97df110-f4de-492e-8849-4a6af68026b0 rackId: rack-01 rackProfileId: rp-standard-42u name: Rack 01 description: Production rack in row A labels: chassis.manufacturer: NVIDIA chassis.serial-number: NVRK0001001 chassis.model: GB200-NVL72 location.region: us-west-2 location.datacenter: phx-dc01 location.room: room-1 location.position: A1 properties: siteId: type: string format: uuid description: ID of the Site the Expected Rack belongs to rackId: type: string minLength: 1 description: Operator-supplied identifier for the rack (string, not UUID). Must be non-empty and unique within the Site. rackProfileId: type: string minLength: 1 description: Identifier of the Rack Profile this rack conforms to. Must be non-empty. name: type: - string - 'null' minLength: 1 description: Human-readable name of the Expected Rack description: type: - string - 'null' minLength: 1 description: Human-readable description of the Expected Rack labels: $ref: '#/components/schemas/Labels' description: |- User-defined key-value pairs for organizing and categorizing Expected Racks. Well-known keys (`chassis.*`, `location.*`) are used to convey chassis identity and physical location. required: - siteId - rackId - rackProfileId ExpectedRackList: title: ExpectedRackList type: object description: |- Replace-all request body for Expected Racks. The `expectedRacks` array contains the full desired set of Expected Racks for the Site identified by `siteId`. All entries must reference the same `siteId` as the top-level field, and `rackId` values must be unique within the request. The array may be empty to clear all Expected Racks for the Site. examples: - siteId: f97df110-f4de-492e-8849-4a6af68026b0 expectedRacks: - siteId: f97df110-f4de-492e-8849-4a6af68026b0 rackId: rack-01 rackProfileId: rp-standard-42u name: Rack 01 description: Production rack in row A labels: chassis.manufacturer: NVIDIA chassis.serial-number: NVRK0001001 chassis.model: GB200-NVL72 location.datacenter: phx-dc01 location.position: A1 - siteId: f97df110-f4de-492e-8849-4a6af68026b0 rackId: rack-02 rackProfileId: rp-standard-42u name: Rack 02 description: Production rack in row A labels: chassis.manufacturer: NVIDIA chassis.serial-number: NVRK0001002 chassis.model: GB200-NVL72 location.datacenter: phx-dc01 location.position: A2 properties: siteId: type: string format: uuid description: ID of the Site whose Expected Racks should be replaced expectedRacks: type: array description: |- The full desired set of Expected Racks for the Site. Every entry must reference the same `siteId` as the top-level field, and `rackId` values must be unique within the request. May be empty to clear all Expected Racks for the Site. items: $ref: '#/components/schemas/ExpectedRackCreateRequest' required: - siteId - expectedRacks ExpectedRackUpdateRequest: title: ExpectedRackUpdateRequest type: object description: |- Request data to update an existing Expected Rack. For single updates (PATCH /expected-rack/{id}), the `id` field is optional in the body and will be ignored if provided (the `id` from the URL path is used). Chassis identity and physical location information are conveyed via well-known label keys in `labels`: - `chassis.manufacturer`, `chassis.serial-number`, `chassis.model` - `location.region`, `location.datacenter`, `location.room`, `location.position` examples: - rackProfileId: rp-standard-48u name: Rack 01 (updated) description: Production rack in row A, upgraded chassis labels: chassis.manufacturer: NVIDIA chassis.serial-number: NVRK0001001 chassis.model: GB200-NVL72 location.datacenter: phx-dc01 location.position: A1 properties: id: type: - string - 'null' format: uuid description: |- Unique identifier (UUID) of the Expected Rack to update. Optional for single Expected Rack update (must be empty or match the id from the URL path). rackId: type: - string - 'null' minLength: 1 description: Optional new operator-supplied rack identifier. If provided, must be non-empty and unique within the Site. rackProfileId: type: - string - 'null' minLength: 1 description: Optional new Rack Profile identifier. If provided, must be non-empty. name: type: - string - 'null' minLength: 1 description: Human-readable name of the Expected Rack description: type: - string - 'null' minLength: 1 description: Human-readable description of the Expected Rack labels: $ref: '#/components/schemas/Labels' description: |- User-defined key-value pairs for organizing and categorizing Expected Racks. Well-known keys (`chassis.*`, `location.*`) are used to convey chassis identity and physical location. ExpectedSwitch: title: ExpectedSwitch type: object description: |- An Expected Switch represents a network switch that is expected to be discovered at a site, with hardware identifiers and metadata. Note: BMC and NvOS credentials (username/password) are only accepted during creation and updates but are not returned in responses. examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 siteId: f97df110-f4de-492e-8849-4a6af68026b0 bmcMacAddress: '00:1A:2B:3C:4D:5E' bmcIpAddress: '192.168.1.100' switchSerialNumber: SWITCH-12345 nvosMacAddresses: - '00:1A:2B:3C:4D:60' - '00:1A:2B:3C:4D:61' rackId: rack-01 manufacturer: NVIDIA labels: environment: production rack: A1 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' properties: id: type: string format: uuid description: Unique identifier for the Expected Switch readOnly: true siteId: type: string format: uuid description: ID of the site the Expected Switch belongs to readOnly: true bmcMacAddress: type: string pattern: '^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$' description: MAC address of the Expected Switch's BMC (Baseboard Management Controller) switchSerialNumber: type: string description: Serial number of the Expected Switch nvosMacAddresses: type: array uniqueItems: true description: MAC addresses of the Expected Switch's NvOS management interfaces items: type: string pattern: '^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$' rackId: type: - string - 'null' description: Optional rack identifier for this component bmcIpAddress: type: - string - 'null' description: Optional BMC IP address (IPv4 or IPv6). When set, pre-allocates a reserved IP for the BMC. name: type: - string - 'null' description: Display name for this component manufacturer: type: - string - 'null' description: Manufacturer of this component model: type: - string - 'null' description: Model of this component description: type: - string - 'null' description: Description of this component slotId: type: - integer - 'null' format: int32 description: Slot ID within the rack trayIdx: type: - integer - 'null' format: int32 description: Tray index within the rack hostId: type: - integer - 'null' format: int32 description: Host ID within the tray labels: $ref: '#/components/schemas/Labels' description: User-defined key-value pairs for organizing and categorizing Expected Switches created: type: string format: date-time description: ISO 8601 datetime when the Expected Switch was created readOnly: true updated: type: string format: date-time description: ISO 8601 datetime when the Expected Switch was last updated readOnly: true ExpectedSwitchCreateRequest: title: ExpectedSwitchCreateRequest type: object description: |- Request data to create a new Expected Switch. Note: BMC and NvOS credentials (username/password) are only accepted during creation and updates but are not returned in responses. examples: - siteId: f97df110-f4de-492e-8849-4a6af68026b0 bmcMacAddress: '00:1A:2B:3C:4D:5E' bmcIpAddress: '192.168.1.100' defaultBmcUsername: admin defaultBmcPassword: password123 switchSerialNumber: SWITCH-12345 nvOsUsername: nvadmin nvOsPassword: nvpassword123 nvosMacAddresses: - '00:1A:2B:3C:4D:60' - '00:1A:2B:3C:4D:61' rackId: rack-01 manufacturer: NVIDIA labels: environment: production rack: A1 properties: siteId: type: string format: uuid description: ID of the site the Expected Switch belongs to bmcMacAddress: type: string pattern: '^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$' description: MAC address of the Expected Switch's BMC (Baseboard Management Controller) defaultBmcUsername: type: - string - 'null' maxLength: 16 description: Username for accessing the Expected Switch's BMC defaultBmcPassword: type: - string - 'null' maxLength: 20 description: Password for accessing the Expected Switch's BMC switchSerialNumber: type: string minLength: 1 maxLength: 32 description: Serial number of the Expected Switch nvOsUsername: type: - string - 'null' description: NvOS username for the Expected Switch nvOsPassword: type: - string - 'null' description: NvOS password for the Expected Switch nvosMacAddresses: type: array uniqueItems: true description: MAC addresses of the Expected Switch's NvOS management interfaces items: type: string pattern: '^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$' rackId: type: - string - 'null' description: Optional rack identifier for this component bmcIpAddress: type: - string - 'null' description: Optional BMC IP address (IPv4 or IPv6). When set, pre-allocates a reserved IP for the BMC. name: type: - string - 'null' description: Display name for this component manufacturer: type: - string - 'null' description: Manufacturer of this component model: type: - string - 'null' description: Model of this component description: type: - string - 'null' description: Description of this component slotId: type: - integer - 'null' format: int32 description: Slot ID within the rack trayIdx: type: - integer - 'null' format: int32 description: Tray index within the rack hostId: type: - integer - 'null' format: int32 description: Host ID within the tray labels: $ref: '#/components/schemas/Labels' description: User-defined key-value pairs for organizing and categorizing Expected Switches required: - siteId - bmcMacAddress - switchSerialNumber ExpectedSwitchUpdateRequest: title: ExpectedSwitchUpdateRequest type: object description: |- Request data to update an existing Expected Switch. Note: BMC and NvOS credentials (username/password) are only accepted during creation and updates but are not returned in responses. examples: - defaultBmcUsername: newadmin defaultBmcPassword: newpassword123 switchSerialNumber: SWITCH-54321 nvOsUsername: newnvadmin nvOsPassword: newnvpassword123 nvosMacAddresses: - '00:1A:2B:3C:4D:62' - '00:1A:2B:3C:4D:63' rackId: rack-02 manufacturer: NVIDIA labels: environment: staging rack: B2 properties: id: type: - string - 'null' format: uuid description: ID of the Expected Switch to update (ignored for single update, used for identification in batch operations). bmcMacAddress: type: - string - 'null' pattern: '^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$' description: MAC address of the Expected Switch's BMC (Baseboard Management Controller) defaultBmcUsername: type: - string - 'null' maxLength: 16 description: Username for accessing the Expected Switch's BMC defaultBmcPassword: type: - string - 'null' maxLength: 20 description: Password for accessing the Expected Switch's BMC switchSerialNumber: type: - string - 'null' minLength: 1 maxLength: 32 description: Serial number of the Expected Switch nvOsUsername: type: - string - 'null' description: NvOS username for the Expected Switch nvOsPassword: type: - string - 'null' description: NvOS password for the Expected Switch nvosMacAddresses: type: array uniqueItems: true description: MAC addresses of the Expected Switch's NvOS management interfaces items: type: string pattern: '^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$' rackId: type: - string - 'null' description: Optional rack identifier for this component bmcIpAddress: type: - string - 'null' description: Optional BMC IP address (IPv4 or IPv6). When set, pre-allocates a reserved IP for the BMC. name: type: - string - 'null' description: Display name for this component manufacturer: type: - string - 'null' description: Manufacturer of this component model: type: - string - 'null' description: Model of this component description: type: - string - 'null' description: Description of this component slotId: type: - integer - 'null' format: int32 description: Slot ID within the rack trayIdx: type: - integer - 'null' format: int32 description: Tray index within the rack hostId: type: - integer - 'null' format: int32 description: Host ID within the tray labels: $ref: '#/components/schemas/Labels' description: User-defined key-value pairs for organizing and categorizing Expected Switches Sku: title: Sku type: object description: |- A SKU (Stock Keeping Unit) represents a unique hardware configuration discovered at a site. SKUs are automatically derived from machine hardware characteristics and used to group similar machines. examples: - id: lenovo.sr650v2.cpu.1 siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 description: Lenovo SR650 V2 compute node schemaVersion: 5 deviceType: gpu associatedMachineIds: - fm100ht4v4mce2qstjnl8970nnj3ie6ecek4mtjn27pea4kre5gsa49jg0g components: cpus: - vendor: Intel model: Xeon Platinum 8480+ threadCount: 112 count: 2 gpus: - vendor: NVIDIA model: H100 SXM5 totalMemory: 80GB HBM3 count: 8 memory: - capacityMb: 65536 memoryType: DDR5 count: 16 storage: - vendor: Samsung model: PM9A3 capacityMb: 7680000 count: 4 chassis: vendor: Supermicro model: SYS-420GP-TNR created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' properties: id: type: string description: Unique identifier for the SKU readOnly: true siteId: type: string format: uuid description: ID of the Site this SKU belongs to readOnly: true description: type: string description: Human-readable SKU description readOnly: true schemaVersion: type: integer format: uint32 description: Core SKU schema version when available readOnly: true deviceType: type: - string - 'null' description: 'Optional device type identifier (e.g. "gpu", "cpu", "storage")' readOnly: true associatedMachineIds: type: array description: List of machine IDs associated with this SKU items: type: string readOnly: true components: $ref: '#/components/schemas/SkuComponents' description: Hardware components of this SKU created: type: string format: date-time description: ISO 8601 datetime when the SKU was created readOnly: true updated: type: string format: date-time description: ISO 8601 datetime when the SKU was last updated readOnly: true SkuCreateRequest: title: SkuCreateRequest type: object description: Request data to create a SKU on a Site's NICo Core service. examples: - siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 id: dgx-h100 description: DGX H100 compute node deviceType: gpu-server components: chassis: vendor: NVIDIA model: DGX H100 architecture: x86_64 properties: siteId: type: string format: uuid description: ID of the Site where the SKU will be created id: type: string minLength: 1 description: Unique SKU identifier description: type: string description: Human-readable SKU description deviceType: type: - string - 'null' description: Optional device type identifier components: $ref: '#/components/schemas/SkuComponents' required: - siteId - id - components SkuUpdateRequest: title: SkuUpdateRequest type: object description: |- Request data to update a SKU. At least one of description, deviceType, or components must be provided. The service preserves the schema version for metadata-only updates. Component updates replace the SKU using the current schema version, migrating legacy SKU schemas to the current format. examples: - description: DGX H100 compute node with InfiniBand components: infinibandDevices: - vendor: Mellanox Technologies model: MT2910 Family [ConnectX-7] count: 4 inactiveDevices: [] properties: description: type: string description: Replacement SKU description deviceType: type: string description: Replacement device type identifier components: $ref: '#/components/schemas/SkuComponents' SkuComponents: title: SkuComponents type: object description: Hardware components that make up a SKU properties: cpus: type: array description: CPU components items: $ref: '#/components/schemas/SkuCpu' gpus: type: array description: GPU components items: $ref: '#/components/schemas/SkuGpu' memory: type: array description: Memory components items: $ref: '#/components/schemas/SkuMemory' storage: type: array description: Storage components items: $ref: '#/components/schemas/SkuStorage' chassis: $ref: '#/components/schemas/SkuChassis' description: Chassis component ethernetDevices: type: array description: Ethernet device components items: $ref: '#/components/schemas/SkuEthernetDevice' infinibandDevices: type: array description: Infiniband device components items: $ref: '#/components/schemas/SkuInfinibandDevice' tpm: type: array description: TPM components items: $ref: '#/components/schemas/SkuTpm' SkuCpu: title: SkuCpu type: object description: CPU component in a SKU examples: - vendor: ARM model: Neoverse-V2 threadCount: 72 count: 2 properties: vendor: type: string description: Vendor of the CPU model: type: string description: Model of the CPU threadCount: type: integer format: uint32 description: Number of threads for the CPU count: type: integer format: uint32 description: Number of CPUs present SkuGpu: title: SkuGpu type: object description: GPU component in a SKU examples: - vendor: NVIDIA model: NVIDIA GB200 totalMemory: 189471 MiB count: 4 properties: vendor: type: string description: Vendor of the GPU model: type: string description: Model of the GPU totalMemory: type: string description: Total memory of the GPU (e.g. "80GB HBM3") count: type: integer format: uint32 description: Number of GPUs present SkuMemory: title: SkuMemory type: object description: Memory component in a SKU examples: - capacityMb: 491520 memoryType: LPDDR5 count: 2 properties: capacityMb: type: integer format: uint32 description: Capacity in megabytes memoryType: type: string description: 'Type of memory (e.g. "DDR4", "DDR5")' count: type: integer format: uint32 description: Number of memory modules present SkuStorage: title: SkuStorage type: object description: Storage component in a SKU examples: - vendor: '' model: SAMSUNG MZ1L21T9HCLS-00A07 capacityMb: 0 count: 1 minSizeMiB: 1831420 maxSizeMiB: 1831420 pciPatterns: - ^/devices/pci.*nvme0$ - vendor: '' model: SAMSUNG MZTL63T8HFLT-00AW7 capacityMb: 0 count: 8 minSizeMiB: 3662840 maxSizeMiB: 3662840 pciPatterns: - ^/devices/pci.*nvme[1-8]$ properties: vendor: type: string readOnly: true description: Storage vendor used for schema version 4 matching. Read-only in REST mutation requests and preserved in responses for legacy SKUs. Schema version 5 does not use this field. model: type: string description: Informational storage model. Starting with the 2.1 release, NICo does not use this field for storage matching or validation. capacityMb: type: integer format: uint32 readOnly: true description: Storage capacity in megabytes used for schema version 4 matching. Read-only in REST mutation requests and preserved in responses for legacy SKUs. Schema version 5 uses minSizeMiB and maxSizeMiB instead. count: type: integer format: uint32 description: Number of storage devices present minSizeMiB: type: - integer - 'null' format: uint32 description: Inclusive minimum size in MiB for each storage device. Null or omission means no lower bound. Used for SKU schema version 5 and later. maxSizeMiB: type: - integer - 'null' format: uint32 description: Inclusive maximum size in MiB for each storage device. Null or omission means no upper bound. Used for SKU schema version 5 and later. pciPatterns: type: array description: Regular expressions matched against storage sysfs PCI paths. An empty or omitted list disables PCI location matching. Used for SKU schema version 5 and later. items: type: string SkuChassis: title: SkuChassis type: object description: Chassis component in a SKU examples: - vendor: NVIDIA model: GB200 NVL architecture: aarch64 properties: vendor: type: string description: Vendor of the chassis model: type: string description: Model of the chassis architecture: type: string description: Architecture of the chassis SkuEthernetDevice: title: SkuEthernetDevice type: object description: Ethernet device component in a SKU properties: vendor: type: string description: Vendor of the ethernet device model: type: string description: Model of the ethernet device count: type: integer format: uint32 description: Number of ethernet devices present isConnected: type: boolean description: Whether the ethernet device is connected SkuInfinibandDevice: title: SkuInfinibandDevice type: object description: Infiniband device component in a SKU examples: - vendor: Mellanox Technologies model: MT2910 Family [ConnectX-7] count: 4 inactiveDevices: [] properties: vendor: type: string description: Vendor of the infiniband device model: type: string description: Model of the infiniband device count: type: integer format: uint32 description: Number of infiniband devices present inactiveDevices: type: array description: Zero-based indexes of inactive devices items: type: integer format: uint32 SkuTpm: title: SkuTpm type: object description: TPM component in a SKU properties: vendor: type: string description: Vendor of the TPM version: type: string description: Version of the TPM IpBlock: title: IpBlock type: object description: IP block contains information about an IPv4 address pool owned by the Infrastructure Provider and assigned as an overlay network for a particular Site. It is equivalent to Network Resource in product terminology. examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: Public Network Overlay for Site SJC4 description: This is the primary IP overlay for SJC4. All IPs are publicly routable siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf tenantId: null routingType: Public prefix: 202.168.16.0 prefixLength: 20 protocolVersion: IPv4 status: Pending statusHistory: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' properties: id: type: string description: 'Unique UUID v4 identifier for the IP Block' format: uuid readOnly: true name: type: string description: 'Name of the IP Block' minLength: 2 maxLength: 256 description: type: - string - 'null' description: 'Description of the IP Block' siteId: type: string description: 'ID of the Site' format: uuid infrastructureProviderId: type: string description: 'ID of the Infrastructure Provider' format: uuid tenantId: type: - string - 'null' description: 'ID of the Tenant' format: uuid routingType: type: string description: 'RoutingType of the IP Block' enum: - Public - DatacenterOnly prefix: type: string description: Either IPv4 or IPv6 address prefixLength: type: integer example: 24 description: 'Min: 1, Max: 32 for ipv4, 128 for ipv6' protocolVersion: type: string description: 'Version of the ip network IPv4 or IPv6' enum: - IPv4 - IPv6 usageStats: $ref: '#/components/schemas/IpBlockUsageStats' description: 'Usage summary from IPAM for the IP Block' status: $ref: '#/components/schemas/IpBlockStatus' description: 'Status of the IP Block' statusHistory: type: array items: $ref: '#/components/schemas/StatusDetail' description: 'Chronological status history for the IP Block' created: type: string description: 'Date/time when the Ip Block was created' format: date-time readOnly: true updated: type: string description: 'Date/time when the Ip Block was last updated' format: date-time readOnly: true IpBlockSummary: title: IpBlockSummary type: object description: Describes a subset of core attributes of an IP block examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: Public Network Overlay for Site SJC4 routingType: Public prefix: 202.168.16.0 prefixLength: 20 status: Pending properties: id: type: string description: 'ID of the IP Block' format: uuid readOnly: true name: type: string description: 'Name of the IP Block, only lowercase characters, digits, hyphens and cannot begin/end with hyphen' minLength: 2 maxLength: 256 routingType: type: string description: 'RoutingType of the IP Block' enum: - Public - DatacenterOnly prefix: type: string description: Either IPv4 or IPv6 address prefixLength: type: integer example: 24 description: 'Min: 1, Max: 32 for ipv4, 128 for ipv6' status: $ref: '#/components/schemas/IpBlockStatus' description: 'Status of the IP Block' IpBlockStatus: title: IpBlockStatus type: string description: Status values for IP Block objects enum: - Pending - Provisioning - Ready - Deleting - Error IpBlockUsageStats: title: IpBlockUsageStats type: object examples: - availableIPs: 256 acquiredIPs: 2 availablePrefixes: - 192.168.201.0/24 availableSmallestPrefixes: 64 acquiredPrefixes: 0 properties: availableIPs: type: integer format: int64 description: Total number of IP addresses in the block (acquired and unused) readOnly: true acquiredIPs: type: integer format: int64 description: Number of individual IP addresses acquired from the block readOnly: true availablePrefixes: type: array format: uuid description: | Example prefixes available to acquire items: type: string readOnly: true availableSmallestPrefixes: type: integer description: | Total number of /30 prefixes that can still be acquired from this block (only reduced if prefixes are acquired, not reduced by acquired IPs) format: int64 readOnly: true acquiredPrefixes: type: integer format: int64 description: Total number of prefixes (of any size) acquired from this block description: Usage statistics for an IP Block, VPC Prefix or Subnet IpBlockCreateRequest: title: IpBlockCreateRequest type: object description: Request data for creating IP block examples: - name: Public Network Overlay for Site SJC4 description: This is the primary IP overlay for SJC4. All IPs are publicly routable siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 routingType: Public prefix: 202.168.1.0 prefixLength: 24 protocolVersion: IPv4 properties: name: type: string description: 'Name of the IP Block' minLength: 2 maxLength: 256 description: type: - string - 'null' description: 'Description of the IP Block' siteId: type: string description: 'ID of the site' format: uuid routingType: type: string description: 'Routing type of the IP Block' enum: - Public - DatacenterOnly prefix: type: string description: Either IPv4 or IPv6 address prefixLength: type: integer description: 'Min: 1, Max: 32 for IPv4, 128 for IPv6' protocolVersion: type: string description: 'Version of the ip network ipv4 or ipv6' enum: - IPv4 - IPv6 required: - name - siteId - routingType - prefix - prefixLength - protocolVersion IpBlockUpdateRequest: title: IpBlockUpdateRequest type: object description: Request data for editing IP block examples: - name: Public Network Overlay for Site SJC4 description: This is the primary IP overlay for SJC4. All IPs are publicly routable properties: name: type: - string - 'null' description: 'Name of the IP Block' minLength: 2 maxLength: 256 description: type: - string - 'null' description: 'Description of the IP Block' NetworkSecurityGroup: type: object examples: - id: 2a21cf79-ea5e-4d28-b585-2e78948fcefb name: Spark VPC Firewall description: Security policies for machines in Spark VPC siteId: 56f1a3ed-3653-454f-b861-9136207be660 tenantId: 79595ebe-934f-4f19-bc74-c16aefd0c57a status: Pending statusHistory: - status: Ready message: processed network security group creation request created: '2025-02-26T18:17:44.862879-05:00' updated: '2025-02-26T18:17:44.862879-05:00' rules: - name: allow-http-from-public direction: INGRESS sourcePortRange: 80-81 destinationPortRange: 180-181 protocol: TCP action: PERMIT priority: 55 sourcePrefix: 0.0.0.0/0 destinationPrefix: 1.1.1.1/0 labels: flavor: coconut created: '2025-02-26T18:17:44.861317-05:00' updated: '2025-02-26T18:17:44.861317-05:00' description: Network Security Group is an aggregate of security policies properties: id: type: string description: 'Unique UUID v4 identifier for the Network Security Group' name: type: string description: 'Name of the Network Security Group' minLength: 2 maxLength: 256 description: type: - string - 'null' description: 'Description of the Network Security Group' siteId: type: string description: 'ID of the Site' format: uuid tenantId: type: string description: 'ID of the Tenant' format: uuid status: $ref: '#/components/schemas/NetworkSecurityGroupStatus' description: 'Status of the Network Security Group' statusHistory: type: array items: $ref: '#/components/schemas/StatusDetail' description: 'Chronological status history for the Network Security Group' statefulEgress: type: boolean description: 'StatefulEgress defines whether a Network Security Group''s egress rules will be automatically stateful' rules: type: array items: $ref: '#/components/schemas/NetworkSecurityGroupRule' description: 'Rules that belong to the Network Security Group' ruleCount: type: integer description: Number of rules in the Network Security Group attachmentStats: $ref: '#/components/schemas/NetworkSecurityGroupStats' description: Attachment statistics for the Network Security Group. Returned when the `includeAttachmentStats` query parameter is set to true in retrieval endpoints. labels: $ref: '#/components/schemas/Labels' description: 'Set of labels/tags for the Network Security Group' created: type: string description: 'Date/time when the Network Security Group was created' format: date-time updated: type: string description: 'Date/time when the Network Security Group was last updated' format: date-time NetworkSecurityGroupStats: title: NetworkSecurityGroupStats type: object description: Detailed attachment statistics for a Network Security Group properties: inUse: type: boolean description: Whether the Network Security Group is directly attached to at least one object directVpcAttachmentCount: type: integer description: Number of VPCs that directly attach this Network Security Group directInstanceAttachmentCount: type: integer description: Number of Instances that directly attach this Network Security Group totalDirectAttachmentCount: type: integer description: Total number of objects that directly attach this Network Security Group NetworkSecurityGroupStatus: title: NetworkSecurityGroupStatus type: string description: Status values for Network Security Group objects enum: - Pending - Provisioning - Ready - Deleting - Error NetworkSecurityGroupCreateRequest: type: object examples: - id: 2a21cf79-ea5e-4d28-b585-2e78948fcefb name: Spark VPC Firewall description: Security policies for machines in Spark VPC siteId: 188a8f32-0001-45cf-b243-f62720a22cc4 rules: - name: allow-http-from-public direction: INGRESS sourcePortRange: 80-81 destinationPortRange: 180-181 protocol: TCP action: PERMIT priority: 55 sourcePrefix: 0.0.0.0/0 destinationPrefix: 1.1.1.1/0 labels: flavor: coconut description: Request data to create a Network Security Group properties: id: type: string format: uuid description: Optional user-specified UUID for the Network Security Group name: type: string description: 'Name of the Network Security Group' minLength: 2 maxLength: 256 description: type: - string - 'null' description: 'Description of the Network Security Group' siteId: type: string description: 'ID of the Site' format: uuid statefulEgress: type: boolean description: Egress rules with protocol and destination ports defined but without source ports defined should automatically be made stateful. rules: type: array items: $ref: '#/components/schemas/NetworkSecurityGroupRule' description: 'Rules that belong to the Network Security Group' labels: $ref: '#/components/schemas/Labels' description: 'User-defined key-value labels for the Network Security Group' required: - name - siteId NetworkSecurityGroupUpdateRequest: type: object examples: - name: Spark VPC Firewall description: Security policies for machines in Spark VPC rules: - name: allow-http-from-public direction: INGRESS sourcePortRange: 80-81 destinationPortRange: 180-181 protocol: TCP action: PERMIT priority: 55 sourcePrefix: 0.0.0.0/0 destinationPrefix: 1.1.1.1/0 labels: flavor: coconut description: Request data to update a Network Security Group properties: name: type: - string - 'null' description: 'Name of the Network Security Group' minLength: 2 maxLength: 256 description: type: - string - 'null' description: 'Description of the Network Security Group' statefulEgress: type: boolean description: Egress rules with protocol and destination ports defined but without source ports defined should automatically be made stateful. rules: type: array description: 'Update rules of the Network Security Group. The rules will be replaced with the rules sent in the request. Any rules not included in the request will be removed. To retain existing rules, fetch them first and include them.' items: $ref: '#/components/schemas/NetworkSecurityGroupRule' labels: $ref: '#/components/schemas/Labels' description: 'User-defined key-value labels for the Network Security Group' NetworkSecurityGroupRule: title: NetworkSecurityGroupRule type: object description: Aggregation of Network Security Group rules properties: name: type: - string - 'null' description: 'Name of the Network Security Group rule' direction: type: string description: 'Traffic direction the rule applies to' enum: - INGRESS - EGRESS example: INGRESS sourcePortRange: type: - string - 'null' description: 'Source port or port range matched by the rule' example: 80-81 destinationPortRange: type: - string - 'null' description: 'Destination port or port range matched by the rule' example: 80-81 protocol: type: string description: 'Network protocol matched by the rule' enum: - TCP - UDP - ICMP - ICMP6 - ANY example: TCP action: type: string description: 'Action applied when traffic matches the rule' enum: - PERMIT - DENY example: PERMIT priority: type: integer description: 'Rule priority used to order evaluation' sourcePrefix: type: string description: 'Source CIDR prefix matched by the rule' example: 10.5.44.0/24 destinationPrefix: type: string description: 'Destination CIDR prefix matched by the rule' example: 10.5.44.0/24 required: - direction - protocol - action - sourcePrefix - destinationPrefix NetworkSecurityGroupPropagationDetails: title: NetworkSecurityGroupPropagationDetails type: object description: The Network Security Group propagation details for a VPC or Instance properties: objectId: type: string format: uuid description: The ID of the object (VPC/Instance etc.) detailedStatus: type: string description: 'The detailed propagation status that was actually returned from NICo' enum: - None - Partial - Full - Unknown - Error status: $ref: '#/components/schemas/NetworkSecurityGroupPropagationStatus' description: 'The simplified propagation status that reduces the actual status to just a few values' details: type: - string - 'null' description: 'Additional details for the status' unpropagatedInstanceIds: type: array description: 'IDs of Instances associated with the object that have not yet updated their Network Security Group rules' items: type: string format: uuid relatedInstanceIds: type: array description: 'IDs of the instances involved in determining the propagation status' items: type: string format: uuid deprecations: type: array description: Deprecations active for this resource. Returned only if there are active deprecations. items: $ref: '#/components/schemas/Deprecation' NetworkSecurityGroupPropagationStatus: title: NetworkSecurityGroupPropagationStatus type: string description: Status values for Network Security Group propagation enum: - Synchronizing - Synchronized - Error StatusDetail: title: StatusDetail type: object description: Describes the details of a status transition for a resource properties: status: type: string description: 'State of the associated entity at a particular time' message: type: - string - 'null' description: 'Description of the state and cause/remedy in case of error' created: type: string description: 'Date/time when the associated entity assumed the status' format: date-time readOnly: true updated: type: string description: 'Date/time when the associated entity was last observed with this status' format: date-time readOnly: true examples: - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' SshKeyGroup: title: SshKeyGroup type: object description: Describes the model that groups SSH Keys examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: reno-integration-sre description: SRE access SSH keys for Reno Integration org: wdksahew1rqf tenantId: f97df110-f4de-492e-8849-4a6af68026b0 version: fbc692b61ffef6fbfc38a3833f6b7e7ae508da75 siteAssociations: - site: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: sjc-central-1 infrastructureProviderId: 5f2cc306-76e9-4fca-9186-950c9ef9a74e isSerialConsoleEnabled: true isOnline: true capabilities: nativeNetworking: false networkSecurityGroup: true nvLinkPartition: false flow: false imageBasedOperatingSystem: false status: Registered status: Syncing version: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' sshKeys: - id: ff06da79-707a-4069-8623-211d49ae96c8 name: sre-ssh-reno org: wdksahew1rqf tenantId: f97df110-f4de-492e-8849-4a6af68026b0 fingerprint: CaK2yoj5fDOhf1swM2kFyjQrd3bwZfDYlWnVjBHgveQ created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' status: Syncing statusHistory: - status: Syncing message: Group is being synced to Sites created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' properties: id: type: string description: Unique identifier for the SSH Key Group format: uuid readOnly: true name: type: string description: Name of the SSH Key Group description: type: - string - 'null' description: 'Description for the SSH Key Group, optional' org: type: string description: Organization this SSH Key Group belongs to tenantId: type: string format: uuid description: ID of the Tenane the SSH Key Group belongs to version: type: - string - 'null' description: Version of the SSH Key Group example: fbc692b61ffef6fbfc38a3833f6b7e7ae508da75 sshKeys: type: array description: SSH Keys associated with this SSH Key Group items: $ref: '#/components/schemas/SshKey' siteAssociations: type: array description: Sites the SSH Key Group is synced to items: $ref: '#/components/schemas/SshKeyGroupSiteAssociation' status: $ref: '#/components/schemas/SshKeyGroupStatus' description: Status of the SSH Key Group statusHistory: type: array description: History of the SSH Key Group states items: $ref: '#/components/schemas/StatusDetail' created: type: string format: date-time description: Date/time when the SSH key was created readOnly: true updated: type: string format: date-time description: Date/time when the SSH key was last updated readOnly: true SshKeyGroupStatus: title: SshKeyGroupStatus type: string description: Status values for SSH Key Group objects enum: - Syncing - Synced - Error - Deleting SshKeyGroupSiteAssociation: title: SshKeyGroupSiteAssociation type: object description: Describes the relationship between an SSH Key Group and a Site examples: - site: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: sjc-central-1 infrastructureProviderId: 5f2cc306-76e9-4fca-9186-950c9ef9a74e isSerialConsoleEnabled: true isOnline: false capabilities: nativeNetworking: false networkSecurityGroup: true nvLinkPartition: false flow: false imageBasedOperatingSystem: false status: Pending status: Syncing version: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' properties: site: $ref: '#/components/schemas/SiteSummary' description: 'Summary of the Site' status: $ref: '#/components/schemas/SshKeyGroupSiteAssociationStatus' description: 'Status of the SSHKeyGroupSiteAssociation' version: type: - string - 'null' description: Version of the Key Group on Site example: a94a8fe5ccb19ba61c4c0873d391e987982fbbd3 created: type: string description: 'Date/time when the Site was created' format: date-time readOnly: true updated: type: string description: 'Date/time when the Site was last updated' format: date-time readOnly: true SshKeyGroupSiteAssociationStatus: title: SshKeyGroupSiteAssociationStatus type: string description: Status values for SSH Key Group Site Association objects enum: - Syncing - Synced - Pending - Error - Deleting SshKeyGroupCreateRequest: title: SshKeyGroupCreateRequest type: object description: Request data to create an SSH Key Group examples: - name: reno-integration-sre description: SRE access SSH keys for Reno Integration siteIds: - 497f6eca-6276-4993-bfeb-53cbbbba6f08 sshKeyIds: - ff06da79-707a-4069-8623-211d49ae96c8 properties: name: type: string description: 'Name of the SSHKeyGroup' description: type: - string - 'null' description: 'Description of the SSHKeyGroup' siteIds: type: array description: 'List of Site objects' items: type: string format: uuid sshKeyIds: type: array description: 'List of SSHKeyID objects' items: type: string format: uuid required: - name SshKeyGroupUpdateRequest: title: SshKeyGroupUpdateRequest type: object description: Request data to update an SSH Key Group examples: - name: reno-int-sre description: SRE access SSH keys for Reno Integration Site siteIds: - 497f6eca-6276-4993-bfeb-53cbbbba6f08 - 05d6e108-9f06-44c9-be47-7ab4d62b20d0 sshKeyIds: - ff06da79-707a-4069-8623-211d49ae96c8 - 30fc7238-133d-42f7-8d29-866658b0c019 version: 098f6bcd4621d373cade4e832627b4f6 properties: name: type: - string - 'null' description: 'Name of the SSHKeyGroup' description: type: - string - 'null' description: 'Description of the SSHKeyGroup' siteIds: type: array description: 'When specified, replaces existing Site associations' items: type: string format: uuid sshKeyIds: type: array description: 'When specified, replaces existing SSH Key associations' items: type: string format: uuid version: type: string description: Version of the SSH Key Group being modified must be provided required: - version SshKey: title: SshKey type: object description: Details of SSH public key examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: sre-ssh-reno org: wdksahew1rqf tenantId: f97df110-f4de-492e-8849-4a6af68026b0 fingerprint: CaK2yoj5fDOhf1swM2kFyjQrd3bwZfDYlWnVjBHgveQ created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' properties: id: type: string description: Unique identifier for the key format: uuid readOnly: true name: type: string description: 'Name of the SSHKey' org: type: string description: 'Organization the SSHKey belongs to' tenantId: type: string description: 'ID of the Tenant' format: uuid fingerprint: type: string description: SHA256 fingerprint of the public key created: type: string format: date-time description: Date/time when the SSH key was created readOnly: true updated: type: string format: date-time description: Date/time when the SSH key was last updated readOnly: true SshKeyCreateRequest: title: SshKeyCreateRequest type: object description: Request data to create an SSH key examples: - name: sre-ssh-reno publicKey: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICip4hl6WjuVHs60PeikVUs0sWE/kPhk2D0rRHWsIuyL jdoe@test.com sshKeyGroupId: 0b5be54a-65ee-4a85-9928-90e6bca22dac properties: name: type: string description: Name cannot match that name an existing SSH Key publicKey: type: string description: 'Must be an SSH key of type: RSA, ECDSA or ED25519' pattern: '^ssh-(rsa|ecdsa|ed25519) AAAA[0-9A-Za-z+/]+[=]{0,3}(\s+.+)?$' sshKeyGroupId: type: - string - 'null' format: uuid description: ID of the SSH Key Group this key should be attached to required: - name - publicKey SshKeyUpdateRequest: title: SshKeyUpdateRequest type: object description: Request data to update an SSH key examples: - name: sre-ssh-reno-integration properties: name: type: - string - 'null' description: 'Name of the SSHKey' DpuExtensionService: title: DpuExtensionService type: object description: DPU Extension Service allows user defined services to run on DPUs of their Instances examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: busybox description: 'Single, multi-call executable that contains stripped-down versions of common Unix utilities' serviceType: KubernetesPod siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 tenantId: f97df110-f4de-492e-8849-4a6af68026b0 version: V1-T1761856992374052 versionInfo: version: V1-T1761856992374052 data: 'apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: busybox-deployment\n labels:\n app: busybox\nspec:\n replicas: 1 # You can adjust the number of desired replicas here\n selector:\n matchLabels:\n app: busybox\n template:\n metadata:\n labels:\n app: busybox\n spec:\n containers:\n - name: busybox-container\n image: busybox:latest # You can specify a different BusyBox image tag\n command: ["sh", "-c", "echo \''BusyBox container running\'' && sleep 3600"]' hasCredentials: true created: '2019-08-24T14:15:22Z' observability: configs: - name: busybox-metrics prometheus: scrapeIntervalSeconds: 30 endpoint: busybox:9090 activeVersions: - V1-T1761857134382532 - V1-T1761856992374052 status: Ready statusHistory: - status: Pending message: DPU Service Extension is ready for use created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' - status: Pending message: 'Request received, pending processing' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' properties: id: type: string description: Unique identifier for the DPU Extension Service format: uuid readOnly: true name: type: string description: Name for the DPU Extension Service. Must be unique for a given Tenant description: type: - string - 'null' description: Optional description for the DPU Extension Service serviceType: type: string description: Type of the DPU Extension Service enum: - KubernetesPod siteId: type: string format: uuid description: ID for the Site the DPU Extension Service belongs to tenantId: type: string format: uuid description: ID for the Tenant the DPU Extension Service belongs to version: type: - string - 'null' description: Latest version of the DPU Extension Service versionInfo: $ref: '#/components/schemas/DpuExtensionServiceVersionInfo' description: Details for the latest version of the DPU Extension Service activeVersions: type: array description: Latest and past versions of this DPU Extension Service that have not been deleted and are available for deployment items: type: string status: $ref: '#/components/schemas/DpuExtensionServiceStatus' description: Status of the DPU Extension Service statusHistory: type: array description: History of the DPU Extension Service statuses items: $ref: '#/components/schemas/StatusDetail' created: type: string format: date-time description: Date/time when the DPU Extension Service was created readOnly: true updated: type: string format: date-time description: Date/time when the DPU Extension Service was last updated readOnly: true DpuExtensionServiceStatus: title: DpuExtensionServiceStatus type: string description: Status values for DPU Extension Service objects enum: - Pending - Ready - Error - Deleting DpuExtensionServiceSummary: title: DpuExtensionServiceSummary type: object description: DPU Extension Service allows user defined services to run on DPUs of their Instances examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: busybox serviceType: KubernetesPod latestVersion: V1-T1761856992374052 status: Ready properties: id: type: string description: Unique identifier for the DPU Extension Service format: uuid readOnly: true name: type: string description: Name for the DPU Extension Service. Must be unique for a given Tenant serviceType: type: string description: Type of the DPU Extension Service enum: - KubernetesPod latestVersion: type: - string - 'null' description: Latest version of the DPU Extension Service status: $ref: '#/components/schemas/DpuExtensionServiceStatus' description: Status of the DPU Extension Service DpuExtensionServiceVersionInfo: title: DpuExtensionServiceVersionInfo type: object description: Information about a specific version of DPU Extension Service examples: - version: V1-T1761856992374052 data: 'apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: busybox-deployment\n labels:\n app: busybox\nspec:\n replicas: 1 # You can adjust the number of desired replicas here\n selector:\n matchLabels:\n app: busybox\n template:\n metadata:\n labels:\n app: busybox\n spec:\n containers:\n - name: busybox-container\n image: busybox:latest # You can specify a different BusyBox image tag\n command: ["sh", "-c", "echo \''BusyBox container running\'' && sleep 3600"]' hasCredentials: true created: '2019-08-24T14:15:22Z' observability: configs: - name: busybox-metrics prometheus: scrapeIntervalSeconds: 30 endpoint: busybox:9090 properties: version: type: - string - 'null' description: Current version of the DPU Extension Service data: type: string description: Deployment spec for the DPU Extension Service hasCredentials: type: boolean description: Indicates whether this version was created with credentials created: type: string format: date-time description: Date/time when this version of the DPU Extension Service was created readOnly: true observability: $ref: '#/components/schemas/DpuExtensionServiceObservability' description: Observability configuration for this DPU Extension Service version DpuExtensionServiceCreateRequest: title: DpuExtensionServiceCreateRequest type: object description: Request data to create a new DPU Extension Service examples: - name: busybox description: 'Single, multi-call executable that contains stripped-down versions of common Unix utilities' serviceType: KubernetesPod siteId: 60189e9c-7d12-438c-b9ca-6998d9c364b1 data: 'apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: busybox-deployment\n labels:\n app: busybox\nspec:\n replicas: 1 # You can adjust the number of desired replicas here\n selector:\n matchLabels:\n app: busybox\n template:\n metadata:\n labels:\n app: busybox\n spec:\n containers:\n - name: busybox-container\n image: busybox:latest # You can specify a different BusyBox image tag\n command: ["sh", "-c", "echo \''BusyBox container running\'' && sleep 3600"]' credentials: registryUrl: 'https://registry.hub.docker.com' username: johndoe password: password123 observability: configs: - name: busybox-metrics prometheus: scrapeIntervalSeconds: 30 endpoint: busybox:9090 properties: name: type: string description: Name for the DPU Extension Service. Must be unique for a given Tenant description: type: - string - 'null' description: Optional description for the DPU Extension Service serviceType: type: string description: Type of the DPU Extension Service enum: - KubernetesPod siteId: type: string format: uuid description: ID for the Site the DPU Extension Service belongs to data: type: string description: Deployment spec for the DPU Extension Service credentials: $ref: '#/components/schemas/DpuExtensionServiceCredentials' description: Credentials to download resources specified in DPU Extension Service data observability: $ref: '#/components/schemas/DpuExtensionServiceObservability' description: Observability configuration for the DPU Extension Service version required: - name - serviceType - siteId - data DpuExtensionServiceUpdateRequest: title: DpuExtensionServiceUpdateRequest type: object description: Request data to update an existing DPU Extension Service examples: - name: busybox-ha data: 'apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: busybox-deployment\n labels:\n app: busybox\nspec:\n replicas: 3 # You can adjust the number of desired replicas here\n selector:\n matchLabels:\n app: busybox\n template:\n metadata:\n labels:\n app: busybox\n spec:\n containers:\n - name: busybox-container\n image: busybox:latest # You can specify a different BusyBox image tag\n command: ["sh", "-c", "echo \''BusyBox container running\'' && sleep 3600"]' credentials: registryUrl: 'https://registry.hub.docker.com' username: johndoe password: password123 observability: configs: - name: busybox-logs logging: path: /var/log/busybox.log properties: name: type: - string - 'null' description: Name for the DPU Extension Service. Must be unique for a given Tenant description: type: - string - 'null' description: Optional description for the DPU Extension Service data: type: - string - 'null' description: Deployment spec for the DPU Extension Service credentials: $ref: '#/components/schemas/DpuExtensionServiceCredentials' description: Credentials to download resources specified in DPU Extension Service data observability: $ref: '#/components/schemas/DpuExtensionServiceObservability' description: Observability configuration for the DPU Extension Service version DpuExtensionServiceCredentials: title: DpuExtensionServiceCredentials type: object description: Credentials for retrieving resources specified in DPU Extension Service data examples: - registryUrl: 'https://registry.hub.docker.com' username: johndoe password: password123 properties: registryUrl: type: string description: URL for the registry the credential should be used for username: type: - string - 'null' description: Username for the registry. Must be specified if registry URL is specified password: type: - string - 'null' description: Password for the registry. Must be specified if registry URL is specified DpuExtensionServiceObservability: title: DpuExtensionServiceObservability type: object description: Observability configuration for a DPU Extension Service version examples: - configs: - name: busybox-metrics prometheus: scrapeIntervalSeconds: 30 endpoint: busybox:9090 - name: busybox-logs logging: path: /var/log/busybox.log properties: configs: type: array maxItems: 20 description: Observability configurations to apply to the service version items: $ref: '#/components/schemas/DpuExtensionServiceObservabilityConfig' DpuExtensionServiceObservabilityConfig: title: DpuExtensionServiceObservabilityConfig type: object description: A single observability configuration for a DPU Extension Service version properties: name: type: - string - 'null' description: Optional name of the service or component being monitored prometheus: $ref: '#/components/schemas/DpuExtensionServiceObservabilityPrometheus' description: 'Prometheus scrape configuration' logging: $ref: '#/components/schemas/DpuExtensionServiceObservabilityLogging' description: 'Logging configuration' oneOf: - required: - prometheus - required: - logging DpuExtensionServiceObservabilityPrometheus: title: DpuExtensionServiceObservabilityPrometheus type: object description: Prometheus scrape configuration for a DPU Extension Service version properties: scrapeIntervalSeconds: type: integer format: uint32 minimum: 0 maximum: 4294967295 description: How often Prometheus should scrape the endpoint endpoint: type: string description: Prometheus scrape endpoint required: - scrapeIntervalSeconds - endpoint DpuExtensionServiceObservabilityLogging: title: DpuExtensionServiceObservabilityLogging type: object description: Logging configuration for a DPU Extension Service version properties: path: type: string description: Path to the log file to collect required: - path DpuExtensionServiceDeployment: title: DpuExtensionServiceDeployment type: object description: Describes a deployment of a DPU Extension Service on DPUs of an Instance examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 dpuExtensionService: id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 name: busybox serviceType: KubernetesPod latestVersion: V1-T1761856992374052 status: Ready version: V1-T1761856992374052 status: Running created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' properties: id: type: string format: uuid description: Unique identifier for the DPU Extension Service Deployment readOnly: true dpuExtensionService: $ref: '#/components/schemas/DpuExtensionServiceSummary' description: Summary of the DPU Extension Service. Deployed version may be different version: type: string description: Deployed version of the DPU Extension Service status: $ref: '#/components/schemas/DpuExtensionServiceDeploymentStatus' description: Status of the DPU Extension Service Deployment created: type: string format: date-time description: Date/time when this version of the DPU Extension Service Deployment was created updated: type: string format: date-time description: Date/time when this version of the DPU Extension Service Deployment was updated DpuExtensionServiceDeploymentStatus: title: DpuExtensionServiceDeploymentStatus type: string description: Status values for DPU Extension Service Deployment objects enum: - Pending - Running - Error - Failed - Terminating DpuExtensionServiceDeploymentRequest: title: DpuExtensionServiceDeploymentRequest type: object description: Request data to deploy of a specific version of a DPU Extension Service on DPUs of an Instance examples: - dpuExtensionServiceId: 3bddb7b4-0963-4278-b311-c212dc758357 version: V1-T1761856992374052 properties: dpuExtensionServiceId: type: string description: ID of the DPU Extension Service to deploy format: uuid version: type: string description: Version of the DPU Extension Service to deploy User: title: User type: object description: Details of the user collected from authentication tokens examples: - id: 497f6eca-6276-4993-bfeb-53cbbbba6f08 email: janed@nvidia.com firstName: Jane lastName: Doe created: '2019-08-24T14:15:22Z' updated: '2019-08-24T14:15:22Z' properties: id: type: string description: Unique identifier for the given user. format: uuid readOnly: true email: type: - string - 'null' description: 'Email used by the user to register with NGC' format: email firstName: type: - string - 'null' description: 'First name of the user' lastName: type: - string - 'null' description: 'Surname of the user' created: type: string format: date-time description: The date that the user was created. readOnly: true updated: type: string description: 'Date/time when the user was last updated in NICo' format: date-time readOnly: true AuditEntry: title: AuditEntry type: object description: Describes Audit Log Entry examples: - id: e313b3ca-c47a-4ec1-a79b-a147fad51a50 endpoint: /v2/org/test-org-1/nico/ep queryParams: '{"test":["1234"]}' method: POST body: '{"key1":"value1"}' statusCode: 200 clientIP: 12.123.43.112 userID: 5d9fe319-14d4-40e3-8e5a-7d79e680d55b user: id: 5d9fe319-14d4-40e3-8e5a-7d79e680d55b firstName: John lastName: Doe email: jdoe@test.com orgName: test-org-1 timestamp: '2024-12-04T21:06:33.849293-08:00' durationMs: 250 apiVersion: 0.1.91 - id: e313b3ca-c47a-4ec1-a79b-a147fad51a50 endpoint: /v2/org/test-org-1/nico/ep queryParams: '{"test":["1234"]}' method: POST body: '{"key1":"value1"}' statusCode: 403 statusMessage: User does not have permissions clientIP: 12.123.43.112 userID: 5d9fe319-14d4-40e3-8e5a-7d79e680d55b user: id: 5d9fe319-14d4-40e3-8e5a-7d79e680d55b firstName: John lastName: Doe email: jdoe@test.com orgName: test-org-1 timestamp: '2024-12-04T21:06:33.849293-08:00' durationMs: 50 apiVersion: 0.1.91 properties: id: type: string description: Unique identifier format: uuid readOnly: true endpoint: type: string description: API endpoint queryParams: type: string description: Query parameters method: type: string description: HTTP method body: type: string description: HTTP body in JSON format statusCode: type: integer description: HTTP response status code statusMessage: type: string description: HTTP response status message clientIP: type: string description: Client IP address userID: type: - string - 'null' format: uuid description: User ID that executed the API call user: $ref: '#/components/schemas/User' description: User that executed the API call orgName: type: string description: Organization name extraData: type: object description: Extra data in JSON format timestamp: type: string format: date-time description: API execution time durationMs: type: integer description: API execution duration in milliseconds apiVersion: type: string description: API version Metadata: title: Metadata type: object description: Metadata about the API server examples: - version: 0.1.24 buildTime: '2019-08-24T14:15:22Z' properties: version: type: string description: Current version of the API readOnly: true buildTime: type: string description: Date/time when the API was built readOnly: true Deprecation: title: Deprecation type: object description: Details of a particular deprecation in NVIDIA Infra Controller (NICo) API properties: attribute: type: - string - 'null' description: Name of the attribute that is deprecated. Omitted if queryParam or endpoint is being deprecated. queryParam: type: - string - 'null' description: Query parameter that is deprecated. Omitted if attribute or endpoint is being deprecated. endpoint: type: - string - 'null' description: API endpoint that is deprecated. Omitted if attribute or queryParam is being deprecated. replacedBy: type: - string - 'null' description: Name of the attribute, query parameter, or endpoint that replaces the deprecated item. Omitted if no replacement is available. takeActionBy: type: string description: 'Date/time by which clients should migrate away from the deprecated API surface' format: date-time notice: type: string description: Message describing the deprecation MessageResponse: title: MessageResponse type: object description: Structured response with a human-readable message required: - message properties: message: type: string description: Human-readable outcome of the request example: message: Deletion request was accepted NICoAPIError: title: NICoAPIError type: object description: Describes the error response from NVIDIA Infra Controller REST API properties: source: type: string description: Source of the error. enum: - nico message: type: string description: Message describing the error data: type: - object - 'null' description: Additional data about the error ServiceAccount: title: ServiceAccount type: object description: Describes Service Account status and related entities properties: enabled: type: boolean description: |- Indicates whether the calling token is authenticated as a Service Account. This is determined per request from how the token's issuer is configured at deployment time (the issuer config in the `nico-rest-api-config` ConfigMap); it cannot be toggled via the API. Rules by issuer origin: - `keycloak`: true for a client-credentials (service-to-service) token — i.e. the token carries a client ID — when the issuer is deployed with `keycloak.serviceAccount: true`. - `custom`: true when the `claimMapping` matched for this org sets `isServiceAccount: true`. Only permitted when the API runs in disconnected mode. - `kas-ssa` / `kas-legacy`: always false; service accounts are not supported for these origins. For details on issuer origins and configuration, see the NICo REST `auth` module [README](https://github.com/NVIDIA/infra-controller/rest-api/tree/main/auth). infrastructureProviderId: type: - string - 'null' format: uuid description: ID of the Infrastructure Provider associated with Service Account tenantId: type: - string - 'null' format: uuid description: ID of the Tenant associated with Service Account examples: - enabled: true infrastructureProviderId: e94bcfda-f6cb-42e4-80ec-516811e5abbf tenantId: f97df110-f4de-492e-8849-4a6af68026b0 Labels: title: Labels type: object maxProperties: 10 additionalProperties: type: string MachineGPUStats: title: MachineGPUStats description: GPU summary stats for a single GPU type across machines at a site type: object properties: name: type: string description: GPU name from the MachineCapability record gpus: type: integer description: Total number of GPUs (summation of all Machine GPU capability counts) machines: type: integer description: Number of machines that have this GPU capability examples: - name: NVIDIA GB200 gpus: 64 machines: 16 - name: NVIDIA H100 gpus: 8 machines: 1 MachineStatusBreakdown: title: MachineStatusBreakdown description: Machine counts broken down by status type: object properties: total: type: integer description: 'Total number of machines in this group' initializing: type: integer description: 'Number of machines being initialized' ready: type: integer description: 'Number of machines in ready state' inUse: type: integer description: 'Number of machines currently in use' error: type: integer description: 'Number of machines in error state' maintenance: type: integer description: 'Number of machines in maintenance state' unknown: type: integer description: 'Number of machines in unknown state' MachineInstanceTypeSummary: title: MachineInstanceTypeSummary description: Summary of machines grouped by assigned vs unassigned instance type type: object properties: assigned: description: Machines that have been assigned to an instance type $ref: '#/components/schemas/MachineStatusBreakdown' unassigned: description: Machines that have not been assigned to any instance type $ref: '#/components/schemas/MachineStatusBreakdown' MachineInstanceTypeStats: title: MachineInstanceTypeStats description: Detailed stats for machines of a specific instance type type: object properties: id: type: string format: uuid description: Unique identifier for the InstanceType name: type: string description: Name of the InstanceType assignedMachineStats: $ref: '#/components/schemas/MachineStatusBreakdown' description: 'AssignedMachineStats captures the status of all Machines assigned to this Instance Type' allocated: type: integer description: Number of Machines of this Instance Type allocated to Tenants maxAllocatable: type: integer description: Number of Ready Machines of this Instance Type available for additional allocation to Tenants usedMachineStats: $ref: '#/components/schemas/MachineStatusBreakdown' description: 'UsedMachineStats captures the usage status of machines assigned to this instance type that are currently associated with Tenant Instances' tenants: type: array items: $ref: '#/components/schemas/InstanceTypeStats' description: 'Per-tenant breakdown for this instance type' InstanceTypeStats: title: InstanceTypeStats description: Stats for an instance type including allocation details type: object properties: id: type: string description: 'Unique UUID v4 identifier for the Instance Type' format: uuid name: type: string description: 'Name of the Instance Type' allocated: type: integer description: 'Number of Machines allocated for this Instance Type' usedMachineStats: $ref: '#/components/schemas/MachineStatusBreakdown' description: 'Usage statistics for Machines allocated to this Instance Type' maxAllocatable: type: integer description: 'Maximum number of Machines of this Instance Type that can be allocated' allocations: type: array items: $ref: '#/components/schemas/TenantInstanceTypeAllocationStats' description: 'Allocation statistics for this Instance Type' TenantInstanceTypeAllocationStats: title: TenantInstanceTypeAllocationStats description: Stats for a single allocation within an instance type type: object properties: id: type: string description: 'Unique UUID v4 identifier for the Allocation' format: uuid name: type: string description: 'Name of the Allocation' total: type: integer description: 'Total number of Machines allocated to different Tenants for this Instance Type' TenantInstanceTypeStats: title: TenantInstanceTypeStats description: Per-tenant instance type allocation stats type: object properties: id: type: string format: uuid description: Unique identifier for the Tenant org: type: string description: Organization name for the Tenant orgDisplayName: type: string description: Display name for the Tenant's organization instanceTypes: type: array items: $ref: '#/components/schemas/InstanceTypeStats' description: 'Instance Type statistics for this Tenant' TenantIdentityConfigCreateOrUpdateRequest: title: TenantIdentityConfigCreateOrUpdateRequest description: |- Tenant identity configuration payload. `issuer`, `defaultAudience`, and `tokenTtlSeconds` are required. `enabled` is optional and defaults to `true` when omitted. The `org` identifier is taken from the URL path segment `{org}`. Two request shapes are supported, distinguished by whether the PUT also forces a signing-key rotation: 1. **Without key rotation** -- `rotateKey` is omitted or `false`; `signingKeyOverlapSeconds` must be omitted. 2. **With key rotation** -- `rotateKey: true` and `signingKeyOverlapSeconds` are both required; the Core gRPC API generates a fresh ES256 keypair into the other key slot, swaps the active signer, and arms a JWKS overlap window for the previous key. oneOf: - $ref: '#/components/schemas/TenantIdentityConfigCreateOrUpdateRequestWithoutKeyRotation' - $ref: '#/components/schemas/TenantIdentityConfigCreateOrUpdateRequestWithKeyRotation' TenantIdentityConfigCreateOrUpdateRequestWithoutKeyRotation: title: Without key rotation description: |- Standard create-or-update of the tenant identity config. Use this shape when **not** rotating the signing key. `signingKeyOverlapSeconds` is not used here -- it is only meaningful together with `rotateKey: true` and is rejected by the REST API in that combination. Switch to the "With key rotation" variant when you need to set it. type: object required: - issuer - defaultAudience - tokenTtlSeconds properties: enabled: type: boolean default: true description: |- Optional. Set to `true` to enable JWT-SVID issuance for this org or `false` to keep the config but pause issuance. Defaults to `true` when omitted. issuer: type: string description: |- JWT `iss` claim / OIDC issuer. Required in the REST request body. The Core gRPC API (`Issuer::parse`) is authoritative for scheme and host rules and accepts `https://`, `http://`, or `spiffe://` URLs with a DNS host; malformed values are rejected with `400 Bad Request`. defaultAudience: type: string description: Default audience applied when a workload does not specify one. Required. allowedAudiences: type: array default: [] description: |- Allowlist of audience strings that may appear in issued JWT-SVIDs. When **empty or omitted**, the Core gRPC API persists `[defaultAudience]` as the stored allowlist, so only the default audience can be issued -- empty is **not** "allow any". To accept additional audiences, provide a non-empty list; non-empty lists must include `defaultAudience`. A subsequent GET returns the persisted allowlist, which may differ from an empty list that was sent on PUT. items: type: string tokenTtlSeconds: type: integer minimum: 1 description: |- Issued-token TTL in seconds. Required in the REST request body and must be > 0. The Core gRPC API enforces its configured `[machine_identity].token_ttl_min_sec` / `token_ttl_max_sec` window and rejects values outside the window with `400 Bad Request`. The window is per-site, so REST does not advertise a fixed maximum here. subjectPrefix: type: string description: |- Optional SPIFFE ID URI prefix for JWT `sub` (RFC-shaped `spiffe://…`). When omitted, the Core gRPC API derives a prefix from the issuer's trust domain. rotateKey: type: boolean enum: - false default: false description: |- Must be omitted or `false` for this variant. Switch to the "With key rotation" variant to force a fresh ES256 signing keypair and arm a JWKS overlap window. TenantIdentityConfigCreateOrUpdateRequestWithKeyRotation: title: With key rotation description: |- Create-or-update of the tenant identity config that also forces a signing-key rotation. Both `rotateKey: true` and `signingKeyOverlapSeconds` are required. type: object required: - issuer - defaultAudience - tokenTtlSeconds - rotateKey - signingKeyOverlapSeconds properties: enabled: type: boolean default: true description: |- Optional. Set to `true` to enable JWT-SVID issuance for this org or `false` to keep the config but pause issuance. Defaults to `true` when omitted. issuer: type: string description: |- JWT `iss` claim / OIDC issuer. Required in the REST request body. The Core gRPC API (`Issuer::parse`) is authoritative for scheme and host rules and accepts `https://`, `http://`, or `spiffe://` URLs with a DNS host; malformed values are rejected with `400 Bad Request`. defaultAudience: type: string description: Default audience applied when a workload does not specify one. Required. allowedAudiences: type: array default: [] description: |- Allowlist of audience strings that may appear in issued JWT-SVIDs. When **empty or omitted**, the Core gRPC API persists `[defaultAudience]` as the stored allowlist, so only the default audience can be issued -- empty is **not** "allow any". To accept additional audiences, provide a non-empty list; non-empty lists must include `defaultAudience`. A subsequent GET returns the persisted allowlist, which may differ from an empty list that was sent on PUT. items: type: string tokenTtlSeconds: type: integer minimum: 1 description: |- Issued-token TTL in seconds. Required in the REST request body and must be > 0. The Core gRPC API enforces its configured `[machine_identity].token_ttl_min_sec` / `token_ttl_max_sec` window and rejects values outside the window with `400 Bad Request`. The window is per-site, so REST does not advertise a fixed maximum here. subjectPrefix: type: string description: |- Optional SPIFFE ID URI prefix for JWT `sub` (RFC-shaped `spiffe://…`). When omitted, the Core gRPC API derives a prefix from the issuer's trust domain. rotateKey: type: boolean enum: - true description: |- Must be `true` for this variant. Generates a fresh ES256 signing keypair into the other key slot, swaps the current signer, and arms a JWKS overlap window for the previous key. signingKeyOverlapSeconds: type: integer minimum: 1 description: |- Required when `rotateKey` is `true`. Number of seconds the previous verification key remains in JWKS so that JWTs already signed with it stay verifiable until they expire. Must be `>= tokenTtlSeconds`. The Core gRPC API enforces an upper bound via its `[machine_identity].signing_key_overlap_max_sec` config; values above that bound are rejected with `400 Bad Request`. TenantIdentityConfig: title: TenantIdentityConfig description: |- Current tenant identity configuration plus the per-org signing key metadata (`signingKeys`). During a JWKS overlap window two entries appear; under steady state only the active signer is listed. Use `signingKeys[].kid` (filtering by `currentSigner`) instead of the legacy single `keyId` field, which was removed with the key-rotation change in NICo-core. type: object properties: org: type: string description: 'Organization that owns the Tenant identity configuration' enabled: type: boolean description: 'Whether Tenant identity token delegation is enabled' issuer: type: string description: 'Issuer URL for Tenant identity tokens' defaultAudience: type: string description: 'Default audience used for Tenant identity tokens' allowedAudiences: type: array description: |- Stored allowlist of audience strings. Always non-empty: when a PUT supplied an empty list, the Core gRPC API substituted `[defaultAudience]` before persisting. Issuance rejects audiences outside this list. items: type: string tokenTtlSeconds: type: integer description: 'Lifetime of issued Tenant identity tokens, in seconds' subjectPrefix: type: string description: |- SPIFFE ID prefix used in the JWT `sub` claim. When the PUT body omitted `subjectPrefix`, Core stored `spiffe://` here, so the value returned by GET may differ from what was submitted. signingKeys: type: array items: $ref: '#/components/schemas/TenantIdentitySigningKey' description: |- Per-org signing keys currently published in JWKS. Exactly one entry has `currentSigner: true`. During a rotation overlap window a second entry is present with `currentSigner: false` and a populated `expireAt`; once the overlap window elapses the Core gRPC API deletes the expired entry and only the current signer remains. created: type: string description: 'Date/time when the Tenant identity configuration was created' format: date-time updated: type: string description: 'Date/time when the Tenant identity configuration was last updated' format: date-time TenantIdentitySigningKey: title: TenantIdentitySigningKey description: |- A single JWT-SVID signing key entry returned in `TenantIdentityConfig.signingKeys`. Multiple entries appear during a key-rotation overlap window; in steady state only the active signer is listed. type: object required: - kid - alg - currentSigner properties: kid: type: string description: Key identifier; matches the `kid` published in JWKS for this key. alg: type: string description: Signing algorithm, e.g. `ES256`. currentSigner: type: boolean description: |- True when this key is the active signer for new JWT-SVIDs. Exactly one entry per response is `true`. expireAt: type: - string - "null" format: date-time description: |- Set on the inactive (previous) key during the JWKS overlap window; the Core gRPC API deletes the inactive slot once `now >= expireAt`. Null on the current signer. TenantIdentityBasicClientSecretRequest: title: TenantIdentityBasicClientSecretRequest description: Raw OAuth2 `client_secret_basic` credentials. `clientSecret` is accepted on input but never returned in responses. type: object required: - clientId - clientSecret properties: clientId: type: string description: 'Client identifier used for basic client-secret authentication' clientSecret: type: string description: |- Raw OAuth2 client secret. Transmitted over TLS to the Core gRPC API, which encrypts it at rest in its database using a per-site key. Never echoed in responses; subsequent reads return only a `sha256:` hash prefix in `clientSecretHash`. TenantIdentityBasicClientSecretResponse: title: TenantIdentityBasicClientSecretResponse description: Public half of `client_secret_basic` credentials. Only the SHA-256 hash of the secret is returned. type: object properties: clientId: type: string description: 'Client identifier used for basic client-secret authentication' clientSecretHash: type: string description: SHA-256 hash of the raw secret. TenantIdentityTokenDelegationCreateOrUpdateRequest: title: TenantIdentityTokenDelegationCreateOrUpdateRequest description: |- RFC 8693 token exchange callback configuration. Omit `clientSecretBasic` entirely for auth method `none`; include it for `client_secret_basic`. Because PUT is full-replace, omitting `clientSecretBasic` on a subsequent update **clears** any previously-stored credentials and switches the org back to no-auth. To keep basic-auth across updates, re-supply `clientId` and `clientSecret` on every PUT — Core never returns the raw secret (only its hash), so the secret must be available to the caller. type: object required: - tokenEndpoint - subjectTokenAudience properties: tokenEndpoint: type: string format: uri description: |- URL of the tenant's RFC 8693 token exchange endpoint. The Core gRPC API validates scheme and host against its configured `[machine_identity].token_endpoint_domain_allowlist` and rejects mismatches with `400 Bad Request`. Operators that need to enforce HTTPS-only must populate that allowlist. clientSecretBasic: $ref: '#/components/schemas/TenantIdentityBasicClientSecretRequest' description: 'Client-secret basic authentication settings for token delegation' subjectTokenAudience: type: string description: Audience value placed on the intermediate JWT-SVID posted to the exchange endpoint. TenantIdentityTokenDelegation: title: TenantIdentityTokenDelegation description: Current token delegation configuration for the org. type: object properties: tokenEndpoint: type: string description: 'Token endpoint used to exchange delegated Tenant identity tokens' format: uri clientSecretBasic: $ref: '#/components/schemas/TenantIdentityBasicClientSecretResponse' description: 'Client-secret basic authentication settings for token delegation' subjectTokenAudience: type: string description: 'Audience value expected on the subject token' created: type: string description: 'Date/time when the token delegation configuration was created' format: date-time updated: type: string description: 'Date/time when the token delegation configuration was last updated' format: date-time TenantIdentityJWKS: title: TenantIdentityJWKS description: |- RFC 7517 JSON Web Key Set. NICo-rest returns this schema only on `200 OK`; in that case the `keys` member is present. The Core gRPC API normally returns one key, or two during a rotation overlap window. When no identity configuration exists for the org/site, the JWKS endpoints return `404 Not Found`. type: object required: - keys properties: keys: type: array description: |- RFC 7517 JWK members. NICo currently emits only EC keys (`kty: EC`, `crv: P-256`, `alg: ES256`); the schema is intentionally open-ended so that future algorithms can be added without a spec change. items: type: object properties: kty: type: string example: EC use: type: string description: "`sig` for OIDC JWKS, `jwt-svid` for SPIFFE JWKS" crv: type: string example: P-256 kid: type: string x: type: string description: Base64url-encoded EC x coordinate 'y': type: string description: Base64url-encoded EC y coordinate alg: type: string example: ES256 OpenIDConfiguration: title: OpenIDConfiguration description: |- OIDC discovery document. Note: `id_token_signing_alg_values_supported` is always empty because NICo issues JWT bearer access tokens, not OIDC `id_token`s. type: object properties: issuer: type: string description: 'Issuer URL for OpenID Connect discovery' jwks_uri: type: string description: 'URL of the JSON Web Key Set used to verify tokens' format: uri response_types_supported: type: array description: 'OAuth response types supported by this issuer' items: type: string subject_types_supported: type: array description: 'Subject identifier types supported by this issuer' items: type: string id_token_signing_alg_values_supported: type: array description: 'ID token signing algorithms supported by this issuer' items: type: string spiffe_jwks_uri: type: string description: 'URL of the SPIFFE JSON Web Key Set used to verify SPIFFE JWT-SVIDs' format: uri DpuMachine: title: DpuMachine type: object description: A DPU Machine with network configuration fields exposed by the REST API. properties: id: type: string description: ID of the DPU Machine infrastructureProviderId: type: string format: uuid description: ID of the Infrastructure Provider that owns the host Machine siteId: type: string format: uuid description: ID of the Site that the host Machine belongs to hostMachineId: type: string description: ID of the host Machine that this DPU is attached to dpuAgentVersion: type: string description: Version of the DPU agent running on the DPU bmcInfo: $ref: '#/components/schemas/MachineBMCInfo' description: BMC (Baseboard Management Controller) information for the DPU dmiData: $ref: '#/components/schemas/MachineDMIData' description: DMI (Desktop Management Interface) data reported for the DPU interfaces: type: array items: $ref: '#/components/schemas/DpuMachineInterface' description: Interfaces reported on the DPU softwareComponents: type: array items: $ref: '#/components/schemas/DpuMachineSoftwareComponent' description: Software components reported on the DPU health: $ref: '#/components/schemas/MachineHealth' description: Health information for the DPU labels: type: object additionalProperties: type: string description: Labels associated with the DPU state: type: string description: Lifecycle state of the DPU dpuNetworkConfig: $ref: '#/components/schemas/DpuNetworkConfig' description: Network configuration fields exposed by the REST API lastRebooted: type: - string - 'null' format: date-time description: Last reboot timestamp placementInRack: $ref: '#/components/schemas/PlacementInRack' description: 'Physical placement of the DPU Machine within its Rack, when known' required: - id - infrastructureProviderId - siteId - hostMachineId - state - dpuNetworkConfig DpuMachineInterface: title: DpuMachineInterface type: object description: An interface reported on a DPU Machine properties: id: type: string description: Interface ID machineId: type: string description: ID of the Machine the interface belongs to segmentId: type: string description: Network segment ID hostname: type: string description: Hostname of the interface primaryInterface: type: boolean description: Whether this is the primary interface macAddress: type: string description: MAC address of the interface address: type: array items: type: string description: IP addresses assigned to the interface vendor: type: - string - 'null' description: Vendor of the interface created: type: - string - 'null' format: date-time description: Timestamp when the interface was first observed lastDhcp: type: - string - 'null' format: date-time description: Timestamp of the last DHCP lease for the interface isBmc: type: boolean description: Whether this interface is a BMC interface DpuMachineSoftwareComponent: title: DpuMachineSoftwareComponent type: object description: A software component reported on a DPU Machine properties: name: type: string description: Name of the software component version: type: string description: Version of the software component url: type: string description: URL where the software component can be obtained DpuNetworkConfig: title: DpuNetworkConfig type: object description: Network configuration fields exposed for a DPU Machine. Internal-only and sensitive fields from the Core configuration are omitted. properties: asn: type: integer format: uint32 description: Autonomous System Number for BGP routing dhcpServers: type: array items: type: string description: List of DHCP server IP addresses vniDevice: type: string description: VNI device name managedHostConfig: $ref: '#/components/schemas/ManagedHostNetworkConfig' description: Network configuration applied to the managed host managedHostConfigVersion: type: string description: Version of the managed host configuration useAdminNetwork: type: boolean description: Whether to use the admin network adminInterface: $ref: '#/components/schemas/DpuInterfaceConfig' description: Admin network interface configuration for the DPU tenantInterfaces: type: array items: $ref: '#/components/schemas/DpuInterfaceConfig' description: List of tenant interface configurations instanceNetworkConfigVersion: type: - string - 'null' description: Version of the instance network configuration instanceId: type: - string - 'null' description: ID of the associated instance networkVirtualizationType: type: - string - 'null' description: Type of network virtualization vpcVni: type: - integer - 'null' format: uint32 description: VPC VNI identifier routeServers: type: array items: type: string description: List of route server IP addresses remoteId: type: string description: Remote identifier for the managed host deprecatedDenyPrefixes: type: array items: type: string description: Deprecated list of denied IP prefixes dpuNetworkPingerType: type: - string - 'null' description: Type of network pinger to use denyPrefixes: type: array items: type: string description: List of denied IP prefixes siteFabricPrefixes: type: array items: type: string description: List of site fabric IP prefixes vpcIsolationBehavior: type: string description: VPC isolation behavior setting statefulAclsEnabled: type: boolean description: Whether stateful ACLs are enabled enableDhcp: type: boolean description: Whether DHCP is enabled hostInterfaceId: type: - string - 'null' description: ID of the host interface minDpuFunctioningLinks: type: - integer - 'null' format: uint32 description: Minimum number of functioning DPU links required isPrimaryDpu: type: boolean description: Whether this is the primary DPU internetL3Vni: type: - integer - 'null' format: uint32 description: Layer 3 VNI used for internet access datacenterAsn: type: integer format: uint32 description: Datacenter Autonomous System Number anycastSitePrefixes: type: array items: type: string description: List of anycast site IP prefixes tenantHostAsn: type: - integer - 'null' format: uint32 description: Autonomous System Number for the tenant host siteGlobalVpcVni: type: - integer - 'null' format: uint32 description: Site-global VPC VNI identifier required: - asn - vniDevice - managedHostConfigVersion - useAdminNetwork - remoteId - vpcIsolationBehavior - statefulAclsEnabled - enableDhcp - isPrimaryDpu - datacenterAsn ManagedHostNetworkConfig: title: ManagedHostNetworkConfig type: object description: Network configuration for the managed host properties: loopbackIp: type: string description: Loopback IP address quarantineState: $ref: '#/components/schemas/ManagedHostQuarantineState' required: - loopbackIp ManagedHostQuarantineState: title: ManagedHostQuarantineState type: object description: Quarantine state for the managed host properties: mode: type: string description: Quarantine mode reason: type: - string - 'null' description: Reason for quarantine required: - mode DpuInterfaceConfig: title: DpuInterfaceConfig type: object description: Interface configuration for DPU networking properties: functionType: type: string description: Function type (e.g. PHYSICAL_FUNCTION, VIRTUAL_FUNCTION) vlanId: type: integer format: uint32 description: VLAN ID vni: type: integer format: uint32 description: VXLAN Network Identifier gateway: type: string description: Gateway IP address ip: type: string description: Interface IP address interfacePrefix: type: string description: Interface name prefix virtualFunctionId: type: - integer - 'null' format: uint32 description: Virtual function ID if applicable vpcPrefixes: type: array items: type: string description: List of VPC IP prefixes prefix: type: string description: IP prefix for the interface fqdn: type: string description: Fully qualified domain name bootUrl: type: - string - 'null' description: Boot URL for PXE/iPXE boot vpcVni: type: integer format: uint32 description: VPC VXLAN Network Identifier sviIp: type: - string - 'null' description: Switch virtual interface (SVI) IP address tenantVrfLoopbackIp: type: - string - 'null' description: Tenant VRF loopback IP address isL2Segment: type: boolean description: Whether the interface is an L2 segment vpcPeerPrefixes: type: array items: type: string description: List of peered VPC IP prefixes vpcPeerVnis: type: array items: type: integer format: uint32 description: List of peered VPC VNIs mtu: type: - integer - 'null' format: uint32 description: Maximum transmission unit (MTU) for the interface networkSecurityGroup: $ref: '#/components/schemas/InterfaceNetworkSecurityGroupConfig' description: Network security group configuration resolved on the interface required: - functionType - vlanId - vni - gateway - ip - interfacePrefix - prefix - fqdn - vpcVni - isL2Segment InterfaceNetworkSecurityGroupConfig: title: InterfaceNetworkSecurityGroupConfig type: object description: Network security group configuration resolved on a DPU interface properties: id: type: string description: ID of the Network Security Group version: type: string description: Version of the Network Security Group source: type: string description: Source of the Network Security Group configuration rules: type: array items: $ref: '#/components/schemas/ResolvedNetworkSecurityGroupRule' description: Resolved rules for the Network Security Group required: - id - version - source ResolvedNetworkSecurityGroupRule: title: ResolvedNetworkSecurityGroupRule type: object description: A network security group rule with its source and destination prefixes resolved properties: rule: $ref: '#/components/schemas/NetworkSecurityGroupRule' description: The underlying Network Security Group rule srcPrefixes: type: array items: type: string description: Resolved source IP prefixes for the rule dstPrefixes: type: array items: type: string description: Resolved destination IP prefixes for the rule securitySchemes: JWTBearerToken: type: http scheme: Bearer description: |- ``` export JWT_BEARER_TOKEN="" # Example org name: "acme-inc export ORG_NAME= # Use the JWT bearer token in your API request auth header: curl -v -X GET -H "Content-Type: application/json" -H "Authorization: Bearer $JWT_BEARER_TOKEN" https://nico-rest-api.nico.svc.cluster.local/v2/org/$ORG_NAME/nico/user/current ``` responses: GenericHttpError: description: Response when the API handler encounters an unexpected error content: application/json: schema: $ref: '#/components/schemas/NICoAPIError' examples: Example 1: value: source: nico message: Error handling API request data: null NotFoundError: description: Error response when requested object is not found content: application/json: schema: $ref: '#/components/schemas/NICoAPIError' examples: example-1: value: source: nico message: Could not find resource with specified ID data: null UnauthorizedError: description: Error response when user is not authenticated content: application/json: schema: $ref: '#/components/schemas/NICoAPIError' examples: example-1: value: source: nico message: User is not authenticated data: null ForbiddenError: description: Error response when user is not authorized to call an endpoint or retrieve/modify objects content: application/json: schema: $ref: '#/components/schemas/NICoAPIError' examples: example-1: value: source: nico message: User is not allowed to perform this action data: null ValidationError: description: Error response when request data cannot be validated content: application/json: schema: $ref: '#/components/schemas/NICoAPIError' examples: example-1: value: source: nico message: Error validating request data data: name: A value is required ResourceExhaustedError: description: Error response when the Controller cannot allocate a requested resource because capacity is exhausted content: application/json: schema: $ref: '#/components/schemas/NICoAPIError' examples: example-1: value: source: nico message: VPC prefix capacity exhausted data: null HostFirmwareConfigCoreUnavailable: description: Core gRPC API is unavailable, so the host firmware config request cannot be served. content: application/json: schema: $ref: '#/components/schemas/NICoAPIError' TenantIdentityCoreUnavailable: description: |- Core gRPC API is unavailable, or site-level machine identity is disabled (`enabled=false` in site config), so the request cannot be served. content: application/json: schema: $ref: '#/components/schemas/NICoAPIError' parameters: {} requestBodies: {} security: - JWTBearerToken: []