Просмотр исходного кода

Fixes #5574: Restrict the creation of device bay templates on non-parent device types

Jeremy Stretch 5 лет назад
Родитель
Сommit
a0e82e1817

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

@@ -10,6 +10,7 @@
 
 ### Bug Fixes
 
+* [#5574](https://github.com/netbox-community/netbox/issues/5574) - Restrict the creation of device bay templates on non-parent device types
 * [#5584](https://github.com/netbox-community/netbox/issues/5584) - Restore power utilization panel under device view
 * [#5597](https://github.com/netbox-community/netbox/issues/5597) - Fix ordering devices by primary IP address
 

+ 6 - 0
netbox/dcim/models/device_component_templates.py

@@ -363,3 +363,9 @@ class DeviceBayTemplate(ComponentTemplateModel):
             name=self.name,
             label=self.label
         )
+
+    def clean(self):
+        if self.device_type and self.device_type.subdevice_role != SubdeviceRoleChoices.ROLE_PARENT:
+            raise ValidationError(
+                f"Subdevice role of device type ({self.device_type}) must be set to \"parent\" to allow device bays."
+            )

+ 4 - 1
netbox/dcim/tests/test_api.py

@@ -740,7 +740,10 @@ class DeviceBayTemplateTest(APIViewTestCases.APIViewTestCase):
     def setUpTestData(cls):
         manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1')
         devicetype = DeviceType.objects.create(
-            manufacturer=manufacturer, model='Device Type 1', slug='device-type-1'
+            manufacturer=manufacturer,
+            model='Device Type 1',
+            slug='device-type-1',
+            subdevice_role=SubdeviceRoleChoices.ROLE_PARENT
         )
 
         device_bay_templates = (

+ 3 - 2
netbox/dcim/tests/test_views.py

@@ -396,6 +396,7 @@ manufacturer: Generic
 model: TEST-1000
 slug: test-1000
 u_height: 2
+subdevice_role: parent
 comments: test comment
 console-ports:
   - name: Console Port 1
@@ -831,8 +832,8 @@ class DeviceBayTemplateTestCase(ViewTestCases.DeviceComponentTemplateViewTestCas
     def setUpTestData(cls):
         manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1')
         devicetypes = (
-            DeviceType(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1'),
-            DeviceType(manufacturer=manufacturer, model='Device Type 2', slug='device-type-2'),
+            DeviceType(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1', subdevice_role=SubdeviceRoleChoices.ROLE_PARENT),
+            DeviceType(manufacturer=manufacturer, model='Device Type 2', slug='device-type-2', subdevice_role=SubdeviceRoleChoices.ROLE_PARENT),
         )
         DeviceType.objects.bulk_create(devicetypes)