Skip to content

Commit 8e94eb6

Browse files
kkthxbyejeremystretch
kkthxbye
authored andcommitted
Add the enabled filed to InterfaceTemplate
1 parent 1a2dae3 commit 8e94eb6

10 files changed

+47
-8
lines changed

netbox/dcim/api/serializers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -487,7 +487,7 @@ class InterfaceTemplateSerializer(ValidatedModelSerializer):
487487
class Meta:
488488
model = InterfaceTemplate
489489
fields = [
490-
'id', 'url', 'display', 'device_type', 'module_type', 'name', 'label', 'type', 'mgmt_only', 'description',
490+
'id', 'url', 'display', 'device_type', 'module_type', 'name', 'label', 'type', 'enabled', 'mgmt_only', 'description',
491491
'poe_mode', 'poe_type', 'created', 'last_updated',
492492
]
493493

netbox/dcim/filtersets.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -683,7 +683,7 @@ class InterfaceTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeCo
683683

684684
class Meta:
685685
model = InterfaceTemplate
686-
fields = ['id', 'name', 'type', 'mgmt_only']
686+
fields = ['id', 'name', 'type', 'enabled', 'mgmt_only']
687687

688688

689689
class FrontPortTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeComponentFilterSet):

netbox/dcim/forms/bulk_edit.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -923,6 +923,10 @@ class InterfaceTemplateBulkEditForm(BulkEditForm):
923923
required=False,
924924
widget=StaticSelect()
925925
)
926+
enabled = forms.NullBooleanField(
927+
required=False,
928+
widget=BulkEditNullBooleanSelect
929+
)
926930
mgmt_only = forms.NullBooleanField(
927931
required=False,
928932
widget=BulkEditNullBooleanSelect,

netbox/dcim/forms/model_forms.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1088,14 +1088,14 @@ class Meta:
10881088

10891089
class InterfaceTemplateForm(ModularComponentTemplateForm):
10901090
fieldsets = (
1091-
(None, ('device_type', 'module_type', 'name', 'label', 'type', 'mgmt_only', 'description')),
1091+
(None, ('device_type', 'module_type', 'name', 'label', 'type', 'enabled', 'mgmt_only', 'description')),
10921092
('PoE', ('poe_mode', 'poe_type'))
10931093
)
10941094

10951095
class Meta:
10961096
model = InterfaceTemplate
10971097
fields = [
1098-
'device_type', 'module_type', 'name', 'label', 'type', 'mgmt_only', 'description', 'poe_mode', 'poe_type',
1098+
'device_type', 'module_type', 'name', 'label', 'type', 'mgmt_only', 'enabled', 'description', 'poe_mode', 'poe_type',
10991099
]
11001100
widgets = {
11011101
'type': StaticSelect(),

netbox/dcim/forms/object_import.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ class InterfaceTemplateImportForm(ComponentTemplateImportForm):
100100
class Meta:
101101
model = InterfaceTemplate
102102
fields = [
103-
'device_type', 'module_type', 'name', 'label', 'type', 'mgmt_only', 'description', 'poe_mode', 'poe_type',
103+
'device_type', 'module_type', 'name', 'label', 'type', 'enabled', 'mgmt_only', 'description', 'poe_mode', 'poe_type',
104104
]
105105

106106

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 4.1.5 on 2023-01-09 07:03
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('dcim', '0167_module_status'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='interfacetemplate',
15+
name='enabled',
16+
field=models.BooleanField(default=True),
17+
),
18+
]

netbox/dcim/models/device_component_templates.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -344,6 +344,9 @@ class InterfaceTemplate(ModularComponentTemplateModel):
344344
max_length=50,
345345
choices=InterfaceTypeChoices
346346
)
347+
enabled = models.BooleanField(
348+
default=True
349+
)
347350
mgmt_only = models.BooleanField(
348351
default=False,
349352
verbose_name='Management only'
@@ -368,6 +371,7 @@ def instantiate(self, **kwargs):
368371
name=self.resolve_name(kwargs.get('module')),
369372
label=self.resolve_label(kwargs.get('module')),
370373
type=self.type,
374+
enabled=self.enabled,
371375
mgmt_only=self.mgmt_only,
372376
poe_mode=self.poe_mode,
373377
poe_type=self.poe_type,
@@ -378,6 +382,7 @@ def to_yaml(self):
378382
return {
379383
'name': self.name,
380384
'type': self.type,
385+
'enabled': self.enabled,
381386
'mgmt_only': self.mgmt_only,
382387
'label': self.label,
383388
'description': self.description,

netbox/dcim/tables/devicetypes.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ class Meta(ComponentTemplateTable.Meta):
174174

175175

176176
class InterfaceTemplateTable(ComponentTemplateTable):
177+
enabled = columns.BooleanColumn()
177178
mgmt_only = columns.BooleanColumn(
178179
verbose_name='Management Only'
179180
)
@@ -184,7 +185,7 @@ class InterfaceTemplateTable(ComponentTemplateTable):
184185

185186
class Meta(ComponentTemplateTable.Meta):
186187
model = models.InterfaceTemplate
187-
fields = ('pk', 'name', 'label', 'mgmt_only', 'type', 'description', 'poe_mode', 'poe_type', 'actions')
188+
fields = ('pk', 'name', 'label', 'enabled', 'mgmt_only', 'type', 'description', 'poe_mode', 'poe_type', 'actions')
188189
empty_text = "None"
189190

190191

netbox/dcim/tests/test_filtersets.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1129,8 +1129,8 @@ def setUpTestData(cls):
11291129
DeviceType.objects.bulk_create(device_types)
11301130

11311131
InterfaceTemplate.objects.bulk_create((
1132-
InterfaceTemplate(device_type=device_types[0], name='Interface 1', type=InterfaceTypeChoices.TYPE_1GE_FIXED, mgmt_only=True, poe_mode=InterfacePoEModeChoices.MODE_PD, poe_type=InterfacePoETypeChoices.TYPE_1_8023AF),
1133-
InterfaceTemplate(device_type=device_types[1], name='Interface 2', type=InterfaceTypeChoices.TYPE_1GE_GBIC, mgmt_only=False, poe_mode=InterfacePoEModeChoices.MODE_PSE, poe_type=InterfacePoETypeChoices.TYPE_2_8023AT),
1132+
InterfaceTemplate(device_type=device_types[0], name='Interface 1', type=InterfaceTypeChoices.TYPE_1GE_FIXED, enabled=True, mgmt_only=True, poe_mode=InterfacePoEModeChoices.MODE_PD, poe_type=InterfacePoETypeChoices.TYPE_1_8023AF),
1133+
InterfaceTemplate(device_type=device_types[1], name='Interface 2', type=InterfaceTypeChoices.TYPE_1GE_GBIC, enabled=False, mgmt_only=False, poe_mode=InterfacePoEModeChoices.MODE_PSE, poe_type=InterfacePoETypeChoices.TYPE_2_8023AT),
11341134
InterfaceTemplate(device_type=device_types[2], name='Interface 3', type=InterfaceTypeChoices.TYPE_1GE_SFP, mgmt_only=False),
11351135
))
11361136

@@ -1147,6 +1147,12 @@ def test_type(self):
11471147
params = {'type': [InterfaceTypeChoices.TYPE_1GE_FIXED, InterfaceTypeChoices.TYPE_1GE_GBIC]}
11481148
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
11491149

1150+
def test_enabled(self):
1151+
params = {'enabled': 'true'}
1152+
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
1153+
params = {'enabled': 'false'}
1154+
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
1155+
11501156
def test_mgmt_only(self):
11511157
params = {'mgmt_only': 'true'}
11521158
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)

netbox/dcim/tests/test_views.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -718,6 +718,7 @@ def test_import_objects(self):
718718
mgmt_only: true
719719
- name: Interface 2
720720
type: 1000base-t
721+
enabled: false
721722
- name: Interface 3
722723
type: 1000base-t
723724
rear-ports:
@@ -811,6 +812,10 @@ def test_import_objects(self):
811812
self.assertEqual(iface1.name, 'Interface 1')
812813
self.assertEqual(iface1.type, InterfaceTypeChoices.TYPE_1GE_FIXED)
813814
self.assertTrue(iface1.mgmt_only)
815+
self.assertTrue(iface1.enabled)
816+
817+
iface2 = InterfaceTemplate.objects.filter(name="Interface 2").first()
818+
self.assertFalse(iface2.enabled)
814819

815820
self.assertEqual(device_type.rearporttemplates.count(), 3)
816821
rp1 = RearPortTemplate.objects.first()

0 commit comments

Comments
 (0)