Prerequisites#

Before implementing grid integration with DPS NvGrid, ensure the following are in place.

DPS Infrastructure#

Required infrastructure:

  • DPS server running and accessible with NvGrid service enabled

  • Active topology with datacenter entities configured

  • Power policies and resource groups defined

  • Authentication credentials configured for API access

Verification:

In DPS 0.9, the topology must be active before running dpsctl check connection. Confirm the active topology before testing BMC connectivity:

# List topologies
dpsctl topology list

# Verify NvGrid service
dpsctl --host api.dps --port 443 --insecure-tls-skip-verify nvgrid get-metadata

# Test API connectivity
dpsctl --host api.dps --port 443 --insecure-tls-skip-verify check connection

# Test with grpcurl (optional)
grpcurl -insecure api.dps:443 nvidia.dcpower.v1.NvGrid/GetStatus

Webhook Security Configuration#

Configure webhook URL whitelist to control which endpoints can receive power event notifications.

Server Configuration:

Add authorized webhook URLs to DPS Helm values:

# values.yaml
dps:
  nvgrid:
    webhook:
      whitelist:
        - "https://grid-solution.example.com/nvgrid/webhook"
        - "https://monitoring.example.com/api/"
        - "http://localhost:8080/"
        - "http://host.docker.internal:8181"
      concurrency: 32
      callTimeout: 1m

Apply configuration:

helm upgrade dps ./helm/dps \
  --namespace dps \
  --values values.yaml \
  --reuse-values

Whitelist Validation:

  • RegisterWebhook API validates URLs against whitelist during registration

  • Non-whitelisted URLs are rejected with error: “webhook URL not whitelisted”

  • Failed validation attempts are logged for security auditing

Whitelist Matching Rules:

The whitelist supports flexible URL matching patterns:

dps:
  nvgrid:
    webhook:
      whitelist:
        # Exact URL match
        - "https://grid.example.com/webhook"
        # Path prefix match (allows any path under /api/)
        - "https://grid.example.com/api/"
        # Development endpoints
        - "http://localhost:8080/"
        - "http://127.0.0.1:8080/"
        - "http://host.docker.internal:8181"

Matching Components:

  • Scheme: Must match (http vs https)

  • Hostname: Must match exactly

  • Port: Must match (443 vs 8080)

  • Path: Prefix matching supported (trailing / matches all sub-paths)

  • Query Parameters: Whitelisted params must be present in request URL

  • Fragment: Must match if specified

Example:

Whitelist: https://grid.example.com/api/

  • ✅ Matches: https://grid.example.com/api/webhooks/nvgrid

  • ✅ Matches: https://grid.example.com/api/v1/power

  • ❌ Rejected: https://grid.example.com/other/path

  • ❌ Rejected: http://grid.example.com/api/ (scheme mismatch)

  • ❌ Rejected: https://grid.example.com:8080/api/ (port mismatch)


Development Environment#

Required development tools:

  • gRPC development tools for chosen programming language

  • Protocol buffer compiler for message generation

  • DPS API definitions accessible from api/v1/nvgrid.proto

Client code generation:

# Python
python3 -m grpc_tools.protoc \
  -I ./api/v1 \
  --python_out=./generated \
  --grpc_python_out=./generated \
  ./api/v1/nvgrid.proto

# Go
protoc --go_out=. --go-grpc_out=. api/v1/nvgrid.proto

Testing Infrastructure#

Testing environment requirements:

  • DPS simulator environment running

  • Test topology with representative hardware configuration

  • Webhook endpoint for receiving power event notifications

Simulator Environment:

The DPS simulator environment includes BMC and BCM simulators that emulate hardware responses for testing.


Next Steps#

With prerequisites in place, proceed to:

  1. Core Concepts - Understand architectural principles

  2. API Specification - Review API methods and messages

  3. Managing Power Constraints - Schedule load targets

  4. Monitoring Power Events - Implement webhook receivers