netbox-plugin-dns 1.2b1__py3-none-any.whl → 1.2.2__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 +5 -2
- netbox_dns/api/serializers_/record.py +1 -0
- netbox_dns/choices/record.py +37 -8
- netbox_dns/filtersets/zone.py +0 -14
- netbox_dns/forms/record.py +9 -4
- netbox_dns/forms/record_template.py +9 -4
- netbox_dns/graphql/types.py +1 -0
- netbox_dns/models/nameserver.py +1 -0
- netbox_dns/models/record.py +44 -1
- netbox_dns/models/view.py +1 -0
- netbox_dns/models/zone.py +1 -0
- netbox_dns/templates/netbox_dns/zone.html +10 -1
- netbox_dns/templatetags/__init__.py +0 -0
- netbox_dns/templatetags/netbox_dns.py +10 -0
- netbox_dns/validators/dns_name.py +1 -1
- netbox_dns/validators/dns_value.py +32 -17
- {netbox_plugin_dns-1.2b1.dist-info → netbox_plugin_dns-1.2.2.dist-info}/METADATA +14 -4
- {netbox_plugin_dns-1.2b1.dist-info → netbox_plugin_dns-1.2.2.dist-info}/RECORD +21 -19
- {netbox_plugin_dns-1.2b1.dist-info → netbox_plugin_dns-1.2.2.dist-info}/WHEEL +1 -1
- {netbox_plugin_dns-1.2b1.dist-info → netbox_plugin_dns-1.2.2.dist-info}/LICENSE +0 -0
- {netbox_plugin_dns-1.2b1.dist-info → netbox_plugin_dns-1.2.2.dist-info}/top_level.txt +0 -0
netbox_dns/__init__.py
CHANGED
|
@@ -7,7 +7,7 @@ from ipam.choices import IPAddressStatusChoices
|
|
|
7
7
|
|
|
8
8
|
from netbox_dns.choices import RecordTypeChoices, RecordStatusChoices, ZoneStatusChoices
|
|
9
9
|
|
|
10
|
-
__version__ = "1.
|
|
10
|
+
__version__ = "1.2.2"
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
def _check_list(setting):
|
|
@@ -36,6 +36,7 @@ class DNSConfig(PluginConfig):
|
|
|
36
36
|
ZoneStatusChoices.STATUS_ACTIVE,
|
|
37
37
|
ZoneStatusChoices.STATUS_DYNAMIC,
|
|
38
38
|
],
|
|
39
|
+
"filter_record_types": [],
|
|
39
40
|
"record_active_status": [
|
|
40
41
|
RecordStatusChoices.STATUS_ACTIVE,
|
|
41
42
|
],
|
|
@@ -49,9 +50,11 @@ class DNSConfig(PluginConfig):
|
|
|
49
50
|
"dnssync_minimum_zone_labels": 2,
|
|
50
51
|
"tolerate_characters_in_zone_labels": "",
|
|
51
52
|
"tolerate_underscores_in_labels": False,
|
|
52
|
-
"tolerate_underscores_in_hostnames": False, # Deprecated, will be removed in 1.2.0
|
|
53
53
|
"tolerate_leading_underscore_types": [
|
|
54
|
+
RecordTypeChoices.CNAME,
|
|
55
|
+
RecordTypeChoices.DNAME,
|
|
54
56
|
RecordTypeChoices.SRV,
|
|
57
|
+
RecordTypeChoices.SVCB,
|
|
55
58
|
RecordTypeChoices.TLSA,
|
|
56
59
|
RecordTypeChoices.TXT,
|
|
57
60
|
],
|
netbox_dns/choices/record.py
CHANGED
|
@@ -1,24 +1,44 @@
|
|
|
1
1
|
from dns import rdatatype, rdataclass
|
|
2
2
|
|
|
3
3
|
from django.utils.translation import gettext_lazy as _
|
|
4
|
+
from django.core.exceptions import ImproperlyConfigured
|
|
4
5
|
|
|
6
|
+
from netbox.plugins.utils import get_plugin_config
|
|
5
7
|
from utilities.choices import ChoiceSet
|
|
6
8
|
|
|
7
9
|
|
|
8
|
-
def initialize_choice_names(cls):
|
|
9
|
-
for choice in cls.CHOICES:
|
|
10
|
-
setattr(cls, choice[0], choice[0])
|
|
11
|
-
return cls
|
|
12
|
-
|
|
13
|
-
|
|
14
10
|
__all__ = (
|
|
15
11
|
"RecordTypeChoices",
|
|
12
|
+
"RecordSelectableTypeChoices",
|
|
16
13
|
"RecordClassChoices",
|
|
17
14
|
"RecordStatusChoices",
|
|
18
15
|
)
|
|
19
16
|
|
|
20
17
|
|
|
21
|
-
|
|
18
|
+
def define_choice_attributes(filter_name=None):
|
|
19
|
+
try:
|
|
20
|
+
if filter_name is not None:
|
|
21
|
+
filter_choices = get_plugin_config("netbox_dns", filter_name, [])
|
|
22
|
+
else:
|
|
23
|
+
filter_choices = []
|
|
24
|
+
except ImproperlyConfigured:
|
|
25
|
+
filter_choices = []
|
|
26
|
+
|
|
27
|
+
def decorator(cls):
|
|
28
|
+
choices = []
|
|
29
|
+
for choice in cls._choices:
|
|
30
|
+
if choice[0] not in filter_choices:
|
|
31
|
+
setattr(cls, choice[0], choice[0])
|
|
32
|
+
choices.append(choice)
|
|
33
|
+
cls._choices = choices
|
|
34
|
+
cls.CHOICES = choices
|
|
35
|
+
|
|
36
|
+
return cls
|
|
37
|
+
|
|
38
|
+
return decorator
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
@define_choice_attributes()
|
|
22
42
|
class RecordTypeChoices(ChoiceSet):
|
|
23
43
|
CHOICES = [
|
|
24
44
|
(rdtype.name, rdtype.name)
|
|
@@ -30,7 +50,16 @@ class RecordTypeChoices(ChoiceSet):
|
|
|
30
50
|
]
|
|
31
51
|
|
|
32
52
|
|
|
33
|
-
@
|
|
53
|
+
@define_choice_attributes(filter_name="filter_record_types")
|
|
54
|
+
class RecordSelectableTypeChoices(ChoiceSet):
|
|
55
|
+
CHOICES = [
|
|
56
|
+
(rdtype.name, rdtype.name)
|
|
57
|
+
for rdtype in sorted(rdatatype.RdataType, key=lambda a: a.name)
|
|
58
|
+
if not rdatatype.is_metatype(rdtype)
|
|
59
|
+
]
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
@define_choice_attributes()
|
|
34
63
|
class RecordClassChoices(ChoiceSet):
|
|
35
64
|
CHOICES = [
|
|
36
65
|
(rdclass.name, rdclass.name)
|
netbox_dns/filtersets/zone.py
CHANGED
|
@@ -29,20 +29,6 @@ class ZoneFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
|
|
|
29
29
|
to_field_name="name",
|
|
30
30
|
label=_("View"),
|
|
31
31
|
)
|
|
32
|
-
# DEPRECATED: Remove in 1.1
|
|
33
|
-
name_server_id = django_filters.ModelMultipleChoiceFilter(
|
|
34
|
-
queryset=NameServer.objects.all(),
|
|
35
|
-
field_name="nameservers",
|
|
36
|
-
to_field_name="id",
|
|
37
|
-
label=_("Nameserver IDs"),
|
|
38
|
-
)
|
|
39
|
-
# DEPRECATED: Remove in 1.1
|
|
40
|
-
name_server = django_filters.ModelMultipleChoiceFilter(
|
|
41
|
-
queryset=NameServer.objects.all(),
|
|
42
|
-
field_name="nameservers__name",
|
|
43
|
-
to_field_name="name",
|
|
44
|
-
label=_("Nameservers"),
|
|
45
|
-
)
|
|
46
32
|
nameserver_id = django_filters.ModelMultipleChoiceFilter(
|
|
47
33
|
queryset=NameServer.objects.all(),
|
|
48
34
|
field_name="nameservers",
|
netbox_dns/forms/record.py
CHANGED
|
@@ -21,7 +21,7 @@ from tenancy.models import Tenant, TenantGroup
|
|
|
21
21
|
from tenancy.forms import TenancyForm, TenancyFilterForm
|
|
22
22
|
|
|
23
23
|
from netbox_dns.models import View, Zone, Record
|
|
24
|
-
from netbox_dns.choices import
|
|
24
|
+
from netbox_dns.choices import RecordSelectableTypeChoices, RecordStatusChoices
|
|
25
25
|
from netbox_dns.utilities import name_to_unicode
|
|
26
26
|
|
|
27
27
|
|
|
@@ -57,6 +57,11 @@ class RecordForm(TenancyForm, NetBoxModelForm):
|
|
|
57
57
|
},
|
|
58
58
|
label=_("Zone"),
|
|
59
59
|
)
|
|
60
|
+
type = forms.ChoiceField(
|
|
61
|
+
choices=add_blank_choice(RecordSelectableTypeChoices),
|
|
62
|
+
required=True,
|
|
63
|
+
label=_("Type"),
|
|
64
|
+
)
|
|
60
65
|
|
|
61
66
|
disable_ptr = forms.BooleanField(
|
|
62
67
|
required=False,
|
|
@@ -123,7 +128,7 @@ class RecordFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
|
|
|
123
128
|
)
|
|
124
129
|
|
|
125
130
|
type = forms.MultipleChoiceField(
|
|
126
|
-
choices=
|
|
131
|
+
choices=RecordSelectableTypeChoices,
|
|
127
132
|
required=False,
|
|
128
133
|
label=_("Type"),
|
|
129
134
|
)
|
|
@@ -210,7 +215,7 @@ class RecordImportForm(NetBoxModelImportForm):
|
|
|
210
215
|
help_text=_("This field is required if the zone is not in the default view"),
|
|
211
216
|
)
|
|
212
217
|
type = CSVChoiceField(
|
|
213
|
-
choices=
|
|
218
|
+
choices=RecordSelectableTypeChoices,
|
|
214
219
|
required=True,
|
|
215
220
|
label=_("Type"),
|
|
216
221
|
)
|
|
@@ -268,7 +273,7 @@ class RecordBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
268
273
|
label=_("Zone"),
|
|
269
274
|
)
|
|
270
275
|
type = forms.ChoiceField(
|
|
271
|
-
choices=add_blank_choice(
|
|
276
|
+
choices=add_blank_choice(RecordSelectableTypeChoices),
|
|
272
277
|
required=False,
|
|
273
278
|
label=_("Type"),
|
|
274
279
|
)
|
|
@@ -21,7 +21,7 @@ from tenancy.models import Tenant, TenantGroup
|
|
|
21
21
|
from tenancy.forms import TenancyForm, TenancyFilterForm
|
|
22
22
|
|
|
23
23
|
from netbox_dns.models import RecordTemplate, ZoneTemplate
|
|
24
|
-
from netbox_dns.choices import
|
|
24
|
+
from netbox_dns.choices import RecordSelectableTypeChoices, RecordStatusChoices
|
|
25
25
|
from netbox_dns.utilities import name_to_unicode
|
|
26
26
|
|
|
27
27
|
|
|
@@ -41,6 +41,11 @@ class RecordTemplateForm(TenancyForm, NetBoxModelForm):
|
|
|
41
41
|
if initial_record_name:
|
|
42
42
|
self.initial["record_name"] = name_to_unicode(initial_record_name)
|
|
43
43
|
|
|
44
|
+
type = forms.ChoiceField(
|
|
45
|
+
choices=add_blank_choice(RecordSelectableTypeChoices),
|
|
46
|
+
required=True,
|
|
47
|
+
label=_("Type"),
|
|
48
|
+
)
|
|
44
49
|
disable_ptr = forms.BooleanField(
|
|
45
50
|
required=False,
|
|
46
51
|
label=_("Disable PTR"),
|
|
@@ -103,7 +108,7 @@ class RecordTemplateFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
|
|
|
103
108
|
)
|
|
104
109
|
|
|
105
110
|
type = forms.MultipleChoiceField(
|
|
106
|
-
choices=
|
|
111
|
+
choices=RecordSelectableTypeChoices,
|
|
107
112
|
required=False,
|
|
108
113
|
label=_("Type"),
|
|
109
114
|
)
|
|
@@ -142,7 +147,7 @@ class RecordTemplateFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
|
|
|
142
147
|
|
|
143
148
|
class RecordTemplateImportForm(NetBoxModelImportForm):
|
|
144
149
|
type = CSVChoiceField(
|
|
145
|
-
choices=
|
|
150
|
+
choices=RecordSelectableTypeChoices,
|
|
146
151
|
required=True,
|
|
147
152
|
label=_("Type"),
|
|
148
153
|
)
|
|
@@ -187,7 +192,7 @@ class RecordTemplateBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
187
192
|
model = RecordTemplate
|
|
188
193
|
|
|
189
194
|
type = forms.ChoiceField(
|
|
190
|
-
choices=add_blank_choice(
|
|
195
|
+
choices=add_blank_choice(RecordSelectableTypeChoices),
|
|
191
196
|
required=False,
|
|
192
197
|
label=_("Type"),
|
|
193
198
|
)
|
netbox_dns/graphql/types.py
CHANGED
netbox_dns/models/nameserver.py
CHANGED
netbox_dns/models/record.py
CHANGED
|
@@ -3,6 +3,7 @@ import netaddr
|
|
|
3
3
|
|
|
4
4
|
import dns
|
|
5
5
|
from dns import name as dns_name
|
|
6
|
+
from dns import rdata
|
|
6
7
|
|
|
7
8
|
from django.core.exceptions import ValidationError
|
|
8
9
|
from django.db import transaction, models
|
|
@@ -22,7 +23,11 @@ from netbox_dns.fields import AddressField
|
|
|
22
23
|
from netbox_dns.utilities import arpa_to_prefix, name_to_unicode, get_query_from_filter
|
|
23
24
|
from netbox_dns.validators import validate_generic_name, validate_record_value
|
|
24
25
|
from netbox_dns.mixins import ObjectModificationMixin
|
|
25
|
-
from netbox_dns.choices import
|
|
26
|
+
from netbox_dns.choices import (
|
|
27
|
+
RecordTypeChoices,
|
|
28
|
+
RecordStatusChoices,
|
|
29
|
+
RecordClassChoices,
|
|
30
|
+
)
|
|
26
31
|
|
|
27
32
|
|
|
28
33
|
__all__ = (
|
|
@@ -222,6 +227,7 @@ class Record(ObjectModificationMixin, ContactsMixin, NetBoxModel):
|
|
|
222
227
|
"ttl",
|
|
223
228
|
"disable_ptr",
|
|
224
229
|
"description",
|
|
230
|
+
"tenant",
|
|
225
231
|
)
|
|
226
232
|
|
|
227
233
|
class Meta:
|
|
@@ -634,6 +640,43 @@ class Record(ObjectModificationMixin, ContactsMixin, NetBoxModel):
|
|
|
634
640
|
}
|
|
635
641
|
)
|
|
636
642
|
|
|
643
|
+
@property
|
|
644
|
+
def absolute_value(self):
|
|
645
|
+
zone = dns_name.from_text(self.zone.name)
|
|
646
|
+
rr = rdata.from_text(RecordClassChoices.IN, self.type, self.value)
|
|
647
|
+
|
|
648
|
+
match self.type:
|
|
649
|
+
case (
|
|
650
|
+
RecordTypeChoices.CNAME
|
|
651
|
+
| RecordTypeChoices.DNAME
|
|
652
|
+
| RecordTypeChoices.NS
|
|
653
|
+
| RecordTypeChoices.HTTPS
|
|
654
|
+
| RecordTypeChoices.SRV
|
|
655
|
+
| RecordTypeChoices.SVCB
|
|
656
|
+
):
|
|
657
|
+
return rr.replace(target=rr.target.derelativize(zone)).to_text()
|
|
658
|
+
|
|
659
|
+
case RecordTypeChoices.MX | RecordTypeChoices.RT | RecordTypeChoices.KX:
|
|
660
|
+
return rr.replace(exchange=rr.exchange.derelativize(zone)).to_text()
|
|
661
|
+
|
|
662
|
+
case RecordTypeChoices.RP:
|
|
663
|
+
return rr.replace(
|
|
664
|
+
mbox=rr.mbox.derelativize(zone), txt=rr.txt.derelativize(zone)
|
|
665
|
+
).to_text()
|
|
666
|
+
|
|
667
|
+
case RecordTypeChoices.NAPTR:
|
|
668
|
+
return rr.replace(
|
|
669
|
+
replacement=rr.replacement.derelativize(zone)
|
|
670
|
+
).to_text()
|
|
671
|
+
|
|
672
|
+
case RecordTypeChoices.PX:
|
|
673
|
+
return rr.replace(
|
|
674
|
+
map822=rr.map822.derelativize(zone),
|
|
675
|
+
mapx400=rr.mapx400.derelativize(zone),
|
|
676
|
+
).to_text()
|
|
677
|
+
|
|
678
|
+
return self.value
|
|
679
|
+
|
|
637
680
|
def handle_conflicting_address_records(self):
|
|
638
681
|
if self.ipam_ip_address is None or not self.is_active:
|
|
639
682
|
return
|
netbox_dns/models/view.py
CHANGED
netbox_dns/models/zone.py
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
{% extends 'netbox_dns/zone/base.html' %}
|
|
2
2
|
{% load helpers %}
|
|
3
3
|
{% load i18n %}
|
|
4
|
+
{% load netbox_dns %}
|
|
5
|
+
{% load tz %}
|
|
4
6
|
|
|
5
7
|
{% block content %}
|
|
6
8
|
<div class="row">
|
|
@@ -118,7 +120,14 @@
|
|
|
118
120
|
{% if object.soa_serial_auto %}
|
|
119
121
|
<tr>
|
|
120
122
|
<th scope="row">{% trans "Serial (auto-generated)" %}</th>
|
|
121
|
-
<td>
|
|
123
|
+
<td>
|
|
124
|
+
<table style="width: 100%;">
|
|
125
|
+
<tr>
|
|
126
|
+
<td>{{ object.soa_serial }}</td>
|
|
127
|
+
<td align="right" class="text-muted">{{ object.soa_serial|epoch_to_utc|isodatetime }}</td>
|
|
128
|
+
</tr>
|
|
129
|
+
</table>
|
|
130
|
+
</td>
|
|
122
131
|
</tr>
|
|
123
132
|
{% else %}
|
|
124
133
|
<tr>
|
|
File without changes
|
|
@@ -28,7 +28,7 @@ def _get_label(tolerate_leading_underscores=False, always_tolerant=False):
|
|
|
28
28
|
|
|
29
29
|
tolerate_underscores = get_plugin_config(
|
|
30
30
|
"netbox_dns", "tolerate_underscores_in_labels"
|
|
31
|
-
)
|
|
31
|
+
)
|
|
32
32
|
|
|
33
33
|
if tolerate_leading_underscores:
|
|
34
34
|
if tolerate_underscores:
|
|
@@ -7,6 +7,8 @@ from dns.exception import SyntaxError
|
|
|
7
7
|
from django.core.exceptions import ValidationError
|
|
8
8
|
from django.utils.translation import gettext as _
|
|
9
9
|
|
|
10
|
+
from netbox.plugins.utils import get_plugin_config
|
|
11
|
+
|
|
10
12
|
from netbox_dns.choices import RecordClassChoices, RecordTypeChoices
|
|
11
13
|
from netbox_dns.validators import (
|
|
12
14
|
validate_fqdn,
|
|
@@ -76,14 +78,19 @@ def validate_record_value(record):
|
|
|
76
78
|
).format(value=record.value, type=record.type, error=exc)
|
|
77
79
|
)
|
|
78
80
|
|
|
81
|
+
skip_name_validation = record.type in get_plugin_config(
|
|
82
|
+
"netbox_dns", "tolerate_non_rfc1035_types", default=[]
|
|
83
|
+
)
|
|
84
|
+
|
|
79
85
|
match record.type:
|
|
80
86
|
case RecordTypeChoices.CNAME:
|
|
81
87
|
_validate_idn(rr.target)
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
88
|
+
if not skip_name_validation:
|
|
89
|
+
validate_domain_name(
|
|
90
|
+
rr.target.to_text(),
|
|
91
|
+
always_tolerant=True,
|
|
92
|
+
allow_empty_label=True,
|
|
93
|
+
)
|
|
87
94
|
|
|
88
95
|
case (
|
|
89
96
|
RecordTypeChoices.NS
|
|
@@ -92,38 +99,46 @@ def validate_record_value(record):
|
|
|
92
99
|
| RecordTypeChoices.SVCB
|
|
93
100
|
):
|
|
94
101
|
_validate_idn(rr.target)
|
|
95
|
-
|
|
102
|
+
if not skip_name_validation:
|
|
103
|
+
validate_domain_name(rr.target.to_text(), always_tolerant=True)
|
|
96
104
|
|
|
97
105
|
case RecordTypeChoices.DNAME:
|
|
98
106
|
_validate_idn(rr.target)
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
107
|
+
if not skip_name_validation:
|
|
108
|
+
validate_domain_name(
|
|
109
|
+
rr.target.to_text(), always_tolerant=True, zone_name=True
|
|
110
|
+
)
|
|
102
111
|
|
|
103
112
|
case RecordTypeChoices.PTR | RecordTypeChoices.NSAP_PTR:
|
|
104
113
|
_validate_idn(rr.target)
|
|
105
|
-
|
|
114
|
+
if not skip_name_validation:
|
|
115
|
+
validate_fqdn(rr.target.to_text(), always_tolerant=True)
|
|
106
116
|
|
|
107
117
|
case RecordTypeChoices.MX | RecordTypeChoices.RT | RecordTypeChoices.KX:
|
|
108
118
|
_validate_idn(rr.exchange)
|
|
109
|
-
|
|
119
|
+
if not skip_name_validation:
|
|
120
|
+
validate_domain_name(rr.exchange.to_text(), always_tolerant=True)
|
|
110
121
|
|
|
111
122
|
case RecordTypeChoices.NSEC:
|
|
112
123
|
_validate_idn(rr.next)
|
|
113
|
-
|
|
124
|
+
if not skip_name_validation:
|
|
125
|
+
validate_domain_name(rr.next.to_text(), always_tolerant=True)
|
|
114
126
|
|
|
115
127
|
case RecordTypeChoices.RP:
|
|
116
128
|
_validate_idn(rr.mbox)
|
|
117
|
-
validate_domain_name(rr.mbox.to_text(), always_tolerant=True)
|
|
118
129
|
_validate_idn(rr.txt)
|
|
119
|
-
|
|
130
|
+
if not skip_name_validation:
|
|
131
|
+
validate_domain_name(rr.mbox.to_text(), always_tolerant=True)
|
|
132
|
+
validate_domain_name(rr.txt.to_text(), always_tolerant=True)
|
|
120
133
|
|
|
121
134
|
case RecordTypeChoices.NAPTR:
|
|
122
135
|
_validate_idn(rr.replacement)
|
|
123
|
-
|
|
136
|
+
if not skip_name_validation:
|
|
137
|
+
validate_generic_name(rr.replacement.to_text(), always_tolerant=True)
|
|
124
138
|
|
|
125
139
|
case RecordTypeChoices.PX:
|
|
126
140
|
_validate_idn(rr.map822)
|
|
127
|
-
validate_domain_name(rr.map822.to_text(), always_tolerant=True)
|
|
128
141
|
_validate_idn(rr.mapx400)
|
|
129
|
-
|
|
142
|
+
if not skip_name_validation:
|
|
143
|
+
validate_domain_name(rr.map822.to_text(), always_tolerant=True)
|
|
144
|
+
validate_domain_name(rr.mapx400.to_text(), always_tolerant=True)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: netbox-plugin-dns
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.2.2
|
|
4
4
|
Summary: NetBox DNS is a NetBox plugin for managing DNS data.
|
|
5
5
|
Author-email: Peter Eckel <pete@netbox-dns.org>
|
|
6
6
|
Project-URL: Homepage, https://github.com/peteeckel/netbox-plugin-dns
|
|
@@ -8,7 +8,7 @@ Project-URL: Documentation, https://github.com/peteeckel/netbox-plugin-dns/blob/
|
|
|
8
8
|
Project-URL: Repository, https://github.com/peteeckel/netbox-plugin-dns
|
|
9
9
|
Project-URL: Issues, https://github.com/peteeckel/netbox-plugin-dns/issues
|
|
10
10
|
Keywords: netbox,netbox-plugin,dns
|
|
11
|
-
Classifier: Development Status ::
|
|
11
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
12
12
|
Requires-Python: >=3.10
|
|
13
13
|
Description-Content-Type: text/markdown
|
|
14
14
|
License-File: LICENSE
|
|
@@ -66,9 +66,19 @@ For integration with a large number of DNS server implementations integration to
|
|
|
66
66
|
|
|
67
67
|
## Requirements
|
|
68
68
|
|
|
69
|
-
* NetBox 4.
|
|
69
|
+
* NetBox 4.2.0 or higher
|
|
70
70
|
* Python 3.10 or higher
|
|
71
71
|
|
|
72
|
+
## Compatibility with earlier NetBox Versions
|
|
73
|
+
|
|
74
|
+
NetBox Version | NetBox DNS Version | Comment
|
|
75
|
+
-------------- | ------------------ | -------
|
|
76
|
+
3.5 | 0.22 |
|
|
77
|
+
3.6 | 0.22 |
|
|
78
|
+
3.7 | 0.22 |
|
|
79
|
+
4.0 - 4.1 | 1.0 | Supports legacy IPAM Coupling
|
|
80
|
+
4.0 - 4.1 | 1.1 | Supports IPAM DNSsync
|
|
81
|
+
|
|
72
82
|
## Installation & Configuration
|
|
73
83
|
|
|
74
84
|
### Installation
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
netbox_dns/__init__.py,sha256=
|
|
1
|
+
netbox_dns/__init__.py,sha256=WLiNzOodcLZS1ifW8vje3J16M5o4dDYyPmtG8GcMbpY,3053
|
|
2
2
|
netbox_dns/apps.py,sha256=JCW5eS-AQBUubDJve1DjP-IRFKTFGQh1NLGWzJpC5MI,151
|
|
3
3
|
netbox_dns/navigation.py,sha256=36clAzlWftW94_VZ3EHu8_btzzA_dah50CLTfoov-O4,6226
|
|
4
4
|
netbox_dns/template_content.py,sha256=T06L7-m4eGrLMeGsCvPpQLAGfn3S2FL7z0Cd1hhbisY,4225
|
|
@@ -10,7 +10,7 @@ netbox_dns/api/views.py,sha256=QtA5OQtIDGZoZSSaFTua1TtqARQPSVxLYy8b28CAf0s,3979
|
|
|
10
10
|
netbox_dns/api/serializers_/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
11
|
netbox_dns/api/serializers_/nameserver.py,sha256=DMkUaLNDt3UtpAD6JDHfo1NMngHWRqHh2-xQeOPlfFM,1171
|
|
12
12
|
netbox_dns/api/serializers_/prefix.py,sha256=kZ1DjDly6VFZamXSxGa57YC6MfZZcI5S7jmGBkVB2_I,551
|
|
13
|
-
netbox_dns/api/serializers_/record.py,sha256=
|
|
13
|
+
netbox_dns/api/serializers_/record.py,sha256=gpfANXhAcPylFWmWpCfwSEHrYy3b9Wl07PIyM4sPKM0,2408
|
|
14
14
|
netbox_dns/api/serializers_/record_template.py,sha256=WAHua_O7v8IB7QL_hOPWjItMtAjWIUZace2rebwjSJA,1519
|
|
15
15
|
netbox_dns/api/serializers_/registrar.py,sha256=xLIaeBJ5ckV1Jf-uyCTFcvsLlsRMlpDtIg6q79vXZic,842
|
|
16
16
|
netbox_dns/api/serializers_/registration_contact.py,sha256=3IGWW5xB9XEBGApCGZCZIxpCmy1Y5jQUbA4GzmtaCik,1024
|
|
@@ -18,7 +18,7 @@ netbox_dns/api/serializers_/view.py,sha256=nnWeQugoqMdn-NGGC7ykbVPwmBrcBma_ZKwdD
|
|
|
18
18
|
netbox_dns/api/serializers_/zone.py,sha256=ELAis8nj9PZlge6zqTQ23P0vC4IJBDa3hh5kZ9T8G_4,5003
|
|
19
19
|
netbox_dns/api/serializers_/zone_template.py,sha256=w0TsrqS_DgIIAUozCC-gc9lsQ67lpVkvbyphyuRzq6Q,3847
|
|
20
20
|
netbox_dns/choices/__init__.py,sha256=jOVs2VGV5SVADRlqVnrFeAy26i8BIeEAbGpiX7K8bL8,42
|
|
21
|
-
netbox_dns/choices/record.py,sha256=
|
|
21
|
+
netbox_dns/choices/record.py,sha256=ZSpyiZE2YCsF2wF53A5DFWgwCIhkFhgOKt__RJ0KxSk,2084
|
|
22
22
|
netbox_dns/choices/zone.py,sha256=Vblm5RUtNtPNkULh8U1NxBMme1iHPllD6B6LkQkWZW4,621
|
|
23
23
|
netbox_dns/fields/__init__.py,sha256=U1nbFIwwtvr10pp3Sk91jEZeWkVQBSJtr0BVWYgOfiA,89
|
|
24
24
|
netbox_dns/fields/address.py,sha256=qNLHmpwwJ3TevljG1QsUr_f2h6NrPsK6wr-R-Ti8eZI,1262
|
|
@@ -32,12 +32,12 @@ netbox_dns/filtersets/record_template.py,sha256=wir5s2QWfDnw0M1wWnzJs9im5ok4l5cT
|
|
|
32
32
|
netbox_dns/filtersets/registrar.py,sha256=Wh_l-IXRHnJhW7Pyokp3czQZISDKzXnWeSQKp512Drc,977
|
|
33
33
|
netbox_dns/filtersets/registration_contact.py,sha256=903sOcHPRCI0dVzqn1i0pn5VPr_4YpHPh5QE2-akR-Y,1139
|
|
34
34
|
netbox_dns/filtersets/view.py,sha256=IlQz3k2J_N6eSbT9op0KOu3sKLrn-HTsJCcrIqoYgyY,1047
|
|
35
|
-
netbox_dns/filtersets/zone.py,sha256=
|
|
35
|
+
netbox_dns/filtersets/zone.py,sha256=zl39SOiYIZxAi3G1wx0s9UEIgh8hG9Bdb46qIXLwMr8,6334
|
|
36
36
|
netbox_dns/filtersets/zone_template.py,sha256=Sm40P33IhN0sOqtjz4JzoBbEK-dTLpfQqYGcM_Xb7KM,3870
|
|
37
37
|
netbox_dns/forms/__init__.py,sha256=axENVF9vX9BtDKCNxrapRjye1NnygUg9BS0BBj6a0io,209
|
|
38
38
|
netbox_dns/forms/nameserver.py,sha256=GJe3ece4yIGwMtLZ6wQihBrJu1dk_ZSiwX-vSU0fRa0,3397
|
|
39
|
-
netbox_dns/forms/record.py,sha256=
|
|
40
|
-
netbox_dns/forms/record_template.py,sha256=
|
|
39
|
+
netbox_dns/forms/record.py,sha256=QNGLqWprhsGFTSlH2YAe-SHmCx1K1QbT_osAhCegyJg,8252
|
|
40
|
+
netbox_dns/forms/record_template.py,sha256=uN6ZSepNilQuqyfPpW-pMfmTRWo0IrDxp1LdOrlAo5A,6240
|
|
41
41
|
netbox_dns/forms/registrar.py,sha256=GaRH3w5zlhrpwy_U0pxlrl1DrAEaMB78MUlnGxBRwZI,3949
|
|
42
42
|
netbox_dns/forms/registration_contact.py,sha256=IhNAqElY7hOdpDG0jwWMdy3y2mB43xmjUhj3lsgJ3SE,5906
|
|
43
43
|
netbox_dns/forms/view.py,sha256=GacwKHXSDvxQEs-d3ys7rietqA_MzpSd0XjWaSsIbU0,10339
|
|
@@ -46,7 +46,7 @@ netbox_dns/forms/zone_template.py,sha256=49vhM-Lc4JAGZD-al4QpPDLfwmpu82JNuX-bxpw
|
|
|
46
46
|
netbox_dns/graphql/__init__.py,sha256=jghYD6uOSAis6YyLbtI3YJGZfwPw1uL2FBRsHs1EhNk,514
|
|
47
47
|
netbox_dns/graphql/filters.py,sha256=fHCjFIwbPBJJMk2W7HI8LhrfFhCtQtCM9IE8ZMgVafc,1766
|
|
48
48
|
netbox_dns/graphql/schema.py,sha256=q9DQ_hfRB0e6Znq4-IS6UEeTOfMkZmrWkwxcAql1uOA,2270
|
|
49
|
-
netbox_dns/graphql/types.py,sha256=
|
|
49
|
+
netbox_dns/graphql/types.py,sha256=8DjYxWOfjmS5HFW-eaQLl9E12pbg2xlWNwV5CH6ptdY,8092
|
|
50
50
|
netbox_dns/locale/de/LC_MESSAGES/django.mo,sha256=0ij8AzrkWdwtUejXTOTdJJcIRweZfQT3iWjAXrf6hyM,20335
|
|
51
51
|
netbox_dns/locale/en/LC_MESSAGES/django.mo,sha256=GDnSZkfHs3yjtTsll7dksEEej4B50F8pc9RGytZNubM,393
|
|
52
52
|
netbox_dns/management/commands/cleanup_database.py,sha256=1-tAl0Sht80qaNZyfFyUW19Eh9gBUuc7GdbHN4aemGU,5935
|
|
@@ -81,13 +81,13 @@ netbox_dns/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
|
|
|
81
81
|
netbox_dns/mixins/__init__.py,sha256=LxTEfpod_RHCyMtnzDljv0_dwqp2z3Q6tqbXW8LTGD8,35
|
|
82
82
|
netbox_dns/mixins/object_modification.py,sha256=AR64fU5f7g-scNAj9b54eSoS9dpjyOpqrxXVXPcOhY8,1807
|
|
83
83
|
netbox_dns/models/__init__.py,sha256=5Ns9RaemTe5L0L3c6a38RxembWhV-sX9cqfjl05aPQw,313
|
|
84
|
-
netbox_dns/models/nameserver.py,sha256=
|
|
85
|
-
netbox_dns/models/record.py,sha256=
|
|
84
|
+
netbox_dns/models/nameserver.py,sha256=GKCWPKqg8WLVQS6UYRUyTdVb_865p2io06yYp5Z9b80,3407
|
|
85
|
+
netbox_dns/models/record.py,sha256=7LCLc3mLbgHx5yCMzIItQTB5Jzg8P-1uWGhfYeGpN4U,29415
|
|
86
86
|
netbox_dns/models/record_template.py,sha256=PC4369q_LIJkImp1_jhiTTwy083MXIGpGADnbDHMbqI,5104
|
|
87
87
|
netbox_dns/models/registrar.py,sha256=bjgYgeUtWGg_seDRN1-VV4Pe450ZK85lbALo4J_Zuic,1890
|
|
88
88
|
netbox_dns/models/registration_contact.py,sha256=AkpNy9KbFV9YrISdepqZA1ZfckZSA9u_vfPUAf5Z4H8,3773
|
|
89
|
-
netbox_dns/models/view.py,sha256=
|
|
90
|
-
netbox_dns/models/zone.py,sha256=
|
|
89
|
+
netbox_dns/models/view.py,sha256=1OGbol3Ekg1G7c6kPRLwTaLW_ugzNozewnaN2SpyOqc,4756
|
|
90
|
+
netbox_dns/models/zone.py,sha256=gq2gnF_ykzZ9kLtiHSm1Lwku-uWU_iFv-0HPlH54JzI,32267
|
|
91
91
|
netbox_dns/models/zone_template.py,sha256=kH16CdFk7OpjSiKfJb3bsBi--Shp2V1Fd7jVRJtbl_4,3945
|
|
92
92
|
netbox_dns/signals/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
93
93
|
netbox_dns/signals/ipam_dnssync.py,sha256=1zhlf4cMcJLlFosX7YzyqVYdFFHV4MFwTz5KCdL8xQc,7730
|
|
@@ -107,7 +107,7 @@ netbox_dns/templates/netbox_dns/recordtemplate.html,sha256=jQB42mBNlSt-Tq_uQFIyy
|
|
|
107
107
|
netbox_dns/templates/netbox_dns/registrar.html,sha256=4kJuj3biiDxQrIMQEQUEmF4iGRE4psr6Fh0CBP1evz8,2308
|
|
108
108
|
netbox_dns/templates/netbox_dns/registrationcontact.html,sha256=sljVp_MrPSJRc2vJCPFXq9MiWOw4wjbr1kI_YStBntw,3094
|
|
109
109
|
netbox_dns/templates/netbox_dns/view.html,sha256=TslfDC0ZzGU59iO_OcaX8jvt6fTjWot-wYRqRGRYvLE,3245
|
|
110
|
-
netbox_dns/templates/netbox_dns/zone.html,sha256=
|
|
110
|
+
netbox_dns/templates/netbox_dns/zone.html,sha256=BushtUbicj9zK6s50LKiaJhs25J0JY3-QHYCnUu8fKY,6991
|
|
111
111
|
netbox_dns/templates/netbox_dns/zonetemplate.html,sha256=z_VJEkf_yNjL9xoVMHG4VHQvuXwBSarA_SoPbjutBgA,3667
|
|
112
112
|
netbox_dns/templates/netbox_dns/record/managed.html,sha256=uwpxQTxyfAXkWqThLT-T2ZssKNUhXTDDMnLWJSVuDNU,119
|
|
113
113
|
netbox_dns/templates/netbox_dns/record/related.html,sha256=R59aPhE4CyIZtTH0ncwDyS6_wAe_Y-oZjuN_j4qk8iA,1158
|
|
@@ -122,13 +122,15 @@ netbox_dns/templates/netbox_dns/zone/managed_record.html,sha256=LOchMAJyfMZIICE6
|
|
|
122
122
|
netbox_dns/templates/netbox_dns/zone/record.html,sha256=Y_gg9EUIqjSYxmIZKufAK8jyg9A54J-BoewNxUBoO1Y,2238
|
|
123
123
|
netbox_dns/templates/netbox_dns/zone/registration.html,sha256=PqniHrO-LnXstIKyjn3fJk69ysjfrrt3U4kZAJqidXI,1265
|
|
124
124
|
netbox_dns/templates/netbox_dns/zone/rfc2317_child_zone.html,sha256=rWlmb3zRQbLYQ_1dsa0twwu6y1dRj2tfFVEERH07p-s,517
|
|
125
|
+
netbox_dns/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
126
|
+
netbox_dns/templatetags/netbox_dns.py,sha256=DND1DMPzv636Rak3M6Hor_Vw6pjqUfSTquofIw4dIsA,223
|
|
125
127
|
netbox_dns/utilities/__init__.py,sha256=cSGf-nGaRWx9b-Xrh3dLMJYoWNsZ6FF-qdmV4F1uOgg,74
|
|
126
128
|
netbox_dns/utilities/conversions.py,sha256=NS37SoMqXc13wNWRkKnLfyQbVi6QKD33fu5ovTKRo74,1979
|
|
127
129
|
netbox_dns/utilities/dns.py,sha256=QKST49UkCw7n2GyrN3wU5ap6Cw98t1SZxFYJlyG2x70,315
|
|
128
130
|
netbox_dns/utilities/ipam_dnssync.py,sha256=tFphPVluDUS3-4NsUW1_D1dDksA3AgIozf7JAoTIE_w,9533
|
|
129
131
|
netbox_dns/validators/__init__.py,sha256=Mr8TvmcJTa8Pubj8TzbFBKfbHhEmGcr5JdQvczEJ39A,72
|
|
130
|
-
netbox_dns/validators/dns_name.py,sha256=
|
|
131
|
-
netbox_dns/validators/dns_value.py,sha256
|
|
132
|
+
netbox_dns/validators/dns_name.py,sha256=XC8yv_PeInKtya8FyPnzmazSe7BJcPw_2iK3A5A3ws0,3556
|
|
133
|
+
netbox_dns/validators/dns_value.py,sha256=-mc62mth-hlbPUPe_RlCR7vo1KSD6_gQDXiE8rjB-Cc,5206
|
|
132
134
|
netbox_dns/validators/rfc2317.py,sha256=uKkwxpakiFFKdYA0qy8WSlEnbFwJD4MDw6gGV4F6skg,706
|
|
133
135
|
netbox_dns/views/__init__.py,sha256=axENVF9vX9BtDKCNxrapRjye1NnygUg9BS0BBj6a0io,209
|
|
134
136
|
netbox_dns/views/nameserver.py,sha256=2PaOHtcjaZm0FQMYTmiys-uqQsCBP_RKamW2Jj3rJOY,3896
|
|
@@ -139,8 +141,8 @@ netbox_dns/views/registration_contact.py,sha256=u__0w4Nm1_5lnAeFXfTY-cD86facWxIo
|
|
|
139
141
|
netbox_dns/views/view.py,sha256=a6-wdMyTWoZekiR2VnM3VNSOjX-8L3Qjqqi973UobAA,3391
|
|
140
142
|
netbox_dns/views/zone.py,sha256=H7UPN4T_sn_3ijvXi7t8iteJFs6qqEtVzhvchKOOzCM,7133
|
|
141
143
|
netbox_dns/views/zone_template.py,sha256=vNXG96D6uZJo4KRdsgsTL3d9JzRtiDJg4_h4_3gjAfk,2667
|
|
142
|
-
netbox_plugin_dns-1.
|
|
143
|
-
netbox_plugin_dns-1.
|
|
144
|
-
netbox_plugin_dns-1.
|
|
145
|
-
netbox_plugin_dns-1.
|
|
146
|
-
netbox_plugin_dns-1.
|
|
144
|
+
netbox_plugin_dns-1.2.2.dist-info/LICENSE,sha256=I3tDu11bZfhFm3EkV4zOD5TmWgLjnUNLEFwrdjniZYs,1112
|
|
145
|
+
netbox_plugin_dns-1.2.2.dist-info/METADATA,sha256=Ef4CV4H2DEOAvT4lQAGFJ21ik_nfeRwEJmFFKXwwmMs,7605
|
|
146
|
+
netbox_plugin_dns-1.2.2.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
|
147
|
+
netbox_plugin_dns-1.2.2.dist-info/top_level.txt,sha256=sA1Rwl1mRKvMC6XHe2ylZ1GF-Q1NGd08XedK9Y4xZc4,11
|
|
148
|
+
netbox_plugin_dns-1.2.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|