IP address management (IPAM) and data center infrastructure management (DCIM) tool.

Overview

NetBox

NetBox is an IP address management (IPAM) and data center infrastructure management (DCIM) tool. Initially conceived by the network engineering team at DigitalOcean, NetBox was developed specifically to address the needs of network and infrastructure engineers. It is intended to function as a domain-specific source of truth for network operations.

NetBox runs as a web application atop the Django Python framework with a PostgreSQL database. For a complete list of requirements, see requirements.txt. The code is available on GitHub.

The complete documentation for NetBox can be found at Read the Docs.

Discussion

  • GitHub Discussions - Discussion forum hosted by GitHub; ideal for Q&A and other structured discussions
  • Slack - Real-time chat hosted by the NetDev Community; best for unstructured discussion or just hanging out
  • Google Group - Legacy mailing list; slowly being replaced by GitHub discussions

Build Status

status
master Build status
develop Build status

Screenshots

Screenshot of main page


Screenshot of rack elevation


Screenshot of prefix hierarchy

Installation

Please see the documentation for instructions on installing NetBox. To upgrade NetBox, please download the latest release and run upgrade.sh.

Providing Feedback

The best platform for general feedback, assistance, and other discussion is our GitHub discussions. To report a bug or request a specific feature, please open a GitHub issue using the appropriate template.

If you are interested in contributing to the development of NetBox, please read our contributing guide prior to beginning any work.

Related projects

Please see our wiki for a list of relevant community projects.

Comments
  • Add support for tracking physical cable plants

    Add support for tracking physical cable plants

    Currently, NetBox does not support any concept of physical cable plant installations. We can connect one interface to another, but there is no way too associate that connection with information about the physical path taken by the cabling.

    Ideally, NetBox should support the construction of physical cable paths to be associated with data (and perhaps console) connections. This would entail the tracking of individual path panels and cables, as well as the ability to support bundles of cabling (e.g. MPO fiber trunks).

    The database schema necessary to support this feature will take quite a bit of thought. However, once that schema has been devised and agreed upon, it should be relatively easy to incorporate in NetBox.

    status: accepted 
    opened by jeremystretch 100
  • Add support for virtual machines

    Add support for virtual machines

    Any plans to support virtual devices? e.g. a VM or virtualized network appliance which may have multiple interfaces and be parented to a single 'Device' or a 'Platform' of devices?

    opened by paradoxni 82
  • Implement multi-tenancy access controls: restrict users to specific areas of interest

    Implement multi-tenancy access controls: restrict users to specific areas of interest

    I've read https://github.com/digitalocean/netbox/issues/446 and thought that it would be nice to have a more general and finer access control with an ability to restrict users (user groups) to view / edit / create objects only in specific Tenants, Tenant Groups, or Sites. And such access control should be enforced in UI as well as in API access.

    That way one could give some limited access for the tenants' engineers themselves, or set some internal access boundaries (for the security-conscious).

    status: accepted 
    opened by askbow 56
  • v3.0-beta1 UI tweaks

    v3.0-beta1 UI tweaks

    Proposed Changes

    This issue serves as an umbrella for small changes to the desktop UI which don't warrant their own bug reports. Please comment below with any issues you encounter within the UI and we'll add it here.

    For the sake of limiting scope, let's focus on issues observed on non-mobile platforms in this thread. Please note any issues with the mobile UI under #6828. Thanks!

    • [x] Fix "flashing" from light mode when loading pages with dark mode enabled (@bellwood)
    • [x] Duplicate search fields w/same ID throws error in browser dev console (@bellwood)
    • [x] Login banner text colors not consistent with light/dark theme (@jeremystretch)
    • [x] Sidebar footer disappears after login in Chrome (@michaelklose)
    • [x] Sidebar "button" links render incorrectly under Safari (and other browsers?) (@bellwood)
    • [x] "Refine search" buttons in global search results not properly spaced (@hoalex)
    • [x] Double scrolling inside expanded nav menu (@ndom91)
    • [x] Link color inside toasts can be difficult to read (@n0emis)
    • [x] Utilization bars with low percentages are hard to read (@nahun)
    • [x] Add cable length & type to SVG traces (@Jackbennett)
    • [x] Device type images are not scaled to fit available space (@JeffTadashi)
    • [x] Remove fade effect when hovering over dropdown items (@bluikko)
    • [x] Visually distinguish custom links from built-in buttons (@rodvand)
    • [x] Expanding a new menu section should close others (@jeremystretch)

    Justification

    Clean up the user interface and achieve a greater overall user experience.

    type: bug beta 
    opened by jeremystretch 54
  • DNS record management

    DNS record management

    Basic support for DNS resolution for mapping individual IPs to provide additional metadata/logic to assist with searches and investigation of individual IP usage.

    status: accepted 
    opened by ryanmerolle 52
  • Virtual Device Context

    Virtual Device Context

    NetBox version

    v3.0.10

    Feature type

    New functionality

    Proposed functionality

    For lack of a better term, it would be ideal to support the common model of virtual device context. This should NOT model a specific vendor, but the common functionality of virtual device context in that interfaces can be assigned to them (in addition to VRFs if implemented #7852)

    Use case

    Platform specific implementations to look at to understand the commonly shared functionality:

    • Fortinet Virtual Domains (vDOMs)
    • Juniper Virtual Router Instances
    • Cisco Virtual Device Context
    • Palo Alto Virtual Systems

    Database changes

    No response

    External dependencies

    No response

    status: accepted type: feature 
    opened by ryanmerolle 51
  • External authentication

    External authentication

    Environment

    • Python version: 3.5.4
    • NetBox version: Example: v2.3.2

    Ability to use external authentication via a proxy (eg. Keycloak-proxy, Nginx, Apache) by setting the appropriate headers. It was already described as a possibility here but I find no documentation or anything about this topic.

    Proposed Functionality

    It should be possible to pass authentication headers to netbox and either add a user automatically to the local database and make it possible to give the correct permissions in netbox or use the permissions passed via a header.

    Use Case

    This would be very useful because it wouldn't be necessary to implement and maintain dozens of different authentication mechanisms directly to Netbox but just pass the headers.

    There is already an example for this in the wild but it requires some code changes and patching Netbox on every update is in my opinion not a good idea. So it would be really cool if something like this could be implemented in the codebase.

    Example: https://groups.google.com/d/msg/netbox-discuss/BTB8q8CzmrA/2BcnbectAQAJ

    status: accepted type: feature 
    opened by awlx 50
  • update docs to include installation in RHEL/CENTOS

    update docs to include installation in RHEL/CENTOS

    The getting started guide can be followed almost completely but, it looks like the packages have diff names. Will have to figure out then update docs.

    type: documentation 
    opened by aoyawale 43
  • Support for support contracts

    Support for support contracts

    It would be useful for the DCIM portion of Netbox to be able to add support contract info to a device. The contract number, SLA (4 hours, NBD, etc) term start, term end, alarms (dashboard and email) when a contract is getting close to expiring, etc.

    plugin candidate 
    opened by netman2048 41
  • Expand Interface FormFactor / Types

    Expand Interface FormFactor / Types

    Might be easiest to make this an admin-configured lookup table.

    Rack tables supports dozens of interface types, to the point at which it gets excessively dumb. But being able to define single or multimode for SFPs, and adding Fiber Channel (in 2/4/8/16/32Gb flavors) would probably be a decent start...

    type: feature 
    opened by peelman 41
  • Allow non-unique device and virtual machine names

    Allow non-unique device and virtual machine names

    Environment

    • Python version: 3.5.2
    • NetBox version: 2.5.0

    Proposed Functionality

    Remove the uniqueness constraint on device and virtual machine names, so that multiple objects can be created with the same name. It is worth noting that NetBox technically already supports non-unique names, given that multiple devices can be unnamed (i.e. with a name of NULL).

    Use Case

    Some users have expressed a desire to support having multiple devices/VMs with the same name.

    Database Changes

    Remove unique=True from the name field on the Device and VirtualMachine models.

    External Dependencies

    None

    status: accepted type: feature 
    opened by jeremystretch 40
  • Batch editing 'date' type 'custom field' for multiple devices failed after upgrading to 3.4.x

    Batch editing 'date' type 'custom field' for multiple devices failed after upgrading to 3.4.x

    NetBox version

    v3.4.2

    Python version

    3.8

    Steps to Reproduce

    1. Add a custom field with the name testdate to the Circuit model with the type Date
    2. Add a circuit testcircuit
    3. Mark testcircuit in the circuit list and press Edit Selected

    Expected Behavior

    changes applied successfully

    Observed Behavior

    following error message

    <class 'TypeError'>
    
    fromisoformat: argument must be str
    
    Python version: 3.8.10
    NetBox version: 3.4.2
    
    type: bug status: accepted 
    opened by wiyin 1
  • #11371 - Add various 100Mb Interface Types

    #11371 - Add various 100Mb Interface Types

    Fixes: #11371

    Added 3 types of interfaces. 100base-fx (fast ethernet over fiber), 100base-lfx (proprietary fast ethernet over fiber), and 100base-t1 (1-/100 single pair) for completeness.

    opened by danner26 0
  • Interface Type Addition: Add 100Base-FX and other 100Mbps Types

    Interface Type Addition: Add 100Base-FX and other 100Mbps Types

    NetBox version

    v3.4.1

    Feature type

    Data model extension

    Proposed functionality

    We have some legacy hardware that runs on 100Base-FX (Fast Ethernet over Fiber). We would like to request the interface type be added

    Use case

    We have some Allied Telesis AT-FS202's in the field that we are looking to record. These have 100Base-FX connection for their Port1 and 10Base-T/100Base-TX for their Port 2

    Database changes

    No response

    External dependencies

    No response

    type: feature 
    opened by danner26 0
  • Custom fields only showing by Role, Type or tags

    Custom fields only showing by Role, Type or tags

    NetBox version

    V3.3.5

    Feature type

    New functionality

    Proposed functionality

    It would be nice that we can define the custom fields based on for example the type or role of a device. At this moment you can add a custom field only to a specific module in Netbox.

    If there is a possibility to add an extra filter on the custom field that will be very helpful to add an custom field only for specific modules where needed.

    Use case

    In this use case we want to add a custom field to define the support level of a switch. To add this custom field we can add a custom field for the module "Device" (See example below)

    The problem with this is that this custom field is add to all another devices that are created. Not every device needs this custom field. Or for other departments than the network team needs that custom field.

    That is the reason that it would be nice if we have an sub filter to only show the custom field based by the role or something like that.

    image

    Database changes

    No response

    External dependencies

    No response

    type: feature 
    opened by chesronw 0
  • Add a tab to view all deliveries processed under a webhook

    Add a tab to view all deliveries processed under a webhook

    NetBox version

    v3.4.1

    Feature type

    New functionality

    Proposed functionality

    Using the data in the background tasks for webhook, display the the following fields under the Deliveries tab on the detail page of the webhook

    • event
    • data
    • snapshots
    • timestamp
    • username
    • request_id
    • exception (if any)
    • Created
    • Queued
    • Started
    • Ended
    • Status
    • Result

    Use case

    When a webhook is created, it not easy to find the deliveries that were made via it to the specified endpoint without searching for it in the backend. It would be of great help to see all the deliveries under the detail page of the webhook under Deliveries tab. This will provide a quick way to see the related deliveries and its status.

    Database changes

    None

    External dependencies

    None

    type: feature 
    opened by abhi1693 0
  • 10201 cable terminations2

    10201 cable terminations2

    Fixes: #10201

    Fix cable termination checks if edit and remove terminations.

    @jeremystretch can you please double-check the logic here, not 100% sure if I'm missing any edge cases or anything. Note: the lines removed in signals.py for CableTermination delete:

        for cablepath in CablePath.objects.filter(_nodes__contains=instance.cable):
            cablepath.retrace()
    

    This assumes that CableTermination can only be removed on a Cable save (which I believe is correct), so the path retrace is handled in the update_connected_endpoints signal and this is not needed here. If we can directly delete a CableTermination without going through Cable save then this would be an issue.

    opened by arthanson 0
Releases(v3.4.2)
  • v3.4.2(Jan 3, 2023)

    Enhancements

    • #9285 - Enable specifying assigned component during bulk import of inventory items
    • #10700 - Match device name when using modules quick search
    • #11121 - Add VM resource totals to cluster view
    • #11156 - Enable selecting assigned component when editing inventory item in UI
    • #11223 - reindex management command should accept app label without model name
    • #11244 - Add controls for saved filters to rack elevations list
    • #11248 - Fix database migration when plugin with search indexer is enabled
    • #11259 - Add support for Redis username configuration

    Bug Fixes

    • #11280 - Fix errant newlines when exporting interfaces with multiple IP addresses assigned
    • #11290 - Correct reporting of scheduled job duration
    • #11232 - Enable partial & regular expression matching for non-string types in global search
    • #11342 - Correct cable trace URL under "connection" tab for device components
    • #11345 - Fix form validation for bulk import of modules
    Source code(tar.gz)
    Source code(zip)
  • v3.4.1(Dec 16, 2022)

    Enhancements

    • #9971 - Enable ordering of nested group models by name
    • #11214 - Introduce the DEFAULT_LANGUAGE configuration parameter

    Bug Fixes

    • #11175 - Fix cloning of fields containing special characters
    • #11178 - Pressing enter in quick search box should not trigger bulk operations
    • #11184 - Correct visualization of cable path which splits across multiple circuit terminations
    • #11185 - Fix TemplateSyntaxError when viewing custom script results
    • #11189 - Fix localization of dates & numbers
    • #11205 - Correct cloning behavior for recursively-nested models
    • #11206 - Avoid clearing assigned groups if REMOTE_AUTH_DEFAULT_GROUPS is invalid
    Source code(tar.gz)
    Source code(zip)
  • v3.4.0(Dec 14, 2022)

    WARNING: NetBox v3.4 requires PostgreSQL 11 or later.

    Breaking Changes

    • Device and virtual machine names are no longer case-sensitive. Attempting to create e.g. "device1" and "DEVICE1" within the same site will raise a validation error.
    • The asn, noc_contact, admin_contact, and portal_url fields have been removed from the provider model. Please replicate any data remaining in these fields to the ASN and contact models introduced in NetBox v3.1 prior to upgrading.
    • The content_type fields on the CustomLink and ExportTemplate models have been renamed to content_types and now support the assignment of multiple content types per object.
    • Within the Python API, the cf property on an object with custom fields now returns deserialized values. For example, a custom field referencing an object will return the object instance rather than its numeric ID. To access the raw serialized values, reference the object's custom_field_data attribute instead.
    • The NetBoxModelCSVForm class has been renamed to NetBoxModelImportForm. Backward compatability with the previous name has been retained for this release, but will be dropped in NetBox v3.5.

    New Features

    New Global Search (#10560)

    NetBox's global search functionality has been completely overhauled and replaced by a new cache-based lookup. This new implementation provides a much faster, more intelligent search capability. Results are returned in order of precedence regardless of object type, and matching field values are highlighted in the results. Additionally, custom field values are now included in global search results (where enabled). Plugins can also register their own models with the new global search engine.

    Virtual Device Contexts (#7854)

    A new model representing virtual device contexts (VDCs) has been added. VDCs are logical partitions of resources within a device that can be managed independently. A VDC is created within a device and may have device interfaces assigned to it. An interface can be allocated to any number of VDCs on its device.

    Saved Filters (#9623)

    Object lists can be filtered by a variety of different fields and characteristics. Applied filters can now be saved for reuse. For example, the query string

    ?status=active&region_id=12&tenant=acme
    

    can be saved and applied to future queries as

    ?filter=my-custom-filter
    

    Saved filters can be kept private, or shared among NetBox users. They can be applied to both UI and REST API searches.

    JSON/YAML Bulk Imports (#4347)

    NetBox's bulk import feature, which was previously limited to CSV-formatted data for most types of objects, has been extended to accept data formatted in JSON or YAML as well. This enables users to directly import objects from a variety of sources without needing to first convert data to CSV. NetBox will attempt to automatically determine the format of import data if not specified by the user.

    Update Existing Objects via Bulk Import (#7961)

    NetBox's CSV-based bulk import functionality has been extended to support also modifying existing objects. When an id column is present in the import form, it will be used to infer the object to be modified, rather than a new object being created. All fields (columns) are optional when modifying existing objects.

    Scheduled Reports & Scripts (#8366)

    Reports and custom scripts can now be scheduled for execution at a desired future time. Background scheduling is handled entirely by the existing RQ workers; there is no need to configure additional tasks to support scheduled jobs. When creating a scheduled job, the user may optionally specify an interval at which the job will run repeatedly (e.g. every 24 hours).

    API for Staged Changes (#10851)

    This release introduces a new programmatic API that enables plugins and custom scripts to prepare changes in NetBox without actually committing them to the active database. To stage changes, create and activate a branch using the checkout() context manager. Any changes made within this context will be captured, recorded, and rolled back for future use. Once ready, a branch can be applied to the active database by calling merge().

    NOTE: This feature is still under active development and considered experimental in nature. Its use in production is strongly discouraged at this time.

    Enhancements

    • #815 - Enable specifying terminations when bulk importing circuits
    • #6003 - Enable the inclusion of custom field values in global search
    • #7376 - Enable the assignment of tags during CSV import
    • #8245 - Enable GraphQL filtering of related objects
    • #8274 - Enable associating a custom link with multiple object types
    • #8485 - Enable journaling for all organizational models
    • #8853 - Introduce the ALLOW_TOKEN_RETRIEVAL config parameter to restrict the display of API tokens
    • #9249 - Device and virtual machine names are no longer case-sensitive
    • #9478 - Add link_peers field to GraphQL types for cabled objects
    • #9654 - Add weight field to racks, device types, and module types
    • #9817 - Add assigned_object field to GraphQL type for IP addresses and L2VPN terminations
    • #9832 - Add mounting_depth field to rack model
    • #9892 - Add optional name field for FHRP groups
    • #10348 - Add decimal custom field type
    • #10371 - Add status field for modules
    • #10545 - Standardize the use of description and comments fields on all primary models
    • #10556 - Include a display field in all GraphQL object types
    • #10595 - Add GraphQL relationships for additional generic foreign key fields
    • #10675 - Add max_weight field to track maximum load capacity for racks
    • #10698 - Omit app label from content type in table columns
    • #10710 - Add status field to WirelessLAN
    • #10761 - Enable associating an export template with multiple object types
    • #10945 - Enable recurring execution of scheduled reports & scripts
    • #11022 - Introduce QUEUE_MAPPINGS configuration parameter to allow customization of background task prioritization

    Bug Fixes (from v3.4-beta1)

    • #10946 - Fix AttributeError exception when viewing a device with a primary IP and no platform assigned
    • #10948 - Linkify primary IPs for VDCs
    • #10950 - Fix validation of VDC primary IPs
    • #10957 - Add missing VDCs column to interface tables
    • #10973 - Fix device links in VDC table
    • #10980 - Fix view tabs for plugin objects
    • #10982 - Catch NoReverseMatch exception when rendering tabs with no registered URL
    • #10984 - Fix navigation menu expansion for plugin menus comprising multiple words
    • #11000 - Improve validation of YAML-formatted import data
    • #11046 - Fix exception when caching very large field values for search
    • #11154 - Index VM interface MAC address and MTU for global search
    • #11171 - Fix querying of related objects under GraphQL API

    Plugins API

    • #4751 - Enable embedding custom content on core list views via list_buttons() method
    • #8927 - Enable inclusion of plugin models in global search via SearchIndex
    • #9071 - Enable plugins to register top-level navigation menus using PluginMenu
    • #9072 - Enable registration of tabbed plugin views for core NetBox models
    • #9880 - Enable plugins to install and register other Django apps via django_apps attribute
    • #9887 - Inspect docs_url property to determine link to model documentation
    • #10314 - Move clone() method from NetBoxModel to CloningMixin
    • #10543 - Introduce get_plugin_config() utility function
    • #10739 - Introduce get_queryset() method on generic views

    Other Changes

    • #9045 - Remove legacy ASN field from provider model
    • #9046 - Remove legacy contact fields from provider model
    • #10052 - The cf attribute on objects now returns deserialized custom field data
    • #10358 - Raise minimum required PostgreSQL version from 10 to 11
    • #10694 - Emit the post_save signal when creating device components in bulk
    • #10697 - Move application registry into core app
    • #10699 - Remove unused custom import_object() function
    • #10781 - Add support for Python v3.11
    • #10816 - Pass the current request as context when instantiating a FilterSet within UI views
    • #10820 - Switch timezone library from pytz to zoneinfo
    • #10821 - Enable data localization
    Source code(tar.gz)
    Source code(zip)
  • v3.3.10(Dec 13, 2022)

    Enhancements

    • #9361 - Add replication controls for module bulk import
    • #10255 - Introduce LOGOUT_REDIRECT_URL config parameter to control redirection of user after logout
    • #10447 - Enable reassigning an inventory item from one device to another
    • #10516 - Add vertical frame & cabinet rack types
    • #10748 - Add provider selection field for provider networks to circuit termination edit view
    • #11089 - Permit whitespace in MAC addresses
    • #11119 - Enable filtering L2VPNs by slug

    Bug Fixes

    • #11041 - Correct power utilization percentage precision
    • #11077 - Honor configured date format when displaying date custom field values in tables
    • #11087 - Fix background color of bottom banner content
    • #11101 - Correct circuits count under site view
    • #11109 - Fix nullification of custom object & multi-object fields via REST API
    • #11128 - Disable ordering changelog table by object to avoid exception
    • #11142 - Correct available choices for status under IP range filter form
    • #11168 - Honor RQ_DEFAULT_TIMEOUT config parameter when using Redis Sentinel
    • #11173 - Enable missing tags columns for contact, L2VPN lists
    Source code(tar.gz)
    Source code(zip)
  • v3.3.9(Nov 30, 2022)

    Enhancements

    • #10653 - Ensure logging of failed login attempts

    Bug Fixes

    • #6389 - Call snapshot() on object when processing deletions
    • #9223 - Fix serialization of array field values in change log
    • #9878 - Fix spurious error message when rendering REST API docs
    • #10236 - Fix TypeError exception when viewing PDU configured for three-phase power
    • #10241 - Support referencing custom field related objects by attribute in addition to PK
    • #10579 - Mark cable traces terminating to a provider network as complete
    • #10721 - Disable ordering by custom object field columns
    • #10929 - Raise validation error when attempting to create a duplicate cable termination
    • #10936 - Permit demotion of device/VM primary IP via IP address edit form
    • #10938 - render_field template tag should respect label kwarg
    • #10969 - Update cable paths ending at associated rear port when creating new front ports
    • #10996 - Hide checkboxes on child object lists when no bulk operations are available
    • #10997 - Fix exception when editing NAT IP for VM with no cluster
    • #11014 - Use natural ordering when sorting rack elevations by name
    • #11028 - Enable bulk clearing of color attribute of pass-through ports
    • #11047 - Cloning a rack reservation should replicate rack & user
    Source code(tar.gz)
    Source code(zip)
  • v3.3.8(Nov 16, 2022)

    Enhancements

    • #10356 - Add backplane Ethernet interface types
    • #10902 - Add location selector to power feed form
    • #10904 - Use front/rear port colors in cable trace SVG
    • #10914 - Include "add module type" button on manufacturer view
    • #10915 - Add count of L2VPNs to tenant view
    • #10919 - Include device location under cable view
    • #10920 - Include request cookies when queuing a custom script

    Bug Fixes

    • #9439 - Ensure thread safety of change logging functions
    • #10709 - Correct UI display for azuread-v2-tenant-oauth2 SSO backend
    • #10829 - Fix bulk edit/delete buttons ad top of object lists
    • #10837 - Correct cookie paths when BASE_PATH is set
    • #10874 - Remove erroneous link for contact assignment count
    • #10881 - Fix dark mode coloring for data on device status page
    • #10891 - Populate tag selection list for service filter form
    • #10897 - Fix form widget styling on FHRP group form
    • #10910 - Fix cable creation links on power port view
    Source code(tar.gz)
    Source code(zip)
  • v3.4-beta1(Nov 16, 2022)

    WARNING: NetBox v3.4 requires PostgreSQL 11 or later.

    Breaking Changes

    • Device and virtual machine names are no longer case-sensitive. Attempting to create e.g. "device1" and "DEVICE1" will raise a validation error.
    • The asn field has been removed from the provider model. Please replicate any provider ASN assignments to the ASN model introduced in NetBox v3.1 prior to upgrading.
    • The noc_contact, admin_contact, and portal_url fields have been removed from the provider model. Please replicate any data remaining in these fields to the contact model introduced in NetBox v3.1 prior to upgrading.
    • The content_type field on the CustomLink and ExportTemplate models have been renamed to content_types and now supports the assignment of multiple content types.
    • The cf property on an object with custom fields now returns deserialized values. For example, a custom field referencing an object will return the object instance rather than its numeric ID. To access the raw serialized values, use custom_field_data instead.
    • The NetBoxModelCSVForm class has been renamed to NetBoxModelImportForm. Backward compatability with the previous name has been retained for this release, but will be dropped in NetBox v3.5.

    New Features

    New Global Search (#10560)

    NetBox's global search functionality has been completely overhauled and replaced by a new cache-based lookup. This new implementation provides a much speedier, more intelligent search capability. Matches are returned in order of precedence regardless of object type, and matched field values are highlighted in the results. Additionally, custom field values are now included in global search results (when enabled). Plugins can also register their own models with the new global search engine.

    Virtual Device Contexts (#7854)

    A new model representing virtual device contexts (VDCs) has been added. VDCs are logical partitions of resources within a device that can be managed independently. A VDC is created within a device and may have device interfaces assigned to it. An interface can be allocated to any number of VDCs on its device.

    Saved Filters (#9623)

    Object lists can be filtered by a variety of different fields and characteristics. Applied filters can now be saved for reuse as a convenience. Saved filters can be kept private, or shared among NetBox users.

    JSON/YAML Bulk Imports (#4347)

    NetBox's bulk import feature, which was previously limited to CSV-formatted data for most objects, has been extended to support the import of objects from JSON and/or YAML data as well.

    CSV-Based Bulk Updates (#7961)

    NetBox's CSV-based bulk import functionality has been extended to support also modifying existing objects. When an id column is present in the import form, it will be used to infer the object to be modified, rather than a new object being created. All fields (columns) are optional when modifying existing objects.

    Scheduled Reports & Scripts (#8366)

    Reports and custom scripts can now be scheduled for execution at a desired time.

    API for Staged Changes (#10851)

    This release introduces a new programmatic API that enables plugins and custom scripts to prepare changes in NetBox without actually committing them to the active database. To stage changes, create and activate a branch using the checkout() context manager. Any changes made within this context will be captured, recorded, and rolled back for future use. Once ready, a branch can be applied to the active database by calling merge().

    !!! danger "Experimental Feature" This feature is still under active development and considered experimental in nature. Its use in production is strongly discouraged at this time.

    Enhancements

    • #6003 - Enable the inclusion of custom field values in global search
    • #7376 - Enable the assignment of tags during CSV import
    • #8245 - Enable GraphQL filtering of related objects
    • #8274 - Enable associating a custom link with multiple object types
    • #8485 - Enable journaling for all organizational models
    • #8853 - Introduce the ALLOW_TOKEN_RETRIEVAL config parameter to restrict the display of API tokens
    • #9249 - Device and virtual machine names are no longer case-sensitive
    • #9478 - Add link_peers field to GraphQL types for cabled objects
    • #9654 - Add weight field to racks, device types, and module types
    • #9817 - Add assigned_object field to GraphQL type for IP addresses and L2VPN terminations
    • #9832 - Add mounting_depth field to rack model
    • #9892 - Add optional name field for FHRP groups
    • #10052 - The cf attribute now returns deserialized custom field data
    • #10348 - Add decimal custom field type
    • #10545 - Standardize the use of description and comments fields on all primary models
    • #10556 - Include a display field in all GraphQL object types
    • #10595 - Add GraphQL relationships for additional generic foreign key fields
    • #10698 - Omit app label from content type in table columns
    • #10710 - Add status field to WirelessLAN
    • #10761 - Enable associating an export template with multiple object types
    • #10781 - Add support for Python v3.11

    Plugins API

    • #4751 - Add plugin_list_buttons template tag to embed buttons on object lists
    • #8927 - Enable inclusion of plugin models in global search via SearchIndex
    • #9071 - Enable plugins to register top-level navigation menus
    • #9072 - Enable registration of tabbed plugin views for core NetBox models
    • #9880 - Enable plugins to install and register other Django apps
    • #9887 - Inspect docs_url property to determine link to model documentation
    • #10314 - Move clone() method from NetBoxModel to CloningMixin
    • #10543 - Introduce get_plugin_config() utility function
    • #10739 - Introduce get_queryset() method on generic views

    Other Changes

    • #9045 - Remove legacy ASN field from provider model
    • #9046 - Remove legacy contact fields from provider model
    • #10358 - Raise minimum required PostgreSQL version from 10 to 11
    • #10694 - Emit the post_save signal when creating device components in bulk
    • #10697 - Move application registry into core app
    • #10699 - Remove custom import_object() function
    • #10816 - Pass the current request when instantiating a FilterSet within UI views
    • #10820 - Switch timezone library from pytz to zoneinfo
    • #10821 - Enable data localization
    Source code(tar.gz)
    Source code(zip)
  • v3.3.7(Nov 2, 2022)

    Bug Fixes

    • #10282 - Enforce advisory locks when allocating available IP addresses to prevent race conditions
    • #10770 - Fix social authentication for new users
    • #10791 - Permit nullifying VLAN group scope_type via REST API
    • #10803 - Fix exception when ordering contacts by number of assignments
    • #10809 - Permit nullifying site time_zone via REST API
    Source code(tar.gz)
    Source code(zip)
  • v3.3.6(Oct 26, 2022)

    Enhancements

    • #9584 - Enable filtering devices by device type slug
    • #9722 - Add LDAP configuration parameters to specify certificates
    • #10580 - Link "assigned" checkbox in IP address table to assigned interface
    • #10639 - Set cookie paths according to configured BASE_PATH
    • #10685 - Position A/Z termination cards above the fold under circuit view

    Bug Fixes

    • #9669 - Strip colons from usernames when using remote authentication
    • #10575 - Include OIDC dependencies for python-social-auth
    • #10584 - Fix service clone link
    • #10610 - Allow assignment of VC member to LAG on non-master peer
    • #10643 - Ensure consistent display of custom fields for all model forms
    • #10646 - Fix filtering of power feed by power panel when connecting a cable
    • #10655 - Correct display of assigned contacts in object tables
    • #10666 - Re-evaluate disabled LDAP user when processing API requests
    • #10682 - Correct home view links to connection lists
    • #10712 - Fix ModuleNotFoundError exception when generating API schema under Python 3.9+
    • #10716 - Add left/right page plugin content embeds for tag view
    • #10719 - Prevent user without sufficient permission from creating an IP address via FHRP group creation
    • #10723 - Distinguish between inside/outside NAT assignments for device/VM primary IPs
    • #10745 - Correct display of status field in clusters list
    • #10746 - Add missing status attribute to cluster view
    Source code(tar.gz)
    Source code(zip)
  • v3.3.5(Oct 5, 2022)

    Enhancements

    • #8424 - Include rack elevation under device view
    • #10352 - Omit extraneous URL query attributes during search
    • #10465 - Improve formatting of device heights and rack positions

    Bug Fixes

    • #9497 - Adjust non-racked device filter on site and location detailed view
    • #10408 - Fix validation when attempting to add redundant contact assignments
    • #10423 - Enforce object type validation when creating journal entries
    • #10435 - Fix exception when filtering VLANs by virtual machine with no cluster assigned
    • #10439 - Fix form widget styling for DeviceType airflow field
    • #10445 - Avoid rounding virtual machine memory values
    • #10460 - Restore missing connection details for device components
    • #10461 - Enable filtering by read-only custom fields in the UI
    • #10470 - Omit read-only custom fields from CSV import forms
    • #10480 - Cable trace SVG links should not force a new window
    • #10491 - Clarify representation of blocking contact assignments during contact deletion
    • #10513 - Disable the reassignment of a module to a new device
    • #10517 - Automatically inherit site assignment from cluster when creating a virtual machine
    • #10559 - Permit the pinning of a VM to a particular device within a cluster which has no site assignment
    • #10562 - Correct URL for contacts table tags column
    Source code(tar.gz)
    Source code(zip)
  • v3.3.4(Sep 16, 2022)

  • v3.3.3(Sep 15, 2022)

    Enhancements

    • #8580 - Add occupied filter for cabled objects to filter by cable or mark_connected
    • #9577 - Add has_front_image and has_rear_image filters for device types
    • #10268 - Omit trailing ".0" in device positions within UI
    • #10359 - Add region and site group columns to the devices table

    Bug Fixes

    • #9231 - Fix empty lookup expression for string filters
    • #10247 - Allow changing the pre-populated device/VM when creating new components
    • #10250 - Fix exception when CableTermination validation fails during bulk import of cables
    • #10258 - Enable the use of reports & scripts packaged in submodules
    • #10259 - Fix NoReverseMatch exception when listing available prefixes with "flat" column displayed
    • #10270 - Fix custom field validation when creating new services
    • #10278 - Fix "create & add another" for image attachments
    • #10294 - Fix spurious changelog diff for interface WWN field
    • #10304 - Enable cloning for custom fields & custom links
    • #10305 - Fix Virtual Chassis master field cannot be null according to the API
    • #10307 - Correct value for "Passive 48V (4-pair)" PoE type selection
    • #10333 - Show available values for ui_visibility field of CustomField for CSV import
    • #10337 - Display SSO links when local authentication fails
    • #10353 - Table action buttons should reserve return URL parameters
    • #10362 - Correct display of custom fields when editing an L2VPN termination
    Source code(tar.gz)
    Source code(zip)
  • v3.3.2(Sep 2, 2022)

    Enhancements

    • #9477 - Enable clearing applied table column ordering
    • #10034 - Add L2VPN column to interface and VLAN tables
    • #10043 - Add support for limit query parameter to available VLANs API endpoint
    • #10060 - Add journal entries to global search
    • #10195 - Enable filtering of device components by rack
    • #10233 - Enable sorting rack elevations by facility ID

    Bug Fixes

    • #9328 - Hide available IPs when non-default ordering is applied
    • #9481 - Update child device location when parent location changes
    • #9832 - Improve error message when validating rack reservation units
    • #9895 - Various corrections to OpenAPI spec
    • #9962 - SSO login should respect next URL query parameter
    • #9963 - Fix support for custom CSRF_COOKIE_NAME value
    • #10155 - Fix rear port display when editing front port template for module type
    • #10156 - Avoid forcing SVG image links to open in a new window
    • #10161 - Restore "set null" option for custom fields during bulk edit
    • #10176 - Correct utilization display for empty racks
    • #10177 - Correct display of custom fields when editing VM interfaces
    • #10178 - Display manufacturer name alongside device type under device view
    • #10181 - Restore MultiPartParser (regression from #10031)
    • #10184 - Fix vertical alignment when displaying object attributes with buttons
    • #10208 - Fix permissions evaluation for interface actions dropdown menu
    • #10217 - Handle exception when trace splits to multiple rear ports
    • #10220 - Validate IP version when assigning primary IPs to a virtual machine
    • #10231 - Correct API schema definition for several serializer fields
    Source code(tar.gz)
    Source code(zip)
  • v3.3.1(Aug 25, 2022)

    Enhancements

    • #6454 - Include contextual help when creating first objects in UI
    • #9935 - Add 802.11ay and "other" wireless interface types
    • #10031 - Enforce application/json content type for REST API requests
    • #10033 - Disable "add termination" button for point-to-point L2VPNs with two terminations
    • #10037 - Add "child interface" option to actions dropdown in interfaces list
    • #10038 - Add "L2VPN termination" option to actions dropdown in interfaces list
    • #10039 - Add "assign FHRP group" option to actions dropdown in interfaces list
    • #10061 - Replicate type when cloning L2VPN instances
    • #10066 - Use fixed column widths for custom field values in UI
    • #10133 - Enable nullifying device location during bulk edit

    Bug Fixes

    • #9663 - Omit available IP annotations when filtering prefix child IPs list
    • #10040 - Fix exception when ordering prefixes by flat representation
    • #10053 - Custom fields header should not be displayed when editing circuit terminations with no custom fields
    • #10055 - Fix extraneous NAT indicator by device primary IP
    • #10057 - Fix AttributeError exception when global search results include rack reservations
    • #10059 - Add identifier column to L2VPN table
    • #10070 - Add unique constraint for L2VPN slug
    • #10087 - Correct display of far end in console/power/interface connections tables
    • #10089 - linkify template filter should escape object representation
    • #10094 - Fix 404 when using "create and add another" to add contact assignments
    • #10108 - Linkify inside NAT IPs for primary device IPs in UI
    • #10109 - Fix available prefixes calculation for container prefixes in the global table
    • #10111 - Fix ValueError exception when searching for L2VPN objects
    • #10118 - Fix display of connected LLDP neighbors for devices
    • #10134 - Custom fields data serializer should return a 400 response for invalid data
    • #10135 - Fix SSO support for SAML2 IDPs
    • #10147 - Permit the creation of 0U device types via REST API
    Source code(tar.gz)
    Source code(zip)
  • v3.3.0(Aug 17, 2022)

    Breaking Changes

    • Device position, device type height, and rack unit values are now reported as decimals (e.g. 1.0 or 1.5) to support modeling half-height rack units.
    • The nat_outside relation on the IP address model now returns a list of zero or more related IP addresses, rather than a single instance (or None).
    • Several fields on the cable API serializers have been altered or removed to support multiple-object cable terminations:

    | Old Name | Old Type | New Name | New Type | |----------------------|----------|-----------------------|----------| | termination_a_type | string | Removed | - | | termination_b_type | string | Removed | - | | termination_a_id | integer | Removed | - | | termination_b_id | integer | Removed | - | | termination_a | object | a_terminations | list | | termination_b | object | b_terminations | list |

    • As with the cable model, several API fields on all objects to which cables can be connected (interfaces, circuit terminations, etc.) have been changed:

    | Old Name | Old Type | New Name | New Type | |--------------------------------|----------|---------------------------------|----------| | link_peer | object | link_peers | list | | link_peer_type | string | link_peers_type | string | | connected_endpoint | object | connected_endpoints | list | | connected_endpoint_type | string | connected_endpoints_type | string | | connected_endpoint_reachable | boolean | connected_endpoints_reachable | boolean |

    • The cable path serialization returned by the /paths/ endpoint for pass-through ports has been simplified, and the following fields removed: origin_type, origin, destination_type, destination. (Additionally, is_complete has been added.)

    New Features

    Multi-object Cable Terminations (#9102)

    When creating a cable in NetBox, each end can now be attached to multiple termination points. This allows accurate modeling of duplex fiber connections to individual termination ports and breakout cables, for example. (Note that all terminations attached to one end of a cable must be the same object type, but do not need to connect to the same parent object.) Additionally, cable terminations can now be modified without needing to delete and recreate the cable.

    L2VPN Modeling (#8157)

    NetBox can now model a variety of L2 VPN technologies, including VXLAN, VPLS, and others. Interfaces and VLANs can be attached to L2VPNs to track connectivity across an overlay. Similarly to VRFs, each L2VPN can also have import and export route targets associated with it.

    PoE Interface Attributes (#1099)

    Two new fields have been added to the device interface model to track Power over Ethernet (PoE) capabilities:

    • PoE mode: Power supplying equipment (PSE) or powered device (PD)
    • PoE type: Applicable IEEE standard or other power type

    Half-Height Rack Units (#51)

    Device type height can now be specified in 0.5U increments, allowing for the creation of devices consume partial rack units. Additionally, a device can be installed at the half-unit mark within a rack (e.g. U2.5). For example, two half-height devices positioned in sequence will consume a single rack unit; two consecutive 1.5U devices will consume 3U of space.

    Restrict API Tokens by Client IP (#8233)

    API tokens can now be restricted to use by certain client IP addresses or networks. For example, an API token with its allowed_ips list set to [192.0.2.0/24] will permit authentication only from API clients within that network; requests from other sources will fail authentication. This enables administrators to restrict the use of a token to specific clients.

    Reference User in Permission Constraints (#9074)

    NetBox's permission constraints have been expanded to support referencing the current user associated with a request using the special $user token. As an example, this enables an administrator to efficiently grant each user to edit his or her own journal entries, but not those created by other users.

    {
      "created_by": "$user"
    }
    

    Custom Field Grouping (#8495)

    A group_name field has been added to the custom field model to enable organizing related custom fields by group. Similarly to custom links, custom fields which have been assigned to the same group will be rendered within that group when viewing an object in the UI. (Custom field grouping has no effect on API operation.)

    Toggle Custom Field Visibility (#9166)

    The behavior of each custom field within the NetBox UI can now be controlled individually by toggling its UI visibility. Three options are available:

    • Read/write: The custom field is included when viewing and editing objects (default).
    • Read-only: The custom field is displayed when viewing an object, but it cannot be edited via the UI. (It will appear in the form as a read-only field.)
    • Hidden: The custom field will never be displayed within the UI. This option is recommended for fields which are not intended for use by human users.

    Custom field UI visibility has no impact on API operation.

    Enhancements

    • #1202 - Support overlapping assignment of NAT IP addresses
    • #4350 - Illustrate reservations vertically alongside rack elevations
    • #4434 - Enable highlighting devices within rack elevations
    • #5303 - A virtual machine may be assigned to a site and/or cluster
    • #7120 - Add termination_date field to Circuit
    • #7744 - Add status field to Location
    • #8171 - Populate next available address when cloning an IP
    • #8222 - Enable the assignment of a VM to a specific host device within a cluster
    • #8471 - Add status field to Cluster
    • #8511 - Enable custom fields and tags for circuit terminations
    • #8995 - Enable arbitrary ordering of REST API results
    • #9070 - Hide navigation menu items based on user permissions
    • #9177 - Add tenant assignment for wireless LANs & links
    • #9391 - Remove 500-character limit for custom link text & URL fields
    • #9536 - Track API token usage times
    • #9582 - Enable assigning config contexts based on device location

    Bug Fixes (from Beta2)

    • #9758 - Display parent object of connected termination
    • #9900 - Pre-populate site & rack fields for cable connection form
    • #9938 - Exclude virtual interfaces from terminations list when connecting a cable
    • #9939 - Fix list of next nodes for split paths under trace view

    Plugins API

    • #9075 - Introduce AbortRequest exception for cleanly interrupting object mutations
    • #9092 - Add support for ObjectChildrenView generic view
    • #9228 - Subclasses of ChangeLoggingMixin can override serialize_object() to control JSON serialization for change logging
    • #9414 - Add clone() method to NetBoxModel for copying instance attributes
    • #9647 - Introduce customfield_value template tag

    Other Changes

    • #9261 - NetBoxTable no longer automatically clears pre-existing calls to prefetch_related() on its queryset
    • #9434 - Enabled django-rich test runner for more user-friendly output
    • #9903 - Implement a mechanism for automatically updating denormalized fields

    REST API Changes

    • List results can now be ordered by field, by appending ?ordering={fieldname} to the query. Multiple fields can be specified by separating the field names with a comma, e.g. ?ordering=site,name. To invert the ordering, prepend a hyphen to the field name, e.g. ?ordering=-name.
    • Added the following endpoints:
      • /api/dcim/cable-terminations/
      • /api/ipam/l2vpns/
      • /api/ipam/l2vpn-terminations/
    • circuits.Circuit
      • Added optional termination_date field
    • circuits.CircuitTermination
      • link_peer has been renamed to link_peers and now returns a list of objects
      • link_peer_type has been renamed to link_peers_type
      • connected_endpoint has been renamed to connected_endpoints and now returns a list of objects
      • connected_endpoint_type has been renamed to connected_endpoints_type
      • connected_endpoint_reachable has been renamed to connected_endpoints_reachable
      • Added custom_fields and tags fields
    • dcim.Cable
      • termination_a_type has been renamed to a_terminations_type
      • termination_b_type has been renamed to b_terminations_type
      • termination_a renamed to a_terminations and now returns a list of objects
      • termination_b renamed to b_terminations and now returns a list of objects
      • termination_a_id has been removed
      • termination_b_id has been removed
    • dcim.ConsolePort
      • link_peer has been renamed to link_peers and now returns a list of objects
      • link_peer_type has been renamed to link_peers_type
      • connected_endpoint has been renamed to connected_endpoints and now returns a list of objects
      • connected_endpoint_type has been renamed to connected_endpoints_type
      • connected_endpoint_reachable has been renamed to connected_endpoints_reachable
    • dcim.ConsoleServerPort
      • link_peer has been renamed to link_peers and now returns a list of objects
      • link_peer_type has been renamed to link_peers_type
      • connected_endpoint has been renamed to connected_endpoints and now returns a list of objects
      • connected_endpoint_type has been renamed to connected_endpoints_type
      • connected_endpoint_reachable has been renamed to connected_endpoints_reachable
    • dcim.Device
      • The position field has been changed from an integer to a decimal
    • dcim.DeviceType
      • The u_height field has been changed from an integer to a decimal
    • dcim.FrontPort
      • link_peer has been renamed to link_peers and now returns a list of objects
      • link_peer_type has been renamed to link_peers_type
      • connected_endpoint has been renamed to connected_endpoints and now returns a list of objects
      • connected_endpoint_type has been renamed to connected_endpoints_type
      • connected_endpoint_reachable has been renamed to connected_endpoints_reachable
    • dcim.Interface
      • link_peer has been renamed to link_peers and now returns a list of objects
      • link_peer_type has been renamed to link_peers_type
      • connected_endpoint has been renamed to connected_endpoints and now returns a list of objects
      • connected_endpoint_type has been renamed to connected_endpoints_type
      • connected_endpoint_reachable has been renamed to connected_endpoints_reachable
      • Added the optional poe_mode and poe_type fields
      • Added the l2vpn_termination read-only field
    • dcim.InterfaceTemplate
      • Added the optional poe_mode and poe_type fields
    • dcim.Location
      • Added required status field (default value: active)
    • dcim.PowerOutlet
      • link_peer has been renamed to link_peers and now returns a list of objects
      • link_peer_type has been renamed to link_peers_type
      • connected_endpoint has been renamed to connected_endpoints and now returns a list of objects
      • connected_endpoint_type has been renamed to connected_endpoints_type
      • connected_endpoint_reachable has been renamed to connected_endpoints_reachable
    • dcim.PowerFeed
      • link_peer has been renamed to link_peers and now returns a list of objects
      • link_peer_type has been renamed to link_peers_type
      • connected_endpoint has been renamed to connected_endpoints and now returns a list of objects
      • connected_endpoint_type has been renamed to connected_endpoints_type
      • connected_endpoint_reachable has been renamed to connected_endpoints_reachable
    • dcim.PowerPort
      • link_peer has been renamed to link_peers and now returns a list of objects
      • link_peer_type has been renamed to link_peers_type
      • connected_endpoint has been renamed to connected_endpoints and now returns a list of objects
      • connected_endpoint_type has been renamed to connected_endpoints_type
      • connected_endpoint_reachable has been renamed to connected_endpoints_reachable
    • dcim.Rack
      • The elevation endpoint now includes half-height rack units, and utilizes decimal values for the ID and name of each unit
    • dcim.RearPort
      • link_peer has been renamed to link_peers and now returns a list of objects
      • link_peer_type has been renamed to link_peers_type
      • connected_endpoint has been renamed to connected_endpoints and now returns a list of objects
      • connected_endpoint_type has been renamed to connected_endpoints_type
      • connected_endpoint_reachable has been renamed to connected_endpoints_reachable
    • extras.ConfigContext
      • Added the locations many-to-many field to track the assignment of ConfigContexts to Locations
    • extras.CustomField
      • Added group_name and ui_visibility fields
    • ipam.IPAddress
      • The nat_inside field no longer requires a unique value
      • The nat_outside field has changed from a single IP address instance to a list of multiple IP addresses
    • ipam.VLAN
      • Added the l2vpn_termination read-only field
    • users.Token
      • Added the allowed_ips array field
      • Added the read-only last_used datetime field
    • virtualization.Cluster
      • Added required status field (default value: active)
    • virtualization.VirtualMachine
      • The site field is now directly writable (rather than being inferred from the assigned cluster)
      • The cluster field is now optional. A virtual machine must have a site and/or cluster assigned.
      • Added the optional device field
      • Added the l2vpn_termination read-only field wireless.WirelessLAN
      • Added tenant field wireless.WirelessLink
      • Added tenant field
    Source code(tar.gz)
    Source code(zip)
  • v3.2.9(Aug 16, 2022)

    Enhancements

    • #8595 - Add PON interface types
    • #8723 - Enable bulk renaming of devices
    • #9161 - Pretty print JSON custom field data when editing
    • #9505 - Display extra addressing details for IPv4 prefixes
    • #9625 - Add phone & email details to contacts panel
    • #9857 - Add clear button to quick search fields
    • #9933 - Add DOCSIS interface type

    Bug Fixes

    • #9491 - Remove button for adding inventory item templates to module type components
    • #9979 - Fix Markdown rendering for custom fields in table columns
    • #9986 - Workaround for upstream timezone data bug
    Source code(tar.gz)
    Source code(zip)
  • v3.2.8(Aug 8, 2022)

    Enhancements

    • #9062 - Add/edit {module} substitution to help text for component template name
    • #9637 - Add site group field to rack reservation form
    • #9762 - Add nat_outside column to the IPAddress table
    • #9825 - Add contacts column to virtual machines table
    • #9881 - Increase granularity in utilization graph values
    • #9882 - Add manufacturer column to modules table
    • #9883 - Linkify location column in power panels table
    • #9906 - Include color attribute in front & rear port YAML import/export

    Bug Fixes

    • #9827 - Fix assignment of module bay position during bulk creation
    • #9871 - Fix utilization graph value alignments
    • #9884 - Prevent querying assigned VRF on prefix object init
    • #9885 - Fix child prefix counts when editing/deleting aggregates in bulk
    • #9891 - Ensure consistent ordering for tags during object serialization
    • #9919 - Fix potential XSS avenue via linked objects in tables
    • #9948 - Fix TypeError exception when requesting API tokens list as non-authenticated user
    • #9949 - Fix KeyError exception resulting from invalid API token provisioning request
    • #9950 - Prevent redirection to arbitrary URLs via next parameter on login URL
    • #9952 - Prevent InvalidMove when attempting to assign a nested child object as parent
    Source code(tar.gz)
    Source code(zip)
  • v3.3-beta2(Aug 3, 2022)

    Breaking Changes

    • Device position and rack unit values are now reported as decimals (e.g. 1.0 or 1.5) to support modeling half-height rack units.
    • The nat_outside relation on the IP address model now returns a list of zero or more related IP addresses, rather than a single instance (or None).
    • Several fields on the cable API serializers have been altered or removed to support multiple-object cable terminations:

    | Old Name | Old Type | New Name | New Type | |----------------------|----------|-----------------------|----------| | termination_a_type | string | Removed | - | | termination_b_type | string | Removed | - | | termination_a_id | integer | Removed | - | | termination_b_id | integer | Removed | - | | termination_a | object | a_terminations | list | | termination_b | object | b_terminations | list |

    • As with the cable model, several API fields on all objects to which cables can be connected (interfaces, circuit terminations, etc.) have been changed:

    | Old Name | Old Type | New Name | New Type | |--------------------------------|----------|---------------------------------|----------| | link_peer | object | link_peers | list | | link_peer_type | string | link_peers_type | string | | connected_endpoint | object | connected_endpoints | list | | connected_endpoint_type | string | connected_endpoints_type | string | | connected_endpoint_reachable | boolean | connected_endpoints_reachable | boolean |

    • The cable path serialization returned by the /paths/ endpoint for pass-through ports has been simplified, and the following fields removed: origin_type, origin, destination_type, destination. (Additionally, is_complete has been added.)

    New Features

    Multi-object Cable Terminations (#9102)

    When creating a cable in NetBox, each end can now be attached to multiple objects. This allows accurate modeling of duplex fiber connections to individual termination ports and breakout cables, as examples. (Note that all terminations attached to one end of a cable must be the same object type, but do not need to connect to the same parent object.) Additionally, cable terminations can now be modified without needing to delete and recreate the cable.

    L2VPN Modeling (#8157)

    NetBox can now model a variety of L2 VPN technologies, including VXLAN, VPLS, and others. Each L2VPN can be terminated to multiple device or virtual machine interfaces and/or VLANs to track connectivity across an overlay. Similarly to VRFs, each L2VPN can also have import and export route targets associated with it.

    PoE Interface Attributes (#1099)

    Two new fields have been added to the device interface model to track power over Ethernet (PoE) capabilities:

    • PoE mode: Power supplying equipment (PSE) or powered device (PD)
    • PoE type: Applicable IEEE standard or other power type

    Half-Height Rack Units (#51)

    Device type height can now be specified in 0.5U increments, allowing for the creation of half-height devices. Additionally, a device can be installed at the half-unit mark within a rack (e.g. U2.5). For example, two half-height devices positioned in sequence will consume a single rack unit; two consecutive 1.5U devices will consume 3U of space.

    Restrict API Tokens by Client IP (#8233)

    API tokens can now be restricted to use by certain client IP addresses or networks. For example, an API token with its allowed_ips list set to [192.0.2.0/24] will only permit authentication from API clients within that network; requests from other sources will fail authentication. This can be very useful for restricting the use of a token to specific clients.

    Reference User in Permission Constraints (#9074)

    NetBox's permission constraints have been expanded to support referencing the current user associated with a request using the special $user token. As an example, this enables an administrator to efficiently grant each user to edit his or her own journal entries, but not those created by other users.

    {
      "created_by": "$user"
    }
    

    Custom Field Grouping (#8495)

    A group_name field has been added to the custom field model to enable organizing related custom fields by group. Similarly to custom links, custom links which have been assigned to a common group will be rendered within that group when viewing an object in the UI. (Custom field grouping has no effect on API operation.)

    Toggle Custom Field Visibility (#9166)

    The behavior of each custom field within the NetBox UI can now be controlled individually by toggling its UI visibility. Three settings are available:

    • Read/write: The custom field is included when viewing and editing objects (default).
    • Read-only: The custom field is displayed when viewing an object, but it cannot be edited via the UI. (It will appear in the form as a read-only field.)
    • Hidden: The custom field will never be displayed within the UI. This option is recommended for fields which are not intended for use by human users.

    Custom field UI visibility has no impact on API operation.

    Enhancements

    • #1202 - Support overlapping assignment of NAT IP addresses
    • #4350 - Illustrate reservations vertically alongside rack elevations
    • #4434 - Enable highlighting devices within rack elevations
    • #5303 - A virtual machine may be assigned to a site and/or cluster
    • #7120 - Add termination_date field to Circuit
    • #7744 - Add status field to Location
    • #8171 - Populate next available address when cloning an IP
    • #8222 - Enable the assignment of a VM to a specific host device within a cluster
    • #8471 - Add status field to Cluster
    • #8511 - Enable custom fields and tags for circuit terminations
    • #8995 - Enable arbitrary ordering of REST API results
    • #9070 - Hide navigation menu items based on user permissions
    • #9177 - Add tenant assignment for wireless LANs & links
    • #9391 - Remove 500-character limit for custom link text & URL fields
    • #9536 - Track API token usage times
    • #9582 - Enable assigning config contexts based on device location

    Bug Fixes (from Beta1)

    • #9728 - Fix validation when assigning a virtual machine to a device
    • #9729 - Fix ordering of content type creation to ensure compatability with demo data
    • #9730 - Fix validation error when creating a new cable via UI form
    • #9733 - Handle split paths during trace when fanning out to front ports with differing cables
    • #9765 - Report correct segment count under cable trace UI view
    • #9778 - Fix exception during cable deletion after deleting a connected termination
    • #9788 - Ensure denormalized fields on CableTermination are kept in sync with related objects
    • #9789 - Fix rendering of cable traces ending at provider networks
    • #9794 - Fix link to connect a rear port to a circuit termination
    • #9818 - Fix circuit side selection when connecting a cable to a circuit termination
    • #9829 - Arrange custom fields by group when editing objects
    • #9843 - Fix rendering of custom field values (regression from #9647)
    • #9844 - Fix interface api request when creating/editing L2VPN termination
    • #9847 - Respect desc_units when ordering rack units

    Plugins API

    • #9075 - Introduce AbortRequest exception for cleanly interrupting object mutations
    • #9092 - Add support for ObjectChildrenView generic view
    • #9228 - Subclasses of ChangeLoggingMixin can override serialize_object() to control JSON serialization for change logging
    • #9414 - Add clone() method to NetBoxModel for copying instance attributes
    • #9647 - Introduce customfield_value template tag

    Other Changes

    • #9261 - NetBoxTable no longer automatically clears pre-existing calls to prefetch_related() on its queryset
    • #9434 - Enabled django-rich test runner for more user-friendly output
    • #9903 - Implement a mechanism for automatically updating denormalized fields
    Source code(tar.gz)
    Source code(zip)
  • v3.2.7(Jul 20, 2022)

    Enhancements

    • #9705 - Support filter expressions for the serial field on racks, devices, and inventory items
    • #9741 - Check for UserConfig instance during user login
    • #9745 - Add wireless LANs and links to global search

    Bug Fixes

    • #9437 - Standardize form submission buttons and behavior when using enter key
    • #9499 - Fix filtered bulk deletion of VM Interfaces
    • #9634 - Fix image URLs in rack elevations when using external storage
    • #9715 - Fix SOCIAL_AUTH_PIPELINE config parameter not taking effect
    • #9754 - Fix regression introduced by #9632
    • #9746 - Permit filtering interfaces by arbitrary speed value in UI
    • #9749 - Retain original slug values when modifying object names
    • #9775 - Fix exception when viewing a report with no description
    Source code(tar.gz)
    Source code(zip)
  • v3.3-beta1(Jul 14, 2022)

    Breaking Changes

    • Device position and rack unit values are now reported as decimals (e.g. 1.0 or 1.5) to support modeling half-height rack units.
    • The nat_outside relation on the IP address model now returns a list of zero or more related IP addresses, rather than a single instance (or None).
    • Several fields on the cable API serializers have been altered or removed to support multiple-object cable terminations:

    | Old Name | Old Type | New Name | New Type | |----------------------|----------|-----------------------|----------| | termination_a_type | string | Removed | - | | termination_b_type | string | Removed | - | | termination_a_id | integer | Removed | - | | termination_b_id | integer | Removed | - | | termination_a | object | a_terminations | list | | termination_b | object | b_terminations | list |

    • As with the cable model, several API fields on all objects to which cables can be connected (interfaces, circuit terminations, etc.) have been changed:

    | Old Name | Old Type | New Name | New Type | |--------------------------------|----------|---------------------------------|----------| | link_peer | object | link_peers | list | | link_peer_type | string | link_peers_type | string | | connected_endpoint | object | connected_endpoints | list | | connected_endpoint_type | string | connected_endpoints_type | string | | connected_endpoint_reachable | boolean | connected_endpoints_reachable | boolean |

    • The cable path serialization returned by the /paths/ endpoint for pass-through ports has been simplified, and the following fields removed: origin_type, origin, destination_type, destination. (Additionally, is_complete has been added.)

    New Features

    Multi-object Cable Terminations (#9102)

    When creating a cable in NetBox, each end can now be attached to multiple objects. This allows accurate modeling of duplex fiber connections to individual termination ports and breakout cables, as examples. (Note that all terminations attached to one end of a cable must be the same object type, but do not need to connect to the same parent object.) Additionally, cable terminations can now be modified without needing to delete and recreate the cable.

    L2VPN Modeling (#8157)

    NetBox can now model a variety of L2 VPN technologies, including VXLAN, VPLS, and others. Each L2VPN can be terminated to multiple device or virtual machine interfaces and/or VLANs to track connectivity across an overlay. Similarly to VRFs, each L2VPN can also have import and export route targets associated with it.

    PoE Interface Attributes (#1099)

    Two new fields have been added to the device interface model to track power over Ethernet (PoE) capabilities:

    • PoE mode: Power supplying equipment (PSE) or powered device (PD)
    • PoE type: Applicable IEEE standard or other power type

    Half-Height Rack Units (#51)

    Device type height can now be specified in 0.5U increments, allowing for the creation of half-height devices. Additionally, a device can be installed at the half-unit mark within a rack (e.g. U2.5). For example, two half-height devices positioned in sequence will consume a single rack unit; two consecutive 1.5U devices will consume 3U of space.

    Restrict API Tokens by Client IP (#8233)

    API tokens can now be restricted to use by certain client IP addresses or networks. For example, an API token with its allowed_ips list set to [192.0.2.0/24] will only permit authentication from API clients within that network; requests from other sources will fail authentication. This can be very useful for restricting the use of a token to specific clients.

    Reference User in Permission Constraints (#9074)

    NetBox's permission constraints have been expanded to support referencing the current user associated with a request using the special $user token. As an example, this enables an administrator to efficiently grant each user to edit his or her own journal entries, but not those created by other users.

    {
      "created_by": "$user"
    }
    

    Custom Field Grouping (#8495)

    A group_name field has been added to the custom field model to enable organizing related custom fields by group. Similarly to custom links, custom links which have been assigned to a common group will be rendered within that group when viewing an object in the UI. (Custom field grouping has no effect on API operation.)

    Toggle Custom Field Visibility (#9166)

    The behavior of each custom field within the NetBox UI can now be controlled individually by toggling its UI visibility. Three settings are available:

    • Read/write: The custom field is included when viewing and editing objects (default).
    • Read-only: The custom field is displayed when viewing an object, but it cannot be edited via the UI. (It will appear in the form as a read-only field.)
    • Hidden: The custom field will never be displayed within the UI. This option is recommended for fields which are not intended for use by human users.

    Custom field UI visibility has no impact on API operation.

    Enhancements

    • #1202 - Support overlapping assignment of NAT IP addresses
    • #4350 - Illustrate reservations vertically alongside rack elevations
    • #4434 - Enable highlighting devices within rack elevations
    • #5303 - A virtual machine may be assigned to a site and/or cluster
    • #7120 - Add termination_date field to Circuit
    • #7744 - Add status field to Location
    • #8171 - Populate next available address when cloning an IP
    • #8222 - Enable the assignment of a VM to a specific host device within a cluster
    • #8471 - Add status field to Cluster
    • #8511 - Enable custom fields and tags for circuit terminations
    • #8995 - Enable arbitrary ordering of REST API results
    • #9070 - Hide navigation menu items based on user permissions
    • #9177 - Add tenant assignment for wireless LANs & links
    • #9536 - Track API token usage times
    • #9582 - Enable assigning config contexts based on device location

    Plugins API

    • #9075 - Introduce AbortRequest exception for cleanly interrupting object mutations
    • #9092 - Add support for ObjectChildrenView generic view
    • #9228 - Subclasses of ChangeLoggingMixin can override serialize_object() to control JSON serialization for change logging
    • #9414 - Add clone() method to NetBoxModel for copying instance attributes
    • #9647 - Introduce customfield_value template tag

    Other Changes

    • #9261 - NetBoxTable no longer automatically clears pre-existing calls to prefetch_related() on its queryset
    • #9434 - Enabled django-rich test runner for more user-friendly output
    Source code(tar.gz)
    Source code(zip)
  • v3.2.6(Jul 11, 2022)

    Enhancements

    • #7702 - Enable dynamic configuration for default powerfeed attributes
    • #9396 - Allow filtering modules by bay ID
    • #9403 - Enable modifying virtual chassis properties when creating/editing a device
    • #9540 - Add filters for assigned device & VM to IP addresses list
    • #9686 - Add tenant group column for all object tables with tenant assignments

    Bug Fixes

    • #8854 - Fix REMOTE_AUTH_DEFAULT_GROUPS for social-auth backends
    • #9575 - Fix AttributeError exception for FHRP group with an IP address assigned
    • #9597 - Include installed_module in module bay REST API serializer
    • #9632 - Automatically focus on search box when expanding dropdowns
    • #9657 - Fix filtering for custom fields and webhooks in the UI
    • #9682 - Fix bulk assignment of ASNs to sites
    • #9687 - Don't restrict custom text field lengths when entering via UI form
    • #9704 - Include last_updated field on JournalEntry REST API serializer
    Source code(tar.gz)
    Source code(zip)
  • v3.2.5(Jun 20, 2022)

    Enhancements

    • #8704 - Shift-click to select multiple objects in a list
    • #8882 - Support filtering IP addresses by multiple parent prefixes
    • #8893 - Include count of IP ranges under tenant view
    • #9417 - Initialize manufacturer selection when inserting a new module
    • #9501 - Add support for custom Jinja2 filters
    • #9517 - Linkify related power port on power outlet view
    • #9525 - Provide one-click edit link for objects in tables
    • #9533 - Move Markdown reference to local documentation
    • #9534 - Add VLAN group selector to interface bulk edit forms
    • #9556 - Leave dropdown open upon selection for multi-select fields

    Bug Fixes

    • #8944 - Fix rendering of Markdown links with colons
    • #9108 - Fix rendering of bracketed Markdown links
    • #9374 - Improve performance when retrieving devices/VMs with config context data
    • #9466 - Avoid sending webhooks after script/report failure
    • #9480 - Fix sorting services & service templates by port numbers
    • #9484 - Include services listening on "all IPs" under IP address view
    • #9486 - Fix redirect URL when adding device components from the module view
    • #9495 - Correct link to contacts in contact groups table column
    • #9503 - Hyperlinks in rack elevation SVGs must always use absolute URLs
    • #9512 - Fix duplicate site results when searching by ASN
    • #9524 - Correct order of VLAN fields under VM interface creation form
    • #9537 - Ensure consistent use of placeholder tag throughout UI
    • #9549 - Fix device counts for rack list under rack role view
    Source code(tar.gz)
    Source code(zip)
  • v3.2.4(May 31, 2022)

    Enhancements

    • #8374 - Display device type and asset tag if name is blank but asset tag is populated
    • #8922 - Add service list to IP address view
    • #9098 - Add "other" types for power ports/outlets, pass-through ports
    • #9239 - Enable filtering by contact group for all models which support contact assignment
    • #9277 - Introduce CSRF_COOKIE_NAME configuration parameter
    • #9347 - Include services in global search
    • #9379 - Redirect to virtual chassis view after adding a member device
    • #9451 - Add export_raw argument for TemplateColumn

    Bug Fixes

    • #9094 - Fix partial address search within Prefix and Aggregate filters
    • #9291 - Improve data validation for MultiObjectVar script fields
    • #9358 - Annotate circuit count for providers list under ASN view
    • #9387 - Ensure ActionsColumn extra_buttons are always displayed
    • #9402 - Fix custom field population when creating a virtual chassis
    • #9407 - Clean up display of prefixes values when exporting prefixes list
    • #9420 - Fix custom script class inheritance
    • #9425 - Fix bulk import for object and multi-object custom fields
    • #9430 - Fix passing of initial form data for DynamicModelChoiceFields
    Source code(tar.gz)
    Source code(zip)
  • v3.2.3(May 12, 2022)

    Enhancements

    • #8805 - Add "mixed" option for device airflow indication
    • #8894 - Include full names when listing users
    • #8998 - Enable filtering racks & reservations by site group
    • #9122 - Introduce clearcache management command & clear cache during upgrade
    • #9221 - Add definition list support for Markdown
    • #9260 - Apply user preferences to tables under object detail views
    • #9278 - Linkify device types count under manufacturers list
    • #9280 - Allow adopting existing components when installing a module
    • #9314 - Add device and VM filters for FHRP group assignments
    • #9340 - Introduce support for error reporting via Sentry
    • #9343 - Add Ubiquiti SmartPower power outlet type

    Bug Fixes

    • #9190 - Prevent exception when attempting to instantiate module components which already exist on the parent device
    • #9267 - Remove invalid entry in IP address role choices
    • #9296 - Improve Markdown link sanitization
    • #9306 - Include VC master interfaces when selecting a LAG/bridge for a VC member interface
    • #9311 - Permit creating contact assignment without a priority via the REST API
    • #9313 - Remove HTML code from CSV output of many-to-many relationships
    • #9330 - Add missing module_type field to REST API serializers for modular device component templates
    Source code(tar.gz)
    Source code(zip)
  • v3.2.2(Apr 28, 2022)

    Enhancements

    • #9060 - Add device type filters for device bays, module bays, and inventory items
    • #9152 - Annotate related object type under custom field view
    • #9192 - Add Ubiquiti SmartPower connector type
    • #9214 - Linkify cluster counts in cluster type & group tables

    Bug Fixes

    • #4264 - Treat 0th IP as unusable for IPv6 prefixes (excluding /127s)
    • #8941 - Fix dynamic dropdown behavior when browser is zoomed
    • #8959 - Prevent exception when refreshing scripts list (avoid race condition)
    • #9132 - Limit location options by selected site when creating a wireless link
    • #9133 - Upgrade script should require Python 3.8 or later
    • #9138 - Avoid inadvertent form submission when utilizing quick search field on object lists
    • #9151 - Child prefix counts not annotated on aggregates list under RIR view
    • #9156 - Fix loading UserConfig data from fixtures
    • #9158 - Do not list tags field for CSV forms which do not support tag assignment
    • #9194 - Support position assignment when add module bays to multiple devices
    • #9206 - Show header for comments field under module & module type creation views
    • #9222 - Fix circuit ID display under cable view
    • #9227 - Fix related object assignment when recording change record for interfaces
    Source code(tar.gz)
    Source code(zip)
  • v3.2.1(Apr 14, 2022)

    Enhancements

    • #5479 - Allow custom job timeouts for scripts & reports
    • #8543 - Improve filtering for wireless LAN VLAN selection
    • #8920 - Limit number of non-racked devices displayed
    • #8956 - Retain old script/report results for configured lifetime
    • #8973 - Display VLAN group count under site view
    • #9081 - Add fhrpgroup_id filter for IP addresses
    • #9099 - Enable display of installed module serial & asset tag in module bays list
    • #9110 - Add Neutrik proprietary power connectors
    • #9123 - Improve appearance of SSO login providers

    Bug Fixes

    • #8931 - Copy assigned tenant when cloning a location
    • #9055 - Restore ability to move inventory item to other device
    • #9057 - Fix missing instance counts for module types
    • #9061 - Fix general search for device components
    • #9065 - Min/max VID should not be required when filtering VLAN groups
    • #9079 - Fail validation when an inventory item is assigned as its own parent
    • #9096 - Remove duplicate filter tag when filtering by "none"
    • #9100 - Include position field in module type YAML export
    • #9116 - assigned_to_interface filter for IP addresses should not match FHRP group assignments
    • #9118 - Fix validation error when importing VM child interfaces
    • #9128 - Resolve component labels per module bay position when installing modules
    Source code(tar.gz)
    Source code(zip)
  • v3.2.0(Apr 5, 2022)

    WARNING: NetBox v3.2 requires Python 3.8 or later.

    WARNING: This release includes a database migration that will remove the asn, contact_name, contact_phone, and contact_email fields from the site model. (These fields have been superseded by the ASN and contact models introduced in NetBox v3.1.) To protect against the accidental destruction of data, the upgrade process will fail if any sites still have data in any of these fields. To bypass this safeguard, set the NETBOX_DELETE_LEGACY_DATA environment variable when running the upgrade script, which will permit the destruction of legacy data.

    NOTE: A set of migration scripts is available to assist with the migration of legacy site data.

    Breaking Changes

    • Automatic redirection of legacy slug-based URL paths has been removed. URL-based slugs were changed to use numeric IDs in v2.11.0.
    • The asn field has been removed from the site model. Please replicate any site ASN assignments to the ASN model introduced in NetBox v3.1 prior to upgrading.
    • The asn query filter for sites now matches against the AS number of assigned ASN objects.
    • The contact_name, contact_phone, and contact_email fields have been removed from the site model. Please replicate any data remaining in these fields to the contact model introduced in NetBox v3.1 prior to upgrading.
    • The created field of all change-logged models now conveys a full datetime object, rather than only a date. (Previous date-only values will receive a timestamp of 00:00.) While this change is largely unconcerning, strictly-typed API consumers may need to be updated.
    • A pre_run() method has been added to the base Report class. Although unlikely to affect most installations, you may need to alter any reports which already use this name for a method.
    • Webhook URLs now support Jinja2 templating. Although this is unlikely to introduce any issues, it's possible that an unusual URL might trigger a Jinja2 rendering error, in which case the URL would need to be properly escaped.

    New Features

    Plugins Framework Extensions (#8333)

    NetBox's plugins framework has been extended considerably in this release. Additions include:

    • Officially-supported generic view classes for common CRUD operations:
      • ObjectView
      • ObjectEditView
      • ObjectDeleteView
      • ObjectListView
      • BulkImportView
      • BulkEditView
      • BulkDeleteView
    • The NetBoxModel base class, which enables various NetBox features, including:
      • Change logging
      • Custom fields
      • Custom links
      • Custom validation
      • Export templates
      • Journaling
      • Tags
      • Webhooks
    • Four base form classes for manipulating objects via the UI:
      • NetBoxModelForm
      • NetBoxModelCSVForm
      • NetBoxModelBulkEditForm
      • NetBoxModelFilterSetForm
    • The NetBoxModelFilterSet base class for plugin filter sets
    • The NetBoxTable base class for rendering object tables with django-tables2, as well as various custom column classes
    • Function-specific templates (for generic views)
    • Various custom template tags and filters
    • NetBoxModelViewSet and several base serializer classes now provide enhanced REST API functionality
    • Plugins can now extend NetBox's GraphQL API with their own schema

    No breaking changes to previously supported components have been introduced in this release. However, plugin authors are encouraged to audit their existing code for misuse of unsupported components, as much of NetBox's internal code base has been reorganized.

    Modules & Module Types (#7844)

    Several new models have been added to represent field-replaceable device modules, such as line cards installed within a chassis-based switch or router. Similar to devices, each module is instantiated from a user-defined module type, and can have components (interfaces, console ports, etc.) associated with it. These components become available to the parent device once the module has been installed within a module bay. This provides a convenient mechanism to effect the addition and deletion of device components as modules are installed and removed.

    Automatic renaming of module components is also supported. When a new module is created, any occurrence of the string {module} in a component name will be replaced with the position of the module bay into which the module is being installed.

    As with device types, the NetBox community offers a selection of curated real-world module type definitions in our device type library. These YAML files can be imported directly to NetBox for your convenience.

    Custom Object Fields (#7006)

    Two new types of custom field have been introduced: object and multi-object. These can be used to associate an object in NetBox with some other arbitrary object(s) regardless of its type. For example, you might create a custom field named primary_site on the tenant model so that each tenant can have particular site designated as its primary. The multi-object custom field type allows for the assignment of multiple objects of the same type.

    Custom field object assignment is fully supported in the REST API, and functions similarly to built-in foreign key relations. Nested representations are provided automatically for each custom field object.

    Custom Status Choices (#8054)

    Custom choices can be now added to most object status fields in NetBox. This is done by defining the FIELD_CHOICES configuration parameter to map field identifiers to an iterable of custom choices an (optionally) colors. These choices are populated automatically when NetBox initializes. For example, the following configuration will add three custom choices for the site status field, each with a designated color:

    FIELD_CHOICES = {
        'dcim.Site.status': (
            ('foo', 'Foo', 'red'),
            ('bar', 'Bar', 'green'),
            ('baz', 'Baz', 'blue'),
        )
    }
    

    This will replace all default choices for this field with those listed. If instead the intent is to extend the set of default choices, this can be done by appending a plus sign (+) to the end of the field identifier. For example, the following will add a single extra choice while retaining the defaults provided by NetBox:

    FIELD_CHOICES = {
        'dcim.Site.status+': (
            ('fubar', 'FUBAR', 'red'),
        )
    }
    

    Improved User Preferences (#7759)

    A robust new mechanism for managing user preferences is included in this release. The user preferences form has been improved for better usability, and administrators can now define default preferences for all users with the DEFAULT_USER_PREFERENCES configuration parameter. For example, this can be used to define the columns which appear by default in a table:

    DEFAULT_USER_PREFERENCES = {
        'tables': {
            'IPAddressTable': {
                'columns': ['address', 'status', 'created', 'description']
            }
        }
    }
    

    Users can adjust their own preferences under their user profile. A complete list of supported preferences is available in NetBox's developer documentation.

    Inventory Item Roles (#3087)

    A new model has been introduced to represent functional roles for inventory items, similar to device roles. The assignment of roles to inventory items is optional.

    Inventory Item Templates (#8118)

    Inventory items can now be templatized on a device type similar to other components (such as interfaces or console ports). This enables users to better pre-model fixed hardware components such as power supplies or hard disks.

    Inventory item templates can be arranged hierarchically within a device type, and may be assigned to other templated components. These relationships will be mirrored when instantiating inventory items on a newly-created device (see #7846). For example, if defining an optic assigned to an interface template on a device type, the instantiated device will mimic this relationship between the optic and interface.

    Service Templates (#1591)

    A new service template model has been introduced to assist in standardizing the definition and association of applications with devices and virtual machines. As an alternative to manually defining a name, protocol, and port(s) each time a service is created, a user now has the option of selecting a pre-defined template from which these values will be populated.

    Automatic Provisioning of Next Available VLANs (#2658)

    A new REST API endpoint has been added at /api/ipam/vlan-groups/<id>/available-vlans/. A GET request to this endpoint will return a list of available VLANs within the group. A POST request can be made specifying the name(s) of one or more VLANs to create within the group, and their VLAN IDs will be assigned automatically from the available pool.

    Where it is desired to limit the range of available VLANs within a group, users can define a minimum and/or maximum VLAN ID per group (see #8168).

    Enhancements

    • #5429 - Enable toggling the placement of table pagination controls
    • #6954 - Remember users' table ordering preferences
    • #7650 - Expose AUTH_PASSWORD_VALIDATORS setting to enforce password validation for local accounts
    • #7679 - Add actions menu to all object tables
    • #7681 - Add service_id field for provider networks
    • #7784 - Support cluster type assignment for config contexts
    • #7846 - Enable associating inventory items with device components
    • #7852 - Enable the assignment of interfaces to VRFs
    • #7853 - Add speed and duplex fields to device interface model
    • #8168 - Add min_vid and max_vid fields to VLAN group
    • #8295 - Jinja2 rendering is now supported for webhook URLs
    • #8296 - Allow disabling custom links
    • #8307 - Add data_type indicator to REST API serializer for custom fields
    • #8463 - Change the created field on all change-logged models from date to datetime
    • #8496 - Enable assigning multiple ASNs to a provider
    • #8572 - Add a pre_run() method for reports
    • #8593 - Add a link field for contacts
    • #8649 - Enable customization of configuration module using NETBOX_CONFIGURATION environment variable
    • #9006 - Enable custom fields, custom links, and tags for journal entries

    Bug Fixes (From Beta2)

    • #8658 - Fix display of assigned components under inventory item lists
    • #8838 - Fix FieldError exception during global search
    • #8845 - Correct default ASN formatting in table
    • #8869 - Fix NoReverseMatch exception when displaying tag w/assignments
    • #8872 - Enable filtering by custom object fields
    • #8970 - Permit nested inventory item templates on device types
    • #8976 - Add missing object_type field on CustomField REST API serializer
    • #8978 - Fix instantiation of front ports when provisioning a module
    • #9007 - Fix FieldError exception when instantiating a device type with nested inventory items

    Other Changes

    • #7731 - Require Python 3.8 or later
    • #7743 - Remove legacy ASN field from site model
    • #7748 - Remove legacy contact fields from site model
    • #8031 - Remove automatic redirection of legacy slug-based URLs
    • #8195, #8454 - Use 64-bit integers for all primary keys
    • #8509 - CSRF_TRUSTED_ORIGINS is now a discrete configuration parameter (rather than being populated from ALLOWED_HOSTS)
    • #8684 - Change custom link template context variable obj to object (backward-compatible)

    REST API Changes

    • Added the following endpoints:
      • /api/dcim/inventory-item-roles/
      • /api/dcim/inventory-item-templates/
      • /api/dcim/modules/
      • /api/dcim/module-bays/
      • /api/dcim/module-bay-templates/
      • /api/dcim/module-types/
      • /api/ipam/service-templates/
      • /api/ipam/vlan-groups/<id>/available-vlans/
    • circuits.Provider
      • Added asns field
    • circuits.ProviderNetwork
      • Added service_id field
    • dcim.ConsolePort
      • Added module field
    • dcim.ConsoleServerPort
      • Added module field
    • dcim.FrontPort
      • Added module field
    • dcim.Interface
      • Added module, speed, duplex, and vrf fields
    • dcim.InventoryItem
      • Added component_type, component_id, and role fields
      • Added read-only component field (GFK)
    • dcim.PowerPort
      • Added module field
    • dcim.PowerOutlet
      • Added module field
    • dcim.RearPort
      • Added module field
    • dcim.Site
      • Removed the asn, contact_name, contact_phone, and contact_email fields
    • extras.ConfigContext
      • Add cluster_types field
    • extras.CustomField
      • Added data_type and object_type fields
    • extras.CustomLink
      • Added enabled field
    • extras.JournalEntry
      • Added custom_fields and tags fields
    • ipam.ASN
      • Added provider_count field
    • ipam.VLANGroup
      • Added the /availables-vlans/ endpoint
      • Added min_vid and max_vid fields
    • tenancy.Contact
      • Added link field
    • virtualization.VMInterface
      • Added vrf field
    Source code(tar.gz)
    Source code(zip)
  • v3.1.11(Apr 5, 2022)

    Enhancements

    • #8163 - Show bridge interface members under interface view
    • #8365 - Enable filtering child devices by parent device ID
    • #8785 - Permit wildcard values in IP address DNS names
    • #8790 - Include site and prefixes columns in VLAN group VLANs table
    • #8830 - Add Checkpoint ClusterXL protocol for FHRP groups
    • #8974 - Use monospace font for text areas in config revision form
    • #9012 - Linkify circuits count in providers list
    • #9036 - Add bulk edit capability for site contact fields

    Bug Fixes

    • #8866 - Prevent exception when searching for a rack position with no rack specified under device edit view
    • #9009 - Fix device count for racks in global search results
    Source code(tar.gz)
    Source code(zip)
  • v3.1.10(Mar 25, 2022)

    Enhancements

    • #8232 - Use a different color for 100% utilization bars
    • #8457 - Enable adding non-racked devices from site & location views
    • #8553 - Add missing object types to global search form
    • #8575 - Add rack columns to cables list
    • #8645 - Enable filtering objects by assigned contacts & contact roles
    • #8926 - Add device type, role columns to device bay table

    Bug Fixes

    • #8696 - Fix help link under FHRP group assigment creation view
    • #8813 - Retain global search bar query after submitting
    • #8820 - Fix navbar background color in dark mode
    • #8850 - Show airflow field on device REST API serializer when config context data is included
    • #8905 - Disable ordering by assigned tags to prevent erroneous results
    • #8919 - Fix filtering of VLAN groups by site under prefix edit form
    • #8924 - Improve load time of custom script list
    • #8932 - Fix error when setting null value for interface rf_role via REST API
    • #8935 - Correct ordering of next/previous racks to use naturalized names
    • #8947 - Retain filter parameters when handling an export template exception
    • #8951 - Allow changing device type & platform to different manufacturer simultaneously
    • #8952 - Device images in rear rack elevations should be hyperlinked
    Source code(tar.gz)
    Source code(zip)
  • v3.2-beta2(Mar 9, 2022)

    WARNING: NetBox v3.2 requires Python 3.8 or later.

    Breaking Changes

    • Automatic redirection of legacy slug-based URL paths has been removed. URL-based slugs were changed to use numeric IDs in v2.11.0.
    • The asn field has been removed from the site model. Please replicate any site ASN assignments to the ASN model introduced in NetBox v3.1 prior to upgrading.
    • The asn query filter for sites now matches against the AS number of assigned ASN objects.
    • The contact_name, contact_phone, and contact_email fields have been removed from the site model. Please replicate any data remaining in these fields to the contact model introduced in NetBox v3.1 prior to upgrading.
    • The created field of all change-logged models now conveys a full datetime object, rather than only a date. (Previous date-only values will receive a timestamp of 00:00.) While this change is largely unconcerning, strictly-typed API consumers may need to be updated.
    • A pre_run() method has been added to the base Report class. Although unlikely to affect most installations, you may need to alter any reports which already use this name for a method.
    • Webhook URLs now support Jinja2 templating. Although this is unlikely to introduce any issues, it's possible that an unusual URL might trigger a Jinja2 rendering error, in which case the URL would need to be properly escaped.

    New Features

    Plugins Framework Extensions (#8333)

    NetBox's plugins framework has been extended considerably in this release. Additions include:

    • Officially-supported generic view classes for common CRUD operations:
      • ObjectView
      • ObjectEditView
      • ObjectDeleteView
      • ObjectListView
      • BulkImportView
      • BulkEditView
      • BulkDeleteView
    • The NetBoxModel base class, which enables various NetBox features, including:
      • Change logging
      • Custom fields
      • Custom links
      • Custom validation
      • Export templates
      • Journaling
      • Tags
      • Webhooks
    • Four base form classes for manipulating objects via the UI:
      • NetBoxModelForm
      • NetBoxModelCSVForm
      • NetBoxModelBulkEditForm
      • NetBoxModelFilterSetForm
    • The NetBoxModelFilterSet base class for plugin filter sets
    • The NetBoxTable base class for rendering object tables with django-tables2, as well as various custom column classes
    • Function-specific templates (for generic views)
    • Various custom template tags and filters
    • NetBoxModelViewSet and several base serializer classes now provide enhanced REST API functionality
    • Plugins can now extend NetBox's GraphQL API with their own schema

    No breaking changes to previously supported components have been introduced in this release. However, plugin authors are encouraged to audit their existing code for misuse of unsupported components, as much of NetBox's internal code base has been reorganized.

    Modules & Module Types (#7844)

    Several new models have been added to represent field-replaceable device modules, such as line cards installed within a chassis-based switch or router. Similar to devices, each module is instantiated from a user-defined module type, and can have components (interfaces, console ports, etc.) associated with it. These components become available to the parent device once the module has been installed within a module bay. This provides a convenient mechanism to effect the addition and deletion of device components as modules are installed and removed.

    Automatic renaming of module components is also supported. When a new module is created, any occurrence of the string {module} in a component name will be replaced with the position of the module bay into which the module is being installed.

    As with device types, the NetBox community offers a selection of curated real-world module type definitions in our device type library. These YAML files can be imported directly to NetBox for your convenience.

    Custom Object Fields (#7006)

    Two new types of custom field have been introduced: object and multi-object. These can be used to associate an object in NetBox with some other arbitrary object(s) regardless of its type. For example, you might create a custom field named primary_site on the tenant model so that each tenant can have particular site designated as its primary. The multi-object custom field type allows for the assignment of multiple objects of the same type.

    Custom field object assignment is fully supported in the REST API, and functions similarly to built-in foreign key relations. Nested representations are provided automatically for each custom field object.

    Custom Status Choices (#8054)

    Custom choices can be now added to most object status fields in NetBox. This is done by defining the FIELD_CHOICES configuration parameter to map field identifiers to an iterable of custom choices an (optionally) colors. These choices are populated automatically when NetBox initializes. For example, the following configuration will add three custom choices for the site status field, each with a designated color:

    FIELD_CHOICES = {
        'dcim.Site.status': (
            ('foo', 'Foo', 'red'),
            ('bar', 'Bar', 'green'),
            ('baz', 'Baz', 'blue'),
        )
    }
    

    This will replace all default choices for this field with those listed. If instead the intent is to extend the set of default choices, this can be done by appending a plus sign (+) to the end of the field identifier. For example, the following will add a single extra choice while retaining the defaults provided by NetBox:

    FIELD_CHOICES = {
        'dcim.Site.status+': (
            ('fubar', 'FUBAR', 'red'),
        )
    }
    

    Improved User Preferences (#7759)

    A robust new mechanism for managing user preferences is included in this release. The user preferences form has been improved for better usability, and administrators can now define default preferences for all users with the DEFAULT_USER_PREFERENCES configuration parameter. For example, this can be used to define the columns which appear by default in a table:

    DEFAULT_USER_PREFERENCES = {
        'tables': {
            'IPAddressTable': {
                'columns': ['address', 'status', 'created', 'description']
            }
        }
    }
    

    Users can adjust their own preferences under their user profile. A complete list of supported preferences is available in NetBox's developer documentation.

    Inventory Item Roles (#3087)

    A new model has been introduced to represent functional roles for inventory items, similar to device roles. The assignment of roles to inventory items is optional.

    Inventory Item Templates (#8118)

    Inventory items can now be templatized on a device type similar to other components (such as interfaces or console ports). This enables users to better pre-model fixed hardware components such as power supplies or hard disks.

    Inventory item templates can be arranged hierarchically within a device type, and may be assigned to other templated components. These relationships will be mirrored when instantiating inventory items on a newly-created device (see #7846). For example, if defining an optic assigned to an interface template on a device type, the instantiated device will mimic this relationship between the optic and interface.

    Service Templates (#1591)

    A new service template model has been introduced to assist in standardizing the definition and association of applications with devices and virtual machines. As an alternative to manually defining a name, protocol, and port(s) each time a service is created, a user now has the option of selecting a pre-defined template from which these values will be populated.

    Automatic Provisioning of Next Available VLANs (#2658)

    A new REST API endpoint has been added at /api/ipam/vlan-groups/<id>/available-vlans/. A GET request to this endpoint will return a list of available VLANs within the group. A POST request can be made specifying the name(s) of one or more VLANs to create within the group, and their VLAN IDs will be assigned automatically from the available pool.

    Where it is desired to limit the range of available VLANs within a group, users can define a minimum and/or maximum VLAN ID per group (see #8168).

    Enhancements

    • #5429 - Enable toggling the placement of table pagination controls
    • #6954 - Remember users' table ordering preferences
    • #7650 - Expose AUTH_PASSWORD_VALIDATORS setting to enforce password validation for local accounts
    • #7679 - Add actions menu to all object tables
    • #7681 - Add service_id field for provider networks
    • #7784 - Support cluster type assignment for config contexts
    • #7846 - Enable associating inventory items with device components
    • #7852 - Enable the assignment of interfaces to VRFs
    • #7853 - Add speed and duplex fields to device interface model
    • #8168 - Add min_vid and max_vid fields to VLAN group
    • #8295 - Jinja2 rendering is now supported for webhook URLs
    • #8296 - Allow disabling custom links
    • #8307 - Add data_type indicator to REST API serializer for custom fields
    • #8463 - Change the created field on all change-logged models from date to datetime
    • #8572 - Add a pre_run() method for reports
    • #8649 - Enable customization of configuration module using NETBOX_CONFIGURATION environment variable

    Bug Fixes (From Beta1)

    • #8655 - Fix AttributeError when viewing cabled interfaces
    • #8656 - Fix migration error when upgrading from a v2.11 database
    • #8659 - Fix display of multi-object custom fields after deleting related object
    • #8661 - Fix ValueError exception when trying to connect a cable
    • #8670 - Fix filtering device components by installed module
    • #8671 - Fix AttributeError when viewing console/power/interface connection lists
    • #8682 - Limit available VLANs by group min/max VIDs
    • #8683 - Fix ZoneInfoNotFoundError exception under Python 3.9+
    • #8761 - Correct view name resolution under journal entry views
    • #8763 - Fix inventory item component assignment
    • #8764 - Correct view name resolution for dynamic form fields
    • #8791 - Fix display of form validation failures during device component creation
    • #8792 - Fix creation of circuit terminations via UI
    • #8810 - Enable filtering modules by type
    • #8815 - Fix display of custom object fields in table columns

    Other Changes

    • #7731 - Require Python 3.8 or later
    • #7743 - Remove legacy ASN field from site model
    • #7748 - Remove legacy contact fields from site model
    • #8031 - Remove automatic redirection of legacy slug-based URLs
    • #8195, #8454 - Use 64-bit integers for all primary keys
    • #8509 - CSRF_TRUSTED_ORIGINS is now a discrete configuration parameter (rather than being populated from ALLOWED_HOSTS)
    • #8684 - Change custom link template context variable obj to object (backward-compatible)
    Source code(tar.gz)
    Source code(zip)
Owner
NetBox Community
Official home of the open-source IPAM/DCIM application NetBox and related applications
NetBox Community
pyinfra automates infrastructure super fast at massive scale. It can be used for ad-hoc command execution, service deployment, configuration management and more.

pyinfra automates/provisions/manages/deploys infrastructure super fast at massive scale. It can be used for ad-hoc command execution, service deployme

Nick Barrett 2.1k Dec 29, 2022
Software to automate the management and configuration of any infrastructure or application at scale. Get access to the Salt software package repository here:

Latest Salt Documentation Open an issue (bug report, feature request, etc.) Salt is the world’s fastest, most intelligent and scalable automation engi

SaltStack 12.9k Jan 4, 2023
CTF infrastructure deployment automation tool.

CTF infrastructure deployment automation tool. Focus on the challenges. Mirrored from

Fake News 1 Apr 12, 2022
Oracle Cloud Infrastructure Object Storage fsspec implementation

Oracle Cloud Infrastructure Object Storage fsspec implementation The Oracle Cloud Infrastructure Object Storage service is an internet-scale, high-per

Oracle 9 Dec 18, 2022
Ganeti is a virtual machine cluster management tool built on top of existing virtualization technologies such as Xen or KVM and other open source software.

Ganeti 3.0 =========== For installation instructions, read the INSTALL and the doc/install.rst files. For a brief introduction, read the ganeti(7) m

null 395 Jan 4, 2023
A declarative Kubeflow Management Tool inspired by Terraform

?? KRSH is Alpha version, so many bugs can be reported. If you find a bug, please write an Issue and grow the project together! A declarative Kubeflow

Riiid! 128 Oct 18, 2022
Simple ssh overlay for easy, remote server management written in Python GTK with paramiko

Simple "ssh" overlay for easy, remote server management written in Python GTK with paramiko

kłapouch 3 May 1, 2022
A tool to convert AWS EC2 instances back and forth between On-Demand and Spot billing models.

ec2-spot-converter This tool converts existing AWS EC2 instances back and forth between On-Demand and 'persistent' Spot billing models while preservin

jcjorel 152 Dec 29, 2022
Oncall is a calendar tool designed for scheduling and managing on-call shifts. It can be used as source of dynamic ownership info for paging systems like http://iris.claims.

Oncall See admin docs for information on how to run and manage Oncall. Development setup Prerequisites Debian/Ubuntu - sudo apt-get install libsasl2-d

LinkedIn 928 Dec 22, 2022
MagTape is a Policy-as-Code tool for Kubernetes that allows for evaluating Kubernetes resources against a set of defined policies to inform and enforce best practice configurations.

MagTape is a Policy-as-Code tool for Kubernetes that allows for evaluating Kubernetes resources against a set of defined policies to inform and enforce best practice configurations. MagTape includes variable policy enforcement, notifications, and targeted metrics.

T-Mobile 143 Dec 27, 2022
This is a tool to develop, build and test PHP extensions in Docker containers.

Develop, Build and Test PHP Extensions This is a tool to develop, build and test PHP extensions in Docker containers. Installation Clone this reposito

Suora GmbH 10 Oct 22, 2022
More than 130 check plugins for Icinga and other Nagios-compatible monitoring applications. Each plugin is a standalone command line tool (written in Python) that provides a specific type of check.

Python-based Monitoring Check Plugins Collection This Enterprise Class Check Plugin Collection offers a package of more than 130 Python-based, Nagios-

Linuxfabrik 119 Dec 27, 2022
A Blazing fast Security Auditing tool for Kubernetes

A Blazing fast Security Auditing tool for kubernetes!! Basic Overview Kubestriker performs numerous in depth checks on kubernetes infra to identify th

Vasant Chinnipilli 934 Jan 4, 2023
A cron monitoring tool written in Python & Django

Healthchecks Healthchecks is a cron job monitoring service. It listens for HTTP requests and email messages ("pings") from your cron jobs and schedule

Healthchecks 5.8k Jan 2, 2023
Convenient tool to manage multiple VMs at once using libvirt

Convenient tool to manage multiple VMs at once using libvirt Installing To install the tool and its dependencies: pip install -e . Getting completion

Cedric Bosdonnat 13 Nov 11, 2022
A tool to clone efficiently all the repos in an organization

cloner A tool to clone efficiently all the repos in an organization Installation MacOS (not yet tested) python3 -m venv .venv pip3 install virtualenv

Ramon 6 Apr 15, 2022
Caboto, the Kubernetes semantic analysis tool

Caboto Caboto, the Kubernetes semantic analysis toolkit. It contains a lightweight Python library for semantic analysis of plain Kubernetes manifests

Michael Schilonka 8 Nov 26, 2022
strava-offline is a tool to keep a local mirror of Strava activities for further analysis/processing:

strava-offline Overview strava-offline is a tool to keep a local mirror of Strava activities for further analysis/processing: synchronizes metadata ab

Tomáš Janoušek 29 Dec 14, 2022