From 17714b0c12d52de0a70403f9afba2cd2e52c6063 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Thu, 9 Aug 2018 16:34:17 -0400 Subject: [PATCH] Fixes #2342: IntegrityError raised when attempting to assign an invalid IP address as the primary for a VM --- netbox/virtualization/models.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/netbox/virtualization/models.py b/netbox/virtualization/models.py index 3d8a51fff..119c9ee4f 100644 --- a/netbox/virtualization/models.py +++ b/netbox/virtualization/models.py @@ -260,6 +260,22 @@ class VirtualMachine(ChangeLoggedModel, ConfigContextModel, CustomFieldModel): def get_absolute_url(self): return reverse('virtualization:virtualmachine', args=[self.pk]) + def clean(self): + + # Validate primary IP addresses + interfaces = self.interfaces.all() + for field in ['primary_ip4', 'primary_ip6']: + ip = getattr(self, field) + if ip is not None: + if ip.interface in interfaces: + pass + elif self.primary_ip4.nat_inside is not None and self.primary_ip4.nat_inside.interface in interfaces: + pass + else: + raise ValidationError({ + field: "The specified IP address ({}) is not assigned to this VM.".format(ip), + }) + def to_csv(self): return ( self.name,