Skip to content

Commit

Permalink
Fixes #1057: Corrected VLAN validation during prefix import
Browse files Browse the repository at this point in the history
  • Loading branch information
jeremystretch committed Apr 7, 2017
1 parent abc51fd commit d3b16ba
Showing 1 changed file with 18 additions and 13 deletions.
31 changes: 18 additions & 13 deletions netbox/ipam/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -210,28 +210,33 @@ def clean(self):
site = self.cleaned_data.get('site')
vlan_group_name = self.cleaned_data.get('vlan_group_name')
vlan_vid = self.cleaned_data.get('vlan_vid')

# Validate VLAN
vlan_group = None
vlan = None

# Validate VLAN group
if vlan_group_name:
try:
vlan_group = VLANGroup.objects.get(site=site, name=vlan_group_name)
except VLANGroup.DoesNotExist:
self.add_error('vlan_group_name', "Invalid VLAN group ({} - {}).".format(site, vlan_group_name))
if vlan_vid and vlan_group:
try:
self.instance.vlan = VLAN.objects.get(group=vlan_group, vid=vlan_vid)
except VLAN.DoesNotExist:
self.add_error('vlan_vid', "Invalid VLAN ID ({} - {}).".format(vlan_group, vlan_vid))
elif vlan_vid and site:
if site:
self.add_error('vlan_group_name', "Invalid VLAN group ({} - {}).".format(site, vlan_group_name))
else:
self.add_error('vlan_group_name', "Invalid global VLAN group ({}).".format(vlan_group_name))

# Validate VLAN
if vlan_vid:
try:
self.instance.vlan = VLAN.objects.get(site=site, vid=vlan_vid)
self.instance.vlan = VLAN.objects.get(site=site, group=vlan_group, vid=vlan_vid)
except VLAN.DoesNotExist:
self.add_error('vlan_vid', "Invalid VLAN ID ({}) for site {}.".format(vlan_vid, site))
if site:
self.add_error('vlan_vid', "Invalid VLAN ID ({}) for site {}.".format(vlan_vid, site))
elif vlan_group:
self.add_error('vlan_vid', "Invalid VLAN ID ({}) for group {}.".format(vlan_vid, vlan_group_name))
elif not vlan_group_name:
self.add_error('vlan_vid', "Invalid global VLAN ID ({}).".format(vlan_vid))
except VLAN.MultipleObjectsReturned:
self.add_error('vlan_vid', "Multiple VLANs found ({} - VID {})".format(site, vlan_vid))
elif vlan_vid:
self.add_error('vlan_vid', "Must specify site and/or VLAN group when assigning a VLAN.")
self.instance.vlan = vlan

This comment has been minimized.

Copy link
@royvegard

royvegard Apr 24, 2017

This is not indented under the exception handler, and will set self.instance.vlan to None when there is no exception.

This comment has been minimized.

Copy link
@jeremystretch

jeremystretch Apr 24, 2017

Author Member

This PR has already been merged. Please file a bug report.


def save(self, *args, **kwargs):

Expand Down

0 comments on commit d3b16ba

Please sign in to comment.