Files
framework-ignition-docker/.claude/commands/ignition-configure.md
2026-03-17 13:23:56 -05:00

5.4 KiB

ignition-configure

Use this skill whenever the user asks you to configure, inspect, or manage the Ignition gateway via the HTTP API — adding connections, importing tags, checking status, managing modules, etc.

Setup: Resolve token and host

  1. Read docker/.env for GATEWAY_HOSTNAME (default: localhost:8088)
  2. Read ~/.config/ignition-dev/secrets.env for IGNITION_API_TOKEN (format: name:token)
    • Fall back to asking the user if not found
  3. Set shell variables for all subsequent calls:
TOKEN=$(grep IGNITION_API_TOKEN ~/.config/ignition-dev/secrets.env | cut -d= -f2)
GW="http://$(grep GATEWAY_HOSTNAME docker/.env | cut -d= -f2- || echo 'localhost:8088')"
HEADER="X-Ignition-API-Token: $TOKEN"

Step 1: Confirm gateway is reachable

Always check before making changes:

curl -s -H "$HEADER" $GW/data/api/v1/overview | python3 -m json.tool

If this fails, check docker compose ps and gateway logs before proceeding.

Step 2: Inspect current state

Before creating or modifying anything, read what's already there:

# Gateway connections overview
curl -s -H "$HEADER" $GW/data/api/v1/overview/connections | python3 -m json.tool

# Any critical problems
curl -s -H "$HEADER" $GW/data/api/v1/overview/problems | python3 -m json.tool

Common Configuration Tasks

Add a database connection

# First — describe the schema to see available props
curl -s -H "$HEADER" $GW/data/api/v1/resources/type/ignition/database-connection | python3 -m json.tool

# Create
curl -s -X POST -H "$HEADER" -H "Content-Type: application/json" \
  $GW/data/api/v1/resources/ignition/database-connection \
  -d '{
    "name": "ignition_db",
    "enabled": true,
    "props": {
      "ConnectURL": "jdbc:postgresql://postgres:5432/ignition",
      "Username": "ignition",
      "Password": "'"$POSTGRES_PASSWORD"'"
    }
  }'

# Verify
curl -s -H "$HEADER" $GW/data/api/v1/resources/find/ignition/database-connection/ignition_db | python3 -m json.tool

Add an OPC connection (Modbus or AB PLC)

# Describe schema first
curl -s -H "$HEADER" $GW/data/api/v1/resources/type/ignition/opc-connection | python3 -m json.tool

# Create
curl -s -X POST -H "$HEADER" -H "Content-Type: application/json" \
  $GW/data/api/v1/resources/ignition/opc-connection \
  -d '{
    "name": "modbus-sim-pumps",
    "enabled": true,
    "props": {
      "EndpointUrl": "opc.tcp://modbus-sim-pumps:4840",
      "SecurityPolicy": "None",
      "MessageSecurity": "None"
    }
  }'

Add an OPC-UA device

# List available device types
curl -s -H "$HEADER" $GW/data/api/v1/resources/type/com.inductiveautomation.opcua/device | python3 -m json.tool

# Create
curl -s -X POST -H "$HEADER" -H "Content-Type: application/json" \
  $GW/data/api/v1/resources/com.inductiveautomation.opcua/device \
  -d '{ "name": "MyDevice", "enabled": true, "props": { ... } }'

Modify an existing resource

Always GET first to obtain the current signature:

# Step 1: Get current config and signature
RESOURCE=$(curl -s -H "$HEADER" $GW/data/api/v1/resources/find/ignition/database-connection/ignition_db)
SIG=$(echo $RESOURCE | python3 -c "import json,sys; print(json.load(sys.stdin)['signature'])")

# Step 2: Modify (include signature in body)
curl -s -X PUT -H "$HEADER" -H "Content-Type: application/json" \
  $GW/data/api/v1/resources/ignition/database-connection \
  -d "{\"name\": \"ignition_db\", \"signature\": \"$SIG\", \"props\": { ... }}"

Import tags

# Export first (to see current state or create a template)
curl -s -H "$HEADER" \
  "$GW/data/api/v1/tags/export?provider=default&path=Devices&recursive=true" \
  -o tags-export.json

# Import (collisionPolicy: Abort | Overwrite | Ignore | MergeOverwrite | MergeIgnore)
curl -s -X POST -H "$HEADER" -H "Content-Type: application/json" \
  "$GW/data/api/v1/tags/import?provider=default&path=Devices&collisionPolicy=MergeOverwrite" \
  -d @tags-export.json

Download a backup

curl -s -H "$HEADER" \
  "$GW/data/api/v1/backup" \
  -o "gateway-$(date +%Y%m%d-%H%M%S).gwbk"

After Making Changes — Scan to Sync

After editing files in ignition/project/:

curl -s -X POST -H "$HEADER" $GW/data/api/v1/scan/projects

After editing files in docker/gw-config/:

curl -s -X POST -H "$HEADER" $GW/data/api/v1/scan/config

Check scan status:

curl -s -H "$HEADER" $GW/data/api/v1/scan/projects | python3 -m json.tool
curl -s -H "$HEADER" $GW/data/api/v1/scan/config | python3 -m json.tool

Gateway Restart ⚠️

Never restart without explicit user confirmation. Check for pending tasks first:

# Check what requires a restart
curl -s -H "$HEADER" $GW/data/api/v1/restart-tasks/pending | python3 -m json.tool

# Restart (confirm=true required — disruptive to all active sessions)
curl -s -X POST -H "$HEADER" "$GW/data/api/v1/restart-tasks/restart?confirm=true"

Logs and Diagnostics

# Recent warnings and errors
curl -s -H "$HEADER" "$GW/data/api/v1/logs?minLevel=WARN&limit=50" | python3 -m json.tool

# Logs for a specific logger
curl -s -H "$HEADER" "$GW/data/api/v1/logs?logger=IgnitionGateway&limit=25" | python3 -m json.tool

# Audit trail
curl -s -H "$HEADER" "$GW/data/api/v1/audit/log/Audit?limit=25" | python3 -m json.tool

Reference

Full API reference: ignition/ignition-api.md Live spec: http://localhost:8088/openapi