> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/infra-controller/llms.txt.
> For full documentation content, see https://docs.nvidia.com/infra-controller/llms-full.txt.

# Validate Racks

GET https://carbide-rest-api.carbide.svc.cluster.local/v2/org/{org}/carbide/rack/validation

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 drifted components.

Org must have an Infrastructure Provider entity. User must have `FORGE_PROVIDER_ADMIN` authorization role.

Reference: https://docs.nvidia.com/infra-controller/infra-controller/rest-api-reference/api-reference/rack/validate-racks

## OpenAPI Specification

```yaml
openapi: 3.1.0
info:
  title: NCX Infra Controller REST API
  version: 1.0.0
paths:
  /v2/org/{org}/carbide/rack/validation:
    get:
      operationId: validate-racks
      summary: 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 drifted
        components.


        Org must have an Infrastructure Provider entity. User must have
        `FORGE_PROVIDER_ADMIN` authorization role.
      tags:
        - subpackage_rack
      parameters:
        - name: org
          in: path
          required: true
          schema:
            type: string
        - name: siteId
          in: query
          description: ID of the Site
          required: true
          schema:
            type: string
            format: uuid
        - name: name
          in: query
          description: Filter racks by name
          required: false
          schema:
            type: string
        - name: manufacturer
          in: query
          description: Filter racks by manufacturer
          required: false
          schema:
            type: string
        - name: Authorization
          in: header
          description: >-
            ```

            export JWT_BEARER_TOKEN="<jwt-bearer-token>"


            # Example org name: "acme-inc

            export ORG_NAME=<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://carbide-rest-api.carbide.svc.cluster.local/v2/org/$ORG_NAME/carbide/user/current

            ```
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RackValidationResult'
        '400':
          description: Error response when request data cannot be validated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CarbideAPIError'
        '403':
          description: >-
            Error response when user is not authorized to call an endpoint or
            retrieve/modify objects
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CarbideAPIError'
servers:
  - url: https://carbide-rest-api.carbide.svc.cluster.local
components:
  schemas:
    ComponentDiffType:
      type: string
      enum:
        - Unknown
        - Missing
        - Unexpected
        - Drift
      description: 'Type of difference: Unknown, Missing, Unexpected, or Drift'
      title: ComponentDiffType
    BMCInfo:
      type: object
      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
      description: BMC (Baseboard Management Controller) information
      title: BMCInfo
    RackComponent:
      type: object
      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,
            ComponentTypeNvlswitch)
        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
          items:
            $ref: '#/components/schemas/BMCInfo'
          description: BMC (Baseboard Management Controller) entries for the component
        powerState:
          type: string
          description: Current power state of the component
      description: A component within a Rack (e.g. compute node, switch, PDU)
      title: RackComponent
    FieldDiff:
      type: object
      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
      description: A single field difference between expected and actual component state
      title: FieldDiff
    ComponentDiff:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/ComponentDiffType'
          description: 'Type of difference: Unknown, Missing, Unexpected, or Drift'
        id:
          type: string
          format: uuid
          description: RLA internal component UUID
        componentId:
          type: string
          description: Component ID assigned by the component manager service
        expected:
          $ref: '#/components/schemas/RackComponent'
        actual:
          $ref: '#/components/schemas/RackComponent'
        fieldDiffs:
          type: array
          items:
            $ref: '#/components/schemas/FieldDiff'
          description: List of field differences (populated when type is DiffTypeDrift)
      description: A single component difference found during rack validation
      title: ComponentDiff
    RackValidationResult:
      type: object
      properties:
        diffs:
          type: array
          items:
            $ref: '#/components/schemas/ComponentDiff'
          description: List of component differences found during validation
        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
        driftCount:
          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
      description: >-
        Result of validating a rack's components by comparing expected vs actual
        state
      title: RackValidationResult
    CarbideApiErrorSource:
      type: string
      enum:
        - carbide
      description: Source of the error. Only 'carbide' is supported
      title: CarbideApiErrorSource
    CarbideApiErrorData:
      type: object
      properties: {}
      description: Additional data about the error
      title: CarbideApiErrorData
    CarbideAPIError:
      type: object
      properties:
        source:
          $ref: '#/components/schemas/CarbideApiErrorSource'
          description: Source of the error. Only 'carbide' is supported
        message:
          type: string
          description: Message describing the error
        data:
          oneOf:
            - $ref: '#/components/schemas/CarbideApiErrorData'
            - type: 'null'
          description: Additional data about the error
      description: Describes the error response from NCX Infra Controller REST API
      title: CarbideAPIError
  securitySchemes:
    JWTBearerToken:
      type: http
      scheme: bearer
      description: >-
        ```

        export JWT_BEARER_TOKEN="<jwt-bearer-token>"


        # Example org name: "acme-inc

        export ORG_NAME=<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://carbide-rest-api.carbide.svc.cluster.local/v2/org/$ORG_NAME/carbide/user/current

        ```

```

## SDK Code Examples

```python example-no-diffs
import requests

url = "https://carbide-rest-api.carbide.svc.cluster.local/v2/org/org/carbide/rack/validation"

querystring = {"siteId":"siteId"}

payload = {}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.get(url, json=payload, headers=headers, params=querystring)

print(response.json())
```

```javascript example-no-diffs
const url = 'https://carbide-rest-api.carbide.svc.cluster.local/v2/org/org/carbide/rack/validation?siteId=siteId';
const options = {
  method: 'GET',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go example-no-diffs
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://carbide-rest-api.carbide.svc.cluster.local/v2/org/org/carbide/rack/validation?siteId=siteId"

	payload := strings.NewReader("{}")

	req, _ := http.NewRequest("GET", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby example-no-diffs
require 'uri'
require 'net/http'

url = URI("https://carbide-rest-api.carbide.svc.cluster.local/v2/org/org/carbide/rack/validation?siteId=siteId")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{}"

response = http.request(request)
puts response.read_body
```

```java example-no-diffs
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://carbide-rest-api.carbide.svc.cluster.local/v2/org/org/carbide/rack/validation?siteId=siteId")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{}")
  .asString();
```

```php example-no-diffs
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://carbide-rest-api.carbide.svc.cluster.local/v2/org/org/carbide/rack/validation?siteId=siteId', [
  'body' => '{}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp example-no-diffs
using RestSharp;

var client = new RestClient("https://carbide-rest-api.carbide.svc.cluster.local/v2/org/org/carbide/rack/validation?siteId=siteId");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift example-no-diffs
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://carbide-rest-api.carbide.svc.cluster.local/v2/org/org/carbide/rack/validation?siteId=siteId")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

```python example-with-diffs
import requests

url = "https://carbide-rest-api.carbide.svc.cluster.local/v2/org/org/carbide/rack/validation"

querystring = {"siteId":"siteId"}

payload = {}
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.get(url, json=payload, headers=headers, params=querystring)

print(response.json())
```

```javascript example-with-diffs
const url = 'https://carbide-rest-api.carbide.svc.cluster.local/v2/org/org/carbide/rack/validation?siteId=siteId';
const options = {
  method: 'GET',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go example-with-diffs
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://carbide-rest-api.carbide.svc.cluster.local/v2/org/org/carbide/rack/validation?siteId=siteId"

	payload := strings.NewReader("{}")

	req, _ := http.NewRequest("GET", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby example-with-diffs
require 'uri'
require 'net/http'

url = URI("https://carbide-rest-api.carbide.svc.cluster.local/v2/org/org/carbide/rack/validation?siteId=siteId")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{}"

response = http.request(request)
puts response.read_body
```

```java example-with-diffs
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://carbide-rest-api.carbide.svc.cluster.local/v2/org/org/carbide/rack/validation?siteId=siteId")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{}")
  .asString();
```

```php example-with-diffs
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://carbide-rest-api.carbide.svc.cluster.local/v2/org/org/carbide/rack/validation?siteId=siteId', [
  'body' => '{}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp example-with-diffs
using RestSharp;

var client = new RestClient("https://carbide-rest-api.carbide.svc.cluster.local/v2/org/org/carbide/rack/validation?siteId=siteId");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift example-with-diffs
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = [] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://carbide-rest-api.carbide.svc.cluster.local/v2/org/org/carbide/rack/validation?siteId=siteId")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```