mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-25 18:08:38 -06:00
Fixes #72: Check for re-used interfaces when importing interface connections
This commit is contained in:
parent
6848a3dc81
commit
98febf3979
@ -1036,20 +1036,29 @@ class InterfaceConnectionImportForm(BulkImportForm, BootstrapMixin):
|
|||||||
return
|
return
|
||||||
|
|
||||||
connection_list = []
|
connection_list = []
|
||||||
|
occupied_interfaces = []
|
||||||
|
|
||||||
for i, record in enumerate(records, start=1):
|
for i, record in enumerate(records, start=1):
|
||||||
form = self.fields['csv'].csv_form(data=record)
|
form = self.fields['csv'].csv_form(data=record)
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
interface_a = Interface.objects.get(device=form.cleaned_data['device_a'],
|
interface_a = Interface.objects.get(device=form.cleaned_data['device_a'],
|
||||||
name=form.cleaned_data['interface_a'])
|
name=form.cleaned_data['interface_a'])
|
||||||
|
if interface_a in occupied_interfaces:
|
||||||
|
raise forms.ValidationError("{} {} found in multiple connections"
|
||||||
|
.format(interface_a.device.name, interface_a.name))
|
||||||
interface_b = Interface.objects.get(device=form.cleaned_data['device_b'],
|
interface_b = Interface.objects.get(device=form.cleaned_data['device_b'],
|
||||||
name=form.cleaned_data['interface_b'])
|
name=form.cleaned_data['interface_b'])
|
||||||
|
if interface_b in occupied_interfaces:
|
||||||
|
raise forms.ValidationError("{} {} found in multiple connections"
|
||||||
|
.format(interface_b.device.name, interface_b.name))
|
||||||
connection = InterfaceConnection(interface_a=interface_a, interface_b=interface_b)
|
connection = InterfaceConnection(interface_a=interface_a, interface_b=interface_b)
|
||||||
if form.cleaned_data['status'] == 'planned':
|
if form.cleaned_data['status'] == 'planned':
|
||||||
connection.connection_status = CONNECTION_STATUS_PLANNED
|
connection.connection_status = CONNECTION_STATUS_PLANNED
|
||||||
else:
|
else:
|
||||||
connection.connection_status = CONNECTION_STATUS_CONNECTED
|
connection.connection_status = CONNECTION_STATUS_CONNECTED
|
||||||
connection_list.append(connection)
|
connection_list.append(connection)
|
||||||
|
occupied_interfaces.append(interface_a)
|
||||||
|
occupied_interfaces.append(interface_b)
|
||||||
else:
|
else:
|
||||||
for field, errors in form.errors.items():
|
for field, errors in form.errors.items():
|
||||||
for e in errors:
|
for e in errors:
|
||||||
|
@ -8,6 +8,14 @@
|
|||||||
<h1>Interface Connections Import</h1>
|
<h1>Interface Connections Import</h1>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
|
{% if form.non_field_errors %}
|
||||||
|
<div class="panel panel-danger">
|
||||||
|
<div class="panel-heading"><strong>Errors</strong></div>
|
||||||
|
<div class="panel-body">
|
||||||
|
{{ form.non_field_errors }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
<form action="." method="post" class="form">
|
<form action="." method="post" class="form">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{% render_form form %}
|
{% render_form form %}
|
||||||
|
Loading…
Reference in New Issue
Block a user