Changelog History
Page 4
-
v2.7.1 Changes
January 17, 2020 -
v2.7.0 Changes
January 16, 2020Note: This release completely removes the topology map feature (#2745).
Note: NetBox v2.7 is the last major release that will support Python 3.5. Beginning with NetBox v2.8, Python 3.6 or higher will be required.
๐ New Features
โจ Enhanced Device Type Import (#451)
๐ NetBox now supports the import of device types and related component templates using definitions written in YAML or JSON. For example, the following will create a new device type with four network interfaces, two power ports, and a console port:
manufacturer: Acmemodel: Packet Shooter 9000slug: packet-shooter-9000u\_height: 1interfaces: - name: ge-0/0/0type: 1000base-t - name: ge-0/0/1type: 1000base-t - name: ge-0/0/2type: 1000base-t - name: ge-0/0/3type: 1000base-tpower-ports: - name: PSU0 - name: PSU1console-ports: - name: Console
This new functionality replaces the old CSV-based import form, which did not allow for bulk import of component templates.
Bulk Import of Device Components (#822)
Device components such as console ports, power ports, and interfaces can now be imported in bulk to multiple devices in CSV format. Here's an example showing the bulk import of interfaces to several devices:
device,name,type Switch1,Vlan100,Virtual Switch1,Vlan200,Virtual Switch2,Vlan100,Virtual Switch2,Vlan200,Virtual
The import form for each type of device component is available under the "Devices" item in the navigation menu.
External File Storage (#1814)
๐ In prior releases, the only option for storing uploaded files (e.g. image attachments) was to save them to the local filesystem on the NetBox server. This release introduces support for several remote storage backends provided by the
django-storages
library. These include:- Amazon S3
- ApacheLibcloud
- Azure Storage
- netbox-community Spaces
- โฌ๏ธ Dropbox
- FTP
- Google Cloud Storage
- SFTP
๐ฆ To enable remote file storage, first install the
django-storages
package:pip install django-storages
๐ง Then, set the appropriate storage backend and its configuration in
configuration.py
. Here's an example using Amazon S3:STORAGE\_BACKEND = 'storages.backends.s3boto3.S3Boto3Storage'STORAGE\_CONFIG = { 'AWS\_ACCESS\_KEY\_ID': '\<Key\>', 'AWS\_SECRET\_ACCESS\_KEY': '\<Secret\>', 'AWS\_STORAGE\_BUCKET\_NAME': 'netbox', 'AWS\_S3\_REGION\_NAME': 'eu-west-1', }
Thanks to @steffann for contributing this work!
Rack Elevations Rendered via SVG (#2248)
NetBox v2.7 introduces a new method of rendering rack elevations as an
SVG image via a REST API endpoint. This replaces the prior method of rendering elevations using pure HTML and CSS, which was cumbersome and had several shortcomings. Rendering rack elevations as SVG images via the REST API allows users to retrieve and make use of the drawings in their own tooling. This also opens the door to other feature requests related to rack elevations in the NetBox backlog.This feature implements a new REST API endpoint:
/api/dcim/racks/<id>/elevation/
๐ By default, this endpoint returns a paginated JSON response representing each rack unit in the given elevation. This is the same response returned by the existing rack units detail endpoint at
/api/dcim/racks/<id>/units/
, which will be removed in v2.8 (see #3753).To render the elevation as an SVG image, include the
render=svg
query parameter in the request. You may also control the width and height of the elevation drawing (in pixels) by passing theunit_width
andunit_height
parameters. (The default values for these parameters are 230 and 20, respectively.) Additionally, theface
parameter may be used to request either thefront
orrear
of the elevation. Below is in example request:/api/dcim/racks/<id>/elevation/?render=svg&face=rear&unit_width=300&unit_height=35
Thanks to @hellerve for doing the heavy lifting on this!
๐ Changes
๐ Topology Maps Removed (#2745)
โฌ๏ธ The topology maps feature has been removed to help focus NetBox development efforts. Please replicate any required data to another source before upgrading NetBox to v2.7, as any existing topology maps will be deleted.
Supervisor Replaced with systemd (#2902)
๐ The NetBox installation documentation has been updated to provide instructions for managing the WSGI and RQ services using systemd instead of supervisor. This removes the need to install supervisor and simplifies administration of the processes.
๐ง Redis Configuration (#3282)
๐ NetBox v2.6 introduced request caching and added the
CACHE_DATABASE
option to the existingREDIS
database configuration parameter. This did not, however, allow for using two different Redis connections for the separate caching and webhook queuing functions. This release modifies theREDIS
parameter to accept two discrete subsections namedwebhooks
andcaching
. This requires modification of theREDIS
parameter inconfiguration.py
as follows:๐ง Old Redis configuration:
REDIS = { 'HOST': 'localhost', 'PORT': 6379, 'PASSWORD': '', 'DATABASE': 0, 'CACHE\_DATABASE': 1, 'DEFAULT\_TIMEOUT': 300, 'SSL': False, }
๐ New Redis configuration:
REDIS = { 'webhooks': { 'HOST': 'redis.example.com', 'PORT': 1234, 'PASSWORD': 'foobar', 'DATABASE': 0, 'DEFAULT\_TIMEOUT': 300, 'SSL': False, }, 'caching': { 'HOST': 'localhost', 'PORT': 6379, 'PASSWORD': '', 'DATABASE': 1, 'DEFAULT\_TIMEOUT': 300, 'SSL': False, } }
๐ Note that the
CACHE_DATABASE
parameter has been removed and the connection settings have been duplicated for bothwebhooks
andcaching
. This allows the user to make use of separate Redis instances if desired. It is fine to use the same Redis service for both functions, although the database identifiers should be different.๐ง WEBHOOKS_ENABLED Configuration Setting Removed (#3408)
๐ As
django-rq
is now a required library, NetBox assumes that the RQ worker process is running. The installation and upgrade documentation has been updated to reflect this, and theWEBHOOKS_ENABLED
configuration parameter is no longer used. Please ensure that both the NetBox WSGI service and the RQ worker process are running on all production installations.API Choice Fields Now Use String Values (#3569)
NetBox's REST API presents fields which reference a particular choice as a dictionary with two keys:
value
and
๐โโlabel
. In previous versions,value
was an integer which represented a particular choice in the database. This has been changed to a more human-friendly "slug" string, which is essentially a simplified version of the choice'slabel
.For example, The site model's
status
field was previously represented as:"status": { "value": 1, "label": "Active"},
In NetBox v2.7, it now looks like this:
"status": { "value": "active", "label": "Active", "id": 1},
๐ This change allows for much more intuitive representation and manipulation of values, and removes the need for API consumers to maintain local mappings of static integer values.
๐ Note that that all v2.7 releases will continue to accept the legacy integer values in write requests (
POST
,PUT
, andPATCH
) to maintain backward compatibility. Additionally, the legacy numeric identifier is conveyed in theid
field for convenient reference as consumers adopt to the new string values. This behavior will be discontinued in NetBox v2.8.โจ Enhancements
- ๐ฏ #33 - Add ability to clone objects (pre-populate form fields)
- #648 - Pre-populate form fields when selecting "create and add another"
- #792 - Add power port and power outlet types
- #1865 - Add console port and console server port types
- #2669 - Relax uniqueness constraint on device and VM names
- #2902 - Replace
supervisord
withsystemd
- #3455 - Add tenant assignment to virtual machine clusters
- ๐ #3520 - Add Jinja2 template support for graphs
- #3525 - Enable IP address filtering using multiple address parameters
- #3564 - Add list views for all device components
- #3538 - Introduce a REST API endpoint for executing custom scripts
- #3655 - Add
description
field to organizational models - ๐ง #3664 - Enable applying configuration contexts by tags
- #3706 - Increase
available_power
maximum value on PowerFeed - #3731 - Change Graph.type to a ContentType foreign key field
- #3801 - Use YAML for export of device types
๐ Bug Fixes
- #3830 - Ensure deterministic ordering for all models
- ๐ป #3900 - Fix exception when deleting device types
- #3914 - Fix interface filter field when unauthenticated
- #3919 - Fix utilization graph extending out of bounds when utilization > 100%
- ๐ป #3927 - Fix exception when deleting devices with secrets assigned
- #3930 - Fix API rendering of the
family
field for aggregates
๐ Bug Fixes (From Beta)
- #3868 - Fix creation of interfaces for virtual machines
- #3878 - Fix database migration for cable status field
API Changes
- ๐ Choice fields now use human-friendly strings for their values instead of integers (see #3569).
- Introduced the
/api/extras/scripts/
endpoint for retrieving and executing custom scripts - circuits.CircuitType: Added field
description
- dcim.ConsolePort: Added field
type
- dcim.ConsolePortTemplate: Added field
type
- dcim.ConsoleServerPort: Added field
type
- dcim.ConsoleServerPortTemplate: Added field
type
- dcim.DeviceRole: Added field
description
- dcim.PowerPort: Added field
type
- dcim.PowerPortTemplate: Added field
type
- dcim.PowerOutlet: Added field
type
- dcim.PowerOutletTemplate: Added field
type
- dcim.RackRole: Added field
description
- extras.Graph: Added field
template_language
(to indicatedjango
orjinja2
) - extras.Graph: The
type
field has been changed to a content type foreign key. Models are specified as<app>.<model>
; e.g.dcim.site
. - ipam.Role: Added field
description
- secrets.SecretRole: Added field
description
- virtualization.Cluster: Added field
tenant
-
v2.7-beta1 Changes
December 12, 2019WARNING: This is a beta release of NetBox intended for development use only. Do not rely on it for production use. A migration path forward to a stable release will not be provided. Expect to ultimately lose any data input into this instance.
Note: NetBox v2.7 is the last major release that will support Python 3.5. Beginning with NetBox v2.8, Python 3.6 or
higher will be required.๐ New Features
โจ Enhanced Device Type Import (#451)
๐ NetBox now supports the import of device types and related component templates using a definition written in YAML or
JSON. For example, the following will create a new device type with four network interfaces, two power ports, and a
console port:manufacturer: Acmemodel: Packet Shooter 9000slug: packet-shooter-9000u\_height: 1interfaces: - name: ge-0/0/0type: 1000base-t - name: ge-0/0/1type: 1000base-t - name: ge-0/0/2type: 1000base-t - name: ge-0/0/3type: 1000base-tpower-ports: - name: PSU0 - name: PSU1console-ports: - name: Console
This new functionality replaces the existing CSV-based import form, which did not allow for component template import.
Bulk Import of Device Components (#822)
๐ NetBox now supports the bulk import of device components such as console ports, power ports, and interfaces across
multiple devices. Device components can be imported in CSV-format.Here's an example bulk import of interfaces to several devices:
device,name,type Switch1,Vlan100,Virtual Switch1,Vlan200,Virtual Switch2,Vlan100,Virtual Switch2,Vlan200,Virtual
External File Storage (#1814)
๐ In prior releases, the only option for storing uploaded files (e.g. image attachments) was to save them to the local
๐ filesystem on the NetBox server. This release introduces support for several remote storage backends provided by the
django-storages
library. These include:- Amazon S3
- ApacheLibcloud
- Azure Storage
- DigitalOcean Spaces
- โฌ๏ธ Dropbox
- FTP
- Google Cloud Storage
- SFTP
To enable remote file storage, first install
django-storages
:pip install django-storages
๐ง Then, set the appropriate storage backend and its configuration in
configuration.py
. Here's an example using Amazon
S3:STORAGE\_BACKEND = 'storages.backends.s3boto3.S3Boto3Storage'STORAGE\_CONFIG = { 'AWS\_ACCESS\_KEY\_ID': '\<Key\>', 'AWS\_SECRET\_ACCESS\_KEY': '\<Secret\>', 'AWS\_STORAGE\_BUCKET\_NAME': 'netbox', 'AWS\_S3\_REGION\_NAME': 'eu-west-1', }
Thanks to @steffann for contributing this work!
๐ Changes
Rack Elevations Rendered via SVG (#2248)
NetBox v2.7 introduces a new method of rendering rack elevations as an
SVG via a REST API endpoint. This replaces the prior method of
rendering elevations using pure HTML which was cumbersome and had several shortcomings. Allowing elevations to be
rendered as an SVG image in the API allows users to retrieve and make use of the drawings in their own tooling. This
also opens the door to other feature requests related to rack elevations in the NetBox backlog.This feature implements a new REST API endpoint:
/api/dcim/racks/<id>/elevation/
0๏ธโฃ By default, this endpoint returns a paginated JSON response representing each rack unit in the given elevation. This is
the same response returned by the rack units detail endpoint and for this reason the rack units endpoint has been
๐ deprecated and will be removed in v2.8 (see #3753):/api/dcim/racks/<id>/units/
In order to render the elevation as an SVG, include the
render=svg
query parameter in the request. You may also
control the width of the elevation drawing in pixels withunit_width=<width in pixels>
and the height of each rack
unit withunit_height=<height in pixels>
. Theunit_width
defaults to230
and theunit_height
default to20
๐ป which produces elevations the same size as those that appear in the NetBox Web UI. The query parameterface
is used to
0๏ธโฃ request either thefront
orrear
of the elevation and defaults tofront
.0๏ธโฃ Here is an example of the request url for an SVG rendering using the default parameters to render the front of the
elevation:/api/dcim/racks/<id>/elevation/?render=svg
Here is an example of the request url for an SVG rendering of the rear of the elevation having a width of 300 pixels and
per unit height of 35 pixels:/api/dcim/racks/<id>/elevation/?render=svg&face=rear&unit_width=300&unit_height=35
Thanks to @hellerve for doing the heavy lifting on this!
๐ Topology Maps Removed (#2745)
๐ The topology maps feature has been removed to help focus NetBox development efforts.
๐ง Redis Configuration (#3282)
๐ง v2.6.0 introduced caching and added the
CACHE_DATABASE
option to the existingREDIS
database configuration section.
This did not however, allow for using two different Redis connections for the seperate caching and webhooks features.
๐ง This change separates the Redis connection configurations in theREDIS
section into distinctwebhooks
andcaching
๐ง subsections. This requires modification of theREDIS
section of theconfiguration.py
file as follows:๐ง Old Redis configuration:
REDIS = { 'HOST': 'localhost', 'PORT': 6379, 'PASSWORD': '', 'DATABASE': 0, 'CACHE\_DATABASE': 1, 'DEFAULT\_TIMEOUT': 300, 'SSL': False, }
๐ New Redis configuration:
REDIS = { 'webhooks': { 'HOST': 'redis.example.com', 'PORT': 1234, 'PASSWORD': 'foobar', 'DATABASE': 0, 'DEFAULT\_TIMEOUT': 300, 'SSL': False, }, 'caching': { 'HOST': 'localhost', 'PORT': 6379, 'PASSWORD': '', 'DATABASE': 1, 'DEFAULT\_TIMEOUT': 300, 'SSL': False, } }
๐ Note that
CACHE_DATABASE
has been removed and the connection settings have been duplicated for bothwebhooks
and
caching
. This allows the user to make use of separate Redis instances and/or databases if desired. Full connection
details are required in both sections, even if they are the same.๐ง WEBHOOKS_ENABLED Configuration Setting Removed (#3408)
๐ท As
django-rq
is now a required library, NetBox assumes that the RQ worker process is running. The installation and
๐ upgrade documentation has been updated to reflect this, and theWEBHOOKS_ENABLED
configuration parameter is no longer
๐ท used. Please ensure that both the NetBox WSGI service and the RQ worker process are running on all production
installations.API Choice Fields Now Use String Values (#3569)
NetBox's REST API presents fields which reference a particular choice as a dictionary with two keys:
value
and
label
. In previous versions,value
was an integer which represented the particular choice in the database. This has
๐โโ been changed to a more human-friendly "slug" string, which is essentially a simplified version of the choice'slabel
.For example, The site status field was previously represented as:
"status": { "value": 1, "label": "Active"},
Beginning with v2.7.0, it now looks like this:
"status": { "value": "active", "label": "Active"},
This change allows for much more intuitive representation of values, and obviates the need for API consumers to maintain
a mapping of static integer values.๐ Note that that all v2.7 releases will continue to accept the legacy integer values in write requests (POST, PUT, and
PATCH) to maintain backward compatibility. This behavior will be discontinued beginning in v2.8.0.โจ Enhancements
- ๐ฏ #33 - Add ability to clone objects (pre-populate form fields)
- #648 - Pre-populate forms when selecting "create and add another"
- #792 - Add power port and power outlet types
- #1865 - Add console port and console server port types
- #2669 - Relax uniqueness constraint on device and VM names
- #2902 - Replace
supervisord
withsystemd
- #3455 - Add tenant assignment to cluster
- #3564 - Add list views for device components
- #3538 - Introduce a REST API endpoint for executing custom
scripts - #3655 - Add
description
field to organizational models - ๐ง #3664 - Enable applying configuration contexts by tags
- #3706 - Increase
available_power
maximum value on PowerFeed - #3731 - Change Graph.type to a ContentType foreign key field
API Changes
- ๐ Choice fields now use human-friendly strings for their values instead of integers (see
#3569). - Introduced
/api/extras/scripts/
endpoint for retrieving and executing custom scripts - circuits.CircuitType: Added field
description
- dcim.ConsolePort: Added field
type
- dcim.ConsolePortTemplate: Added field
type
- dcim.ConsoleServerPort: Added field
type
- dcim.ConsoleServerPortTemplate: Added field
type
- dcim.DeviceRole: Added field
description
- dcim.PowerPort: Added field
type
- dcim.PowerPortTemplate: Added field
type
- dcim.PowerOutlet: Added field
type
- dcim.PowerOutletTemplate: Added field
type
- dcim.RackRole: Added field
description
- extras.Graph: The
type
field has been changed to a content type foreign key. Models are specified as
<app>.<model>
; e.g.dcim.site
. - ipam.Role: Added field
description
- secrets.SecretRole: Added field
description
- virtualization.Cluster: Added field
tenant
-
v2.6.12 Changes
January 13, 2020โจ Enhancements
- ๐ #1982 - Improved NAPALM method documentation in Swagger (OpenAPI)
- #2050 - Preview image attachments when hovering over the link
- #2113 - Allow NAPALM driver settings to be changed with request headers
- ๐ #2598 - Toggle the display of child prefixes/IP addresses
- #3009 - Search by description when assigning IP address to interfaces
- #3021 - Add
tenant
filter field for cables - #3090 - Enable filtering of interfaces by name on the device view
- #3187 - Add rack selection field to rack elevations view
- #3393 - Paginate assigned circuits at the provider details view
- #3440 - Add total path length to cable trace
- #3491 - Include content of response on webhook error
- #3623 - Enable word expansion during interface creation
- #3668 - Enable searching by DNS name when assigning IP address
- #3851 - Allow passing initial data to custom script forms
- #3891 - Add
local_context_data
filter for virtual machines
๐ Bug Fixes
- #3589 - Fix validation on tagged VLANs of an interface
- #3849 - Fix ordering of models when dumping data to JSON
- #3853 - Fix device role link on config context view
- #3856 - Allow filtering VM interfaces by multiple MAC addresses
- #3857 - Fix rendering of grouped custom links
- #3862 - Allow filtering device components by multiple device names
- ๐ #3864 - Disallow /0 masks for prefixes and IP addresses
- #3872 - Paginate related IPs on the IP address view
- #3876 - Fix minimum/maximum value rendering for site ASN field
- #3882 - Fix filtering of devices by rack group
- #3898 - Fix references to deleted cables without a label
- #3905 - Fix divide-by-zero on power feeds with low power values
-
v2.6.11 Changes
January 03, 2020 -
v2.6.10 Changes
January 02, 2020โจ Enhancements
- ๐ #2233 - Add ability to move inventory items between devices
- ๐ป #2892 - Extend admin UI to allow deleting old report results
- #3062 - Add
assigned_to_interface
filter for IP addresses - ๐ป #3461 - Fail gracefully on custom link rendering exception
- #3705 - Provide request context when executing custom scripts
- #3762 - Add date/time picker widgets
- #3788 - Enable partial search for inventory items
- โก๏ธ #3812 - Optimize size of pages containing a dynamic selection field
- #3827 - Allow filtering console/power/interface connections by device ID
๐ Bug Fixes
- #3106 - Restrict queryset of chained fields when form validation fails
- #3695 - Include A/Z termination sites for circuits in global search
- #3712 - Scrolling to target (hash) did not account for the header size
- ๐ป #3780 - Fix AttributeError exception in API docs
- #3809 - Filter platform by manufacturer when editing devices
- #3811 - Fix filtering of racks by group on device list
- ๐ป #3822 - Fix exception when editing a device bay (regression from #3596)
-
v2.6.9 Changes
December 16, 2019 -
v2.6.8 Changes
December 10, 2019โจ Enhancements
- #3139 - Disable password change form for LDAP-authenticated users
- #3457 - Display cable colors on device view
- ๐ #3329 - Remove obsolete P3P policy header
- โก๏ธ #3663 - Add query filters for
created
andlast_updated
fields - #3722 - Allow the underscore character in IPAddress DNS names
๐ Bug Fixes
- #3312 - Fix validation error when editing power cables in bulk
- ๐ป #3644 - Fix exception when connecting a cable to a RearPort with no corresponding FrontPort
- #3669 - Include
weight
field in prefix/VLAN role form - #3674 - Include comments on PowerFeed view
- #3679 - Fix link for assigned ipaddress in interface page
- ๐ป #3709 - Prevent exception when importing an invalid cable definition
- #3720 - Correctly indicate power feed terminations on cable list
- #3724 - Fix API filtering of interfaces by more than one device name
- #3725 - Enforce client validation for minimum service port number
-
v2.6.7 Changes
November 01, 2019โจ Enhancements
- ๐ #3445 - Add support for additional user defined headers to be added to webhook requests
- #3499 - Add
ca_file_path
to Webhook model to support user supplied CA certificate verification of webhook requests - #3594 - Add ChoiceVar for custom scripts
- #3619 - Add 400GE OSFP interface type
- ๐ป #3659 - Add filtering for objects in admin UI
๐ Bug Fixes
- โ #3309 - Rewrite change logging middleware to resolve sporadic testing failures
- #3340 - Add missing options to connect front ports to console ports
- #3357 - Enable filter sites/devices/VMs by null region
- โฌ๏ธ #3460 - Extend upgrade script to validate Python dependencies
- #3596 - Prevent server error when reassigning a device to a new device bay
- #3629 - Use
get_lldp_neighors_detail
to validate LLDP neighbors - ๐ #3635 - Add missing cache support for the circuits app
- #3636 - Add missing
rack_group
field to PowerFeed CSV export - #3652 - Limit next/previous rack by assigned rack group
-
v2.6.6 Changes
October 10, 2019Notes
- ๐ This release includes a migration which automatically updates all existing cables to enable filtering by site/rack (see #3259). This migration may take several minutes to complete on installations with tens of thousands of cables defined.
โจ Enhancements
- #1941 - Add InfiniBand interface types
- #3259 - Add
rack
andsite
filters for cables - #3471 - Disallow raw HTML in Markdown-rendered fields
- #3545 - Add
MultiObjectVar
for custom scripts - #3563 - Enable editing of individual DeviceType components
- #3580 - Render text and URL fields as textareas in the custom link form
- 0๏ธโฃ #3581 - Introduce
commit_default
custom script attribute to not commit changes by default
๐ Bug Fixes
- #3458 - Prevent primary IP address for a device/VM from being reassigned
- #3463 - Correct CSV headers for exported power feeds
- #3474 - Fix device status page loading when NAPALM call fails
- #3571 - Prevent erroneous redirects when editing tags
- #3573 - Ensure consistent display of changelog retention period
- #3574 - Change
device
toparent
in interface editing VLAN filtering logic - โช #3575 - Restore label for comments field when bulk editing circuits
- #3582 - Enforce view permissions on global search results
- #3588 - Enforce object-form JSON for local context data on devices and VMs