Browse Source

Added bulk import views for rack roles, device roles, and platforms

Jeremy Stretch 7 years ago
parent
commit
9351f686b1
4 changed files with 63 additions and 4 deletions
  1. 36 0
      netbox/dcim/forms.py
  2. 3 0
      netbox/dcim/urls.py
  3. 21 1
      netbox/dcim/views.py
  4. 3 3
      netbox/templates/inc/nav_menu.html

+ 36 - 0
netbox/dcim/forms.py

@@ -212,6 +212,18 @@ class RackRoleForm(BootstrapMixin, forms.ModelForm):
         fields = ['name', 'slug', 'color']
 
 
+class RackRoleCSVForm(forms.ModelForm):
+    slug = SlugField()
+
+    class Meta:
+        model = RackRole
+        fields = ['name', 'slug', 'color']
+        help_texts = {
+            'name': 'Name of rack role',
+            'color': 'RGB color in hexadecimal (e.g. 00ff00)'
+        }
+
+
 #
 # Racks
 #
@@ -622,6 +634,18 @@ class DeviceRoleForm(BootstrapMixin, forms.ModelForm):
         fields = ['name', 'slug', 'color', 'vm_role']
 
 
+class DeviceRoleCSVForm(forms.ModelForm):
+    slug = SlugField()
+
+    class Meta:
+        model = DeviceRole
+        fields = ['name', 'slug', 'color', 'vm_role']
+        help_texts = {
+            'name': 'Name of device role',
+            'color': 'RGB color in hexadecimal (e.g. 00ff00)'
+        }
+
+
 #
 # Platforms
 #
@@ -634,6 +658,18 @@ class PlatformForm(BootstrapMixin, forms.ModelForm):
         fields = ['name', 'slug', 'napalm_driver', 'rpc_client']
 
 
+class PlatformCSVForm(forms.ModelForm):
+    slug = SlugField()
+
+    class Meta:
+        model = Platform
+        fields = ['name', 'slug', 'napalm_driver']
+        help_texts = {
+            'name': 'Platform name',
+            # 'color': 'RGB color in hexadecimal (e.g. 00ff00)'
+        }
+
+
 #
 # Devices
 #

+ 3 - 0
netbox/dcim/urls.py

@@ -39,6 +39,7 @@ urlpatterns = [
     # Rack roles
     url(r'^rack-roles/$', views.RackRoleListView.as_view(), name='rackrole_list'),
     url(r'^rack-roles/add/$', views.RackRoleCreateView.as_view(), name='rackrole_add'),
+    url(r'^rack-roles/import/$', views.RackRoleBulkImportView.as_view(), name='rackrole_import'),
     url(r'^rack-roles/delete/$', views.RackRoleBulkDeleteView.as_view(), name='rackrole_bulk_delete'),
     url(r'^rack-roles/(?P<pk>\d+)/edit/$', views.RackRoleEditView.as_view(), name='rackrole_edit'),
 
@@ -106,12 +107,14 @@ urlpatterns = [
     # Device roles
     url(r'^device-roles/$', views.DeviceRoleListView.as_view(), name='devicerole_list'),
     url(r'^device-roles/add/$', views.DeviceRoleCreateView.as_view(), name='devicerole_add'),
+    url(r'^device-roles/import/$', views.DeviceRoleBulkImportView.as_view(), name='devicerole_import'),
     url(r'^device-roles/delete/$', views.DeviceRoleBulkDeleteView.as_view(), name='devicerole_bulk_delete'),
     url(r'^device-roles/(?P<slug>[\w-]+)/edit/$', views.DeviceRoleEditView.as_view(), name='devicerole_edit'),
 
     # Platforms
     url(r'^platforms/$', views.PlatformListView.as_view(), name='platform_list'),
     url(r'^platforms/add/$', views.PlatformCreateView.as_view(), name='platform_add'),
+    url(r'^platforms/import/$', views.PlatformBulkImportView.as_view(), name='platform_import'),
     url(r'^platforms/delete/$', views.PlatformBulkDeleteView.as_view(), name='platform_bulk_delete'),
     url(r'^platforms/(?P<slug>[\w-]+)/edit/$', views.PlatformEditView.as_view(), name='platform_edit'),
 

+ 21 - 1
netbox/dcim/views.py

@@ -1,5 +1,4 @@
 from __future__ import unicode_literals
-from copy import deepcopy
 import re
 from natsort import natsorted
 from operator import attrgetter
@@ -273,6 +272,13 @@ class RackRoleEditView(RackRoleCreateView):
     permission_required = 'dcim.change_rackrole'
 
 
+class RackRoleBulkImportView(PermissionRequiredMixin, BulkImportView):
+    permission_required = 'dcim.add_rackrole'
+    model_form = forms.RackRoleCSVForm
+    table = tables.RackRoleTable
+    default_return_url = 'dcim:rackrole_list'
+
+
 class RackRoleBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
     permission_required = 'dcim.delete_rackrole'
     cls = RackRole
@@ -738,6 +744,13 @@ class DeviceRoleEditView(DeviceRoleCreateView):
     permission_required = 'dcim.change_devicerole'
 
 
+class DeviceRoleBulkImportView(PermissionRequiredMixin, BulkImportView):
+    permission_required = 'dcim.add_devicerole'
+    model_form = forms.DeviceRoleCSVForm
+    table = tables.DeviceRoleTable
+    default_return_url = 'dcim:devicerole_list'
+
+
 class DeviceRoleBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
     permission_required = 'dcim.delete_devicerole'
     cls = DeviceRole
@@ -769,6 +782,13 @@ class PlatformEditView(PlatformCreateView):
     permission_required = 'dcim.change_platform'
 
 
+class PlatformBulkImportView(PermissionRequiredMixin, BulkImportView):
+    permission_required = 'dcim.add_platform'
+    model_form = forms.PlatformCSVForm
+    table = tables.PlatformTable
+    default_return_url = 'dcim:platform_list'
+
+
 class PlatformBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
     permission_required = 'dcim.delete_platform'
     cls = Platform

+ 3 - 3
netbox/templates/inc/nav_menu.html

@@ -91,7 +91,7 @@
                             {% if perms.dcim.add_rackrole %}
                                 <div class="buttons pull-right">
                                     <a href="{% url 'dcim:rackrole_add' %}" class="btn btn-xs btn-success" title="Add"><i class="fa fa-plus"></i></a>
-                                    <a class="btn btn-xs btn-info disabled" title="Import"><i class="fa fa-download"></i></a>
+                                    <a href="{% url 'dcim:rackrole_import' %}" class="btn btn-xs btn-info" title="Import"><i class="fa fa-download"></i></a>
                                 </div>
                             {% endif %}
                             <a href="{% url 'dcim:rackrole_list' %}">Rack Roles</a>
@@ -121,7 +121,7 @@
                             {% if perms.dcim.add_devicerole %}
                                 <div class="buttons pull-right">
                                     <a href="{% url 'dcim:devicerole_add' %}" class="btn btn-xs btn-success" title="Add"><i class="fa fa-plus"></i></a>
-                                    <a class="btn btn-xs btn-info disabled" title="Import"><i class="fa fa-download"></i></a>
+                                    <a href="{% url 'dcim:devicerole_import' %}" class="btn btn-xs btn-info" title="Import"><i class="fa fa-download"></i></a>
                                 </div>
                             {% endif %}
                             <a href="{% url 'dcim:devicerole_list' %}">Device Roles</a>
@@ -130,7 +130,7 @@
                             {% if perms.dcim.add_platform %}
                                 <div class="buttons pull-right">
                                     <a href="{% url 'dcim:platform_add' %}" class="btn btn-xs btn-success" title="Add"><i class="fa fa-plus"></i></a>
-                                    <a class="btn btn-xs btn-info disabled" title="Import"><i class="fa fa-download"></i></a>
+                                    <a href="{% url 'dcim:platform_import' %}" class="btn btn-xs btn-info" title="Import"><i class="fa fa-download"></i></a>
                                 </div>
                             {% endif %}
                             <a href="{% url 'dcim:platform_list' %}">Platforms</a>