Dynamic configuration files and images from NetBox.
Project description
Netbox Ninja Plugin
A NetBox plugin for generating dynamic text files and images using Jinja2 templates.
Overview
Netbox Ninja Plugin enables dynamic content generation in NetBox through Jinja2 templates. It supports both text file generation and SVG image creation from draw.io XML templates, seamlessly integrating with NetBox's data model.
graph LR
DATA[Any data in Netbox] --> TEMPLATE[Ninja template]
TEMPLATE --> DRAWIO[Drawio file]
DRAWIO[Drawio file] --> SVG[SVG image]
TEMPLATE --> JSON[JSON file]
TEMPLATE --> TEXT[Generic text]
SVG --> NBUI[Netbox UI]
JSON --> NBUI[Netbox UI]
TEXT --> NBUI[Netbox UI]
SVG --> API[Netbox API]
JSON --> API[Netbox API]
TEXT --> API[Netbox API]
Output files can be seen via Netbox UI and accessed via API.
Example of automatically generated network diagram:
See video introduction in Youtube.
Note: This plugin is currently in beta. While it's functional, some features are still under development and the API may change in future releases.
Use cases
Netbox Ninja Plugin can be used to generate always up-to-date outputs for many use cases including (but not limited to) following:
- Network diagrams
- Any other visualization of any Netbox data
- Configuration files for others systems to fetch from Netbox
- Any other text based output for any purpose
Key Features
- Dynamic text file generation using Jinja2 templates
- Template-based SVG image generation from draw.io XML format
- Direct integration with NetBox's data model
- REST API endpoints for template management
- Support for object-specific template rendering
- Show output in Ninja tab in chosen Netbox object view (i.e. Site)
- Tempalate rendered per object (i.e for each Site)
- Per-template dropdown filters on Ninja tab templates (object type + string filters)
Requirements
- NetBox v4.0.11 - v4.5.x
- drawio-export-api Docker container. Optional, required for SVG images that need to be fetched through REST API.
Compatibility
Plugin versions listed below have been tested with its corresponding NetBox version.
| NetBox Version | Plugin Version | draw.io / diagrams.net version |
|---|---|---|
| 4.5.x | 0.2.1 | 29.5.2 |
| 4.5.x | 0.2.0 | 29.5.2 |
| 4.4.0 - 4.4.10 | 0.1.15 | 29.5.2 |
| 4.4.0 - 4.4.10 | 0.1.14 | 29.5.2 |
| 4.4.0 - 4.4.7 | 0.1.13 | 27.1.0 |
| 4.2.3 - 4.3.7 | 0.1.12 | 27.1.0 |
| 4.2.3 - 4.3.7 | 0.1.11 | 27.1.0 |
| 4.2.3 - 4.3.6 | 0.1.10 | 27.1.0 |
| 4.0.11 - 4.3.2 | 0.1.9 | 27.1.0 |
Test Ninja in Codespaces
The quickest way to test Ninja is using GitHub Codespaces:
- Click the "Code" button on the repository and select "Create codespace on main"
- Once your Codespace is ready, run
make demo_environmentin the terminal - Access the development environment at http://localhost:8000 with credentials admin/admin
Quick Start
- Install the plugin:
pip install netbox-ninja-plugin
- Add to NetBox configuration:
PLUGINS = [
'netbox_ninja_plugin',
]
- Configure the plugin (see CONFIGURATION.md for detailed options):
PLUGINS_CONFIG = {
"netbox_ninja_plugin": {
"target_models": {
"dcim": ["device", "interface", "site", "region"],
"ipam": ["prefix"],
},
"jinja_model_querysets": {
"dcim": ["device", "interface", "site", "region"],
"ipam": ["prefix"],
},
"filter_variable_prefix": "filter_",
"drawio_export_api": {
"enabled": True,
"url": "https://drawio-export-api:443/svg",
"token": "your-token",
"pem_file_path": "/path/to/drawio_export_api.pem",
"verify_tls": True,
"timeout": 60,
},
"top_level_menu": False,
}
}
Usage
Template Creation
- Navigate to NetBox's Ninja Templates section
- Create a new template with:
- Name: Template identifier
- Output type: Text or Draw.io format
- Object types: NetBox objects to associate with the template
- Object type filters: Adds dropdown filters on the Ninja tab for templates (based on selected object types)
- String filters: Adds dropdowns on the Ninja tab for reusable string filter options
- Template code: Your Jinja2 template
Template Variables
- Access NetBox objects using object queries, e.g.
{{ sites.first() }}or{{ regions.get(slug='region1') }} - For object-specific templates, use
{{ target_object }}to reference the current object - Ninja tab dropdown filter selections are exposed to templates as Jinja variables.
- Variable names use
filter_variable_prefix(default:filter_), e.g.{{ filter_sites }}. - Object type filter variables receive a queryset of the selected objects (or
Nonewhen no selection is made). - String filter variables receive a list of the selected option values (or
Nonewhen nothing is selected).
- Variable names use
- Filter selections persist via query parameters while the page is open, and each template card has its own scoped reset.
For detailed examples and use cases, see EXAMPLES.md.
Security Note
The plugin currently doesn't enforce object-level permissions in templates. Exercise caution when exposing data through templates, as users may access data beyond their normal permissions.
Documentation
- Examples - Detailed usage examples and tutorials
- Configuration - Detailed configuration options and examples
License
This project is licensed under the MIT License - see the LICENSE file for details.
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_ninja_plugin-0.2.1.tar.gz.
File metadata
- Download URL: netbox_ninja_plugin-0.2.1.tar.gz
- Upload date:
- Size: 771.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9ec9fa6a024313a925939587ff0b4c79f70042af3a595c265d2f57c64b00c2c2
|
|
| MD5 |
515a1226015cc571612dd20b90621d98
|
|
| BLAKE2b-256 |
ba3132c745ca38718fa6bf909e00ea0f179c287c9c68caa9d0bfb5df9100a634
|
File details
Details for the file netbox_ninja_plugin-0.2.1-py3-none-any.whl.
File metadata
- Download URL: netbox_ninja_plugin-0.2.1-py3-none-any.whl
- Upload date:
- Size: 788.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3f87ab04e7d26a4d3a676250a28285de5cee681cae15fd2d5ef7fb9d13fdaac0
|
|
| MD5 |
7274dae9f86936fba2edc8528dd74838
|
|
| BLAKE2b-256 |
6d98dfa7acb357490da0c5a06cf0d8455c91f1d6646a50cd019665f9e6bad6c5
|