Skip to content

Commit 2fcdc0a

Browse files
committed
#10520: Restore ability to edit platform NAPALM fields via UI
1 parent 274cd5d commit 2fcdc0a

File tree

9 files changed

+53
-12
lines changed

9 files changed

+53
-12
lines changed

netbox/dcim/filtersets.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -811,7 +811,7 @@ class PlatformFilterSet(OrganizationalModelFilterSet):
811811

812812
class Meta:
813813
model = Platform
814-
fields = ['id', 'name', 'slug', 'description']
814+
fields = ['id', 'name', 'slug', 'napalm_driver', 'description']
815815

816816

817817
class DeviceFilterSet(NetBoxModelFilterSet, TenancyFilterSet, ContactModelFilterSet, LocalConfigContextFilterSet):

netbox/dcim/forms/bulk_edit.py

+6-2
Original file line numberDiff line numberDiff line change
@@ -470,6 +470,10 @@ class PlatformBulkEditForm(NetBoxModelBulkEditForm):
470470
queryset=Manufacturer.objects.all(),
471471
required=False
472472
)
473+
napalm_driver = forms.CharField(
474+
max_length=50,
475+
required=False
476+
)
473477
config_template = DynamicModelChoiceField(
474478
queryset=ConfigTemplate.objects.all(),
475479
required=False
@@ -481,9 +485,9 @@ class PlatformBulkEditForm(NetBoxModelBulkEditForm):
481485

482486
model = Platform
483487
fieldsets = (
484-
(None, ('manufacturer', 'config_template', 'description')),
488+
(None, ('manufacturer', 'config_template', 'napalm_driver', 'description')),
485489
)
486-
nullable_fields = ('manufacturer', 'config_template', 'description')
490+
nullable_fields = ('manufacturer', 'config_template', 'napalm_driver', 'description')
487491

488492

489493
class DeviceBulkEditForm(NetBoxModelBulkEditForm):

netbox/dcim/forms/bulk_import.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ class PlatformImportForm(NetBoxModelImportForm):
347347
class Meta:
348348
model = Platform
349349
fields = (
350-
'name', 'slug', 'manufacturer', 'config_template', 'description', 'tags',
350+
'name', 'slug', 'manufacturer', 'config_template', 'napalm_driver', 'napalm_args', 'description', 'tags',
351351
)
352352

353353

netbox/dcim/forms/model_forms.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -361,15 +361,18 @@ class PlatformForm(NetBoxModelForm):
361361

362362
fieldsets = (
363363
('Platform', (
364-
'name', 'slug', 'manufacturer', 'config_template', 'description', 'tags',
364+
'name', 'slug', 'manufacturer', 'config_template', 'napalm_driver', 'napalm_args', 'description', 'tags',
365365
)),
366366
)
367367

368368
class Meta:
369369
model = Platform
370370
fields = [
371-
'name', 'slug', 'manufacturer', 'config_template', 'description', 'tags',
371+
'name', 'slug', 'manufacturer', 'config_template', 'napalm_driver', 'napalm_args', 'description', 'tags',
372372
]
373+
widgets = {
374+
'napalm_args': forms.Textarea(),
375+
}
373376

374377

375378
class DeviceForm(TenancyForm, NetBoxModelForm):

netbox/dcim/search.py

+1
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ class PlatformIndex(SearchIndex):
172172
fields = (
173173
('name', 100),
174174
('slug', 110),
175+
('napalm_driver', 300),
175176
('description', 500),
176177
)
177178

netbox/dcim/tables/devices.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -133,11 +133,11 @@ class PlatformTable(NetBoxTable):
133133
class Meta(NetBoxTable.Meta):
134134
model = models.Platform
135135
fields = (
136-
'pk', 'id', 'name', 'manufacturer', 'device_count', 'vm_count', 'slug', 'config_template', 'description',
137-
'tags', 'actions', 'created', 'last_updated',
136+
'pk', 'id', 'name', 'manufacturer', 'device_count', 'vm_count', 'slug', 'config_template', 'napalm_driver',
137+
'napalm_args', 'description', 'tags', 'actions', 'created', 'last_updated',
138138
)
139139
default_columns = (
140-
'pk', 'name', 'manufacturer', 'device_count', 'vm_count', 'description',
140+
'pk', 'name', 'manufacturer', 'device_count', 'vm_count', 'napalm_driver', 'description',
141141
)
142142

143143

netbox/dcim/tests/test_filtersets.py

+7-3
Original file line numberDiff line numberDiff line change
@@ -1498,9 +1498,9 @@ def setUpTestData(cls):
14981498
Manufacturer.objects.bulk_create(manufacturers)
14991499

15001500
platforms = (
1501-
Platform(name='Platform 1', slug='platform-1', manufacturer=manufacturers[0], description='A'),
1502-
Platform(name='Platform 2', slug='platform-2', manufacturer=manufacturers[1], description='B'),
1503-
Platform(name='Platform 3', slug='platform-3', manufacturer=manufacturers[2], description='C'),
1501+
Platform(name='Platform 1', slug='platform-1', manufacturer=manufacturers[0], napalm_driver='driver-1', description='A'),
1502+
Platform(name='Platform 2', slug='platform-2', manufacturer=manufacturers[1], napalm_driver='driver-2', description='B'),
1503+
Platform(name='Platform 3', slug='platform-3', manufacturer=manufacturers[2], napalm_driver='driver-3', description='C'),
15041504
)
15051505
Platform.objects.bulk_create(platforms)
15061506

@@ -1516,6 +1516,10 @@ def test_description(self):
15161516
params = {'description': ['A', 'B']}
15171517
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
15181518

1519+
def test_napalm_driver(self):
1520+
params = {'napalm_driver': ['driver-1', 'driver-2']}
1521+
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
1522+
15191523
def test_manufacturer(self):
15201524
manufacturers = Manufacturer.objects.all()[:2]
15211525
params = {'manufacturer_id': [manufacturers[0].pk, manufacturers[1].pk]}

netbox/dcim/tests/test_views.py

+3
Original file line numberDiff line numberDiff line change
@@ -1591,6 +1591,8 @@ def setUpTestData(cls):
15911591
'name': 'Platform X',
15921592
'slug': 'platform-x',
15931593
'manufacturer': manufacturer.pk,
1594+
'napalm_driver': 'junos',
1595+
'napalm_args': None,
15941596
'description': 'A new platform',
15951597
'tags': [t.pk for t in tags],
15961598
}
@@ -1610,6 +1612,7 @@ def setUpTestData(cls):
16101612
)
16111613

16121614
cls.bulk_edit_data = {
1615+
'napalm_driver': 'ios',
16131616
'description': 'New description',
16141617
}
16151618

netbox/templates/dcim/platform.html

+26
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,36 @@ <h5 class="card-header">
4343
<th scope="row">Config Template</th>
4444
<td>{{ object.config_template|linkify|placeholder }}</td>
4545
</tr>
46+
<tr>
47+
<th scope="row">
48+
NAPALM Driver
49+
<i
50+
class="mdi mdi-alert-box text-warning"
51+
data-bs-toggle="tooltip"
52+
data-bs-placement="right"
53+
title="This field has been deprecated, and will be removed in NetBox v3.6."
54+
></i>
55+
</th>
56+
<td>{{ object.napalm_driver|placeholder }}</td>
57+
</tr>
4658
</table>
4759
</div>
4860
</div>
4961
{% include 'inc/panels/tags.html' %}
62+
<div class="card">
63+
<h5 class="card-header">
64+
NAPALM Arguments
65+
<i
66+
class="mdi mdi-alert-box text-warning"
67+
data-bs-toggle="tooltip"
68+
data-bs-placement="right"
69+
title="This field has been deprecated, and will be removed in NetBox v3.6."
70+
></i>
71+
</h5>
72+
<div class="card-body">
73+
<pre>{{ object.napalm_args|json }}</pre>
74+
</div>
75+
</div>
5076
{% plugin_left_page object %}
5177
</div>
5278
<div class="col col-md-6">

0 commit comments

Comments
 (0)