has_primary_ip filter for virtual machinesallocated_draw exceeds its maximum_drawNOTE: This release removes support for the DEFAULT_TIMEOUT parameter under REDIS database configuration. Set RQ_DEFAULT_TIMEOUT as a global configuration parameter instead.
NOTE: Any permissions referencing the legacy ReportResult model (e.g. extras.view_reportresult) should be updated to reference the Report model.
RQ_DEFAULT_TIMEOUT configuration parameter0016_replicate_interfaces schema migration from old releaseview_reportresult to view_report permissionquery_paramsavailable-prefixes endpointREMOTE_AUTH_BACKEND configuration parameterNote: Redis 4.0 or later is required for this release.
NetBox v2.9 replaces Django's built-in permissions framework with one that supports object-based assignment of permissions using arbitrary constraints. When granting a user or group permission to perform a certain action on one or more types of objects, an administrator can optionally specify a set of constraints. The permission will apply only to objects which match the specified constraints. For example, assigning permission to modify devices with the constraint {"tenant__group__name": "Customers"} would allow the associated users/groups to perform an action only on devices assigned to a tenant belonging to the "Customers" group.
When running a report or custom script, its execution is now queued for background processing and the user receives an immediate response indicating its status. This prevents long-running scripts from resulting in a timeout error. Once the execution has completed, the page will automatically refresh to display its results. Both scripts and reports now store their output in the new JobResult model. (The ReportResult model has been removed.)
The VirtualChassis model now has a mandatory name field. Names are assigned to the virtual chassis itself rather than referencing the master VC member. Additionally, the designation of a master is now optional: a virtual chassis may have only non-master members.
Tags are no longer created automatically: A tag must be created by a user before it can be applied to any object. Additionally, the REST API representation of assigned tags has been expanded to be consistent with other objects.
A new model has been introduced to represent virtual machine interfaces. Although this change is largely transparent to the end user, note that the IP address model no longer has a foreign key to the Interface model under the DCIM app. This has been replaced with a generic foreign key named assigned_object.
Two new REST API endpoints have been added to facilitate the retrieval and manipulation of users and groups:
/api/users/groups//api/users/users/label field for all device components and component templatesdescription field to device component templatesurl field to all API serializersname field to 64 charactersoccupied field to rack unit representations for rack elevation viewscable attribute to PowerFeed API serializerREMOTE_AUTH_BACKEND to 'netbox.authentication.RemoteUserBackend', as the authentication class has moved.REMOTE_AUTH_BACKEND to 'netbox.authentication.LDAPBackend'. (LDAP configuration parameters in ldap_config.py remain unchanged.)REMOTE_AUTH_DEFAULT_PERMISSIONS now takes a dictionary rather than a list. This is a mapping of permission names to a dictionary of constraining attributes, or None. For example, ['dcim.add_site', 'dcim.change_site'] would become {'dcim.add_site': None, 'dcim.change_site': None}.webhooks Redis queue name has been dropped. Ensure that your REDIS configuration parameter specifies both the tasks and caching databases./api/users/.url field is now included on all object representations, identifying the unique REST API URL for each object.tags field of an object now includes a more complete representation of each tag, rather than just its name.The assignment of tags to an object is now achieved in the same manner as specifying any other related device. The tags field accepts a list of JSON objects each matching a desired tag. (Alternatively, a list of numeric primary keys corresponding to tags may be passed instead.) For example:
"tags": [
{"name": "First Tag"},
{"name": "Second Tag"}
]
Legacy numeric values for choice fields are no longer conveyed or accepted.
circuits.CircuitTermination: Added cable field
dcim.Cable: Added tags field
dcim.ConsolePort: Added label field
dcim.ConsolePortTemplate: Added description and label fields
dcim.ConsoleServerPort: Added label field
dcim.ConsoleServerPortTemplate: Added description and label fields
dcim.DeviceBay: Added label field
dcim.DeviceBayTemplate: Added description and label fields
dcim.FrontPort: Added label field
dcim.FrontPortTemplate: Added description and label fields
dcim.Interface: Added label field
dcim.InterfaceTemplate: Added description and label fields
dcim.PowerFeed: Added cable field
dcim.PowerPanel: Added tags field
dcim.PowerPort: Added `label field
dcim.PowerPortTemplate: Added description and label fields
dcim.PowerOutlet: Added label field
dcim.PowerOutletTemplate: Added description and label fields
dcim.Rack: Added an occupied field to rack unit representations for rack elevation views
dcim.RackGroup: Added a _depth attribute indicating an object's position in the tree.
dcim.RackReservation: Added tags field
dcim.RearPort: Added label field
dcim.RearPortTemplate: Added description and label fields
dcim.Region: Added a _depth attribute indicating an object's position in the tree.
dcim.VirtualChassis: Added name field (required)
extras.ConfigContext: Added created and last_updated fields
extras.JobResult: Added the /api/extras/job-results/ endpoint
extras.Report: The failed field has been removed. The completed (boolean) and status (string) fields have been introduced to convey the status of a report's most recent execution. Additionally, the result field now conveys the nested representation of a JobResult.
extras.Script: Added module and result fields. The result field now conveys the nested representation of a JobResult.
extras.Tag: The count of tagged_items is no longer included when viewing the tags list when brief is passed.
ipam.IPAddress: Removed interface field; replaced with assigned_object generic foreign key. This may represent either a device interface or a virtual machine interface. Assign an object by setting assigned_object_type and assigned_object_id.
ipam.VRF: Added display_name
tenancy.TenantGroup: Added a _depth attribute indicating an object's position in the tree.
users.ObjectPermissions: Added the /api/users/permissions/ endpoint
virtualization.VMInterface: Removed type field (VM interfaces have no type)
VMInterface has been introduced to represent interfaces assigned to VirtualMachine instances. Previously, these interfaces utilized the DCIM model Interface. Instances will be replicated automatically upon upgrade, however any custom code which references or manipulates virtual machine interfaces will need to be updated accordingly.secrets.activate_userkey permission no longer exists. Instead, secrets.change_userkey is checked to determine whether a user has the ability to activate a UserKey.users.delete_token permission is no longer enforced. All users are permitted to delete their own API tokens.webhooks Redis queue configuration (use tasks instead)./admin/webhook-backend-status URL (moved to /admin/background-tasks/)./dcim/virtual-chassis/add/ rather than via the devices list.