Просмотр исходного кода

#10520: Restore ability to edit platform NAPALM fields via UI

jeremystretch 2 лет назад
Родитель
Сommit
2fcdc0ae6a

+ 1 - 1
netbox/dcim/filtersets.py

@@ -811,7 +811,7 @@ class PlatformFilterSet(OrganizationalModelFilterSet):
 
 
     class Meta:
     class Meta:
         model = Platform
         model = Platform
-        fields = ['id', 'name', 'slug', 'description']
+        fields = ['id', 'name', 'slug', 'napalm_driver', 'description']
 
 
 
 
 class DeviceFilterSet(NetBoxModelFilterSet, TenancyFilterSet, ContactModelFilterSet, LocalConfigContextFilterSet):
 class DeviceFilterSet(NetBoxModelFilterSet, TenancyFilterSet, ContactModelFilterSet, LocalConfigContextFilterSet):

+ 6 - 2
netbox/dcim/forms/bulk_edit.py

@@ -470,6 +470,10 @@ class PlatformBulkEditForm(NetBoxModelBulkEditForm):
         queryset=Manufacturer.objects.all(),
         queryset=Manufacturer.objects.all(),
         required=False
         required=False
     )
     )
+    napalm_driver = forms.CharField(
+        max_length=50,
+        required=False
+    )
     config_template = DynamicModelChoiceField(
     config_template = DynamicModelChoiceField(
         queryset=ConfigTemplate.objects.all(),
         queryset=ConfigTemplate.objects.all(),
         required=False
         required=False
@@ -481,9 +485,9 @@ class PlatformBulkEditForm(NetBoxModelBulkEditForm):
 
 
     model = Platform
     model = Platform
     fieldsets = (
     fieldsets = (
-        (None, ('manufacturer', 'config_template', 'description')),
+        (None, ('manufacturer', 'config_template', 'napalm_driver', 'description')),
     )
     )
-    nullable_fields = ('manufacturer', 'config_template', 'description')
+    nullable_fields = ('manufacturer', 'config_template', 'napalm_driver', 'description')
 
 
 
 
 class DeviceBulkEditForm(NetBoxModelBulkEditForm):
 class DeviceBulkEditForm(NetBoxModelBulkEditForm):

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

@@ -347,7 +347,7 @@ class PlatformImportForm(NetBoxModelImportForm):
     class Meta:
     class Meta:
         model = Platform
         model = Platform
         fields = (
         fields = (
-            'name', 'slug', 'manufacturer', 'config_template', 'description', 'tags',
+            'name', 'slug', 'manufacturer', 'config_template', 'napalm_driver', 'napalm_args', 'description', 'tags',
         )
         )
 
 
 
 

+ 5 - 2
netbox/dcim/forms/model_forms.py

@@ -361,15 +361,18 @@ class PlatformForm(NetBoxModelForm):
 
 
     fieldsets = (
     fieldsets = (
         ('Platform', (
         ('Platform', (
-            'name', 'slug', 'manufacturer', 'config_template', 'description', 'tags',
+            'name', 'slug', 'manufacturer', 'config_template', 'napalm_driver', 'napalm_args', 'description', 'tags',
         )),
         )),
     )
     )
 
 
     class Meta:
     class Meta:
         model = Platform
         model = Platform
         fields = [
         fields = [
-            'name', 'slug', 'manufacturer', 'config_template', 'description', 'tags',
+            'name', 'slug', 'manufacturer', 'config_template', 'napalm_driver', 'napalm_args', 'description', 'tags',
         ]
         ]
+        widgets = {
+            'napalm_args': forms.Textarea(),
+        }
 
 
 
 
 class DeviceForm(TenancyForm, NetBoxModelForm):
 class DeviceForm(TenancyForm, NetBoxModelForm):

+ 1 - 0
netbox/dcim/search.py

@@ -172,6 +172,7 @@ class PlatformIndex(SearchIndex):
     fields = (
     fields = (
         ('name', 100),
         ('name', 100),
         ('slug', 110),
         ('slug', 110),
+        ('napalm_driver', 300),
         ('description', 500),
         ('description', 500),
     )
     )
 
 

+ 3 - 3
netbox/dcim/tables/devices.py

@@ -133,11 +133,11 @@ class PlatformTable(NetBoxTable):
     class Meta(NetBoxTable.Meta):
     class Meta(NetBoxTable.Meta):
         model = models.Platform
         model = models.Platform
         fields = (
         fields = (
-            'pk', 'id', 'name', 'manufacturer', 'device_count', 'vm_count', 'slug', 'config_template', 'description',
-            'tags', 'actions', 'created', 'last_updated',
+            'pk', 'id', 'name', 'manufacturer', 'device_count', 'vm_count', 'slug', 'config_template', 'napalm_driver',
+            'napalm_args', 'description', 'tags', 'actions', 'created', 'last_updated',
         )
         )
         default_columns = (
         default_columns = (
-            'pk', 'name', 'manufacturer', 'device_count', 'vm_count', 'description',
+            'pk', 'name', 'manufacturer', 'device_count', 'vm_count', 'napalm_driver', 'description',
         )
         )
 
 
 
 

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

@@ -1498,9 +1498,9 @@ class PlatformTestCase(TestCase, ChangeLoggedFilterSetTests):
         Manufacturer.objects.bulk_create(manufacturers)
         Manufacturer.objects.bulk_create(manufacturers)
 
 
         platforms = (
         platforms = (
-            Platform(name='Platform 1', slug='platform-1', manufacturer=manufacturers[0], description='A'),
-            Platform(name='Platform 2', slug='platform-2', manufacturer=manufacturers[1], description='B'),
-            Platform(name='Platform 3', slug='platform-3', manufacturer=manufacturers[2], description='C'),
+            Platform(name='Platform 1', slug='platform-1', manufacturer=manufacturers[0], napalm_driver='driver-1', description='A'),
+            Platform(name='Platform 2', slug='platform-2', manufacturer=manufacturers[1], napalm_driver='driver-2', description='B'),
+            Platform(name='Platform 3', slug='platform-3', manufacturer=manufacturers[2], napalm_driver='driver-3', description='C'),
         )
         )
         Platform.objects.bulk_create(platforms)
         Platform.objects.bulk_create(platforms)
 
 
@@ -1516,6 +1516,10 @@ class PlatformTestCase(TestCase, ChangeLoggedFilterSetTests):
         params = {'description': ['A', 'B']}
         params = {'description': ['A', 'B']}
         self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
         self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
 
 
+    def test_napalm_driver(self):
+        params = {'napalm_driver': ['driver-1', 'driver-2']}
+        self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
+
     def test_manufacturer(self):
     def test_manufacturer(self):
         manufacturers = Manufacturer.objects.all()[:2]
         manufacturers = Manufacturer.objects.all()[:2]
         params = {'manufacturer_id': [manufacturers[0].pk, manufacturers[1].pk]}
         params = {'manufacturer_id': [manufacturers[0].pk, manufacturers[1].pk]}

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

@@ -1591,6 +1591,8 @@ class PlatformTestCase(ViewTestCases.OrganizationalObjectViewTestCase):
             'name': 'Platform X',
             'name': 'Platform X',
             'slug': 'platform-x',
             'slug': 'platform-x',
             'manufacturer': manufacturer.pk,
             'manufacturer': manufacturer.pk,
+            'napalm_driver': 'junos',
+            'napalm_args': None,
             'description': 'A new platform',
             'description': 'A new platform',
             'tags': [t.pk for t in tags],
             'tags': [t.pk for t in tags],
         }
         }
@@ -1610,6 +1612,7 @@ class PlatformTestCase(ViewTestCases.OrganizationalObjectViewTestCase):
         )
         )
 
 
         cls.bulk_edit_data = {
         cls.bulk_edit_data = {
+            'napalm_driver': 'ios',
             'description': 'New description',
             'description': 'New description',
         }
         }
 
 

+ 26 - 0
netbox/templates/dcim/platform.html

@@ -43,10 +43,36 @@
             <th scope="row">Config Template</th>
             <th scope="row">Config Template</th>
             <td>{{ object.config_template|linkify|placeholder }}</td>
             <td>{{ object.config_template|linkify|placeholder }}</td>
           </tr>
           </tr>
+          <tr>
+            <th scope="row">
+              NAPALM Driver
+              <i
+                class="mdi mdi-alert-box text-warning"
+                data-bs-toggle="tooltip"
+                data-bs-placement="right"
+                title="This field has been deprecated, and will be removed in NetBox v3.6."
+              ></i>
+            </th>
+            <td>{{ object.napalm_driver|placeholder }}</td>
+          </tr>
         </table>
         </table>
       </div>
       </div>
     </div>
     </div>
     {% include 'inc/panels/tags.html' %}
     {% include 'inc/panels/tags.html' %}
+    <div class="card">
+      <h5 class="card-header">
+        NAPALM Arguments
+        <i
+          class="mdi mdi-alert-box text-warning"
+          data-bs-toggle="tooltip"
+          data-bs-placement="right"
+          title="This field has been deprecated, and will be removed in NetBox v3.6."
+        ></i>
+      </h5>
+      <div class="card-body">
+        <pre>{{ object.napalm_args|json }}</pre>
+      </div>
+    </div>
     {% plugin_left_page object %}
     {% plugin_left_page object %}
 	</div>
 	</div>
 	<div class="col col-md-6">
 	<div class="col col-md-6">