Gather operational facts from supported NetBox Devices
Reason this release was yanked:
is actually the 0.1.0 codebase mislabeled
Project description
NetBox Facts Plugin
Gather operational facts from supported NetBox Devices using NAPALM and store them in NetBox.
- Free software: Apache-2.0
- Documentation: https://jsenecal.github.io/netbox-facts
Features
- 10 collector types: ARP, IPv6 Neighbor Discovery (NDP), Inventory, Interfaces, LLDP, Ethernet Switching Tables, L2 Circuits, EVPN, BGP, and OSPF
- Detect-only mode: Collection plans can produce a report without modifying NetBox objects — changes can be reviewed and selectively applied or skipped
- Auto-scheduling: Interval-based recurring collection via NetBox's JobRunner framework, with priority queues (high/default/low)
- MAC address tracking: Discovered MAC addresses linked to interfaces and IP addresses, with automatic OUI vendor lookup
- REST API: Full CRUD endpoints for MAC addresses, MAC vendors, collection plans, and facts reports
- Optional BGP integration: Works with the netbox-routing plugin for BGP session data
- Vendor-specific NAPALM drivers: Extended Junos driver with enhanced ARP/NDP collection
Compatibility
| NetBox Version | Plugin Version |
|---|---|
| 4.5.x | 0.0.1 |
Installing
For adding to a NetBox Docker setup see the general instructions for using netbox-docker with plugins.
Install with pip:
pip install git+https://github.com/jsenecal/netbox-facts
or by adding to your local_requirements.txt or plugin_requirements.txt (netbox-docker):
git+https://github.com/jsenecal/netbox-facts
For BGP collector support, install with the optional routing extra:
pip install "netbox-facts[routing] @ git+https://github.com/jsenecal/netbox-facts"
Enable the plugin in /opt/netbox/netbox/netbox/configuration.py,
or if you use netbox-docker, your /configuration/plugins.py file:
PLUGINS = [
"netbox_facts",
]
PLUGINS_CONFIG = {
"netbox_facts": {
"top_level_menu": True,
"napalm_username": "",
"napalm_password": "",
"global_napalm_args": {},
"valid_interfaces_re": r"<your-interface-regex>",
},
}
Configuration Options
| Setting | Type | Default | Description |
|---|---|---|---|
top_level_menu |
bool | True |
Show plugin as a top-level menu item instead of under Plugins |
napalm_username |
str | "" |
Default NAPALM username for device connections |
napalm_password |
str | "" |
Default NAPALM password for device connections |
global_napalm_args |
dict | {} |
Additional arguments passed to all NAPALM driver instances |
valid_interfaces_re |
str | ".*" |
Regex to filter which interfaces are processed |
job_timeout |
int | 1800 |
Maximum RQ job runtime in seconds (30 min default) |
napalm_timeout |
int | 60 |
NAPALM connection timeout in seconds |
Per-Plan Credentials
Each Collection Plan has a NAPALM arguments JSON field that is merged on top of global_napalm_args. You can override the username and password for a specific plan by including username and password keys:
{
"username": "collector-user",
"password": "collector-pass"
}
These keys are extracted before the remaining args are passed through to NAPALM's optional_args, so they won't interfere with driver options.
Connection Target
Each Collection Plan has a Connection target setting that controls which device IP address is used to connect:
| Option | Behavior |
|---|---|
| Primary IP (default) | Connect using the device's primary IP address |
| OOB IP | Connect using the device's out-of-band management IP |
| Primary IP, then OOB | Try primary IP first; on connection failure, fall back to OOB IP |
| OOB IP, then Primary | Try OOB IP first; on connection failure, fall back to primary IP |
The "both" options are useful when devices are reachable via either path depending on network conditions. Each connection attempt is logged with the IP address and type being used.
Developing
VSCode + Docker + Dev Containers
To develop this plugin further one can use the included .devcontainer configuration. This creates a Docker container with a fully working NetBox installation.
- Install the Dev Containers extension (
ms-vscode-remote.remote-containers) in VS Code - Use Dev Container: Clone Repository in Container Volume to clone this repository
- Inside the container, run
make allto set up and launch the NetBox instance
Your NetBox instance will be served at 0.0.0.0:8008 (accessible via localhost:8008).
Key Commands
make all # Full setup (install + migrations + static files + sample data + launch)
make rebuild # Rebuild without reinitializing sample data
make setup # Install plugin in editable mode
make migrations # Generate new migrations
make migrate # Apply migrations
make test # Run test suite (migration check + Django tests)
make runserver # Start dev server
make nbshell # Interactive NetBox shell
Credits
This package was created with Cookiecutter and the netbox-community/cookiecutter-netbox-plugin project template.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file netbox_facts-0.0.1.tar.gz.
File metadata
- Download URL: netbox_facts-0.0.1.tar.gz
- Upload date:
- Size: 206.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1256b1d5508ae4df05b7c779603b9efee4b15721b6ff1171c097d9fee6b362d8
|
|
| MD5 |
f21cf609c744480e11a6d7166b1ef519
|
|
| BLAKE2b-256 |
05fa1a0b28dee5a5ad3da0092ac3513ebd3494910a27369f7d2ab62814864e8b
|
Provenance
The following attestation bundles were made for netbox_facts-0.0.1.tar.gz:
Publisher:
publish.yml on jsenecal/netbox-facts
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
netbox_facts-0.0.1.tar.gz -
Subject digest:
1256b1d5508ae4df05b7c779603b9efee4b15721b6ff1171c097d9fee6b362d8 - Sigstore transparency entry: 1397108324
- Sigstore integration time:
-
Permalink:
jsenecal/netbox-facts@e9d376e430959e8d0534688021b1e7e65cbf68cd -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/jsenecal
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e9d376e430959e8d0534688021b1e7e65cbf68cd -
Trigger Event:
release
-
Statement type:
File details
Details for the file netbox_facts-0.0.1-py3-none-any.whl.
File metadata
- Download URL: netbox_facts-0.0.1-py3-none-any.whl
- Upload date:
- Size: 121.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
07a5bc13bacd2f6d333e3c20377f3c0ccdf08cd4d0396fe2768659c181e87056
|
|
| MD5 |
0a5488b3e67a4f4bea98a0655e21ab0d
|
|
| BLAKE2b-256 |
164635ad8f84c48c8ffca2c3b38c95df421b0175ae98fd38f97c633e66716474
|
Provenance
The following attestation bundles were made for netbox_facts-0.0.1-py3-none-any.whl:
Publisher:
publish.yml on jsenecal/netbox-facts
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
netbox_facts-0.0.1-py3-none-any.whl -
Subject digest:
07a5bc13bacd2f6d333e3c20377f3c0ccdf08cd4d0396fe2768659c181e87056 - Sigstore transparency entry: 1397108356
- Sigstore integration time:
-
Permalink:
jsenecal/netbox-facts@e9d376e430959e8d0534688021b1e7e65cbf68cd -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/jsenecal
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e9d376e430959e8d0534688021b1e7e65cbf68cd -
Trigger Event:
release
-
Statement type: