|
@@ -8,8 +8,6 @@ from django.urls import reverse
|
|
|
from django.utils.functional import cached_property
|
|
from django.utils.functional import cached_property
|
|
|
|
|
|
|
|
from dcim.fields import ASNField
|
|
from dcim.fields import ASNField
|
|
|
-from dcim.models import Device
|
|
|
|
|
-from netbox.models import OrganizationalModel, NetBoxModel
|
|
|
|
|
from ipam.choices import *
|
|
from ipam.choices import *
|
|
|
from ipam.constants import *
|
|
from ipam.constants import *
|
|
|
from ipam.fields import IPNetworkField, IPAddressField
|
|
from ipam.fields import IPNetworkField, IPAddressField
|
|
@@ -17,8 +15,7 @@ from ipam.managers import IPAddressManager
|
|
|
from ipam.querysets import PrefixQuerySet
|
|
from ipam.querysets import PrefixQuerySet
|
|
|
from ipam.validators import DNSValidator
|
|
from ipam.validators import DNSValidator
|
|
|
from netbox.config import get_config
|
|
from netbox.config import get_config
|
|
|
-from virtualization.models import VirtualMachine
|
|
|
|
|
-
|
|
|
|
|
|
|
+from netbox.models import OrganizationalModel, NetBoxModel
|
|
|
|
|
|
|
|
__all__ = (
|
|
__all__ = (
|
|
|
'Aggregate',
|
|
'Aggregate',
|
|
@@ -912,18 +909,6 @@ class IPAddress(NetBoxModel):
|
|
|
)
|
|
)
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
- # Check for primary IP assignment that doesn't match the assigned device/VM
|
|
|
|
|
- if self.pk:
|
|
|
|
|
- for cls, attr in ((Device, 'device'), (VirtualMachine, 'virtual_machine')):
|
|
|
|
|
- parent = cls.objects.filter(Q(primary_ip4=self) | Q(primary_ip6=self)).first()
|
|
|
|
|
- if parent and getattr(self.assigned_object, attr, None) != parent:
|
|
|
|
|
- # Check for a NAT relationship
|
|
|
|
|
- if not self.nat_inside or getattr(self.nat_inside.assigned_object, attr, None) != parent:
|
|
|
|
|
- raise ValidationError({
|
|
|
|
|
- 'interface': f"IP address is primary for {cls._meta.model_name} {parent} but "
|
|
|
|
|
- f"not assigned to it!"
|
|
|
|
|
- })
|
|
|
|
|
-
|
|
|
|
|
# Validate IP status selection
|
|
# Validate IP status selection
|
|
|
if self.status == IPAddressStatusChoices.STATUS_SLAAC and self.family != 6:
|
|
if self.status == IPAddressStatusChoices.STATUS_SLAAC and self.family != 6:
|
|
|
raise ValidationError({
|
|
raise ValidationError({
|