Coverage for virtualization/signals.py: 60%

13 statements  

« 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 

4 

5from utilities.querysets import chunked_update 

6 

7from .models import Cluster, VirtualDisk, VirtualMachine 

8 

9 

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 ) 

19 

20 

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)