Arthur 1 week ago
parent
commit
5ab0910847

+ 1 - 4
netbox/dcim/api/serializers_/cooling.py

@@ -25,10 +25,7 @@ class CoolingSourceSerializer(PrimaryModelSerializer):
         default=None
     )
     type = ChoiceField(
-        choices=CoolingSourceTypeChoices,
-        allow_blank=True,
-        required=False,
-        allow_null=True
+        choices=CoolingSourceTypeChoices
     )
     status = ChoiceField(
         choices=CoolingSourceStatusChoices,

+ 0 - 1
netbox/dcim/forms/bulk_import.py

@@ -1945,7 +1945,6 @@ class CoolingSourceImportForm(PrimaryModelImportForm):
     type = CSVChoiceField(
         label=_('Type'),
         choices=CoolingSourceTypeChoices,
-        required=False,
         help_text=_('Cooling source type')
     )
     status = CSVChoiceField(

+ 2 - 2
netbox/dcim/migrations/0241_device_cooling_method_device_cooling_outlet_count_and_more.py

@@ -1,4 +1,4 @@
-# Generated by Django 6.0.6 on 2026-06-24 20:03
+# Generated by Django 6.0.6 on 2026-06-24 21:08
 
 import django.contrib.postgres.fields
 import django.core.validators
@@ -676,7 +676,7 @@ class Migration(migrations.Migration):
                 ("description", models.CharField(blank=True, max_length=200)),
                 ("comments", models.TextField(blank=True)),
                 ("name", models.CharField(db_collation="natural_sort", max_length=100)),
-                ("type", models.CharField(blank=True, max_length=50, null=True)),
+                ("type", models.CharField(max_length=50)),
                 ("status", models.CharField(default="active", max_length=50)),
                 (
                     "cooling_capacity",

+ 1 - 3
netbox/dcim/models/cooling.py

@@ -43,9 +43,7 @@ class CoolingSource(ContactsMixin, ImageAttachmentsMixin, PrimaryModel):
     type = models.CharField(
         verbose_name=_('type'),
         max_length=50,
-        choices=CoolingSourceTypeChoices,
-        blank=True,
-        null=True
+        choices=CoolingSourceTypeChoices
     )
     status = models.CharField(
         verbose_name=_('status'),

+ 21 - 5
netbox/dcim/tests/test_api.py

@@ -4026,9 +4026,18 @@ class CoolingSourceTestCase(APIViewTestCases.APIViewTestCase):
         )
 
         cooling_sources = (
-            CoolingSource(site=sites[0], location=locations[0], name='Cooling Source 1'),
-            CoolingSource(site=sites[0], location=locations[1], name='Cooling Source 2'),
-            CoolingSource(site=sites[0], location=locations[2], name='Cooling Source 3'),
+            CoolingSource(
+                site=sites[0], location=locations[0], name='Cooling Source 1',
+                type=CoolingSourceTypeChoices.TYPE_CHILLER
+            ),
+            CoolingSource(
+                site=sites[0], location=locations[1], name='Cooling Source 2',
+                type=CoolingSourceTypeChoices.TYPE_COOLING_TOWER
+            ),
+            CoolingSource(
+                site=sites[0], location=locations[2], name='Cooling Source 3',
+                type=CoolingSourceTypeChoices.TYPE_DRY_COOLER
+            ),
         )
         CoolingSource.objects.bulk_create(cooling_sources)
 
@@ -4037,16 +4046,19 @@ class CoolingSourceTestCase(APIViewTestCases.APIViewTestCase):
                 'name': 'Cooling Source 4',
                 'site': sites[0].pk,
                 'location': locations[0].pk,
+                'type': CoolingSourceTypeChoices.TYPE_CHILLER,
             },
             {
                 'name': 'Cooling Source 5',
                 'site': sites[0].pk,
                 'location': locations[1].pk,
+                'type': CoolingSourceTypeChoices.TYPE_CHILLER,
             },
             {
                 'name': 'Cooling Source 6',
                 'site': sites[0].pk,
                 'location': locations[2].pk,
+                'type': CoolingSourceTypeChoices.TYPE_CHILLER,
             },
         ]
 
@@ -4079,8 +4091,12 @@ class CoolingFeedTestCase(APIViewTestCases.APIViewTestCase):
         Rack.objects.bulk_create(racks)
 
         cooling_sources = (
-            CoolingSource(site=site, location=location, name='Cooling Source 1'),
-            CoolingSource(site=site, location=location, name='Cooling Source 2'),
+            CoolingSource(
+                site=site, location=location, name='Cooling Source 1', type=CoolingSourceTypeChoices.TYPE_CHILLER
+            ),
+            CoolingSource(
+                site=site, location=location, name='Cooling Source 2', type=CoolingSourceTypeChoices.TYPE_CHILLER
+            ),
         )
         CoolingSource.objects.bulk_create(cooling_sources)
 

+ 3 - 3
netbox/dcim/tests/test_filtersets.py

@@ -8391,9 +8391,9 @@ class CoolingFeedTestCase(TestCase, ChangeLoggedFilterSetTests):
         Tenant.objects.bulk_create(tenants)
 
         cooling_sources = (
-            CoolingSource(name='Cooling Source 1', site=sites[0]),
-            CoolingSource(name='Cooling Source 2', site=sites[1]),
-            CoolingSource(name='Cooling Source 3', site=sites[2]),
+            CoolingSource(name='Cooling Source 1', site=sites[0], type=CoolingSourceTypeChoices.TYPE_CHILLER),
+            CoolingSource(name='Cooling Source 2', site=sites[1], type=CoolingSourceTypeChoices.TYPE_CHILLER),
+            CoolingSource(name='Cooling Source 3', site=sites[2], type=CoolingSourceTypeChoices.TYPE_CHILLER),
         )
         CoolingSource.objects.bulk_create(cooling_sources)
 

+ 3 - 0
netbox/dcim/tests/test_models.py

@@ -2936,6 +2936,7 @@ class CoolingComponentTestCase(TestCase):
             site=self.site,
             location=location,
             name='Cooling Source 1',
+            type=CoolingSourceTypeChoices.TYPE_CHILLER,
             status=CoolingSourceStatusChoices.STATUS_ACTIVE,
         )
         with self.assertRaises(ValidationError):
@@ -2948,6 +2949,7 @@ class CoolingComponentTestCase(TestCase):
         cooling_source = CoolingSource(
             site=self.site,
             name='Cooling Source 2',
+            type=CoolingSourceTypeChoices.TYPE_CHILLER,
             status=CoolingSourceStatusChoices.STATUS_ACTIVE,
             supply_temperature=Decimal('18'),
         )
@@ -2969,6 +2971,7 @@ class CoolingComponentTestCase(TestCase):
         cooling_source = CoolingSource.objects.create(
             site=self.site,
             name='Cooling Source 3',
+            type=CoolingSourceTypeChoices.TYPE_CHILLER,
             status=CoolingSourceStatusChoices.STATUS_ACTIVE,
         )
         rack = Rack.objects.create(name='Rack 1', site=site2, status=RackStatusChoices.STATUS_ACTIVE)

+ 19 - 9
netbox/dcim/tests/test_views.py

@@ -4514,9 +4514,18 @@ class CoolingSourceTestCase(ViewTestCases.PrimaryObjectViewTestCase):
             location.save()
 
         cooling_sources = (
-            CoolingSource(site=sites[0], location=locations[0], name='Cooling Source 1'),
-            CoolingSource(site=sites[0], location=locations[0], name='Cooling Source 2'),
-            CoolingSource(site=sites[0], location=locations[0], name='Cooling Source 3'),
+            CoolingSource(
+                site=sites[0], location=locations[0], name='Cooling Source 1',
+                type=CoolingSourceTypeChoices.TYPE_CHILLER
+            ),
+            CoolingSource(
+                site=sites[0], location=locations[0], name='Cooling Source 2',
+                type=CoolingSourceTypeChoices.TYPE_CHILLER
+            ),
+            CoolingSource(
+                site=sites[0], location=locations[0], name='Cooling Source 3',
+                type=CoolingSourceTypeChoices.TYPE_CHILLER
+            ),
         )
         CoolingSource.objects.bulk_create(cooling_sources)
 
@@ -4526,15 +4535,16 @@ class CoolingSourceTestCase(ViewTestCases.PrimaryObjectViewTestCase):
             'site': sites[1].pk,
             'location': locations[1].pk,
             'name': 'Cooling Source X',
+            'type': CoolingSourceTypeChoices.TYPE_COOLING_TOWER,
             'status': CoolingSourceStatusChoices.STATUS_ACTIVE,
             'tags': [t.pk for t in tags],
         }
 
         cls.csv_data = (
-            "site,location,name,status",
-            "Site 1,Location 1,Cooling Source 4,active",
-            "Site 1,Location 1,Cooling Source 5,active",
-            "Site 1,Location 1,Cooling Source 6,active",
+            "site,location,name,type,status",
+            "Site 1,Location 1,Cooling Source 4,chiller,active",
+            "Site 1,Location 1,Cooling Source 5,chiller,active",
+            "Site 1,Location 1,Cooling Source 6,chiller,active",
         )
 
         cls.csv_update_data = (
@@ -4559,8 +4569,8 @@ class CoolingFeedTestCase(ViewTestCases.PrimaryObjectViewTestCase):
         site = Site.objects.create(name='Site 1', slug='site-1')
 
         cooling_sources = (
-            CoolingSource(site=site, name='Cooling Source 1'),
-            CoolingSource(site=site, name='Cooling Source 2'),
+            CoolingSource(site=site, name='Cooling Source 1', type=CoolingSourceTypeChoices.TYPE_CHILLER),
+            CoolingSource(site=site, name='Cooling Source 2', type=CoolingSourceTypeChoices.TYPE_CHILLER),
         )
         CoolingSource.objects.bulk_create(cooling_sources)