device-discovery
Orb device discovery backend
Usage
usage: device-discovery [-h] [-V] [-s HOST] [-p PORT] -t DIODE_TARGET -c DIODE_CLIENT_ID -k DIODE_CLIENT_SECRET [-a DIODE_APP_NAME_PREFIX] [-d] [-o DRY_RUN_OUTPUT_DIR]
[--otel-endpoint OTEL_ENDPOINT] [--otel-export-period OTEL_EXPORT_PERIOD]
Orb Device Discovery Backend
options:
-h, --help show this help message and exit
-V, --version Display Device Discovery, NAPALM and Diode SDK versions
-s HOST, --host HOST Server host
-p PORT, --port PORT Server port
-t DIODE_TARGET, --diode-target DIODE_TARGET
Diode target. Environment variable can be used by wrapping it in ${} (e.g. ${TARGET})
-c DIODE_CLIENT_ID, --diode-client-id DIODE_CLIENT_ID
Diode Client ID. Environment variable can be used by wrapping it in ${} (e.g. ${MY_CLIENT_ID})
-k DIODE_CLIENT_SECRET, --diode-client-secret DIODE_CLIENT_SECRET
Diode Client Secret. Environment variable can be used by wrapping it in ${} (e.g. ${MY_CLIENT_SECRET})
-a DIODE_APP_NAME_PREFIX, --diode-app-name-prefix DIODE_APP_NAME_PREFIX
Diode producer_app_name prefix
-d, --dry-run Run in dry-run mode, do not ingest data
-o DRY_RUN_OUTPUT_DIR, --dry-run-output-dir DRY_RUN_OUTPUT_DIR
Output dir for dry-run mode. Environment variable can be used by wrapping it in ${} (e.g. ${OUTPUT_DIR})
--otel-endpoint OTEL_ENDPOINT
OpenTelemetry exporter endpoint
--otel-export-period OTEL_EXPORT_PERIOD
Period in seconds between OpenTelemetry exports (default: 60)
Policy RFC
policies:
discovery_1:
config:
schedule: "* * * * *" #Cron expression
defaults:
site: New York NY
role: Router
scope:
- hostname: 192.168.0.32/30 #support range
username: ${USER}
password: admin
- driver: eos
hostname: 127.0.0.1
username: admin
password: ${ARISTA_PASSWORD}
optional_args:
enable_password: ${ARISTA_PASSWORD}
discover_once: # will run only once
scope:
- hostname: 192.168.0.34
username: ${USER}
password: ${PASSWORD}
Run device-discovery
device-discovery can be run by installing it with pip
git clone https://github.com/netboxlabs/orb-agent.git
cd orb-agent/orb-discovery/
pip install --no-cache-dir ./device-discovery/
device-discovery -t 'grpc://192.168.0.10:8080/diode' -c '${DIODE_CLIENT_ID}' -k '${DIODE_CLIENT_SECRET}'
Docker Image
device-discovery is built from source into the netboxlabs/orb-agent image
(from orb-discovery/device-discovery in this repo); there is no standalone
device-discovery image. Run it via the agent image, which launches the backend
on demand, or use orb-test-lab for local testing.
Routes (v1)
Get runtime and capabilities information
GET /api/v1/status (gets discovery runtime data)
Parameters
None
Responses
http code content-type response 200application/json; charset=utf-8{"version": "0.1.0","up_time_seconds": 3678 }
Example cURL
curl -X GET -H "Content-Type: application/json" http://localhost:8072/api/v1/status
GET /api/v1/capabilities (gets device-discovery capabilities)
Parameters
None
Responses
http code content-type response 200application/json; charset=utf-8{"supported_drivers":["ios","eos","junos","nxos","cumulus"]}
Example cURL
curl -X GET -H "Content-Type: application/json" http://localhost:8072/api/v1/capabilities
Policies Management
POST /api/v1/policies (Creates a new policy)
Parameters
name type data type description None required YAML object yaml format specified in Policy RFC
Responses
http code content-type response 201application/json; charset=UTF-8{"detail":"policy 'policy_name' was started"}400application/json; charset=UTF-8{ "detail": "invalid Content-Type. Only 'application/x-yaml' is supported" }400application/json; charset=UTF-8Any other policy error 403application/json; charset=UTF-8{ "detail": "config field is required" }409application/json; charset=UTF-8{ "detail": "policy 'policy_name' already exists" }
Example cURL
curl -X POST -H "Content-Type: application/x-yaml" --data-binary @policy.yaml http://localhost:8072/api/v1/policies
DELETE /api/v1/policies/{policy_name} (delete a existing policy)
Parameters
name type data type description policy_namerequired string The unique policy name
Responses
http code content-type response 200application/json; charset=UTF-8{ "detail": "policy 'policy_name' was deleted" }400application/json; charset=UTF-8Any other policy deletion error 404application/json; charset=UTF-8{ "detail": "policy 'policy_name' not found" }
Example cURL
curl -X DELETE http://localhost:8072/api/v1/policies/policy_name
Metadata
Release files for netboxlabs-device-discovery 1.34.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| netboxlabs_device_discovery-1.34.0.tar.gz | 520.9 kB | Details |
Release files / netboxlabs_device_discovery-1.34.0.tar.gz
| Download URL | netboxlabs_device_discovery-1.34.0.tar.gz |
|---|---|
| Size | 520.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3bf2624650e4f0f2443798d3e85360d55088cb66b6a41263690a6f23ed52dc44
|
|
BLAKE2b-256 checksum How to use checksums |
121999636519a9dd5059a3768d065246b748fa2cd28b27528ece672c0cfb1c0a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 12, 2026.
Transparency log