From a3edc0472a12d9fac12463f9f01ddbe59ce3c261 Mon Sep 17 00:00:00 2001 From: Arthur Hanson Date: Wed, 31 Jul 2024 21:03:25 +0700 Subject: [PATCH] 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 --- .../templates/virtualization/virtualdisk.html | 2 +- .../migrations/0039_convert_disk_size.py | 23 -------------- ...y => 0039_virtualmachine_serial_number.py} | 4 +-- .../migrations/0040_convert_disk_size.py | 31 +++++++++++++++++++ .../virtualization/models/virtualmachines.py | 2 +- .../virtualization/tables/virtualmachines.py | 6 ++++ 6 files changed, 40 insertions(+), 28 deletions(-) delete mode 100644 netbox/virtualization/migrations/0039_convert_disk_size.py rename netbox/virtualization/migrations/{0040_virtualmachine_serial_number.py => 0039_virtualmachine_serial_number.py} (74%) create mode 100644 netbox/virtualization/migrations/0040_convert_disk_size.py diff --git a/netbox/templates/virtualization/virtualdisk.html b/netbox/templates/virtualization/virtualdisk.html index 2cad4fcd8..c58a2fcd0 100644 --- a/netbox/templates/virtualization/virtualdisk.html +++ b/netbox/templates/virtualization/virtualdisk.html @@ -29,7 +29,7 @@ {% trans "Size" %} {% if object.size %} - {{ object.size }} {% trans "GB" context "Abbreviation for gigabyte" %} + {{ object.size|humanize_megabytes }} {% else %} {{ ''|placeholder }} {% endif %} diff --git a/netbox/virtualization/migrations/0039_convert_disk_size.py b/netbox/virtualization/migrations/0039_convert_disk_size.py deleted file mode 100644 index 5bd6c13de..000000000 --- a/netbox/virtualization/migrations/0039_convert_disk_size.py +++ /dev/null @@ -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 - ), - ] diff --git a/netbox/virtualization/migrations/0040_virtualmachine_serial_number.py b/netbox/virtualization/migrations/0039_virtualmachine_serial_number.py similarity index 74% rename from netbox/virtualization/migrations/0040_virtualmachine_serial_number.py rename to netbox/virtualization/migrations/0039_virtualmachine_serial_number.py index 5ca72d66d..15b58fa22 100644 --- a/netbox/virtualization/migrations/0040_virtualmachine_serial_number.py +++ b/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 = [ diff --git a/netbox/virtualization/migrations/0040_convert_disk_size.py b/netbox/virtualization/migrations/0040_convert_disk_size.py new file mode 100644 index 000000000..6471a0908 --- /dev/null +++ b/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 + ), + ] diff --git a/netbox/virtualization/models/virtualmachines.py b/netbox/virtualization/models/virtualmachines.py index 2b61a7d86..2a63a4547 100644 --- a/netbox/virtualization/models/virtualmachines.py +++ b/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): diff --git a/netbox/virtualization/tables/virtualmachines.py b/netbox/virtualization/tables/virtualmachines.py index 50be18ac5..8a2a26bb9 100644 --- a/netbox/virtualization/tables/virtualmachines.py +++ b/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(