Coverage for virtualization/signals.py: 60%
13 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-10 18:35 +0000
1from django.db.models import Sum
2from django.db.models.signals import post_delete, post_save
3from django.dispatch import receiver
5from utilities.querysets import chunked_update
7from .models import Cluster, VirtualDisk, VirtualMachine
10@receiver((post_delete, post_save), sender=VirtualDisk)
11def update_virtualmachine_disk(instance, using=None, **kwargs):
12 """
13 When a VirtualDisk has been modified, update the aggregate disk_size value of its VM.
14 """
15 disks = VirtualDisk.objects.using(using).filter(virtual_machine_id=instance.virtual_machine_id)
16 VirtualMachine.objects.using(using).filter(pk=instance.virtual_machine_id).update(
17 disk=disks.aggregate(Sum('size'))['size__sum']
18 )
21@receiver(post_save, sender=Cluster)
22def update_virtualmachine_site(instance, using=None, **kwargs):
23 """
24 Update the assigned site for all VMs to match that of the Cluster (if any).
25 """
26 if instance._site_id:
27 chunked_update(VirtualMachine.objects.using(using).filter(cluster=instance), site_id=instance._site_id)