Nautobot Integration

Nautobot serves as the authoritative device inventory source for DPS, allowing operators to import physical devices directly from their existing DCIM into DPS for power management. If enabled, DPS can query Nautobot’s REST API on demand to discover devices by location, rack, or device type and map them into DPS entities.

Prerequisites

  • A running Nautobot instance reachable from the DPS pod (HTTP or HTTPS).
  • dps.nautobot.enabled: true in your Helm values.
  • A Nautobot API token with read access to DCIM, stored in a Kubernetes Secret and referenced via dps.nautobot.tokenSecret.

How DPS Integrates with Nautobot

flowchart LR
    DPS_UI["DPS UI"] -->|gRPC| DPS_Server["DPS Server"]
    dpsctl["dpsctl (CLI)"] -->|gRPC| DPS_Server
    DPS_Server -->|REST API| Nautobot["Nautobot"]

DPS can import devices from Nautobot on demand through either the DPS UI or the dpsctl CLI. When triggered, the DPS server receives an import request over gRPC, then uses its built-in Nautobot client to query the Nautobot REST API with the specified filters. Nautobot responds with the matching devices from its DCIM database, and DPS automatically maps these devices into entities for power management.

Configuration Steps

Refer to the Deployment Guide for how to configure Nautobot

Troubleshooting

1. Verify Helm values are set correctly

helm get values <release> -n <namespace> | grep -A 10 nautobot

Confirm enabled: true, url is non-empty and includes the scheme (https://), and either tokenSecret.existingSecret or tokenSecret.secretName is set

2. Confirm the token Secret exists in the cluster

kubectl get secret <secret-name> -n <namespace>
kubectl get secret <secret-name> -n <namespace> -o jsonpath='{.data.token}' | base64 -d

The decoded value should be a non-empty Nautobot API token.

3. Test connectivity to Nautobot from the DPS pod network namespace

Deploy an ephemeral container sharing the same network namespace:

kubectl debug -it -n <namespace> <dps-pod> \
  --image=curlimages/curl \
  --target=dps-server -- \
  curl -sf -H "Authorization: Token <token>" \
   https://nautobot.company.com/

A non-200 response indicates a network configuration preventing DPS from reaching the Nautobot REST API

4. Check DPS server logs for startup connectivity errors

kubectl logs -n <namespace> <dps-pod> | grep -i nautobot