Просмотр исходного кода

17032 Convert Virtual Disk Size from GB -> MB (#17033)

* 17032 Convert Virtual Disk size from GB -> MB

* 17032 update migration

* 17032 update migration

* 17032 update migration

* 17032 update migration

* Omit redundant method

* Merge migrations

* Tweak column header

---------

Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>
Arthur Hanson 1 год назад
Родитель
Сommit
a3edc0472a

+ 1 - 1
netbox/templates/virtualization/virtualdisk.html

@@ -29,7 +29,7 @@
             <th scope="row"><i class="mdi mdi-harddisk"></i> {% trans "Size" %}</th>
             <td>
               {% if object.size %}
-                {{ object.size }} {% trans "GB" context "Abbreviation for gigabyte" %}
+                {{ object.size|humanize_megabytes }}
               {% else %}
                 {{ ''|placeholder }}
               {% endif %}

+ 0 - 23
netbox/virtualization/migrations/0039_convert_disk_size.py

@@ -1,23 +0,0 @@
-# Generated by Django 5.0.6 on 2024-06-06 17:46
-
-from django.db import migrations
-from django.db.models import F
-
-
-def convert_disk_size(apps, schema_editor):
-    VirtualMachine = apps.get_model('virtualization', 'VirtualMachine')
-    VirtualMachine.objects.filter(disk__isnull=False).update(disk=F('disk') * 1000)
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('virtualization', '0038_virtualdisk'),
-    ]
-
-    operations = [
-        migrations.RunPython(
-            code=convert_disk_size,
-            reverse_code=migrations.RunPython.noop
-        ),
-    ]

+ 1 - 3
netbox/virtualization/migrations/0040_virtualmachine_serial_number.py → netbox/virtualization/migrations/0039_virtualmachine_serial_number.py

@@ -1,12 +1,10 @@
-# Generated by Django 5.0.6 on 2024-06-04 17:09
-
 from django.db import migrations, models
 
 
 class Migration(migrations.Migration):
 
     dependencies = [
-        ('virtualization', '0039_convert_disk_size'),
+        ('virtualization', '0038_virtualdisk'),
     ]
 
     operations = [

+ 31 - 0
netbox/virtualization/migrations/0040_convert_disk_size.py

@@ -0,0 +1,31 @@
+from django.db import migrations
+from django.db.models import F, Sum
+
+
+def convert_disk_size(apps, schema_editor):
+    VirtualMachine = apps.get_model('virtualization', 'VirtualMachine')
+    VirtualMachine.objects.filter(disk__isnull=False).update(disk=F('disk') * 1000)
+
+    VirtualDisk = apps.get_model('virtualization', 'VirtualDisk')
+    VirtualDisk.objects.filter(size__isnull=False).update(size=F('size') * 1000)
+
+    # Recalculate disk size on all VMs with virtual disks
+    id_list = VirtualDisk.objects.values_list('virtual_machine_id').distinct()
+    virtual_machines = VirtualMachine.objects.filter(id__in=id_list)
+    for vm in virtual_machines:
+        vm.disk = vm.virtualdisks.aggregate(Sum('size', default=0))['size__sum']
+    VirtualMachine.objects.bulk_update(virtual_machines, fields=['disk'])
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('virtualization', '0039_virtualmachine_serial_number'),
+    ]
+
+    operations = [
+        migrations.RunPython(
+            code=convert_disk_size,
+            reverse_code=migrations.RunPython.noop
+        ),
+    ]

+ 1 - 1
netbox/virtualization/models/virtualmachines.py

@@ -431,7 +431,7 @@ class VMInterface(ComponentModel, BaseInterface, TrackingModelMixin):
 
 class VirtualDisk(ComponentModel, TrackingModelMixin):
     size = models.PositiveIntegerField(
-        verbose_name=_('size (GB)'),
+        verbose_name=_('size (MB)'),
     )
 
     class Meta(ComponentModel.Meta):

+ 6 - 0
netbox/virtualization/tables/virtualmachines.py

@@ -194,6 +194,9 @@ class VirtualDiskTable(NetBoxTable):
         verbose_name=_('Name'),
         linkify=True
     )
+    size = tables.Column(
+        verbose_name=_('Size')
+    )
     tags = columns.TagColumn(
         url_name='virtualization:virtualdisk_list'
     )
@@ -208,6 +211,9 @@ class VirtualDiskTable(NetBoxTable):
             'data-name': lambda record: record.name,
         }
 
+    def render_size(self, value):
+        return humanize_megabytes(value)
+
 
 class VirtualMachineVirtualDiskTable(VirtualDiskTable):
     actions = columns.ActionsColumn(