Releases: bonzo81/netbox-librenms-plugin
v0.4.5
Bug Fix Release
Fix for the VLAN group selection modal on the interface sync page not closing when clicking the close button, cancel button, save button, or clicking outside the modal. This was a bug in v0.4.4.
Fixes
- Fix VLAN group modal not closing on dismiss/backdrop click (#271)
- Align
showModal()/hideModal()withModalManagerpattern fromlibrenms_import.js— try Bootstrap 5 native first, fall back to manual DOM manipulation - Prevent stacking backdrop click handlers on repeated
showModal()calls
Upgrade note
- Remember to run the
collectstaticcommand during the update process. No database migrations in this release.
All Changes
v0.4.4
New Features
- Multi-Server Custom Field Support
- Track device origin per LibreNMS server with a new JSON-based
librenms_idcustom field. - Migration from legacy integer format handled automatically.
- Track device origin per LibreNMS server with a new JSON-based
- Auto-Create Custom Field
- The
librenms_idcustom field is now automatically created viapost_migratesignal — no manual setup needed.
- The
- LibreNMS Sync Page Naming Preferences
use_sysnameandstrip_domainsettings are now applied to device name matching on sync pages.
Upgrade note
- Remember to run the
collectstaticand themigratecommand during the update process.
Enhancements
- VC Import Enhancements — Improved stack VC permission enforcement before import.
- Cable Sync Improvements — Match by
local_port_idinstead of display name; strip stale fields on cable verify POST. - VM Sync — Skip
device_typecheck for VMs; addsync_platformto VM supported actions. - Server-Key Propagation — UI polish and view hardening across the multi-server import pipeline.
- Migration Simplification — Always revert to integer; gracefully handle non-integer custom field types.
Security
- URL-encode
server_keyin redirects to prevent injection (#254) - Reject
librenms_id<= 0 (#254) - CSRF safety improvements (#253)
- XSS label escaping in cable verify (#242)
Fixes
- Fix VC master detection, 0-based position correction, and import propagation (#257)
- Fix VC verify view crash by using
get_librenms_sync_device()in verify views (#247) - Fix cables view caching and
interface_name_fieldper-request (#242) - Fix import validation, template bugs, and pagination (#259)
- Guard
dt_matchNone on ambiguous hardware match (#244) - Restore multi-key naming preferences and early-exit on missing name (#248)
- Handle non-integer
librenms_idcustom field types in migrations (#256)
Internal / Development
- Expanded test coverage with new test files and reorganized test structure (#253)
- Smoke tests, integration tests, and mock LibreNMS server (#243)
- Add
pytest-covcoverage report — no gating (#241) - Updated pre-commit hooks, ruff config, and uv Dependabot (#241)
- Bump GitHub Actions: upload-artifact, download-artifact, pypi-publish (#250, #263, #265
All Changes
- feat: auto-create librenms_id custom field via post_migrate signal by @marcinpsk in #221
- refactor: split import_utils.py into a package by @marcinpsk in #235
- chore: update pre-commit hooks, ruff config, and add uv dependabot by @marcinpsk in #241
- fix: cables view per-request interface_name_field, LibreNMSAPIMixin wiring, librenms_id normalization by @marcinpsk in #242
- tests: add smoke tests, integration tests, and mock LibreNMS server by @marcinpsk in #243
- fix: code quality, security hardening, and test coverage improvements by @marcinpsk in #244
- feat: multi-server librenms_id — track device origin per LibreNMS server by @marcinpsk in #245
- fix: vc verify views crash when no member has primary_ip by @bonzo81 in #247
- Use naming preferences for device name matching on sync page by @bonzo81 in #248
- chore(deps): bump actions/download-artifact in the github-actions group by @dependabot in #250
- tests: expand test coverage (split 1/3 from #246) by @marcinpsk in #253
- fix: security and correctness hardening (split 2/3 from #246) by @marcinpsk in #254
- fix: server_key propagation, UI polish, and view hardening (split 3/3 from #246) by @marcinpsk in #255
- fix(migrations): handle non-integer librenms_id custom field types by @marcinpsk in #256
- fix: VC master detection, 0-based position correction, and import propagation by @bonzo81 in #257
- refactor(js): extract showModal/hideModal helpers by @marcinpsk in #258
- fix: code quality improvements and bug fixes by @marcinpsk in #259
- Missing echo in docs - Update README.md by @sorano in #262
- chore(deps): bump pypa/gh-action-pypi-publish in the github-actions group by @dependabot in #263
- chore(deps): bump actions/upload-artifact in the github-actions group by @dependabot in #265
- docs: update documentation for 0.4.4 release by @bonzo81 in #267
Contributors
- Thanks @sorano for first contribution in #262
- Thanks @marcinpsk for continued improvements and contributions
v0.4.3
New Features
- Plugin Permissions
- The plugin now strictly adheres to Netbox user permissions for the creation or updating of Netbox objects.
- New plugin-level (
view/change) access control. Allow/restrict plugin use with 'view'. Allow/restrict ability to sync data via plugin with 'change'
Please read the permission docs to ensure any regular (non superusers) users have the correct access.
- VLAN Sync
- New VLANs tab to sync device VLAN data to Netbox objects with VLAN group selection.
- Interface sync now includes VLAN data - tagged and untagged
Enhancements
- Serial Number Matching & Conflict Resolution — Import detects serial
number matches and guides users through device conflict resolution. - Per-User Preferences — Persistent user preferences for import
toggles and interface name field selection. - Device Identity Mismatch Detection — Informational modal on sync
pages when the device name differs between NetBox and LibreNMS. - SNMPv1 Support — SNMPv1 option added to the LibreNMS add-device form.
- Empty State Cards — Friendly empty states on sync tabs when no data
is available. - Naming Preferences in Validation —
use_sysnameandstrip_domain
settings are now honoured during import validation, with badge indicators.
Security
- XSS escaping, input validation, and safety improvements (#225)
- Open-redirect prevention via HTTP_REFERER validation (#213)
- VC member validation hardening (#225)
Fixes
- Fix KeyError for missing non-default server keys in LibreNMSAPI (#220)
- Fix device name mismatch blocking sync (#230)
- Restore browser credential saving on SNMP forms (#204)
- Fix device redirect URL and inaccurate docstrings (#224)
- Block import when validation issues are present; fix modal titles
Internal / Development
- Comprehensive CI workflow with GitHub Actions, pytest, ruff (#208, #232)
- GitHub Actions pinned to commit SHAs with Dependabot (#232)
- Docstrings added across models, tables, views, forms, and API (#226)
- Code deduplication and refactoring (#224)
- DevContainer refactor with proxy/MITM support and diagnostic tooling (#218, #219, #234)
All Changes
- Remove autocomplete=off from SNMP forms to restore browser credential saving by @bonzo81 in #204
- Fix/formatting by @bonzo81 in #207
- Test/ci workflow by @bonzo81 in #208
- Feature/snmpv1-support by @bonzo81 in #209
- chore: update copilot instructions with permission and background job patterns by @bonzo81 in #214
- feat: add two-tier permission system with plugin and object-level access control by @bonzo81 in #213
- docs: add docstrings to models, tables, views, forms, and API modules by @marcinpsk in #226
- fix: raise KeyError for missing non-default server keys in LibreNMSAPI by @marcinpsk in #220
- feat: add empty state cards for sync tabs by @marcinpsk in #223
- feat: add proxy/MITM support for devcontainer by @marcinpsk in #218
- feat: VLAN sync — Device VLAN sync with VLAN group selection and Interface sync VLAN data by @bonzo81 in #229
- Fix: sync view mismatch by @marcinpsk in #230
- fix: security hardening — XSS escaping, input validation, and safety … by @marcinpsk in #225
- refactor: devcontainer script improvements and alias consolidation by @marcinpsk in #219
- feat: per-user preference persistence for import toggles and interfac… by @marcinpsk in #222
- develop to master release prep by @bonzo81 in #233
- Fix/ci workflow by @marcinpsk in #232
- refactor: code deduplication and minor bug fixes by @marcinpsk in #224
- fix: devcontainer script hardening and cleanup by @marcinpsk in #234
- feat: serial number matching and device conflict resolution by @marcinpsk in #227
New Contributors
Big thanks to @marcinpsk for considerable contributions
v0.4.2
v0.4.1
v0.4.0
NetBox LibreNMS Plugin v0.4.0
New Feature
This release introduces a new feature to simplify the process of onboarding LibreNMS devices into NetBox. Hopefully this helps your LibreNMS/NetBox integration and saves you time. It's been a big piece of work that I have tested extensively but as always, please report any bugs or use the Github discussions to suggest any improvements.
The new LibreNMS Import page has the following key features:
- Filtering - Find devices in LibreNMS using flexible filter criteria including location, type, operating system, hostname, system name, and hardware model
- Validation - Automatic matching of Sites, Device Types, and Platforms with clear visual feedback for missing objects
- Device or VM Import - Import of physical devices requires Site, Device Type, Role or virtual machines requires Cluster
- Virtual Chassis Detection - Automatic detection and creation of Virtual Chassis objects for stackable switches
- Device Naming settings - Set naming conventions for devices and for virtual chassis members during import in plugin settings.
- Background Job Processing - Large device imports can run as NetBox background jobs with cancellation support
- Caching - Search results are cached for repeated use with expiration countdown timers and manual refresh controls
Upgrade note
There is a new javascript file for the LibreNMS import feature. Remember to run the collectstatic command during the update process.
What's Changed
- Implement bulk import workflow with background job support #161
- Refactor JavaScript file functionality and structure #162
- Enhance VC detection and caching logic #163
- refactor: Remove unused create_device_from_librenms function #166
- Fix JavaScript initialization and HTMX event listener issues #167
- Fix dropdown overflow in device import table #168
- Improve filter instructions with background job notes #169
- Enforce filter requirement on import search #170
- Add background job support for device imports #172
- Replace threshold-based background job system with user-controlled checkboxes #173
- Feature/cache-expiration-countdown #175
- Fix cache metadata storage and retrieval for countdown timer #176
- feature/add-server-display-to-import-page #177
- Extract cache key helper and fix multi-server cache isolation #178
- refactor/dynamic-cache-timeout #179
- feature/import-table-sorting #180
- Fix import settings not saving when selected_server is invalid #181
- Add hardware filter to LibreNMS device import #182
- Add cached search management and code cleanup #184
- Refactor settings page: replace fetch with HTMX and simplify JavaScript #185
- Improve logging patterns and documentation #186
- Cache Cluster and DeviceRole queries to prevent connection exhaustion #187
- Refactor/remove-dead-import-result-view #189
- Refactor modal management: eliminate duplication and remove jQuery #190
Documentation
- docs: improve readability and organization #174
- Docs/clarify-cache-includes-netbox-data #183
- docs: improve import documentation for caching, search, and workflow #188
Development
v0.3.18
v0.3.17
v0.3.16
Release v0.3.16
Device Field Synchronization
You can now synchronize device information from LibreNMS to NetBox with side-by-side comparison and one-click sync:
- Serial Number Sync - Pull device serial numbers from LibreNMS to NetBox
- Device Type Matching - Match LibreNMS hardware strings to NetBox DeviceTypes (supports exact and slug matching)
- Platform Sync - Match LibreNMS OS information to NetBox Platforms, with the ability to create new platforms on-the-fly
- Virtual Chassis Serials - Retrieve all chassis serial numbers from LibreNMS inventory and assign them to individual virtual chassis members through an easy-to-use modal interface
Virtual Machine Enhancements
- Enhanced the LibreNMS status card for Virtual Machines to display more information including OS, version, hardware, and features
Virtual Chassis Improvements
- Fixed device matching for virtual chassis devices with VC member suffixes in their hostnames (#146)
- Enhanced virtual chassis sync device selection logic with better priority handling
- Improved member selection and validation throughout the plugin
Interface Mapping Improvements
- Added the ability to bulk import interface type mappings, making it quicker to configure interface type mappings (#147)
- Added description field to Interface mapping to help understand purpose of each mapping.
Bug Fixes
- Fixed
FieldErrorforlibrenms_statusfield on device and VM status pages that occurred in certain NetBox configurations (#141)
Development
- GitHub DevContainer Setup - Added a complete development container configuration for quick setup (#140)
- One-click development environment in VS Code or GitHub Codespaces
- Pre-configured NetBox instance with PostgreSQL and Redis
Documentation
- Updated README files with comprehensive documentation of the new device field sync features
- Added temporary notice about LibreNMS location latitude/longitude sync API issue
- Enhanced virtual chassis documentation with clearer usage instructions
- Added example Interface Mapping YAML import
Pull Requests Included
- #140 - Add GitHub DevContainer setup
- #141 - Fix FieldError for librenms_status on device/VM status pages
- #144 - Update develop branch
- #146 - Fix Virtual Chassis device matching with LibreNMS for devices with VC member suffixes
- #147 - Bulk Interface Mapping Import, Improve Virtual Chassis Logic, Docs Update
- #148 - Add device field synchronization and VM information display
- #149 - docs: update README with device field sync details