mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-27 10:58:37 -06:00
Add full reverse dns view
This commit is contained in:
parent
e9d6c923d8
commit
fd98c0c2a8
@ -24,4 +24,7 @@ urlpatterns = [
|
|||||||
url(r'^records/(?P<pk>\d+)/edit/$', views.RecordEditView.as_view(), name='record_edit'),
|
url(r'^records/(?P<pk>\d+)/edit/$', views.RecordEditView.as_view(), name='record_edit'),
|
||||||
url(r'^records/(?P<pk>\d+)/delete/$', views.RecordDeleteView.as_view(), name='record_delete'),
|
url(r'^records/(?P<pk>\d+)/delete/$', views.RecordDeleteView.as_view(), name='record_delete'),
|
||||||
|
|
||||||
|
# Full Reverse
|
||||||
|
url(r'^reverse/$', views.full_reverse, name='full_reverse'),
|
||||||
|
|
||||||
]
|
]
|
||||||
|
@ -5,7 +5,7 @@ from django.db.models import Count
|
|||||||
from django.shortcuts import get_object_or_404, render
|
from django.shortcuts import get_object_or_404, render
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
|
|
||||||
from ipam.models import IPAddress
|
from ipam.models import IPAddress, Prefix
|
||||||
from utilities.paginator import EnhancedPaginator
|
from utilities.paginator import EnhancedPaginator
|
||||||
from utilities.views import (
|
from utilities.views import (
|
||||||
BulkDeleteView, BulkEditView, BulkImportView, ObjectDeleteView, ObjectEditView, ObjectListView,
|
BulkDeleteView, BulkEditView, BulkImportView, ObjectDeleteView, ObjectEditView, ObjectListView,
|
||||||
@ -159,3 +159,33 @@ class RecordBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
|
|||||||
cls = Record
|
cls = Record
|
||||||
form = forms.RecordBulkEditForm
|
form = forms.RecordBulkEditForm
|
||||||
default_redirect_url = 'dns:record_list'
|
default_redirect_url = 'dns:record_list'
|
||||||
|
|
||||||
|
#
|
||||||
|
# Full Reverse
|
||||||
|
#
|
||||||
|
|
||||||
|
def full_reverse(request):
|
||||||
|
|
||||||
|
zones = {}
|
||||||
|
|
||||||
|
prefixes = Prefix.objects.all()
|
||||||
|
|
||||||
|
for p in prefixes:
|
||||||
|
child_ip = IPAddress.objects.filter(address__net_contained_or_equal=str(p.prefix))
|
||||||
|
z = p.to_bind(child_ip)
|
||||||
|
for zz in z:
|
||||||
|
if not zz['id'] in zones:
|
||||||
|
zones[zz['id']] = zz['content']
|
||||||
|
|
||||||
|
zones_list = []
|
||||||
|
for zid,zc in zones.items():
|
||||||
|
zones_list.append({
|
||||||
|
'num': len(zones_list),
|
||||||
|
'id': zid,
|
||||||
|
'content': zc,
|
||||||
|
})
|
||||||
|
|
||||||
|
return render(request, 'dns/full_reverse.html', {
|
||||||
|
'zones': zones_list,
|
||||||
|
'bind_export_count': len(zones_list),
|
||||||
|
})
|
||||||
|
@ -170,6 +170,8 @@
|
|||||||
<li><a href="{% url 'dns:zone_add' %}"><i class="glyphicon glyphicon-plus" aria-hidden="true"></i> Add a zone</a></li>
|
<li><a href="{% url 'dns:zone_add' %}"><i class="glyphicon glyphicon-plus" aria-hidden="true"></i> Add a zone</a></li>
|
||||||
<li><a href="{% url 'dns:zone_import' %}"><i class="glyphicon glyphicon-import" aria-hidden="true"></i> Import zones</a></li>
|
<li><a href="{% url 'dns:zone_import' %}"><i class="glyphicon glyphicon-import" aria-hidden="true"></i> Import zones</a></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
<li class="divider"></li>
|
||||||
|
<li><a href="{% url 'dns:full_reverse' %}"><i class="glyphicon glyphicon-search" aria-hidden="true"></i> Full Reverse Export</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li class="dropdown{% if request.path|startswith:'/ipam/vlan' %} active{% endif %}">
|
<li class="dropdown{% if request.path|startswith:'/ipam/vlan' %} active{% endif %}">
|
||||||
|
48
netbox/templates/dns/full_reverse.html
Normal file
48
netbox/templates/dns/full_reverse.html
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
{% extends '_base.html' %}
|
||||||
|
{% load render_table from django_tables2 %}
|
||||||
|
|
||||||
|
{% block title %}Full Reverse DNS{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<h1>Full Reverse DNS</h1>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
{% for z in zones %}
|
||||||
|
<div class="panel panel-default">
|
||||||
|
<div class="panel-heading">
|
||||||
|
<strong class="text-md-left">{{ z.id }}</strong>
|
||||||
|
<a class="pull-right" id="bind_export_select_{{ z.num }}" href="#">Select</a>
|
||||||
|
</div>
|
||||||
|
<table class="table table-hover panel-body">
|
||||||
|
<tr><td>
|
||||||
|
<pre id="bind_export_{{ z.num }}" style="overflow: auto;">{{ z.content }}</pre>
|
||||||
|
</td></tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
{% block javascript %}
|
||||||
|
<script>
|
||||||
|
for(var i=0;i<{{ bind_export_count }};i++) {
|
||||||
|
$('#bind_export_select_'+i).click(function(e){
|
||||||
|
var i_str = $(this).attr('id');
|
||||||
|
i_str = i_str.substr(i_str.lastIndexOf('_')+1);
|
||||||
|
e.preventDefault();
|
||||||
|
if(document.selection) {
|
||||||
|
var range = document.body.createTextRange();
|
||||||
|
var id='bind_export_'+i_str;
|
||||||
|
range.moveToElementText(document.getElementById(id));
|
||||||
|
range.select();
|
||||||
|
}
|
||||||
|
else if(window.getSelection) {
|
||||||
|
var range = document.createRange();
|
||||||
|
var id='bind_export_'+i_str;
|
||||||
|
range.selectNode(document.getElementById(id));
|
||||||
|
window.getSelection().addRange(range);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
Loading…
Reference in New Issue
Block a user