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(
|