diff --git a/docs/release-notes/version-2.7.md b/docs/release-notes/version-2.7.md index d32559f31..b39020c27 100644 --- a/docs/release-notes/version-2.7.md +++ b/docs/release-notes/version-2.7.md @@ -1,4 +1,4 @@ -# v2.7.2 (FUTURE) +# v2.7.2 (2020-01-21) ## Enhancements @@ -10,13 +10,14 @@ ## Bug Fixes * [#3721](https://github.com/netbox-community/netbox/issues/3721) - Allow Unicode characters in tag slugs +* [#3923](https://github.com/netbox-community/netbox/issues/3923) - Indicate validation failure when using SSH-style RSA keys * [#3951](https://github.com/netbox-community/netbox/issues/3951) - Fix exception in webhook worker due to missing constant -* [#3923](https://github.com/netbox-community/netbox/issues/3923) - Fix user key validation * [#3953](https://github.com/netbox-community/netbox/issues/3953) - Fix validation error when creating child devices * [#3960](https://github.com/netbox-community/netbox/issues/3960) - Fix legacy device status choice * [#3962](https://github.com/netbox-community/netbox/issues/3962) - Fix display of unnamed devices in rack elevations * [#3963](https://github.com/netbox-community/netbox/issues/3963) - Restore tooltip for devices in rack elevations * [#3964](https://github.com/netbox-community/netbox/issues/3964) - Show borders around devices in rack elevations +* [#3965](https://github.com/netbox-community/netbox/issues/3965) - Indicate the presence of "background" devices in rack elevations * [#3966](https://github.com/netbox-community/netbox/issues/3966) - Fix filtering of device components by region/site * [#3967](https://github.com/netbox-community/netbox/issues/3967) - Resolve migration of "other" interface type diff --git a/netbox/dcim/models/__init__.py b/netbox/dcim/models/__init__.py index 29e5a593f..fff7dbe7b 100644 --- a/netbox/dcim/models/__init__.py +++ b/netbox/dcim/models/__init__.py @@ -468,6 +468,21 @@ class RackElevationHelperMixin: return drawing + def merge_elevations(self, face): + elevation = self.get_rack_units(face=face, expand_devices=False) + other_face = DeviceFaceChoices.FACE_FRONT if face == DeviceFaceChoices.FACE_REAR else DeviceFaceChoices.FACE_REAR + other = self.get_rack_units(face=other_face) + + unit_cursor = 0 + for u in elevation: + o = other[unit_cursor] + if not u['device'] and o['device']: + u['device'] = o['device'] + u['height'] = 1 + unit_cursor += u.get('height', 1) + + return elevation + def get_elevation_svg(self, face=DeviceFaceChoices.FACE_FRONT, unit_width=230, unit_height=20): """ Return an SVG of the rack elevation @@ -477,7 +492,7 @@ class RackElevationHelperMixin: :param unit_height: Height of each rack unit for the rendered drawing. Note this is not the total height of the elevation """ - elevation = self.get_rack_units(face=face, expand_devices=False) + elevation = self.merge_elevations(face) reserved_units = self.get_reserved_units().keys() return self._draw_elevations(elevation, reserved_units, face, unit_width, unit_height) diff --git a/netbox/netbox/settings.py b/netbox/netbox/settings.py index d3cc3169f..e5925184d 100644 --- a/netbox/netbox/settings.py +++ b/netbox/netbox/settings.py @@ -12,7 +12,7 @@ from django.core.exceptions import ImproperlyConfigured # Environment setup # -VERSION = '2.7.2-dev' +VERSION = '2.7.3-dev' # Hostname HOSTNAME = platform.node()