mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-23 17:08:41 -06:00
Fix IP address interface validation
This commit is contained in:
parent
889316085c
commit
433c48a1a3
@ -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
|
||||||
|
|
||||||
|
@ -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">—</span>
|
<span class="text-muted">—</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>
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user