Jelajahi Sumber

Closes #4796: Introduce configuration parameters for default rack elevation size

Jeremy Stretch 5 tahun lalu
induk
melakukan
51e9b0a22a

+ 16 - 0
docs/configuration/optional-settings.md

@@ -382,6 +382,22 @@ When determining the primary IP address for a device, IPv6 is preferred over IPv
 
 ---
 
+## RACK_ELEVATION_DEFAULT_UNIT_HEIGHT
+
+Default: 22
+
+Default height (in pixels) of a unit within a rack elevation. For best results, this should be approximately one tenth of `RACK_ELEVATION_DEFAULT_UNIT_WIDTH`.
+
+---
+
+## RACK_ELEVATION_DEFAULT_UNIT_WIDTH
+
+Default: 220
+
+Default width (in pixels) of a unit within a rack elevation.
+
+---
+
 ## REMOTE_AUTH_ENABLED
 
 Default: `False`

+ 1 - 0
docs/release-notes/version-2.8.md

@@ -4,6 +4,7 @@
 
 ### Enhancements
 
+* [#4796](https://github.com/netbox-community/netbox/issues/4796) - Introduce configuration parameters for default rack elevation size
 * [#4802](https://github.com/netbox-community/netbox/issues/4802) - Allow changing page size when displaying only a single page of results
 
 ### Bug Fixes

+ 3 - 2
netbox/dcim/api/serializers.py

@@ -1,3 +1,4 @@
+from django.conf import settings
 from django.contrib.contenttypes.models import ContentType
 from drf_yasg.utils import swagger_serializer_method
 from rest_framework import serializers
@@ -185,10 +186,10 @@ class RackElevationDetailFilterSerializer(serializers.Serializer):
         default=RackElevationDetailRenderChoices.RENDER_JSON
     )
     unit_width = serializers.IntegerField(
-        default=RACK_ELEVATION_UNIT_WIDTH_DEFAULT
+        default=settings.RACK_ELEVATION_DEFAULT_UNIT_WIDTH
     )
     unit_height = serializers.IntegerField(
-        default=RACK_ELEVATION_UNIT_HEIGHT_DEFAULT
+        default=settings.RACK_ELEVATION_DEFAULT_UNIT_HEIGHT
     )
     legend_width = serializers.IntegerField(
         default=RACK_ELEVATION_LEGEND_WIDTH_DEFAULT

+ 0 - 2
netbox/dcim/constants.py

@@ -11,8 +11,6 @@ RACK_U_HEIGHT_DEFAULT = 42
 
 RACK_ELEVATION_BORDER_WIDTH = 2
 RACK_ELEVATION_LEGEND_WIDTH_DEFAULT = 30
-RACK_ELEVATION_UNIT_WIDTH_DEFAULT = 220
-RACK_ELEVATION_UNIT_HEIGHT_DEFAULT = 22
 
 
 #

+ 2 - 2
netbox/dcim/models/__init__.py

@@ -731,8 +731,8 @@ class Rack(ChangeLoggedModel, CustomFieldModel):
     def get_elevation_svg(
             self,
             face=DeviceFaceChoices.FACE_FRONT,
-            unit_width=RACK_ELEVATION_UNIT_WIDTH_DEFAULT,
-            unit_height=RACK_ELEVATION_UNIT_HEIGHT_DEFAULT,
+            unit_width=settings.RACK_ELEVATION_DEFAULT_UNIT_WIDTH,
+            unit_height=settings.RACK_ELEVATION_DEFAULT_UNIT_HEIGHT,
             legend_width=RACK_ELEVATION_LEGEND_WIDTH_DEFAULT,
             include_images=True,
             base_url=None

+ 4 - 0
netbox/netbox/configuration.example.py

@@ -208,6 +208,10 @@ PLUGINS = []
 # prefer IPv4 instead.
 PREFER_IPV4 = False
 
+# Rack elevation size defaults, in pixels. For best results, the ratio of width to height should be roughly 10:1.
+RACK_ELEVATION_DEFAULT_UNIT_HEIGHT = 22
+RACK_ELEVATION_DEFAULT_UNIT_WIDTH = 220
+
 # Remote authentication support
 REMOTE_AUTH_ENABLED = False
 REMOTE_AUTH_BACKEND = 'utilities.auth_backends.RemoteUserBackend'

+ 2 - 0
netbox/netbox/settings.py

@@ -99,6 +99,8 @@ PAGINATE_COUNT = getattr(configuration, 'PAGINATE_COUNT', 50)
 PLUGINS = getattr(configuration, 'PLUGINS', [])
 PLUGINS_CONFIG = getattr(configuration, 'PLUGINS_CONFIG', {})
 PREFER_IPV4 = getattr(configuration, 'PREFER_IPV4', False)
+RACK_ELEVATION_DEFAULT_UNIT_HEIGHT = getattr(configuration, 'RACK_ELEVATION_DEFAULT_UNIT_HEIGHT', 22)
+RACK_ELEVATION_DEFAULT_UNIT_WIDTH = getattr(configuration, 'RACK_ELEVATION_DEFAULT_UNIT_WIDTH', 220)
 REMOTE_AUTH_AUTO_CREATE_USER = getattr(configuration, 'REMOTE_AUTH_AUTO_CREATE_USER', False)
 REMOTE_AUTH_BACKEND = getattr(configuration, 'REMOTE_AUTH_BACKEND', 'utilities.auth_backends.RemoteUserBackend')
 REMOTE_AUTH_DEFAULT_GROUPS = getattr(configuration, 'REMOTE_AUTH_DEFAULT_GROUPS', [])

+ 0 - 7
netbox/project-static/css/base.css

@@ -183,13 +183,6 @@ nav ul.pagination {
     margin-bottom: 8px !important;
 }
 
-/* Racks */
-div.rack_header {
-    margin-left: 32px;
-    text-align: center;
-    width: 220px;
-}
-
 /* Devices */
 table.component-list td.subtable {
     padding: 0;

+ 3 - 1
netbox/templates/dcim/inc/rack_elevation.html

@@ -1,4 +1,6 @@
-<object data="{% url 'dcim-api:rack-elevation' pk=rack.pk %}?face={{face}}&render=svg" class="rack_elevation"></object>
+<div style="margin-left: -30px">
+    <object data="{% url 'dcim-api:rack-elevation' pk=rack.pk %}?face={{face}}&render=svg" class="rack_elevation"></object>
+</div>
 <div class="text-center text-small">
     <a href="{% url 'dcim-api:rack-elevation' pk=rack.pk %}?face={{face}}&render=svg">
         <i class="fa fa-download"></i> Save SVG

+ 4 - 8
netbox/templates/dcim/rack.html

@@ -318,16 +318,12 @@
 	</div>
     <div class="col-md-6">
         <div class="row" style="margin-bottom: 20px">
-            <div class="col-md-6 col-sm-6 col-xs-12">
-                <div class="rack_header">
-                    <h4>Front</h4>
-                </div>
+            <div class="col-md-6 col-sm-6 col-xs-12 text-center">
+                <h4>Front</h4>
                 {% include 'dcim/inc/rack_elevation.html' with face='front' %}
             </div>
-            <div class="col-md-6 col-sm-6 col-xs-12">
-                <div class="rack_header">
-                    <h4>Rear</h4>
-                </div>
+            <div class="col-md-6 col-sm-6 col-xs-12 text-center">
+                <h4>Rear</h4>
                 {% include 'dcim/inc/rack_elevation.html' with face='rear' %}
             </div>
         </div>