diff --git a/netbox/virtualization/apps.py b/netbox/virtualization/apps.py index 65ce0f112..42754c693 100644 --- a/netbox/virtualization/apps.py +++ b/netbox/virtualization/apps.py @@ -1,7 +1,5 @@ from django.apps import AppConfig -from netbox import denormalized - class VirtualizationConfig(AppConfig): name = 'virtualization' @@ -15,10 +13,5 @@ class VirtualizationConfig(AppConfig): # Register models register_models(*self.get_models()) - # Register denormalized fields - denormalized.register(VirtualMachine, 'cluster', { - 'site': '_site', - }) - # Register counters connect_counters(VirtualMachine) diff --git a/netbox/virtualization/signals.py b/netbox/virtualization/signals.py index 06f172179..15bef8a97 100644 --- a/netbox/virtualization/signals.py +++ b/netbox/virtualization/signals.py @@ -2,7 +2,7 @@ from django.db.models import Sum from django.db.models.signals import post_delete, post_save from django.dispatch import receiver -from .models import VirtualDisk, VirtualMachine +from .models import Cluster, VirtualDisk, VirtualMachine @receiver((post_delete, post_save), sender=VirtualDisk) @@ -14,3 +14,12 @@ def update_virtualmachine_disk(instance, **kwargs): VirtualMachine.objects.filter(pk=vm.pk).update( disk=vm.virtualdisks.aggregate(Sum('size'))['size__sum'] ) + + +@receiver(post_save, sender=Cluster) +def update_virtualmachine_site(instance, **kwargs): + """ + Update the assigned site for all VMs to match that of the Cluster (if any). + """ + if instance._site: + VirtualMachine.objects.filter(cluster=instance).update(site=instance._site)