From a38cd449c55d8069ee955f0e56b5e5c8fb8e2666 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Mon, 9 Oct 2017 15:49:48 -0400 Subject: [PATCH] Added bulk import views for cluster types and groups --- netbox/templates/inc/nav_menu.html | 4 ++-- netbox/virtualization/forms.py | 22 ++++++++++++++++++++++ netbox/virtualization/tables.py | 2 ++ netbox/virtualization/urls.py | 2 ++ netbox/virtualization/views.py | 14 ++++++++++++++ 5 files changed, 42 insertions(+), 2 deletions(-) diff --git a/netbox/templates/inc/nav_menu.html b/netbox/templates/inc/nav_menu.html index cd1e96aa5..65e6be224 100644 --- a/netbox/templates/inc/nav_menu.html +++ b/netbox/templates/inc/nav_menu.html @@ -297,7 +297,7 @@ {% if perms.virtualization.add_clustertype %}
- +
{% endif %} Cluster Types @@ -306,7 +306,7 @@ {% if perms.virtualization.add_clustergroup %}
- +
{% endif %} Cluster Groups diff --git a/netbox/virtualization/forms.py b/netbox/virtualization/forms.py index 91c65c8f1..461c1cf11 100644 --- a/netbox/virtualization/forms.py +++ b/netbox/virtualization/forms.py @@ -38,6 +38,17 @@ class ClusterTypeForm(BootstrapMixin, forms.ModelForm): fields = ['name', 'slug'] +class ClusterTypeCSVForm(forms.ModelForm): + slug = SlugField() + + class Meta: + model = ClusterType + fields = ['name', 'slug'] + help_texts = { + 'name': 'Name of cluster type', + } + + # # Cluster groups # @@ -50,6 +61,17 @@ class ClusterGroupForm(BootstrapMixin, forms.ModelForm): fields = ['name', 'slug'] +class ClusterGroupCSVForm(forms.ModelForm): + slug = SlugField() + + class Meta: + model = ClusterGroup + fields = ['name', 'slug'] + help_texts = { + 'name': 'Name of cluster group', + } + + # # Clusters # diff --git a/netbox/virtualization/tables.py b/netbox/virtualization/tables.py index a40af6091..f7b7ffbe9 100644 --- a/netbox/virtualization/tables.py +++ b/netbox/virtualization/tables.py @@ -37,6 +37,7 @@ VIRTUALMACHINE_PRIMARY_IP = """ class ClusterTypeTable(BaseTable): pk = ToggleColumn() + name = tables.LinkColumn() cluster_count = tables.Column(verbose_name='Clusters') actions = tables.TemplateColumn( template_code=CLUSTERTYPE_ACTIONS, @@ -55,6 +56,7 @@ class ClusterTypeTable(BaseTable): class ClusterGroupTable(BaseTable): pk = ToggleColumn() + name = tables.LinkColumn() cluster_count = tables.Column(verbose_name='Clusters') actions = tables.TemplateColumn( template_code=CLUSTERGROUP_ACTIONS, diff --git a/netbox/virtualization/urls.py b/netbox/virtualization/urls.py index 9d976f300..ca794cdd8 100644 --- a/netbox/virtualization/urls.py +++ b/netbox/virtualization/urls.py @@ -12,12 +12,14 @@ urlpatterns = [ # Cluster types url(r'^cluster-types/$', views.ClusterTypeListView.as_view(), name='clustertype_list'), url(r'^cluster-types/add/$', views.ClusterTypeCreateView.as_view(), name='clustertype_add'), + url(r'^cluster-types/import/$', views.ClusterTypeBulkImportView.as_view(), name='clustertype_import'), url(r'^cluster-types/delete/$', views.ClusterTypeBulkDeleteView.as_view(), name='clustertype_bulk_delete'), url(r'^cluster-types/(?P[\w-]+)/edit/$', views.ClusterTypeEditView.as_view(), name='clustertype_edit'), # Cluster groups url(r'^cluster-groups/$', views.ClusterGroupListView.as_view(), name='clustergroup_list'), url(r'^cluster-groups/add/$', views.ClusterGroupCreateView.as_view(), name='clustergroup_add'), + url(r'^cluster-groups/import/$', views.ClusterGroupBulkImportView.as_view(), name='clustergroup_import'), url(r'^cluster-groups/delete/$', views.ClusterGroupBulkDeleteView.as_view(), name='clustergroup_bulk_delete'), url(r'^cluster-groups/(?P[\w-]+)/edit/$', views.ClusterGroupEditView.as_view(), name='clustergroup_edit'), diff --git a/netbox/virtualization/views.py b/netbox/virtualization/views.py index 08d41d170..ad49b7dec 100644 --- a/netbox/virtualization/views.py +++ b/netbox/virtualization/views.py @@ -43,6 +43,13 @@ class ClusterTypeEditView(ClusterTypeCreateView): permission_required = 'virtualization.change_clustertype' +class ClusterTypeBulkImportView(PermissionRequiredMixin, BulkImportView): + permission_required = 'virtualization.add_clustertype' + model_form = forms.ClusterTypeCSVForm + table = tables.ClusterTypeTable + default_return_url = 'virtualization:clustertype_list' + + class ClusterTypeBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): permission_required = 'virtualization.delete_clustertype' cls = ClusterType @@ -74,6 +81,13 @@ class ClusterGroupEditView(ClusterGroupCreateView): permission_required = 'virtualization.change_clustergroup' +class ClusterGroupBulkImportView(PermissionRequiredMixin, BulkImportView): + permission_required = 'virtualization.add_clustergroup' + model_form = forms.ClusterGroupCSVForm + table = tables.ClusterGroupTable + default_return_url = 'virtualization:clustergroup_list' + + class ClusterGroupBulkDeleteView(PermissionRequiredMixin, BulkDeleteView): permission_required = 'virtualization.delete_clustergroup' cls = ClusterGroup