소스 검색

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

Jeremy Stretch 5 년 전
부모
커밋
a0e82e1817
4개의 변경된 파일14개의 추가작업 그리고 3개의 파일을 삭제
  1. 1 0
      docs/release-notes/version-2.10.md
  2. 6 0
      netbox/dcim/models/device_component_templates.py
  3. 4 1
      netbox/dcim/tests/test_api.py
  4. 3 2
      netbox/dcim/tests/test_views.py

+ 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)