Skip to content

Commit

Permalink
Add the enabled filed to InterfaceTemplate
Browse files Browse the repository at this point in the history
  • Loading branch information
kkthxbye authored and jeremystretch committed Jan 24, 2023
1 parent dceffca commit 024df81
Show file tree
Hide file tree
Showing 10 changed files with 47 additions and 8 deletions.
2 changes: 1 addition & 1 deletion netbox/dcim/api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -487,7 +487,7 @@ class InterfaceTemplateSerializer(ValidatedModelSerializer):
class Meta:
model = InterfaceTemplate
fields = [
'id', 'url', 'display', 'device_type', 'module_type', 'name', 'label', 'type', 'mgmt_only', 'description',
'id', 'url', 'display', 'device_type', 'module_type', 'name', 'label', 'type', 'enabled', 'mgmt_only', 'description',
'poe_mode', 'poe_type', 'created', 'last_updated',
]

Expand Down
2 changes: 1 addition & 1 deletion netbox/dcim/filtersets.py
Original file line number Diff line number Diff line change
Expand Up @@ -683,7 +683,7 @@ class InterfaceTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeCo

class Meta:
model = InterfaceTemplate
fields = ['id', 'name', 'type', 'mgmt_only']
fields = ['id', 'name', 'type', 'enabled', 'mgmt_only']


class FrontPortTemplateFilterSet(ChangeLoggedModelFilterSet, ModularDeviceTypeComponentFilterSet):
Expand Down
4 changes: 4 additions & 0 deletions netbox/dcim/forms/bulk_edit.py
Original file line number Diff line number Diff line change
Expand Up @@ -923,6 +923,10 @@ class InterfaceTemplateBulkEditForm(BulkEditForm):
required=False,
widget=StaticSelect()
)
enabled = forms.NullBooleanField(
required=False,
widget=BulkEditNullBooleanSelect
)
mgmt_only = forms.NullBooleanField(
required=False,
widget=BulkEditNullBooleanSelect,
Expand Down
4 changes: 2 additions & 2 deletions netbox/dcim/forms/model_forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -1088,14 +1088,14 @@ class Meta:

class InterfaceTemplateForm(ModularComponentTemplateForm):
fieldsets = (
(None, ('device_type', 'module_type', 'name', 'label', 'type', 'mgmt_only', 'description')),
(None, ('device_type', 'module_type', 'name', 'label', 'type', 'enabled', 'mgmt_only', 'description')),
('PoE', ('poe_mode', 'poe_type'))
)

class Meta:
model = InterfaceTemplate
fields = [
'device_type', 'module_type', 'name', 'label', 'type', 'mgmt_only', 'description', 'poe_mode', 'poe_type',
'device_type', 'module_type', 'name', 'label', 'type', 'mgmt_only', 'enabled', 'description', 'poe_mode', 'poe_type',
]
widgets = {
'type': StaticSelect(),
Expand Down
2 changes: 1 addition & 1 deletion netbox/dcim/forms/object_import.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ class InterfaceTemplateImportForm(ComponentTemplateImportForm):
class Meta:
model = InterfaceTemplate
fields = [
'device_type', 'module_type', 'name', 'label', 'type', 'mgmt_only', 'description', 'poe_mode', 'poe_type',
'device_type', 'module_type', 'name', 'label', 'type', 'enabled', 'mgmt_only', 'description', 'poe_mode', 'poe_type',
]


Expand Down
18 changes: 18 additions & 0 deletions netbox/dcim/migrations/0168_interface_template_enabled.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 4.1.5 on 2023-01-09 07:03

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('dcim', '0167_module_status'),
]

operations = [
migrations.AddField(
model_name='interfacetemplate',
name='enabled',
field=models.BooleanField(default=True),
),
]
5 changes: 5 additions & 0 deletions netbox/dcim/models/device_component_templates.py
Original file line number Diff line number Diff line change
Expand Up @@ -344,6 +344,9 @@ class InterfaceTemplate(ModularComponentTemplateModel):
max_length=50,
choices=InterfaceTypeChoices
)
enabled = models.BooleanField(
default=True
)
mgmt_only = models.BooleanField(
default=False,
verbose_name='Management only'
Expand All @@ -368,6 +371,7 @@ def instantiate(self, **kwargs):
name=self.resolve_name(kwargs.get('module')),
label=self.resolve_label(kwargs.get('module')),
type=self.type,
enabled=self.enabled,
mgmt_only=self.mgmt_only,
poe_mode=self.poe_mode,
poe_type=self.poe_type,
Expand All @@ -378,6 +382,7 @@ def to_yaml(self):
return {
'name': self.name,
'type': self.type,
'enabled': self.enabled,
'mgmt_only': self.mgmt_only,
'label': self.label,
'description': self.description,
Expand Down
3 changes: 2 additions & 1 deletion netbox/dcim/tables/devicetypes.py
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,7 @@ class Meta(ComponentTemplateTable.Meta):


class InterfaceTemplateTable(ComponentTemplateTable):
enabled = columns.BooleanColumn()
mgmt_only = columns.BooleanColumn(
verbose_name='Management Only'
)
Expand All @@ -174,7 +175,7 @@ class InterfaceTemplateTable(ComponentTemplateTable):

class Meta(ComponentTemplateTable.Meta):
model = models.InterfaceTemplate
fields = ('pk', 'name', 'label', 'mgmt_only', 'type', 'description', 'poe_mode', 'poe_type', 'actions')
fields = ('pk', 'name', 'label', 'enabled', 'mgmt_only', 'type', 'description', 'poe_mode', 'poe_type', 'actions')
empty_text = "None"


Expand Down
10 changes: 8 additions & 2 deletions netbox/dcim/tests/test_filtersets.py
Original file line number Diff line number Diff line change
Expand Up @@ -1129,8 +1129,8 @@ def setUpTestData(cls):
DeviceType.objects.bulk_create(device_types)

InterfaceTemplate.objects.bulk_create((
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),
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),
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),
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),
InterfaceTemplate(device_type=device_types[2], name='Interface 3', type=InterfaceTypeChoices.TYPE_1GE_SFP, mgmt_only=False),
))

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

def test_enabled(self):
params = {'enabled': 'true'}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'enabled': 'false'}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)

def test_mgmt_only(self):
params = {'mgmt_only': 'true'}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
Expand Down
5 changes: 5 additions & 0 deletions netbox/dcim/tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -718,6 +718,7 @@ def test_import_objects(self):
mgmt_only: true
- name: Interface 2
type: 1000base-t
enabled: false
- name: Interface 3
type: 1000base-t
rear-ports:
Expand Down Expand Up @@ -811,6 +812,10 @@ def test_import_objects(self):
self.assertEqual(iface1.name, 'Interface 1')
self.assertEqual(iface1.type, InterfaceTypeChoices.TYPE_1GE_FIXED)
self.assertTrue(iface1.mgmt_only)
self.assertTrue(iface1.enabled)

iface2 = InterfaceTemplate.objects.filter(name="Interface 2").first()
self.assertFalse(iface2.enabled)

self.assertEqual(device_type.rearporttemplates.count(), 3)
rp1 = RearPortTemplate.objects.first()
Expand Down

0 comments on commit 024df81

Please sign in to comment.