Przeglądaj źródła

Fix IP address interface validation

Jeremy Stretch 4 lat temu
rodzic
commit
433c48a1a3

+ 15 - 13
netbox/ipam/forms.py

@@ -833,7 +833,7 @@ class IPAddressForm(BootstrapMixin, TenancyForm, ReturnURLForm, CustomFieldModel
 
         # Initialize primary_for_parent if IP address is already assigned
         if self.instance.pk and self.instance.assigned_object:
-            parent = self.instance.assigned_object.parent
+            parent = self.instance.assigned_object.parent_object
             if (
                 self.instance.address.version == 4 and parent.primary_ip4_id == self.instance.pk or
                 self.instance.address.version == 6 and parent.primary_ip6_id == self.instance.pk
@@ -860,18 +860,20 @@ class IPAddressForm(BootstrapMixin, TenancyForm, ReturnURLForm, CustomFieldModel
 
         # Assign/clear this IPAddress as the primary for the associated Device/VirtualMachine.
         interface = self.instance.assigned_object
-        if interface and self.cleaned_data['primary_for_parent']:
-            if ipaddress.address.version == 4:
-                interface.parent.primary_ip4 = ipaddress
-            else:
-                interface.parent.primary_ip6 = ipaddress
-            interface.parent.save()
-        elif interface and ipaddress.address.version == 4 and interface.parent.primary_ip4 == ipaddress:
-            interface.parent.primary_ip4 = None
-            interface.parent.save()
-        elif interface and ipaddress.address.version == 6 and interface.parent.primary_ip6 == ipaddress:
-            interface.parent.primary_ip6 = None
-            interface.parent.save()
+        if interface:
+            parent = interface.parent_object
+            if self.cleaned_data['primary_for_parent']:
+                if ipaddress.address.version == 4:
+                    parent.primary_ip4 = ipaddress
+                else:
+                    parent.primary_ip6 = ipaddress
+                parent.save()
+            elif ipaddress.address.version == 4 and parent.primary_ip4 == ipaddress:
+                parent.primary_ip4 = None
+                parent.save()
+            elif ipaddress.address.version == 6 and parent.primary_ip6 == ipaddress:
+                parent.primary_ip6 = None
+                parent.save()
 
         return ipaddress
 

+ 3 - 2
netbox/templates/ipam/ipaddress.html

@@ -74,7 +74,8 @@
                     <td>Assignment</td>
                     <td>
                         {% if object.assigned_object %}
-                            <span><a href="{{ object.assigned_object.parent.get_absolute_url }}">{{ object.assigned_object.parent }}</a> ({{ object.assigned_object }})</span>
+                            <a href="{{ object.assigned_object.parent_object.get_absolute_url }}">{{ object.assigned_object.parent_object }}</a> /
+                            <a href="{{ object.assigned_object.get_absolute_url }}">{{ object.assigned_object }}
                         {% else %}
                             <span class="text-muted">&mdash;</span>
                         {% endif %}
@@ -86,7 +87,7 @@
                         {% if object.nat_inside %}
                             <a href="{% url 'ipam:ipaddress' pk=object.nat_inside.pk %}">{{ object.nat_inside }}</a>
                             {% if object.nat_inside.assigned_object %}
-                                (<a href="{{ object.nat_inside.assigned_object.parent.get_absolute_url }}">{{ object.nat_inside.assigned_object.parent }}</a>)
+                                (<a href="{{ object.nat_inside.assigned_object.parent_object.get_absolute_url }}">{{ object.nat_inside.assigned_object.parent_object }}</a>)
                             {% endif %}
                         {% else %}
                             <span class="text-muted">None</span>

+ 1 - 1
netbox/virtualization/models.py

@@ -459,7 +459,7 @@ class VMInterface(PrimaryModel, BaseInterface):
         return super().to_objectchange(action, related_object=self.virtual_machine)
 
     @property
-    def parent(self):
+    def parent_object(self):
         return self.virtual_machine
 
     @property