diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index 1fb156d2f..da21f2859 100644 --- a/netbox/dcim/forms.py +++ b/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 # diff --git a/netbox/dcim/urls.py b/netbox/dcim/urls.py index a993daa28..633cf9a8b 100644 --- a/netbox/dcim/urls.py +++ b/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\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[\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[\w-]+)/edit/$', views.PlatformEditView.as_view(), name='platform_edit'), diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index ad87466b2..387af4b61 100644 --- a/netbox/dcim/views.py +++ b/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 diff --git a/netbox/templates/inc/nav_menu.html b/netbox/templates/inc/nav_menu.html index c260eeec3..64b3c9678 100644 --- a/netbox/templates/inc/nav_menu.html +++ b/netbox/templates/inc/nav_menu.html @@ -91,7 +91,7 @@ {% if perms.dcim.add_rackrole %}
- +
{% endif %} Rack Roles @@ -121,7 +121,7 @@ {% if perms.dcim.add_devicerole %}
- +
{% endif %} Device Roles @@ -130,7 +130,7 @@ {% if perms.dcim.add_platform %}
- +
{% endif %} Platforms