Explorar el Código

Fixes #5419: Update parent device/VM when deleting a primary IP

jeremystretch hace 4 años
padre
commit
1fba4b7e32
Se han modificado 3 ficheros con 25 adiciones y 0 borrados
  1. 1 0
      docs/release-notes/version-2.10.md
  2. 3 0
      netbox/ipam/apps.py
  3. 21 0
      netbox/ipam/signals.py

+ 1 - 0
docs/release-notes/version-2.10.md

@@ -4,6 +4,7 @@
 
 ### Bug Fixes
 
+* [#5419](https://github.com/netbox-community/netbox/issues/5419) - Update parent device/VM when deleting a primary IP
 * [#6144](https://github.com/netbox-community/netbox/issues/6144) - Fix MAC address field display in VM interfaces search form
 * [#6152](https://github.com/netbox-community/netbox/issues/6152) - Fix custom field filtering for cables, virtual chassis
 

+ 3 - 0
netbox/ipam/apps.py

@@ -4,3 +4,6 @@ from django.apps import AppConfig
 class IPAMConfig(AppConfig):
     name = "ipam"
     verbose_name = "IPAM"
+
+    def ready(self):
+        import ipam.signals

+ 21 - 0
netbox/ipam/signals.py

@@ -0,0 +1,21 @@
+from django.db.models.signals import pre_delete
+from django.dispatch import receiver
+
+from dcim.models import Device
+from virtualization.models import VirtualMachine
+from .models import IPAddress
+
+
+@receiver(pre_delete, sender=IPAddress)
+def clear_primary_ip(instance, **kwargs):
+    """
+    When an IPAddress is deleted, trigger save() on any Devices/VirtualMachines for which it
+    was a primary IP.
+    """
+    field_name = f'primary_ip{instance.family}'
+    device = Device.objects.filter(**{field_name: instance}).first()
+    if device:
+        device.save()
+    virtualmachine = VirtualMachine.objects.filter(**{field_name: instance}).first()
+    if virtualmachine:
+        virtualmachine.save()