netbox-plugin-dns 0.22.9__py3-none-any.whl → 1.0b1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of netbox-plugin-dns might be problematic. Click here for more details.
- netbox_dns/__init__.py +3 -14
- netbox_dns/api/nested_serializers.py +4 -60
- netbox_dns/api/serializers.py +8 -314
- netbox_dns/api/serializers_/__init__.py +0 -0
- netbox_dns/api/serializers_/contact.py +37 -0
- netbox_dns/api/serializers_/nameserver.py +39 -0
- netbox_dns/api/serializers_/record.py +90 -0
- netbox_dns/api/serializers_/registrar.py +31 -0
- netbox_dns/api/serializers_/view.py +29 -0
- netbox_dns/api/serializers_/zone.py +170 -0
- netbox_dns/api/views.py +13 -13
- netbox_dns/fields/network.py +1 -1
- netbox_dns/fields/rfc2317.py +1 -1
- netbox_dns/{filters → filtersets}/contact.py +2 -1
- netbox_dns/filtersets/nameserver.py +37 -0
- netbox_dns/{filters → filtersets}/record.py +51 -6
- netbox_dns/{filters → filtersets}/registrar.py +2 -1
- netbox_dns/{filters → filtersets}/view.py +2 -2
- netbox_dns/filtersets/zone.py +205 -0
- netbox_dns/forms/contact.py +61 -33
- netbox_dns/forms/nameserver.py +21 -8
- netbox_dns/forms/record.py +35 -36
- netbox_dns/forms/registrar.py +45 -15
- netbox_dns/forms/view.py +19 -8
- netbox_dns/forms/zone.py +112 -87
- netbox_dns/graphql/__init__.py +17 -27
- netbox_dns/graphql/filters.py +49 -0
- netbox_dns/graphql/schema.py +66 -7
- netbox_dns/graphql/types.py +146 -0
- netbox_dns/management/commands/cleanup_database.py +0 -4
- netbox_dns/management/commands/cleanup_rrset_ttl.py +3 -5
- netbox_dns/management/commands/setup_coupling.py +15 -15
- netbox_dns/management/commands/update_soa.py +1 -1
- netbox_dns/migrations/0001_squashed_netbox_dns_0_15.py +0 -27
- netbox_dns/migrations/0001_squashed_netbox_dns_0_22.py +556 -0
- netbox_dns/migrations/{0013_add_nameserver_zone_record_description.py → 0002_contact_description_registrar_description.py} +4 -9
- netbox_dns/migrations/0020_netbox_3_4.py +1 -1
- netbox_dns/models/contact.py +6 -1
- netbox_dns/models/nameserver.py +3 -3
- netbox_dns/models/record.py +8 -15
- netbox_dns/models/registrar.py +5 -1
- netbox_dns/models/view.py +1 -1
- netbox_dns/models/zone.py +6 -9
- netbox_dns/navigation.py +1 -15
- netbox_dns/signals/ipam_coupling.py +3 -8
- netbox_dns/tables/contact.py +1 -0
- netbox_dns/tables/nameserver.py +0 -2
- netbox_dns/tables/registrar.py +1 -0
- netbox_dns/template_content.py +3 -7
- netbox_dns/templates/netbox_dns/contact.html +60 -56
- netbox_dns/templates/netbox_dns/nameserver.html +27 -27
- netbox_dns/templates/netbox_dns/record.html +92 -94
- netbox_dns/templates/netbox_dns/registrar.html +38 -36
- netbox_dns/templates/netbox_dns/view.html +21 -21
- netbox_dns/templates/netbox_dns/zone/base.html +5 -3
- netbox_dns/templates/netbox_dns/zone/child.html +3 -3
- netbox_dns/templates/netbox_dns/zone/managed_record.html +1 -1
- netbox_dns/templates/netbox_dns/zone/record.html +3 -3
- netbox_dns/templates/netbox_dns/zone/registration.html +26 -27
- netbox_dns/templates/netbox_dns/zone/rfc2317_child_zone.html +1 -1
- netbox_dns/templates/netbox_dns/zone.html +150 -149
- netbox_dns/utilities/__init__.py +1 -6
- netbox_dns/utilities/ipam_coupling.py +2 -7
- netbox_dns/validators/dns_name.py +4 -9
- netbox_dns/validators/rfc2317.py +2 -2
- netbox_dns/views/contact.py +4 -4
- netbox_dns/views/nameserver.py +5 -5
- netbox_dns/views/record.py +19 -12
- netbox_dns/views/registrar.py +4 -4
- netbox_dns/views/view.py +4 -4
- netbox_dns/views/zone.py +7 -8
- {netbox_plugin_dns-0.22.9.dist-info → netbox_plugin_dns-1.0b1.dist-info}/METADATA +5 -7
- netbox_plugin_dns-1.0b1.dist-info/RECORD +103 -0
- netbox_dns/filters/nameserver.py +0 -18
- netbox_dns/filters/zone.py +0 -112
- netbox_dns/graphql/contact.py +0 -19
- netbox_dns/graphql/nameserver.py +0 -19
- netbox_dns/graphql/record.py +0 -19
- netbox_dns/graphql/registrar.py +0 -19
- netbox_dns/graphql/view.py +0 -19
- netbox_dns/graphql/zone.py +0 -19
- netbox_dns/migrations/0001_initial.py +0 -115
- netbox_dns/migrations/0002_zone_default_ttl.py +0 -18
- netbox_dns/migrations/0003_soa_managed_records.py +0 -112
- netbox_dns/migrations/0004_create_ptr_for_a_aaaa_records.py +0 -80
- netbox_dns/migrations/0005_update_ns_records.py +0 -41
- netbox_dns/migrations/0006_zone_soa_serial_auto.py +0 -29
- netbox_dns/migrations/0007_alter_zone_soa_serial_auto.py +0 -17
- netbox_dns/migrations/0008_zone_status_names.py +0 -21
- netbox_dns/migrations/0009_netbox32.py +0 -71
- netbox_dns/migrations/0010_update_soa_records.py +0 -58
- netbox_dns/migrations/0011_add_view_model.py +0 -70
- netbox_dns/migrations/0012_adjust_zone_and_record.py +0 -17
- netbox_dns/migrations/0014_add_view_description.py +0 -16
- netbox_dns/migrations/0015_add_record_status.py +0 -17
- netbox_dns/migrations/0016_cleanup_ptr_records.py +0 -38
- netbox_dns/migrations/0017_alter_record_ttl.py +0 -17
- netbox_dns/migrations/0018_zone_arpa_network.py +0 -51
- netbox_dns/migrations/0019_update_ns_ttl.py +0 -19
- netbox_plugin_dns-0.22.9.dist-info/RECORD +0 -117
- /netbox_dns/{filters → filtersets}/__init__.py +0 -0
- {netbox_plugin_dns-0.22.9.dist-info → netbox_plugin_dns-1.0b1.dist-info}/LICENSE +0 -0
- {netbox_plugin_dns-0.22.9.dist-info → netbox_plugin_dns-1.0b1.dist-info}/WHEEL +0 -0
|
@@ -9,95 +9,99 @@
|
|
|
9
9
|
<h5 class="card-header">
|
|
10
10
|
Zone
|
|
11
11
|
</h5>
|
|
12
|
-
<
|
|
13
|
-
<
|
|
14
|
-
<
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
<
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
<
|
|
26
|
-
|
|
27
|
-
<
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
</
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
</
|
|
99
|
-
</
|
|
100
|
-
|
|
12
|
+
<table class="table table-hover attr-table">
|
|
13
|
+
<tr>
|
|
14
|
+
<th scope="row">Name</th>
|
|
15
|
+
<td>{{ object.name }}</td>
|
|
16
|
+
</tr>
|
|
17
|
+
{% if unicode_name %}
|
|
18
|
+
<tr>
|
|
19
|
+
<th scope="row">IDN</th>
|
|
20
|
+
<td>{{ unicode_name }}</td>
|
|
21
|
+
</tr>
|
|
22
|
+
{% endif %}
|
|
23
|
+
{% if object.view %}
|
|
24
|
+
<tr>
|
|
25
|
+
<th scope="row">View</th>
|
|
26
|
+
<td>
|
|
27
|
+
<a href="{% url 'plugins:netbox_dns:view' pk=object.view.pk %}">
|
|
28
|
+
{{ object.view }}
|
|
29
|
+
</a>
|
|
30
|
+
</td>
|
|
31
|
+
</tr>
|
|
32
|
+
{% endif %}
|
|
33
|
+
{% if object.description %}
|
|
34
|
+
<tr>
|
|
35
|
+
<th scope="row">Description</th>
|
|
36
|
+
<td style="word-break:break-all;">{{ object.description }}</td>
|
|
37
|
+
</tr>
|
|
38
|
+
{% endif %}
|
|
39
|
+
<tr>
|
|
40
|
+
<th scope="row">Tenant</th>
|
|
41
|
+
<td>
|
|
42
|
+
{% if object.tenant.group %}
|
|
43
|
+
{{ object.tenant.group|linkify }} /
|
|
44
|
+
{% endif %}
|
|
45
|
+
{{ object.tenant|linkify|placeholder }}
|
|
46
|
+
</td>
|
|
47
|
+
</tr>
|
|
48
|
+
<tr>
|
|
49
|
+
<th scope="row">Status</th>
|
|
50
|
+
<td>{% badge object.get_status_display bg_color=object.get_status_color %}</td>
|
|
51
|
+
</tr>
|
|
52
|
+
<tr>
|
|
53
|
+
<th scope="row">Nameservers</th>
|
|
54
|
+
<td>
|
|
55
|
+
<table>
|
|
56
|
+
{% for nameserver in object.nameservers.all %}
|
|
57
|
+
<tr>
|
|
58
|
+
<td>
|
|
59
|
+
<a href="{% url 'plugins:netbox_dns:nameserver' pk=nameserver.pk %}">
|
|
60
|
+
{{ nameserver }}
|
|
61
|
+
</a>
|
|
62
|
+
</td>
|
|
63
|
+
</tr>
|
|
64
|
+
{% endfor %}
|
|
65
|
+
</table>
|
|
66
|
+
</td>
|
|
67
|
+
{% if nameserver_warnings %}
|
|
68
|
+
<tr>
|
|
69
|
+
<th class="text-warning" scope="row">Warnings</th>
|
|
70
|
+
<td>
|
|
71
|
+
<table>
|
|
72
|
+
{% for warning in nameserver_warnings %}
|
|
73
|
+
<tr>
|
|
74
|
+
<td class="text-warning">{{ warning }}</td>
|
|
75
|
+
</tr>
|
|
76
|
+
{% endfor %}
|
|
77
|
+
</table>
|
|
78
|
+
</td>
|
|
79
|
+
</tr>
|
|
80
|
+
{% endif %}
|
|
81
|
+
{% if nameserver_errors %}
|
|
82
|
+
<tr>
|
|
83
|
+
<th class="text-danger" scope="row">Errors</th>
|
|
84
|
+
<td>
|
|
85
|
+
<table>
|
|
86
|
+
{% for error in nameserver_errors %}
|
|
87
|
+
<tr>
|
|
88
|
+
<td class="text-danger">{{ error }}</td>
|
|
89
|
+
</tr>
|
|
90
|
+
{% endfor %}
|
|
91
|
+
</table>
|
|
92
|
+
</td>
|
|
93
|
+
</tr>
|
|
94
|
+
{% endif %}
|
|
95
|
+
</tr>
|
|
96
|
+
<tr>
|
|
97
|
+
<th scope="row">Default TTL</th>
|
|
98
|
+
<td>{{ object.default_ttl }}</td>
|
|
99
|
+
</tr>
|
|
100
|
+
<tr>
|
|
101
|
+
<th scope="row">Description</th>
|
|
102
|
+
<td>{{ object.description }}</td>
|
|
103
|
+
</tr>
|
|
104
|
+
</table>
|
|
101
105
|
</div>
|
|
102
106
|
|
|
103
107
|
{% include 'inc/panels/tags.html' %}
|
|
@@ -106,70 +110,67 @@
|
|
|
106
110
|
<div class="col col-md-6">
|
|
107
111
|
<div class="card">
|
|
108
112
|
<h5 class="card-header">Zone SOA</h5>
|
|
109
|
-
<
|
|
110
|
-
<
|
|
111
|
-
<
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
<
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
<
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
<
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
<
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
<
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
<
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
<
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
<
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
</table>
|
|
151
|
-
</div>
|
|
113
|
+
<table class="table table-hover attr-table">
|
|
114
|
+
<tr>
|
|
115
|
+
<th scope="row">TTL</th>
|
|
116
|
+
<td>{{ object.soa_ttl }}</td>
|
|
117
|
+
</tr>
|
|
118
|
+
<tr>
|
|
119
|
+
<th scope="row">Primary Nameserver</th>
|
|
120
|
+
<td><a href="{% url 'plugins:netbox_dns:nameserver' pk=object.soa_mname.pk %}">{{ object.soa_mname }}</a></td>
|
|
121
|
+
</tr>
|
|
122
|
+
<tr>
|
|
123
|
+
<th scope="row">Responsible</th>
|
|
124
|
+
<td>{{ object.soa_rname }}</td>
|
|
125
|
+
</tr>
|
|
126
|
+
{% if object.soa_serial_auto %}
|
|
127
|
+
<tr>
|
|
128
|
+
<th scope="row">Serial (auto-generated)</th>
|
|
129
|
+
<td>{{ object.soa_serial }}</td>
|
|
130
|
+
</tr>
|
|
131
|
+
{% else %}
|
|
132
|
+
<tr>
|
|
133
|
+
<th scope="row">Serial</th>
|
|
134
|
+
<td>{{ object.soa_serial }}</td>
|
|
135
|
+
</tr>
|
|
136
|
+
{% endif %}
|
|
137
|
+
<tr>
|
|
138
|
+
<th scope="row">Refresh</th>
|
|
139
|
+
<td>{{ object.soa_refresh }}</td>
|
|
140
|
+
</tr>
|
|
141
|
+
<tr>
|
|
142
|
+
<th scope="row">Retry</th>
|
|
143
|
+
<td>{{ object.soa_retry }}</td>
|
|
144
|
+
</tr>
|
|
145
|
+
<tr>
|
|
146
|
+
<th scope="row">Expire</th>
|
|
147
|
+
<td>{{ object.soa_expire }}</td>
|
|
148
|
+
</tr>
|
|
149
|
+
<tr>
|
|
150
|
+
<th scope="row">Minimum TTL</th>
|
|
151
|
+
<td>{{ object.soa_minimum }}</td>
|
|
152
|
+
</tr>
|
|
153
|
+
</table>
|
|
152
154
|
</div>
|
|
153
155
|
{% if object.rfc2317_prefix %}
|
|
154
156
|
<div class="card">
|
|
155
157
|
<h5 class="card-header">RFC2317</h5>
|
|
156
|
-
<
|
|
157
|
-
<
|
|
158
|
-
<
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
<
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
<
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
</table>
|
|
158
|
+
<table class="table table-hover soa-table">
|
|
159
|
+
<tr>
|
|
160
|
+
<th scope="row">Prefix</th>
|
|
161
|
+
<td>{{ object.rfc2317_prefix }}</td>
|
|
162
|
+
</tr>
|
|
163
|
+
<tr>
|
|
164
|
+
<th scope="row">Parent Managed</th>
|
|
165
|
+
<td>{% checkmark object.rfc2317_parent_managed %}</td>
|
|
166
|
+
</tr>
|
|
167
|
+
{% if object.rfc2317_parent_managed %}
|
|
168
|
+
<tr>
|
|
169
|
+
<th scope="row">Parent Zone</th>
|
|
170
|
+
<td><a href="{% url 'plugins:netbox_dns:zone' pk=object.rfc2317_parent_zone.pk %}">{{ object.rfc2317_parent_zone }}</a></td>
|
|
171
|
+
</tr>
|
|
172
|
+
{% endif %}
|
|
173
|
+
</table>
|
|
173
174
|
</div>
|
|
174
175
|
</div>
|
|
175
176
|
{% endif %}
|
netbox_dns/utilities/__init__.py
CHANGED
|
@@ -4,12 +4,7 @@ from dns import name as dns_name
|
|
|
4
4
|
from dns.exception import DNSException
|
|
5
5
|
from netaddr import IPNetwork, AddrFormatError
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
# NetBox 3.5.0 - 3.5.7, 3.5.9+
|
|
9
|
-
from extras.plugins import get_plugin_config
|
|
10
|
-
except ImportError:
|
|
11
|
-
# NetBox 3.5.8
|
|
12
|
-
from extras.plugins.utils import get_plugin_config
|
|
7
|
+
from netbox.plugins.utils import get_plugin_config
|
|
13
8
|
|
|
14
9
|
|
|
15
10
|
class NameFormatError(Exception):
|
|
@@ -3,12 +3,7 @@ from utilities.permissions import resolve_permission
|
|
|
3
3
|
|
|
4
4
|
from netbox_dns.models import Record, RecordTypeChoices, RecordStatusChoices
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
# NetBox 3.5.0 - 3.5.7, 3.5.9+
|
|
8
|
-
from extras.plugins import get_plugin_config
|
|
9
|
-
except ImportError:
|
|
10
|
-
# NetBox 3.5.8
|
|
11
|
-
from extras.plugins.utils import get_plugin_config
|
|
6
|
+
from netbox.plugins.utils import get_plugin_config
|
|
12
7
|
|
|
13
8
|
|
|
14
9
|
class DNSPermissionDenied(Exception):
|
|
@@ -69,7 +64,7 @@ def new_address_record(instance):
|
|
|
69
64
|
status=address_record_status(instance),
|
|
70
65
|
type=address_record_type(instance),
|
|
71
66
|
value=str(instance.address.ip),
|
|
72
|
-
ipam_ip_address_id=instance.
|
|
67
|
+
ipam_ip_address_id=instance.pk,
|
|
73
68
|
managed=True,
|
|
74
69
|
)
|
|
75
70
|
|
|
@@ -2,12 +2,7 @@ import re
|
|
|
2
2
|
|
|
3
3
|
from django.core.exceptions import ValidationError
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
# NetBox 3.5.0 - 3.5.7, 3.5.9+
|
|
7
|
-
from extras.plugins import get_plugin_config
|
|
8
|
-
except ImportError:
|
|
9
|
-
# NetBox 3.5.8
|
|
10
|
-
from extras.plugins.utils import get_plugin_config
|
|
5
|
+
from netbox.plugins.utils import get_plugin_config
|
|
11
6
|
|
|
12
7
|
LABEL = r"[a-z0-9][a-z0-9-]*(?<!-)"
|
|
13
8
|
TOLERANT_LABEL = r"[a-z0-9][a-z0-9-_]*(?<![-_])"
|
|
@@ -26,7 +21,7 @@ def validate_fqdn(name):
|
|
|
26
21
|
regex = rf"^(\*|{LABEL})(\.{LABEL})+\.?$"
|
|
27
22
|
|
|
28
23
|
if not re.match(regex, name, flags=re.IGNORECASE) or has_invalid_double_dash(name):
|
|
29
|
-
raise ValidationError(
|
|
24
|
+
raise ValidationError("Not a valid fully qualified DNS host name")
|
|
30
25
|
|
|
31
26
|
|
|
32
27
|
def validate_extended_hostname(name, tolerate_leading_underscores=False):
|
|
@@ -41,7 +36,7 @@ def validate_extended_hostname(name, tolerate_leading_underscores=False):
|
|
|
41
36
|
regex = rf"^([*@]|(\*\.)?{LABEL}(\.{LABEL})*\.?)$"
|
|
42
37
|
|
|
43
38
|
if not re.match(regex, name, flags=re.IGNORECASE) or has_invalid_double_dash(name):
|
|
44
|
-
raise ValidationError(
|
|
39
|
+
raise ValidationError("Not a valid DNS host name")
|
|
45
40
|
|
|
46
41
|
|
|
47
42
|
def validate_domain_name(name):
|
|
@@ -54,4 +49,4 @@ def validate_domain_name(name):
|
|
|
54
49
|
regex = rf"^{LABEL}(\.{LABEL})*\.?$"
|
|
55
50
|
|
|
56
51
|
if not re.match(regex, name, flags=re.IGNORECASE) or has_invalid_double_dash(name):
|
|
57
|
-
raise ValidationError(
|
|
52
|
+
raise ValidationError("Not a valid DNS domain name")
|
netbox_dns/validators/rfc2317.py
CHANGED
|
@@ -10,9 +10,9 @@ def validate_prefix(prefix):
|
|
|
10
10
|
|
|
11
11
|
def validate_ipv4(prefix):
|
|
12
12
|
if prefix.version != 4:
|
|
13
|
-
raise ValidationError(
|
|
13
|
+
raise ValidationError("RFC2317 requires an IPv4 prefix.")
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
def validate_rfc2317(prefix):
|
|
17
17
|
if prefix.prefixlen <= 24:
|
|
18
|
-
raise ValidationError(
|
|
18
|
+
raise ValidationError("RFC2317 requires at least 25 bit prefix length.")
|
netbox_dns/views/contact.py
CHANGED
|
@@ -5,7 +5,7 @@ from netbox.views import generic
|
|
|
5
5
|
from utilities.views import ViewTab, register_model_view
|
|
6
6
|
|
|
7
7
|
from netbox_dns.models import Contact, Zone
|
|
8
|
-
from netbox_dns.
|
|
8
|
+
from netbox_dns.filtersets import ContactFilterSet, ZoneFilterSet
|
|
9
9
|
from netbox_dns.forms import (
|
|
10
10
|
ContactForm,
|
|
11
11
|
ContactFilterForm,
|
|
@@ -22,7 +22,7 @@ class ContactView(generic.ObjectView):
|
|
|
22
22
|
class ContactListView(generic.ObjectListView):
|
|
23
23
|
queryset = Contact.objects.all()
|
|
24
24
|
table = ContactTable
|
|
25
|
-
filterset =
|
|
25
|
+
filterset = ContactFilterSet
|
|
26
26
|
filterset_form = ContactFilterForm
|
|
27
27
|
|
|
28
28
|
|
|
@@ -46,7 +46,7 @@ class ContactBulkImportView(generic.BulkImportView):
|
|
|
46
46
|
|
|
47
47
|
class ContactBulkEditView(generic.BulkEditView):
|
|
48
48
|
queryset = Contact.objects.all()
|
|
49
|
-
filterset =
|
|
49
|
+
filterset = ContactFilterSet
|
|
50
50
|
table = ContactTable
|
|
51
51
|
form = ContactBulkEditForm
|
|
52
52
|
|
|
@@ -63,7 +63,7 @@ class ContactZoneListView(generic.ObjectChildrenView):
|
|
|
63
63
|
)
|
|
64
64
|
child_model = Zone
|
|
65
65
|
table = ZoneTable
|
|
66
|
-
filterset =
|
|
66
|
+
filterset = ZoneFilterSet
|
|
67
67
|
template_name = "netbox_dns/zone/child.html"
|
|
68
68
|
hide_if_empty = True
|
|
69
69
|
|
netbox_dns/views/nameserver.py
CHANGED
|
@@ -3,7 +3,7 @@ from dns import name as dns_name
|
|
|
3
3
|
from netbox.views import generic
|
|
4
4
|
from utilities.views import ViewTab, register_model_view
|
|
5
5
|
|
|
6
|
-
from netbox_dns.
|
|
6
|
+
from netbox_dns.filtersets import NameServerFilterSet, ZoneFilterSet
|
|
7
7
|
from netbox_dns.forms import (
|
|
8
8
|
NameServerImportForm,
|
|
9
9
|
NameServerFilterForm,
|
|
@@ -16,7 +16,7 @@ from netbox_dns.tables import NameServerTable, ZoneTable
|
|
|
16
16
|
|
|
17
17
|
class NameServerListView(generic.ObjectListView):
|
|
18
18
|
queryset = NameServer.objects.all()
|
|
19
|
-
filterset =
|
|
19
|
+
filterset = NameServerFilterSet
|
|
20
20
|
filterset_form = NameServerFilterForm
|
|
21
21
|
table = NameServerTable
|
|
22
22
|
|
|
@@ -54,7 +54,7 @@ class NameServerBulkImportView(generic.BulkImportView):
|
|
|
54
54
|
|
|
55
55
|
class NameServerBulkEditView(generic.BulkEditView):
|
|
56
56
|
queryset = NameServer.objects.all()
|
|
57
|
-
filterset =
|
|
57
|
+
filterset = NameServerFilterSet
|
|
58
58
|
table = NameServerTable
|
|
59
59
|
form = NameServerBulkEditForm
|
|
60
60
|
|
|
@@ -69,7 +69,7 @@ class NameServerZoneListView(generic.ObjectChildrenView):
|
|
|
69
69
|
queryset = NameServer.objects.all().prefetch_related("zones")
|
|
70
70
|
child_model = Zone
|
|
71
71
|
table = ZoneTable
|
|
72
|
-
filterset =
|
|
72
|
+
filterset = ZoneFilterSet
|
|
73
73
|
template_name = "netbox_dns/zone/child.html"
|
|
74
74
|
hide_if_empty = True
|
|
75
75
|
|
|
@@ -89,7 +89,7 @@ class NameServerSOAZoneListView(generic.ObjectChildrenView):
|
|
|
89
89
|
queryset = NameServer.objects.all().prefetch_related("zones_soa")
|
|
90
90
|
child_model = Zone
|
|
91
91
|
table = ZoneTable
|
|
92
|
-
filterset =
|
|
92
|
+
filterset = ZoneFilterSet
|
|
93
93
|
template_name = "netbox_dns/zone/child.html"
|
|
94
94
|
hide_if_empty = True
|
|
95
95
|
|
netbox_dns/views/record.py
CHANGED
|
@@ -5,7 +5,7 @@ from django.db.models.functions import Length
|
|
|
5
5
|
|
|
6
6
|
from netbox.views import generic
|
|
7
7
|
|
|
8
|
-
from netbox_dns.
|
|
8
|
+
from netbox_dns.filtersets import RecordFilterSet
|
|
9
9
|
from netbox_dns.forms import (
|
|
10
10
|
RecordImportForm,
|
|
11
11
|
RecordFilterForm,
|
|
@@ -21,7 +21,7 @@ class RecordListView(generic.ObjectListView):
|
|
|
21
21
|
queryset = Record.objects.filter(managed=False).prefetch_related(
|
|
22
22
|
"zone", "ptr_record"
|
|
23
23
|
)
|
|
24
|
-
filterset =
|
|
24
|
+
filterset = RecordFilterSet
|
|
25
25
|
filterset_form = RecordFilterForm
|
|
26
26
|
table = RecordTable
|
|
27
27
|
|
|
@@ -30,10 +30,10 @@ class ManagedRecordListView(generic.ObjectListView):
|
|
|
30
30
|
queryset = Record.objects.filter(managed=True).prefetch_related(
|
|
31
31
|
"zone", "address_record"
|
|
32
32
|
)
|
|
33
|
-
filterset =
|
|
33
|
+
filterset = RecordFilterSet
|
|
34
34
|
filterset_form = RecordFilterForm
|
|
35
35
|
table = ManagedRecordTable
|
|
36
|
-
actions =
|
|
36
|
+
actions = {"export": {"view"}}
|
|
37
37
|
template_name = "netbox_dns/record/managed.html"
|
|
38
38
|
|
|
39
39
|
|
|
@@ -41,15 +41,22 @@ class RecordView(generic.ObjectView):
|
|
|
41
41
|
queryset = Record.objects.all().prefetch_related("zone", "ptr_record")
|
|
42
42
|
|
|
43
43
|
def get_value_records(self, instance):
|
|
44
|
-
view_filter = (
|
|
45
|
-
Q(zone__view__isnull=True)
|
|
46
|
-
if instance.zone.view is None
|
|
47
|
-
else Q(zone__view=instance.zone.view)
|
|
48
|
-
)
|
|
49
|
-
|
|
50
44
|
value_fqdn = dns_name.from_text(instance.value_fqdn)
|
|
45
|
+
value_zone_names = [
|
|
46
|
+
value_fqdn.split(length)[1].to_text().rstrip(".")
|
|
47
|
+
for length in range(2, len(value_fqdn) + 1)
|
|
48
|
+
]
|
|
49
|
+
|
|
50
|
+
value_zone = (
|
|
51
|
+
Zone.objects.filter(instance.zone.view_filter, name__in=value_zone_names)
|
|
52
|
+
.order_by(Length("name").desc())
|
|
53
|
+
.first()
|
|
54
|
+
)
|
|
55
|
+
if not value_zone:
|
|
56
|
+
return None
|
|
51
57
|
|
|
52
|
-
|
|
58
|
+
value_name = value_fqdn.relativize(dns_name.from_text(value_zone.name))
|
|
59
|
+
cname_targets = Record.objects.filter(zone=value_zone, name=value_name)
|
|
53
60
|
|
|
54
61
|
if cname_targets:
|
|
55
62
|
return RelatedRecordTable(
|
|
@@ -142,7 +149,7 @@ class RecordBulkImportView(generic.BulkImportView):
|
|
|
142
149
|
|
|
143
150
|
class RecordBulkEditView(generic.BulkEditView):
|
|
144
151
|
queryset = Record.objects.filter(managed=False).prefetch_related("zone")
|
|
145
|
-
filterset =
|
|
152
|
+
filterset = RecordFilterSet
|
|
146
153
|
table = RecordTable
|
|
147
154
|
form = RecordBulkEditForm
|
|
148
155
|
|
netbox_dns/views/registrar.py
CHANGED
|
@@ -3,7 +3,7 @@ from netbox.views import generic
|
|
|
3
3
|
from utilities.views import ViewTab, register_model_view
|
|
4
4
|
|
|
5
5
|
from netbox_dns.models import Registrar, Zone
|
|
6
|
-
from netbox_dns.
|
|
6
|
+
from netbox_dns.filtersets import RegistrarFilterSet, ZoneFilterSet
|
|
7
7
|
from netbox_dns.forms import (
|
|
8
8
|
RegistrarForm,
|
|
9
9
|
RegistrarFilterForm,
|
|
@@ -20,7 +20,7 @@ class RegistrarView(generic.ObjectView):
|
|
|
20
20
|
class RegistrarListView(generic.ObjectListView):
|
|
21
21
|
queryset = Registrar.objects.all()
|
|
22
22
|
table = RegistrarTable
|
|
23
|
-
filterset =
|
|
23
|
+
filterset = RegistrarFilterSet
|
|
24
24
|
filterset_form = RegistrarFilterForm
|
|
25
25
|
|
|
26
26
|
|
|
@@ -44,7 +44,7 @@ class RegistrarBulkImportView(generic.BulkImportView):
|
|
|
44
44
|
|
|
45
45
|
class RegistrarBulkEditView(generic.BulkEditView):
|
|
46
46
|
queryset = Registrar.objects.all()
|
|
47
|
-
filterset =
|
|
47
|
+
filterset = RegistrarFilterSet
|
|
48
48
|
table = RegistrarTable
|
|
49
49
|
form = RegistrarBulkEditForm
|
|
50
50
|
|
|
@@ -59,7 +59,7 @@ class RegistrarZoneListView(generic.ObjectChildrenView):
|
|
|
59
59
|
queryset = Registrar.objects.all().prefetch_related("zone_set")
|
|
60
60
|
child_model = Zone
|
|
61
61
|
table = ZoneTable
|
|
62
|
-
filterset =
|
|
62
|
+
filterset = ZoneFilterSet
|
|
63
63
|
template_name = "netbox_dns/zone/child.html"
|
|
64
64
|
hide_if_empty = True
|
|
65
65
|
|
netbox_dns/views/view.py
CHANGED
|
@@ -3,7 +3,7 @@ from utilities.views import ViewTab, register_model_view
|
|
|
3
3
|
from netbox.views import generic
|
|
4
4
|
|
|
5
5
|
from netbox_dns.models import View, Zone
|
|
6
|
-
from netbox_dns.
|
|
6
|
+
from netbox_dns.filtersets import ViewFilterSet, ZoneFilterSet
|
|
7
7
|
from netbox_dns.forms import ViewForm, ViewFilterForm, ViewImportForm, ViewBulkEditForm
|
|
8
8
|
from netbox_dns.tables import ViewTable, ZoneTable
|
|
9
9
|
|
|
@@ -15,7 +15,7 @@ class ViewView(generic.ObjectView):
|
|
|
15
15
|
class ViewListView(generic.ObjectListView):
|
|
16
16
|
queryset = View.objects.all()
|
|
17
17
|
table = ViewTable
|
|
18
|
-
filterset =
|
|
18
|
+
filterset = ViewFilterSet
|
|
19
19
|
filterset_form = ViewFilterForm
|
|
20
20
|
|
|
21
21
|
|
|
@@ -39,7 +39,7 @@ class ViewBulkImportView(generic.BulkImportView):
|
|
|
39
39
|
|
|
40
40
|
class ViewBulkEditView(generic.BulkEditView):
|
|
41
41
|
queryset = View.objects.all()
|
|
42
|
-
filterset =
|
|
42
|
+
filterset = ViewFilterSet
|
|
43
43
|
table = ViewTable
|
|
44
44
|
form = ViewBulkEditForm
|
|
45
45
|
|
|
@@ -54,7 +54,7 @@ class ViewZoneListView(generic.ObjectChildrenView):
|
|
|
54
54
|
queryset = View.objects.all().prefetch_related("zone_set")
|
|
55
55
|
child_model = Zone
|
|
56
56
|
table = ZoneTable
|
|
57
|
-
filterset =
|
|
57
|
+
filterset = ZoneFilterSet
|
|
58
58
|
template_name = "netbox_dns/zone/child.html"
|
|
59
59
|
hide_if_empty = True
|
|
60
60
|
|