Browse Source

Fixes #1502: Fixed CSV export for clusters and virtual machines

Jeremy Stretch 7 years ago
parent
commit
9927ce14d3
2 changed files with 34 additions and 3 deletions
  1. 4 3
      netbox/virtualization/forms.py
  2. 30 0
      netbox/virtualization/models.py

+ 4 - 3
netbox/virtualization/forms.py

@@ -76,16 +76,17 @@ class ClusterCSVForm(forms.ModelForm):
 
 
     class Meta:
     class Meta:
         model = Cluster
         model = Cluster
-        fields = ['name', 'type', 'group']
+        fields = ['name', 'type', 'group', 'comments']
 
 
 
 
 class ClusterBulkEditForm(BootstrapMixin, CustomFieldBulkEditForm):
 class ClusterBulkEditForm(BootstrapMixin, CustomFieldBulkEditForm):
     pk = forms.ModelMultipleChoiceField(queryset=Cluster.objects.all(), widget=forms.MultipleHiddenInput)
     pk = forms.ModelMultipleChoiceField(queryset=Cluster.objects.all(), widget=forms.MultipleHiddenInput)
     type = forms.ModelChoiceField(queryset=ClusterType.objects.all(), required=False)
     type = forms.ModelChoiceField(queryset=ClusterType.objects.all(), required=False)
     group = forms.ModelChoiceField(queryset=ClusterGroup.objects.all(), required=False)
     group = forms.ModelChoiceField(queryset=ClusterGroup.objects.all(), required=False)
+    comments = CommentField(widget=SmallTextarea)
 
 
     class Meta:
     class Meta:
-        nullable_fields = ['group']
+        nullable_fields = ['group', 'comments']
 
 
 
 
 class ClusterFilterForm(BootstrapMixin, CustomFieldFilterForm):
 class ClusterFilterForm(BootstrapMixin, CustomFieldFilterForm):
@@ -252,7 +253,7 @@ class VirtualMachineBulkEditForm(BootstrapMixin, CustomFieldBulkEditForm):
     comments = CommentField(widget=SmallTextarea)
     comments = CommentField(widget=SmallTextarea)
 
 
     class Meta:
     class Meta:
-        nullable_fields = ['tenant', 'platform', 'vcpus', 'memory', 'disk']
+        nullable_fields = ['tenant', 'platform', 'vcpus', 'memory', 'disk', 'comments']
 
 
 
 
 def vm_status_choices():
 def vm_status_choices():

+ 30 - 0
netbox/virtualization/models.py

@@ -7,6 +7,7 @@ from django.utils.encoding import python_2_unicode_compatible
 
 
 from extras.models import CustomFieldModel, CustomFieldValue
 from extras.models import CustomFieldModel, CustomFieldValue
 from utilities.models import CreatedUpdatedModel
 from utilities.models import CreatedUpdatedModel
+from utilities.utils import csv_format
 from .constants import STATUS_ACTIVE, STATUS_CHOICES, VM_STATUS_CLASSES
 from .constants import STATUS_ACTIVE, STATUS_CHOICES, VM_STATUS_CLASSES
 
 
 
 
@@ -98,6 +99,10 @@ class Cluster(CreatedUpdatedModel, CustomFieldModel):
         object_id_field='obj_id'
         object_id_field='obj_id'
     )
     )
 
 
+    csv_headers = [
+        'name', 'type', 'group', 'comments',
+    ]
+
     class Meta:
     class Meta:
         ordering = ['name']
         ordering = ['name']
 
 
@@ -107,6 +112,14 @@ class Cluster(CreatedUpdatedModel, CustomFieldModel):
     def get_absolute_url(self):
     def get_absolute_url(self):
         return reverse('virtualization:cluster', args=[self.pk])
         return reverse('virtualization:cluster', args=[self.pk])
 
 
+    def to_csv(self):
+        return csv_format([
+            self.name,
+            self.type.name,
+            self.group.name if self.group else None,
+            self.comments,
+        ])
+
 
 
 #
 #
 # Virtual machines
 # Virtual machines
@@ -185,6 +198,10 @@ class VirtualMachine(CreatedUpdatedModel, CustomFieldModel):
         object_id_field='obj_id'
         object_id_field='obj_id'
     )
     )
 
 
+    csv_headers = [
+        'name', 'status', 'cluster', 'tenant', 'platform', 'vcpus', 'memory', 'disk', 'comments',
+    ]
+
     class Meta:
     class Meta:
         ordering = ['name']
         ordering = ['name']
 
 
@@ -194,5 +211,18 @@ class VirtualMachine(CreatedUpdatedModel, CustomFieldModel):
     def get_absolute_url(self):
     def get_absolute_url(self):
         return reverse('virtualization:virtualmachine', args=[self.pk])
         return reverse('virtualization:virtualmachine', args=[self.pk])
 
 
+    def to_csv(self):
+        return csv_format([
+            self.name,
+            self.get_status_display(),
+            self.cluster.name,
+            self.tenant.name if self.tenant else None,
+            self.platform.name if self.platform else None,
+            self.vcpus,
+            self.memory,
+            self.disk,
+            self.comments,
+        ])
+
     def get_status_class(self):
     def get_status_class(self):
         return VM_STATUS_CLASSES[self.status]
         return VM_STATUS_CLASSES[self.status]