docs/release-notes/version-4.6.md
A new VirtualMachineType model has been introduced to enable categorization of virtual machines by instance type, analogous to how DeviceType categorizes physical hardware. VM types can be defined once and reused across many virtual machines.
A new CableBundle model allows individual cables to be grouped together to represent physical cable runs that are managed as a unit; e.g. a bundle of 48 CAT6 cables between two patch panels. (Please note that this feature is not suitable for modeling individual fiber strands within a single cable.)
A flat RackGroup model has been reintroduced to provide a lightweight secondary axis of rack organization (e.g. by row or aisle) that is independent of the location hierarchy. Racks carry an optional foreign key to a RackGroup, and RackGroup can also serve as a scope for VLANGroup assignments.
The REST API now returns an ETag header on responses for individual objects, derived from the object's last-updated timestamp. Clients can supply an If-Match header on PUT/PATCH requests to guard against conflicting concurrent updates; if the object has been modified since the ETag was issued, the server returns a 412 (Precondition Failed) response.
A new start query parameter has been introduced as an efficient alternative to the existing offset parameter for paginating large result sets. Rather than scanning the table up to a relative offset, the start parameter filters for objects with a primary key equal to or greater than the given value, enabling constant-time pagination regardless of result set size.
{module} position inheritance for nested module baystotal_vlan_ids attribute on VLAN group representation in REST & GraphQL APIsCHANGELOG_RETAIN_CREATE_LAST_UPDATE configuration parameter to retain creation & most recent update record in change log for each object{vc_position} template variable for device component template name/labelrf_channel_frequency precision to 3 decimal placesEnhancedURLValidator with Django's URLValidatoradd_tags) and removal (remove_tags) via REST APIINTERNAL_IPS to enable debug toolbar for all clientsusername and request_id fields in event datahousekeeping management commandquerystring template tagDEFAULT_ACTION_PERMISSIONS mappingmodels key in application registryLOGIN_REQUIRED configuration parameterexpand_ipaddress_pattern() utility functionETag response header and If-Match request header support for all individual object endpointsstart query parameter for cursor-based pagination on all list endpointsadd_tags and remove_tags write-only fields on all taggable model serializersGET/POST /api/dcim/cable-bundles/GET/PUT/PATCH/DELETE /api/dcim/cable-bundles/<id>/GET/POST /api/dcim/rack-groups/GET/PUT/PATCH/DELETE /api/dcim/rack-groups/<id>/GET/POST /api/virtualization/virtual-machine-types/GET/PUT/PATCH/DELETE /api/virtualization/virtual-machine-types/<id>/dcim.Cable
bundledcim.Device
primary_ip, primary_ip4, primary_ip6, and oob_ip nested representations now include nat_inside and nat_outsidedcim.DeviceBay
enabled_occupieddcim.DeviceBayTemplate
enableddcim.Module
replicate_components and adopt_componentsdcim.ModuleBay
enabled_occupieddcim.ModuleBayTemplate
enableddcim.Rack
groupdcim.RackReservation
unit_countextras.CustomField
validation_schemaipam.ASN
roleipam.Role
asn_count)ipam.VLANGroup
total_vlan_idsvirtualization.VirtualMachine
virtual_machine_typeprimary_ip, primary_ip4, and primary_ip6 nested representations now include nat_inside and nat_outsidecluster field is now optional (nullable)