Fix IP address interface validation

This commit is contained in:
Jeremy Stretch 2021-03-17 16:44:34 -04:00
parent 889316085c
commit 433c48a1a3
3 changed files with 19 additions and 16 deletions

View File

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

View File

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

View File

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