Parcourir la source

Fixes #861: Avoid overwriting device primary IP assignment from alternate family during bulk import of IP addresses

Jeremy Stretch il y a 8 ans
Parent
commit
b370375414
1 fichiers modifiés avec 5 ajouts et 7 suppressions
  1. 5 7
      netbox/ipam/views.py

+ 5 - 7
netbox/ipam/views.py

@@ -635,16 +635,14 @@ class IPAddressBulkImportView(PermissionRequiredMixin, BulkImportView):
 
     def save_obj(self, obj):
         obj.save()
-        # Update primary IP for device if needed
+
+        # Update primary IP for device if needed. The Device must be updated directly in the database; otherwise we risk
+        # overwriting a previous IP assignment from the same import (see #861).
         try:
             if obj.family == 4 and obj.primary_ip4_for:
-                device = obj.primary_ip4_for
-                device.primary_ip4 = obj
-                device.save()
+                Device.objects.filter(pk=obj.primary_ip4_for.pk).update(primary_ip4=obj)
             elif obj.family == 6 and obj.primary_ip6_for:
-                device = obj.primary_ip6_for
-                device.primary_ip6 = obj
-                device.save()
+                Device.objects.filter(pk=obj.primary_ip6_for.pk).update(primary_ip6=obj)
         except Device.DoesNotExist:
             pass