!!! warning "Existing Deployments Must Upgrade from v2.11"
Upgrading an existing NetBox deployment to version 3.0 **must** be done from version 2.11.0 or later. If attempting to upgrade a deployment of NetBox v2.10 or earlier, first upgrade to a NetBox v2.11 release, and then upgrade from v2.11 to v3.0. This will avoid any problems with the database migration optimizations implemented in version 3.0.
invalidate management command (which clears cached database queries) is no longer needed and has been removed (see #6639).caching_config) has been removed from the plugins API (see #6639).cacheops_* metrics have been removed from the Prometheus exporter (see #6639).display_field keyword argument has been removed from custom script ObjectVar and MultiObjectVar fields. These widgets will use the display value provided by the REST API.display_name field has been removed from all REST API serializers. (API clients should reference the display field instead.)?connected=True filter applied.The NetBox user interface has been completely overhauled with a fresh new look! Beyond the cosmetic improvements, this initiative has allowed us to modernize the entire front end, upgrading from Bootstrap 3 to Bootstrap 5, and eliminating dependencies on outdated libraries such as jQuery and jQuery-UI. The new user interface also features a dark mode option.
A huge thank you to NetBox maintainer Matt Love for his tremendous work on this!
A new GraphQL API has been added to complement NetBox's REST API. GraphQL allows the client to specify which fields of the available data to return in each request. NetBox's implementation, which employs Graphene, also includes a user-friendly query interface known as GraphiQL.
Here's an example GraphQL request:
{
circuit_list {
cid
provider {
name
}
termination_a {
id
}
termination_z {
id
}
}
}
And the response:
{
"data": {
"circuit_list": [
{
"cid": "1002840283",
"provider": {
"name": "CenturyLink"
},
"termination_a": null,
"termination_z": {
"id": "23"
}
},
...
All GraphQL requests are made at the /graphql URL (which also serves the GraphiQL UI). The API is currently read-only, however users who wish to disable it until needed can do so by setting the GRAPHQL_ENABLED configuration parameter to False. For more detail on NetBox's GraphQL implementation, see the GraphQL API documentation.
NetBox now supports modeling arbitrary IP ranges, which are defined by specifying a starting and ending IP address (e.g. to denote DHCP pools). Similar to prefixes, each IP range may optionally be assigned to a VRF and/or tenant, and can be assigned a functional role. An IP range must be assigned a status of active, reserved, or deprecated. The REST API implementation for this model also includes an "available IPs" endpoint which functions similarly to the endpoint for prefixes.
More information about IP ranges is available in the documentation.
This release introduces the CUSTOM_VALIDATORS configuration parameter, which allows administrators to map NetBox models to custom validator classes to enforce custom validation logic. For example, the following configuration requires every site to have a name of at least ten characters and a description:
from extras.validators import CustomValidator
CUSTOM_VALIDATORS = {
'dcim.site': (
CustomValidator({
'name': {
'min_length': 10,
},
'description': {
'required': True,
}
}),
)
}
CustomValidator can also be subclassed to enforce more complex logic by overriding its validate() method. See the custom validation documentation for more details.
Cable trace diagrams are now rendered as atomic SVG images, similar to rack elevations. These images are embedded in the UI and can be easily downloaded for use outside NetBox. SVG images can also be generated directly through the REST API, by specifying SVG as the render format for the trace endpoint on a cable termination:
GET /api/dcim/interfaces/<ID>>/trace/?render=svg
The width of the rendered image in pixels may optionally be specified by appending the &width=<width> parameter to the request. The default width is 400px.
New UI views have been introduced to manage the following models:
These models were previously managed under the admin section of the UI. Moving them to dedicated views ensures a more consistent and convenient user experience.
The new REST API endpoint /api/users/tokens/ has been added, which includes a child endpoint for provisioning new REST API tokens using a username and password. This allows a user to gain REST API access without needing to first create a token via the web UI.
$ curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json; indent=4" \
https://netbox/api/users/tokens/provision/ \
--data '{
"username": "hankhill",
"password: "I<3C3H8",
}'
If the supplied credentials are valid, NetBox will create and return a new token for the user.
A new management command has been added: manage.py housekeeping. This command is intended to be run nightly via a system cron job. It performs the following tasks:
A convenience script for calling this command via an automated scheduler has been included at /contrib/netbox-housekeeping.sh. Please see the housekeeping documentation for further details.
NetBox uses Redis and Django-RQ for background task queuing. Whereas previous releases employed only a single default queue, NetBox now provides a high-, medium- (default), and low-priority queue for use by plugins. (These will also likely be used internally as new functionality is added in future releases.)
Plugins can also now create their own custom queues by defining a queues list within their PluginConfig class:
class MyPluginConfig(PluginConfig):
name = 'myplugin'
...
queues = [
'queue1',
'queue2',
'queue-whatever-the-name'
]
Note that NetBox's rqworker process will not service custom queues by default, since it has no way to infer the priority of each queue. Plugin authors should be diligent in including instructions for proper worker configuration in their plugin's documentation.
color field to front and rear portsdisplay_field argument on ObjectVarCACHE_TIMEOUT configuration parameter has been removed.RELEASE_CHECK_TIMEOUT configuration parameter has been removed./api/secrets/generate-rsa-key-pair//api/secrets/get-session-key//api/secrets/secrets//api/secrets/secret-roles//api/dcim/console-connections//api/dcim/power-connections//api/dcim/interface-connections//api/ipam/ip-ranges/ endpoint/api/users/tokens/ endpoint
provision/ child endpoint can be used to provision new REST API tokens by supplying a valid username and passwordlength is now a decimal valuedisplay_name attribute (use display instead)display_name attribute (use display instead)color fieldcolor fielddisplay_name attribute (use display instead)color fieldcolor fieldlatitude and longitude are now decimal fields rather than stringsdisplay_name attribute (use display instead)mark_utilized boolean fielddisplay_name attribute (use display instead)display_name attribute (use display instead)vcpus is now a decimal field rather than a string