mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Converted IPAM VRF, Aggregate add/edit/delete views to CBVs
This commit is contained in:
@ -4,22 +4,22 @@ from . import views
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^vrfs/$', views.VRFListView.as_view(), name='vrf_list'),
|
||||
url(r'^vrfs/add/$', views.vrf_add, name='vrf_add'),
|
||||
url(r'^vrfs/add/$', views.VRFAddView.as_view(), name='vrf_add'),
|
||||
url(r'^vrfs/import/$', views.VRFBulkImportView.as_view(), name='vrf_import'),
|
||||
url(r'^vrfs/edit/$', views.VRFBulkEditView.as_view(), name='vrf_bulk_edit'),
|
||||
url(r'^vrfs/delete/$', views.VRFBulkDeleteView.as_view(), name='vrf_bulk_delete'),
|
||||
url(r'^vrfs/(?P<pk>\d+)/$', views.vrf, name='vrf'),
|
||||
url(r'^vrfs/(?P<pk>\d+)/edit/$', views.vrf_edit, name='vrf_edit'),
|
||||
url(r'^vrfs/(?P<pk>\d+)/delete/$', views.vrf_delete, name='vrf_delete'),
|
||||
url(r'^vrfs/(?P<pk>\d+)/edit/$', views.VRFEditView.as_view(), name='vrf_edit'),
|
||||
url(r'^vrfs/(?P<pk>\d+)/delete/$', views.VRFDeleteView.as_view(), name='vrf_delete'),
|
||||
|
||||
url(r'^aggregates/$', views.AggregateListView.as_view(), name='aggregate_list'),
|
||||
url(r'^aggregates/add/$', views.aggregate_add, name='aggregate_add'),
|
||||
url(r'^aggregates/add/$', views.AggregateAddView.as_view(), name='aggregate_add'),
|
||||
url(r'^aggregates/import/$', views.AggregateBulkImportView.as_view(), name='aggregate_import'),
|
||||
url(r'^aggregates/edit/$', views.AggregateBulkEditView.as_view(), name='aggregate_bulk_edit'),
|
||||
url(r'^aggregates/delete/$', views.AggregateBulkDeleteView.as_view(), name='aggregate_bulk_delete'),
|
||||
url(r'^aggregates/(?P<pk>\d+)/$', views.aggregate, name='aggregate'),
|
||||
url(r'^aggregates/(?P<pk>\d+)/edit/$', views.aggregate_edit, name='aggregate_edit'),
|
||||
url(r'^aggregates/(?P<pk>\d+)/delete/$', views.aggregate_delete, name='aggregate_delete'),
|
||||
url(r'^aggregates/(?P<pk>\d+)/edit/$', views.AggregateEditView.as_view(), name='aggregate_edit'),
|
||||
url(r'^aggregates/(?P<pk>\d+)/delete/$', views.AggregateDeleteView.as_view(), name='aggregate_delete'),
|
||||
|
||||
url(r'^prefixes/$', views.PrefixListView.as_view(), name='prefix_list'),
|
||||
url(r'^prefixes/add/$', views.prefix_add, name='prefix_add'),
|
||||
|
@ -15,17 +15,18 @@ from dcim.models import Device
|
||||
from utilities.error_handlers import handle_protectederror
|
||||
from utilities.forms import ConfirmationForm
|
||||
from utilities.paginator import EnhancedPaginator
|
||||
from utilities.views import BulkImportView, BulkEditView, BulkDeleteView, ObjectListView
|
||||
from utilities.views import BulkImportView, BulkEditView, BulkDeleteView, ObjectListView, ObjectAddView,\
|
||||
ObjectEditView, ObjectDeleteView
|
||||
|
||||
from .filters import AggregateFilter, PrefixFilter, IPAddressFilter, VLANFilter, VRFFilter
|
||||
from .forms import AggregateForm, AggregateImportForm, AggregateBulkEditForm, AggregateBulkDeleteForm, \
|
||||
AggregateFilterForm, PrefixForm, PrefixImportForm, PrefixBulkEditForm, PrefixBulkDeleteForm, PrefixFilterForm, \
|
||||
IPAddressForm, IPAddressImportForm, IPAddressBulkEditForm, IPAddressBulkDeleteForm, IPAddressFilterForm, VLANForm, \
|
||||
VLANImportForm, VLANBulkEditForm, VLANBulkDeleteForm, VRFForm, VRFImportForm, VRFBulkEditForm, VRFBulkDeleteForm, \
|
||||
from .forms import AggregateForm, AggregateImportForm, AggregateBulkEditForm, AggregateBulkDeleteForm,\
|
||||
AggregateFilterForm, PrefixForm, PrefixImportForm, PrefixBulkEditForm, PrefixBulkDeleteForm, PrefixFilterForm,\
|
||||
IPAddressForm, IPAddressImportForm, IPAddressBulkEditForm, IPAddressBulkDeleteForm, IPAddressFilterForm, VLANForm,\
|
||||
VLANImportForm, VLANBulkEditForm, VLANBulkDeleteForm, VRFForm, VRFImportForm, VRFBulkEditForm, VRFBulkDeleteForm,\
|
||||
VLANFilterForm
|
||||
from .models import VRF, Aggregate, Prefix, VLAN
|
||||
from .tables import AggregateTable, AggregateBulkEditTable, PrefixTable, PrefixBriefTable, PrefixBulkEditTable, \
|
||||
IPAddress, IPAddressBriefTable, IPAddressTable, IPAddressBulkEditTable, VLANTable, VLANBulkEditTable, VRFTable, \
|
||||
from .tables import AggregateTable, AggregateBulkEditTable, PrefixTable, PrefixBriefTable, PrefixBulkEditTable,\
|
||||
IPAddress, IPAddressBriefTable, IPAddressTable, IPAddressBulkEditTable, VLANTable, VLANBulkEditTable, VRFTable,\
|
||||
VRFBulkEditTable
|
||||
|
||||
|
||||
@ -69,74 +70,26 @@ def vrf(request, pk):
|
||||
})
|
||||
|
||||
|
||||
@permission_required('ipam.add_vrf')
|
||||
def vrf_add(request):
|
||||
|
||||
if request.method == 'POST':
|
||||
form = VRFForm(request.POST)
|
||||
if form.is_valid():
|
||||
vrf = form.save()
|
||||
messages.success(request, "Added new VRF: {0}".format(vrf))
|
||||
if '_addanother' in request.POST:
|
||||
return redirect('ipam:vrf_add')
|
||||
else:
|
||||
return redirect('ipam:vrf', pk=vrf.pk)
|
||||
|
||||
else:
|
||||
form = VRFForm()
|
||||
|
||||
return render(request, 'ipam/vrf_edit.html', {
|
||||
'form': form,
|
||||
'cancel_url': reverse('ipam:vrf_list'),
|
||||
})
|
||||
class VRFAddView(PermissionRequiredMixin, ObjectAddView):
|
||||
permission_required = 'ipam.add_vrf'
|
||||
model = VRF
|
||||
form_class = VRFForm
|
||||
template_name = 'ipam/vrf_edit.html'
|
||||
cancel_url = 'ipam:vrf_list'
|
||||
|
||||
|
||||
@permission_required('ipam.change_vrf')
|
||||
def vrf_edit(request, pk):
|
||||
|
||||
vrf = get_object_or_404(VRF, pk=pk)
|
||||
|
||||
if request.method == 'POST':
|
||||
form = VRFForm(request.POST, instance=vrf)
|
||||
if form.is_valid():
|
||||
vrf = form.save()
|
||||
messages.success(request, "Modified VRF {0}".format(vrf))
|
||||
return redirect('ipam:vrf', pk=vrf.pk)
|
||||
|
||||
else:
|
||||
form = VRFForm(instance=vrf)
|
||||
|
||||
return render(request, 'ipam/vrf_edit.html', {
|
||||
'vrf': vrf,
|
||||
'form': form,
|
||||
'cancel_url': reverse('ipam:vrf', kwargs={'pk': vrf.pk}),
|
||||
})
|
||||
class VRFEditView(PermissionRequiredMixin, ObjectEditView):
|
||||
permission_required = 'ipam.change_vrf'
|
||||
model = VRF
|
||||
form_class = VRFForm
|
||||
template_name = 'ipam/vrf_edit.html'
|
||||
|
||||
|
||||
@permission_required('ipam.delete_vrf')
|
||||
def vrf_delete(request, pk):
|
||||
|
||||
vrf = get_object_or_404(VRF, pk=pk)
|
||||
|
||||
if request.method == 'POST':
|
||||
form = ConfirmationForm(request.POST)
|
||||
if form.is_valid():
|
||||
try:
|
||||
vrf.delete()
|
||||
messages.success(request, "VRF {0} has been deleted".format(vrf))
|
||||
return redirect('ipam:vrf_list')
|
||||
except ProtectedError, e:
|
||||
handle_protectederror(vrf, request, e)
|
||||
return redirect('ipam:vrf', pk=vrf.pk)
|
||||
|
||||
else:
|
||||
form = ConfirmationForm()
|
||||
|
||||
return render(request, 'ipam/vrf_delete.html', {
|
||||
'vrf': vrf,
|
||||
'form': form,
|
||||
'cancel_url': reverse('ipam:vrf', kwargs={'pk': vrf.pk})
|
||||
})
|
||||
class VRFDeleteView(PermissionRequiredMixin, ObjectDeleteView):
|
||||
permission_required = 'ipam.delete_vrf'
|
||||
model = VRF
|
||||
template_name = 'ipam/vrf_delete.html'
|
||||
redirect_url = 'ipam:vrf_list'
|
||||
|
||||
|
||||
class VRFBulkImportView(PermissionRequiredMixin, BulkImportView):
|
||||
@ -211,74 +164,26 @@ def aggregate(request, pk):
|
||||
})
|
||||
|
||||
|
||||
@permission_required('ipam.add_aggregate')
|
||||
def aggregate_add(request):
|
||||
|
||||
if request.method == 'POST':
|
||||
form = AggregateForm(request.POST)
|
||||
if form.is_valid():
|
||||
aggregate = form.save()
|
||||
messages.success(request, "Added new aggregate: {0}".format(aggregate.prefix))
|
||||
if '_addanother' in request.POST:
|
||||
return redirect('ipam:aggregate_add')
|
||||
else:
|
||||
return redirect('ipam:aggregate', pk=aggregate.pk)
|
||||
|
||||
else:
|
||||
form = AggregateForm()
|
||||
|
||||
return render(request, 'ipam/aggregate_edit.html', {
|
||||
'form': form,
|
||||
'cancel_url': reverse('ipam:aggregate_list'),
|
||||
})
|
||||
class AggregateAddView(PermissionRequiredMixin, ObjectAddView):
|
||||
permission_required = 'ipam.add_aggregate'
|
||||
model = Aggregate
|
||||
form_class = AggregateForm
|
||||
template_name = 'ipam/aggregate_edit.html'
|
||||
cancel_url = 'ipam:aggregate_list'
|
||||
|
||||
|
||||
@permission_required('ipam.change_aggregate')
|
||||
def aggregate_edit(request, pk):
|
||||
|
||||
aggregate = get_object_or_404(Aggregate, pk=pk)
|
||||
|
||||
if request.method == 'POST':
|
||||
form = AggregateForm(request.POST, instance=aggregate)
|
||||
if form.is_valid():
|
||||
aggregate = form.save()
|
||||
messages.success(request, "Modified aggregate {0}".format(aggregate.prefix))
|
||||
return redirect('ipam:aggregate', pk=aggregate.pk)
|
||||
|
||||
else:
|
||||
form = AggregateForm(instance=aggregate)
|
||||
|
||||
return render(request, 'ipam/aggregate_edit.html', {
|
||||
'aggregate': aggregate,
|
||||
'form': form,
|
||||
'cancel_url': reverse('ipam:aggregate', kwargs={'pk': aggregate.pk}),
|
||||
})
|
||||
class AggregateEditView(PermissionRequiredMixin, ObjectEditView):
|
||||
permission_required = 'ipam.change_aggregate'
|
||||
model = Aggregate
|
||||
form_class = AggregateForm
|
||||
template_name = 'ipam/aggregate_edit.html'
|
||||
|
||||
|
||||
@permission_required('ipam.delete_aggregate')
|
||||
def aggregate_delete(request, pk):
|
||||
|
||||
aggregate = get_object_or_404(Aggregate, pk=pk)
|
||||
|
||||
if request.method == 'POST':
|
||||
form = ConfirmationForm(request.POST)
|
||||
if form.is_valid():
|
||||
try:
|
||||
aggregate.delete()
|
||||
messages.success(request, "Aggregate {0} has been deleted".format(aggregate))
|
||||
return redirect('ipam:aggregate_list')
|
||||
except ProtectedError, e:
|
||||
handle_protectederror(aggregate, request, e)
|
||||
return redirect('ipam:aggregate', pk=aggregate.pk)
|
||||
|
||||
else:
|
||||
form = ConfirmationForm()
|
||||
|
||||
return render(request, 'ipam/aggregate_delete.html', {
|
||||
'aggregate': aggregate,
|
||||
'form': form,
|
||||
'cancel_url': reverse('ipam:aggregate', kwargs={'pk': aggregate.pk})
|
||||
})
|
||||
class AggregateDeleteView(PermissionRequiredMixin, ObjectDeleteView):
|
||||
permission_required = 'ipam.delete_aggregate'
|
||||
model = Aggregate
|
||||
template_name = 'ipam/aggregate_delete.html'
|
||||
redirect_url = 'ipam:aggregate_list'
|
||||
|
||||
|
||||
class AggregateBulkImportView(PermissionRequiredMixin, BulkImportView):
|
||||
|
@ -1,8 +1,8 @@
|
||||
{% extends 'utilities/confirmation_form.html' %}
|
||||
{% load form_helpers %}
|
||||
|
||||
{% block title %}Delete aggregate {{ aggregate }}?{% endblock %}
|
||||
{% block title %}Delete aggregate {{ obj }}?{% endblock %}
|
||||
|
||||
{% block message %}
|
||||
<p>Are you sure you want to delete this aggregate?</p>
|
||||
<p>Are you sure you want to delete {{ obj }}?</p>
|
||||
{% endblock %}
|
||||
|
@ -1,11 +1,11 @@
|
||||
{% extends '_base.html' %}
|
||||
{% load form_helpers %}
|
||||
|
||||
{% block title %}Editing aggregate {{ aggregate }}{% endblock %}
|
||||
{% block title %}{% if obj %}Editing aggregate {{ obj }}{% else %}Add a new aggregate{% endif %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% if aggregate %}
|
||||
<h1>{{ aggregate }}</h1>
|
||||
{% if obj %}
|
||||
<h1>{{ obj }}</h1>
|
||||
{% else %}
|
||||
<h1>Add an Aggregate</h1>
|
||||
{% endif %}
|
||||
@ -32,9 +32,9 @@
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-md-9 col-md-offset-3">
|
||||
{% if aggregate %}
|
||||
{% if obj %}
|
||||
<button type="submit" name="_update" class="btn btn-primary">Update</button>
|
||||
<a href="{% url 'ipam:aggregate' pk=aggregate.pk %}" class="btn btn-default">Cancel</a>
|
||||
<a href="{% url 'ipam:aggregate' pk=obj.pk %}" class="btn btn-default">Cancel</a>
|
||||
{% else %}
|
||||
<button type="submit" name="_create" class="btn btn-primary">Create</button>
|
||||
<button type="submit" name="_addanother" class="btn btn-primary">Create and Add Another</button>
|
||||
|
@ -1,20 +1,20 @@
|
||||
{% extends 'utilities/confirmation_form.html' %}
|
||||
{% load form_helpers %}
|
||||
|
||||
{% block title %}Delete VRF {{ vrf }}?{% endblock %}
|
||||
{% block title %}Delete VRF {{ obj }}?{% endblock %}
|
||||
|
||||
{% block message %}
|
||||
<p>
|
||||
Are you sure you want to delete this VRF?
|
||||
{% if vrf.prefix_set.count %}
|
||||
{% if obj.prefix_set.count %}
|
||||
The following prefixes will also be deleted:
|
||||
{% else %}
|
||||
(There are no prefixes associated with this VRF.)
|
||||
{% endif %}
|
||||
</p>
|
||||
{% if vrf.prefix_set.count %}
|
||||
{% if obj.prefix_set.count %}
|
||||
<ul>
|
||||
{% for p in vrf.prefix_set.all %}
|
||||
{% for p in obj.prefix_set.all %}
|
||||
<li><a href="{% url 'ipam:prefix' pk=p.pk %}">{{ p }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
@ -1,11 +1,11 @@
|
||||
{% extends '_base.html' %}
|
||||
{% load form_helpers %}
|
||||
|
||||
{% block title %}{% if vrf %}Editing VRF {{ vrf }}{% else %}Add a VRF{% endif %}{% endblock %}
|
||||
{% block title %}{% if obj %}Editing VRF {{ obj }}{% else %}Add a VRF{% endif %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
{% if vrf %}
|
||||
<h1>{{ vrf }}</h1>
|
||||
{% if obj %}
|
||||
<h1>{{ obj }}</h1>
|
||||
{% else %}
|
||||
<h1>Add a VRF</h1>
|
||||
{% endif %}
|
||||
@ -29,9 +29,9 @@
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<div class="col-md-9 col-md-offset-3">
|
||||
{% if vrf %}
|
||||
{% if obj %}
|
||||
<button type="submit" name="_update" class="btn btn-primary">Update</button>
|
||||
<a href="{% url 'ipam:vrf' pk=vrf.pk %}" class="btn btn-default">Cancel</a>
|
||||
<a href="{% url 'ipam:vrf' pk=obj.pk %}" class="btn btn-default">Cancel</a>
|
||||
{% else %}
|
||||
<button type="submit" name="_create" class="btn btn-primary">Create</button>
|
||||
<button type="submit" name="_addanother" class="btn btn-primary">Create and Add Another</button>
|
||||
|
Reference in New Issue
Block a user