Browse Source

Added bulk import views for cluster types and groups

Jeremy Stretch 7 years ago
parent
commit
a38cd449c5

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

@@ -297,7 +297,7 @@
                             {% if perms.virtualization.add_clustertype %}
                                 <div class="buttons pull-right">
                                     <a href="{% url 'virtualization:clustertype_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 'virtualization:clustertype_import' %}" class="btn btn-xs btn-info" title="Import"><i class="fa fa-download"></i></a>
                                 </div>
                             {% endif %}
                             <a href="{% url 'virtualization:clustertype_list' %}">Cluster Types</a>
@@ -306,7 +306,7 @@
                             {% if perms.virtualization.add_clustergroup %}
                                 <div class="buttons pull-right">
                                     <a href="{% url 'virtualization:clustergroup_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 'virtualization:clustergroup_import' %}" class="btn btn-xs btn-info" title="Import"><i class="fa fa-download"></i></a>
                                 </div>
                             {% endif %}
                             <a href="{% url 'virtualization:clustergroup_list' %}">Cluster Groups</a>

+ 22 - 0
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
 #

+ 2 - 0
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,

+ 2 - 0
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<slug>[\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<slug>[\w-]+)/edit/$', views.ClusterGroupEditView.as_view(), name='clustergroup_edit'),
 

+ 14 - 0
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