netbox-plugin-dns 1.0.3__py3-none-any.whl → 1.0.5__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 +1 -1
- netbox_dns/api/nested_serializers.py +46 -1
- netbox_dns/api/serializers.py +2 -0
- netbox_dns/api/serializers_/contact.py +3 -0
- netbox_dns/api/serializers_/nameserver.py +4 -1
- netbox_dns/api/serializers_/record.py +5 -4
- netbox_dns/api/serializers_/record_template.py +57 -0
- netbox_dns/api/serializers_/registrar.py +3 -0
- netbox_dns/api/serializers_/view.py +3 -0
- netbox_dns/api/serializers_/zone.py +30 -6
- netbox_dns/api/serializers_/zone_template.py +129 -0
- netbox_dns/api/urls.py +4 -0
- netbox_dns/api/views.py +41 -1
- netbox_dns/choices/__init__.py +2 -0
- netbox_dns/choices/record.py +49 -0
- netbox_dns/choices/zone.py +20 -0
- netbox_dns/fields/address.py +6 -0
- netbox_dns/fields/network.py +3 -0
- netbox_dns/fields/rfc2317.py +3 -0
- netbox_dns/filtersets/__init__.py +3 -0
- netbox_dns/filtersets/contact.py +3 -0
- netbox_dns/filtersets/nameserver.py +3 -0
- netbox_dns/filtersets/record.py +5 -1
- netbox_dns/filtersets/record_template.py +54 -0
- netbox_dns/filtersets/registrar.py +3 -0
- netbox_dns/filtersets/view.py +3 -0
- netbox_dns/filtersets/zone.py +5 -8
- netbox_dns/filtersets/zone_template.py +116 -0
- netbox_dns/forms/__init__.py +2 -0
- netbox_dns/forms/contact.py +8 -0
- netbox_dns/forms/nameserver.py +8 -0
- netbox_dns/forms/record.py +25 -11
- netbox_dns/forms/record_template.py +220 -0
- netbox_dns/forms/registrar.py +8 -0
- netbox_dns/forms/view.py +10 -0
- netbox_dns/forms/zone.py +109 -36
- netbox_dns/forms/zone_template.py +298 -0
- netbox_dns/graphql/__init__.py +4 -0
- netbox_dns/graphql/filters.py +24 -1
- netbox_dns/graphql/schema.py +34 -1
- netbox_dns/graphql/types.py +73 -5
- netbox_dns/management/commands/cleanup_database.py +2 -6
- netbox_dns/management/commands/cleanup_rrset_ttl.py +2 -4
- netbox_dns/migrations/0001_squashed_netbox_dns_0_22.py +1 -2
- netbox_dns/migrations/0006_templating.py +172 -0
- netbox_dns/migrations/0021_record_ip_address.py +1 -1
- netbox_dns/mixins/object_modification.py +3 -0
- netbox_dns/models/__init__.py +7 -0
- netbox_dns/models/contact.py +6 -0
- netbox_dns/models/nameserver.py +8 -1
- netbox_dns/models/record.py +10 -122
- netbox_dns/models/record_template.py +180 -0
- netbox_dns/models/registrar.py +6 -0
- netbox_dns/models/view.py +7 -1
- netbox_dns/models/zone.py +57 -66
- netbox_dns/models/zone_template.py +149 -0
- netbox_dns/navigation.py +47 -0
- netbox_dns/tables/__init__.py +2 -0
- netbox_dns/tables/contact.py +3 -0
- netbox_dns/tables/nameserver.py +3 -2
- netbox_dns/tables/record.py +7 -3
- netbox_dns/tables/record_template.py +91 -0
- netbox_dns/tables/registrar.py +3 -0
- netbox_dns/tables/view.py +3 -0
- netbox_dns/tables/zone.py +3 -2
- netbox_dns/tables/zone_template.py +70 -0
- netbox_dns/template_content.py +2 -8
- netbox_dns/templates/netbox_dns/recordtemplate.html +84 -0
- netbox_dns/templates/netbox_dns/zonetemplate.html +86 -0
- netbox_dns/urls/__init__.py +4 -0
- netbox_dns/urls/record_template.py +65 -0
- netbox_dns/urls/zone_template.py +57 -0
- netbox_dns/utilities/ipam_coupling.py +2 -1
- netbox_dns/validators/__init__.py +1 -0
- netbox_dns/validators/dns_name.py +14 -9
- netbox_dns/validators/dns_value.py +83 -0
- netbox_dns/validators/rfc2317.py +7 -0
- netbox_dns/views/__init__.py +2 -0
- netbox_dns/views/contact.py +11 -0
- netbox_dns/views/nameserver.py +12 -0
- netbox_dns/views/record.py +14 -1
- netbox_dns/views/record_template.py +83 -0
- netbox_dns/views/registrar.py +12 -0
- netbox_dns/views/view.py +12 -0
- netbox_dns/views/zone.py +16 -0
- netbox_dns/views/zone_template.py +73 -0
- {netbox_plugin_dns-1.0.3.dist-info → netbox_plugin_dns-1.0.5.dist-info}/METADATA +2 -1
- netbox_plugin_dns-1.0.5.dist-info/RECORD +136 -0
- netbox_plugin_dns-1.0.3.dist-info/RECORD +0 -115
- {netbox_plugin_dns-1.0.3.dist-info → netbox_plugin_dns-1.0.5.dist-info}/LICENSE +0 -0
- {netbox_plugin_dns-1.0.3.dist-info → netbox_plugin_dns-1.0.5.dist-info}/WHEEL +0 -0
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
from ipam.choices import IPAddressStatusChoices
|
|
2
2
|
from utilities.permissions import resolve_permission
|
|
3
3
|
|
|
4
|
-
from netbox_dns.models import Record
|
|
4
|
+
from netbox_dns.models import Record
|
|
5
|
+
from netbox_dns.choices import RecordTypeChoices, RecordStatusChoices
|
|
5
6
|
|
|
6
7
|
from netbox.plugins.utils import get_plugin_config
|
|
7
8
|
|
|
@@ -4,7 +4,12 @@ from django.core.exceptions import ValidationError
|
|
|
4
4
|
|
|
5
5
|
from netbox.plugins.utils import get_plugin_config
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
|
|
8
|
+
__ALL__ = (
|
|
9
|
+
"validate_fqdn",
|
|
10
|
+
"validate_generic_name",
|
|
11
|
+
"validate_domain_name",
|
|
12
|
+
)
|
|
8
13
|
|
|
9
14
|
|
|
10
15
|
def _get_label(tolerate_leading_underscores=False, always_tolerant=False):
|
|
@@ -14,7 +19,7 @@ def _get_label(tolerate_leading_underscores=False, always_tolerant=False):
|
|
|
14
19
|
label_characters = rf"a-z0-9{tolerate_characters}"
|
|
15
20
|
|
|
16
21
|
if always_tolerant:
|
|
17
|
-
label =
|
|
22
|
+
label = r"[a-z0-9_][a-z0-9_-]*(?<![-_])"
|
|
18
23
|
zone_label = rf"[{label_characters}_][{label_characters}_-]*(?<![-_])"
|
|
19
24
|
|
|
20
25
|
return label, zone_label
|
|
@@ -28,19 +33,19 @@ def _get_label(tolerate_leading_underscores=False, always_tolerant=False):
|
|
|
28
33
|
label = r"[a-z0-9_][a-z0-9_-]*(?<![-_])"
|
|
29
34
|
zone_label = rf"[{label_characters}_][{label_characters}_-]*(?<![-_])"
|
|
30
35
|
else:
|
|
31
|
-
label =
|
|
36
|
+
label = r"[a-z0-9_][a-z0-9-]*(?<!-)"
|
|
32
37
|
zone_label = rf"[{label_characters}_][{label_characters}-]*(?<!-)"
|
|
33
38
|
elif tolerate_underscores:
|
|
34
|
-
label =
|
|
39
|
+
label = r"[a-z0-9][a-z0-9_-]*(?<![-_])"
|
|
35
40
|
zone_label = rf"[{label_characters}][{label_characters}_-]*(?<![-_])"
|
|
36
41
|
else:
|
|
37
|
-
label =
|
|
42
|
+
label = r"[a-z0-9][a-z0-9-]*(?<!-)"
|
|
38
43
|
zone_label = rf"[{label_characters}][{label_characters}-]*(?<!-)"
|
|
39
44
|
|
|
40
45
|
return label, zone_label
|
|
41
46
|
|
|
42
47
|
|
|
43
|
-
def
|
|
48
|
+
def _has_invalid_double_dash(name):
|
|
44
49
|
return bool(re.findall(r"\b(?!xn)..--", name, re.IGNORECASE))
|
|
45
50
|
|
|
46
51
|
|
|
@@ -48,7 +53,7 @@ def validate_fqdn(name, always_tolerant=False):
|
|
|
48
53
|
label, zone_label = _get_label(always_tolerant=always_tolerant)
|
|
49
54
|
regex = rf"^(\*|{label})(\.{zone_label})+\.?$"
|
|
50
55
|
|
|
51
|
-
if not re.match(regex, name, flags=re.IGNORECASE) or
|
|
56
|
+
if not re.match(regex, name, flags=re.IGNORECASE) or _has_invalid_double_dash(name):
|
|
52
57
|
raise ValidationError(f"{name} is not a valid fully qualified DNS host name")
|
|
53
58
|
|
|
54
59
|
|
|
@@ -61,7 +66,7 @@ def validate_generic_name(
|
|
|
61
66
|
)
|
|
62
67
|
regex = rf"^([*@]|(\*\.)?{label}(\.{zone_label})*\.?)$"
|
|
63
68
|
|
|
64
|
-
if not re.match(regex, name, flags=re.IGNORECASE) or
|
|
69
|
+
if not re.match(regex, name, flags=re.IGNORECASE) or _has_invalid_double_dash(name):
|
|
65
70
|
raise ValidationError(f"{name} is not a valid DNS host name")
|
|
66
71
|
|
|
67
72
|
|
|
@@ -82,5 +87,5 @@ def validate_domain_name(
|
|
|
82
87
|
else:
|
|
83
88
|
regex = rf"^{label}(\.{zone_label})*\.?$"
|
|
84
89
|
|
|
85
|
-
if not re.match(regex, name, flags=re.IGNORECASE) or
|
|
90
|
+
if not re.match(regex, name, flags=re.IGNORECASE) or _has_invalid_double_dash(name):
|
|
86
91
|
raise ValidationError(f"{name} is not a valid DNS domain name")
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import dns
|
|
2
|
+
from dns import rdata, name as dns_name
|
|
3
|
+
|
|
4
|
+
from django.core.exceptions import ValidationError
|
|
5
|
+
|
|
6
|
+
from netbox_dns.choices import RecordClassChoices, RecordTypeChoices
|
|
7
|
+
from netbox_dns.validators import (
|
|
8
|
+
validate_fqdn,
|
|
9
|
+
validate_domain_name,
|
|
10
|
+
validate_generic_name,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
__ALL__ = ("validate_record_value",)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def validate_record_value(record_type, value):
|
|
18
|
+
def _validate_idn(name):
|
|
19
|
+
try:
|
|
20
|
+
name.to_unicode()
|
|
21
|
+
except dns_name.IDNAException as exc:
|
|
22
|
+
raise ValidationError(
|
|
23
|
+
f"{name.to_text()} is not a valid IDN: {exc}."
|
|
24
|
+
) from None
|
|
25
|
+
|
|
26
|
+
try:
|
|
27
|
+
rr = rdata.from_text(RecordClassChoices.IN, record_type, value)
|
|
28
|
+
except dns.exception.SyntaxError as exc:
|
|
29
|
+
raise ValidationError(
|
|
30
|
+
f"Record value {value} is not a valid value for a {record_type} record: {exc}."
|
|
31
|
+
) from None
|
|
32
|
+
|
|
33
|
+
match record_type:
|
|
34
|
+
case RecordTypeChoices.CNAME:
|
|
35
|
+
_validate_idn(rr.target)
|
|
36
|
+
validate_domain_name(
|
|
37
|
+
rr.target.to_text(),
|
|
38
|
+
always_tolerant=True,
|
|
39
|
+
allow_empty_label=True,
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
case (
|
|
43
|
+
RecordTypeChoices.NS
|
|
44
|
+
| RecordTypeChoices.HTTPS
|
|
45
|
+
| RecordTypeChoices.SRV
|
|
46
|
+
| RecordTypeChoices.SVCB
|
|
47
|
+
):
|
|
48
|
+
_validate_idn(rr.target)
|
|
49
|
+
validate_domain_name(rr.target.to_text(), always_tolerant=True)
|
|
50
|
+
|
|
51
|
+
case RecordTypeChoices.DNAME:
|
|
52
|
+
_validate_idn(rr.target)
|
|
53
|
+
validate_domain_name(
|
|
54
|
+
rr.target.to_text(), always_tolerant=True, zone_name=True
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
case RecordTypeChoices.PTR | RecordTypeChoices.NSAP_PTR:
|
|
58
|
+
_validate_idn(rr.target)
|
|
59
|
+
validate_fqdn(rr.target.to_text(), always_tolerant=True)
|
|
60
|
+
|
|
61
|
+
case RecordTypeChoices.MX | RecordTypeChoices.RT | RecordTypeChoices.KX:
|
|
62
|
+
_validate_idn(rr.exchange)
|
|
63
|
+
validate_domain_name(rr.exchange.to_text(), always_tolerant=True)
|
|
64
|
+
|
|
65
|
+
case RecordTypeChoices.NSEC:
|
|
66
|
+
_validate_idn(rr.next)
|
|
67
|
+
validate_domain_name(rr.next.to_text(), always_tolerant=True)
|
|
68
|
+
|
|
69
|
+
case RecordTypeChoices.RP:
|
|
70
|
+
_validate_idn(rr.mbox)
|
|
71
|
+
validate_domain_name(rr.mbox.to_text(), always_tolerant=True)
|
|
72
|
+
_validate_idn(rr.txt)
|
|
73
|
+
validate_domain_name(rr.txt.to_text(), always_tolerant=True)
|
|
74
|
+
|
|
75
|
+
case RecordTypeChoices.NAPTR:
|
|
76
|
+
_validate_idn(rr.replacement)
|
|
77
|
+
validate_generic_name(rr.replacement.to_text(), always_tolerant=True)
|
|
78
|
+
|
|
79
|
+
case RecordTypeChoices.PX:
|
|
80
|
+
_validate_idn(rr.map822)
|
|
81
|
+
validate_domain_name(rr.map822.to_text(), always_tolerant=True)
|
|
82
|
+
_validate_idn(rr.mapx400)
|
|
83
|
+
validate_domain_name(rr.mapx400.to_text(), always_tolerant=True)
|
netbox_dns/validators/rfc2317.py
CHANGED
netbox_dns/views/__init__.py
CHANGED
netbox_dns/views/contact.py
CHANGED
|
@@ -15,6 +15,17 @@ from netbox_dns.forms import (
|
|
|
15
15
|
from netbox_dns.tables import ContactTable, ZoneTable
|
|
16
16
|
|
|
17
17
|
|
|
18
|
+
__ALL__ = (
|
|
19
|
+
"ContactView",
|
|
20
|
+
"ContactListView",
|
|
21
|
+
"ContactDeleteView",
|
|
22
|
+
"ContactBulkImportView",
|
|
23
|
+
"ContactBulkEditView",
|
|
24
|
+
"ContactBulkDeleteView",
|
|
25
|
+
"ContactZoneListView",
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
|
|
18
29
|
class ContactView(generic.ObjectView):
|
|
19
30
|
queryset = Contact.objects.all()
|
|
20
31
|
|
netbox_dns/views/nameserver.py
CHANGED
|
@@ -14,6 +14,18 @@ from netbox_dns.models import Zone, NameServer
|
|
|
14
14
|
from netbox_dns.tables import NameServerTable, ZoneTable
|
|
15
15
|
|
|
16
16
|
|
|
17
|
+
__ALL__ = (
|
|
18
|
+
"NameServerListView",
|
|
19
|
+
"NameServerView",
|
|
20
|
+
"NameServerEditView",
|
|
21
|
+
"NameServerDeleteView",
|
|
22
|
+
"NameServerBulkEditView",
|
|
23
|
+
"NameServerBulkDeleteView",
|
|
24
|
+
"NameServerZoneListView",
|
|
25
|
+
"NameServerSOAZoneListView",
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
|
|
17
29
|
class NameServerListView(generic.ObjectListView):
|
|
18
30
|
queryset = NameServer.objects.all()
|
|
19
31
|
filterset = NameServerFilterSet
|
netbox_dns/views/record.py
CHANGED
|
@@ -9,11 +9,24 @@ from netbox_dns.forms import (
|
|
|
9
9
|
RecordForm,
|
|
10
10
|
RecordBulkEditForm,
|
|
11
11
|
)
|
|
12
|
-
from netbox_dns.models import Record,
|
|
12
|
+
from netbox_dns.models import Record, Zone
|
|
13
|
+
from netbox_dns.choices import RecordTypeChoices
|
|
13
14
|
from netbox_dns.tables import RecordTable, ManagedRecordTable, RelatedRecordTable
|
|
14
15
|
from netbox_dns.utilities import value_to_unicode
|
|
15
16
|
|
|
16
17
|
|
|
18
|
+
__ALL__ = (
|
|
19
|
+
"RecordListView",
|
|
20
|
+
"ManagedRecordListView",
|
|
21
|
+
"RecordView",
|
|
22
|
+
"RecordEditView",
|
|
23
|
+
"RecordDeleteView",
|
|
24
|
+
"RecordBulkImportView",
|
|
25
|
+
"RecordBulkEditView",
|
|
26
|
+
"RecordBulkDeleteView",
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
|
|
17
30
|
class RecordListView(generic.ObjectListView):
|
|
18
31
|
queryset = Record.objects.filter(managed=False).prefetch_related(
|
|
19
32
|
"zone", "ptr_record"
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
from dns import name as dns_name
|
|
2
|
+
|
|
3
|
+
from netbox.views import generic
|
|
4
|
+
|
|
5
|
+
from netbox_dns.filtersets import RecordTemplateFilterSet
|
|
6
|
+
from netbox_dns.forms import (
|
|
7
|
+
RecordTemplateImportForm,
|
|
8
|
+
RecordTemplateFilterForm,
|
|
9
|
+
RecordTemplateForm,
|
|
10
|
+
RecordTemplateBulkEditForm,
|
|
11
|
+
)
|
|
12
|
+
from netbox_dns.models import RecordTemplate
|
|
13
|
+
from netbox_dns.tables import RecordTemplateTable, ZoneTemplateDisplayTable
|
|
14
|
+
from netbox_dns.utilities import value_to_unicode
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
__ALL__ = (
|
|
18
|
+
"RecordTemplateListView",
|
|
19
|
+
"RecordTemplateView",
|
|
20
|
+
"RecordTemplateEditView",
|
|
21
|
+
"RecordTemplateDeleteView",
|
|
22
|
+
"RecordTemplateBulkImportView",
|
|
23
|
+
"RecordTemplateBulkEditView",
|
|
24
|
+
"RecordTemplateBulkDeleteView",
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class RecordTemplateListView(generic.ObjectListView):
|
|
29
|
+
queryset = RecordTemplate.objects.all()
|
|
30
|
+
filterset = RecordTemplateFilterSet
|
|
31
|
+
filterset_form = RecordTemplateFilterForm
|
|
32
|
+
table = RecordTemplateTable
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class RecordTemplateView(generic.ObjectView):
|
|
36
|
+
queryset = RecordTemplate.objects.all()
|
|
37
|
+
|
|
38
|
+
def get_extra_context(self, request, instance):
|
|
39
|
+
context = {}
|
|
40
|
+
|
|
41
|
+
name = dns_name.from_text(instance.record_name, origin=None)
|
|
42
|
+
if name.to_text() != name.to_unicode():
|
|
43
|
+
context["unicode_name"] = name.to_unicode()
|
|
44
|
+
|
|
45
|
+
unicode_value = value_to_unicode(instance.value)
|
|
46
|
+
if instance.value != unicode_value:
|
|
47
|
+
context["unicode_value"] = unicode_value
|
|
48
|
+
|
|
49
|
+
context["zone_template_table"] = ZoneTemplateDisplayTable(
|
|
50
|
+
data=instance.zone_templates.all()
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
return context
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class RecordTemplateEditView(generic.ObjectEditView):
|
|
57
|
+
queryset = RecordTemplate.objects.all()
|
|
58
|
+
form = RecordTemplateForm
|
|
59
|
+
default_return_url = "plugins:netbox_dns:recordtemplate_list"
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class RecordTemplateDeleteView(generic.ObjectDeleteView):
|
|
63
|
+
queryset = RecordTemplate.objects.all()
|
|
64
|
+
default_return_url = "plugins:netbox_dns:recordtemplate_list"
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
class RecordTemplateBulkImportView(generic.BulkImportView):
|
|
68
|
+
queryset = RecordTemplate.objects.all()
|
|
69
|
+
model_form = RecordTemplateImportForm
|
|
70
|
+
table = RecordTemplateTable
|
|
71
|
+
default_return_url = "plugins:netbox_dns:recordtemplate_list"
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
class RecordTemplateBulkEditView(generic.BulkEditView):
|
|
75
|
+
queryset = RecordTemplate.objects.all()
|
|
76
|
+
filterset = RecordTemplateFilterSet
|
|
77
|
+
table = RecordTemplateTable
|
|
78
|
+
form = RecordTemplateBulkEditForm
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
class RecordTemplateBulkDeleteView(generic.BulkDeleteView):
|
|
82
|
+
queryset = RecordTemplate.objects.all()
|
|
83
|
+
table = RecordTemplateTable
|
netbox_dns/views/registrar.py
CHANGED
|
@@ -13,6 +13,18 @@ from netbox_dns.forms import (
|
|
|
13
13
|
from netbox_dns.tables import RegistrarTable, ZoneTable
|
|
14
14
|
|
|
15
15
|
|
|
16
|
+
__ALL__ = (
|
|
17
|
+
"RegistrarView",
|
|
18
|
+
"RegistrarListView",
|
|
19
|
+
"RegistrarEditView",
|
|
20
|
+
"RegistrarDeleteView",
|
|
21
|
+
"RegistrarBulkImportView",
|
|
22
|
+
"RegistrarBulkEditView",
|
|
23
|
+
"RegistrarBulkDeleteView",
|
|
24
|
+
"RegistrarZoneListView",
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
|
|
16
28
|
class RegistrarView(generic.ObjectView):
|
|
17
29
|
queryset = Registrar.objects.all()
|
|
18
30
|
|
netbox_dns/views/view.py
CHANGED
|
@@ -8,6 +8,18 @@ from netbox_dns.forms import ViewForm, ViewFilterForm, ViewImportForm, ViewBulkE
|
|
|
8
8
|
from netbox_dns.tables import ViewTable, ZoneTable
|
|
9
9
|
|
|
10
10
|
|
|
11
|
+
__ALL__ = (
|
|
12
|
+
"ViewView",
|
|
13
|
+
"ViewListView",
|
|
14
|
+
"ViewEditView",
|
|
15
|
+
"ViewDeleteView",
|
|
16
|
+
"ViewBulkImportView",
|
|
17
|
+
"ViewBulkEditView",
|
|
18
|
+
"ViewBulkDeleteView",
|
|
19
|
+
"ViewZoneListView",
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
|
|
11
23
|
class ViewView(generic.ObjectView):
|
|
12
24
|
queryset = View.objects.all().prefetch_related("zone_set")
|
|
13
25
|
|
netbox_dns/views/zone.py
CHANGED
|
@@ -18,6 +18,22 @@ from netbox_dns.tables import (
|
|
|
18
18
|
)
|
|
19
19
|
|
|
20
20
|
|
|
21
|
+
__ALL__ = (
|
|
22
|
+
"ZoneListView",
|
|
23
|
+
"ZoneView",
|
|
24
|
+
"ZoneEditView",
|
|
25
|
+
"ZoneDeleteView",
|
|
26
|
+
"ZoneBulkImportView",
|
|
27
|
+
"ZoneBulkEditView",
|
|
28
|
+
"ZoneBulkDeleteView",
|
|
29
|
+
"ZoneRegistrationView",
|
|
30
|
+
"ZoneRecordListView",
|
|
31
|
+
"ZoneManagedRecordListView",
|
|
32
|
+
"ZoneRFC2317ChildZoneListView",
|
|
33
|
+
"ZoneChildZoneListView",
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
|
|
21
37
|
class ZoneListView(generic.ObjectListView):
|
|
22
38
|
queryset = Zone.objects.all().prefetch_related("view", "tags")
|
|
23
39
|
filterset = ZoneFilterSet
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
from netbox.views import generic
|
|
2
|
+
|
|
3
|
+
from netbox_dns.filtersets import ZoneTemplateFilterSet
|
|
4
|
+
from netbox_dns.forms import (
|
|
5
|
+
ZoneTemplateImportForm,
|
|
6
|
+
ZoneTemplateForm,
|
|
7
|
+
ZoneTemplateFilterForm,
|
|
8
|
+
ZoneTemplateBulkEditForm,
|
|
9
|
+
)
|
|
10
|
+
from netbox_dns.models import ZoneTemplate
|
|
11
|
+
from netbox_dns.tables import ZoneTemplateTable, RecordTemplateDisplayTable
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
__ALL__ = (
|
|
15
|
+
"ZoneTemplateListView",
|
|
16
|
+
"ZoneTemplateView",
|
|
17
|
+
"ZoneTemplateEditView",
|
|
18
|
+
"ZoneTemplateDeleteView",
|
|
19
|
+
"ZoneTemplateBulkImportView",
|
|
20
|
+
"ZoneTemplateBulkEditView",
|
|
21
|
+
"ZoneTemplateBulkDeleteView",
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class ZoneTemplateListView(generic.ObjectListView):
|
|
26
|
+
queryset = ZoneTemplate.objects.all()
|
|
27
|
+
filterset = ZoneTemplateFilterSet
|
|
28
|
+
filterset_form = ZoneTemplateFilterForm
|
|
29
|
+
table = ZoneTemplateTable
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class ZoneTemplateView(generic.ObjectView):
|
|
33
|
+
queryset = ZoneTemplate.objects.all()
|
|
34
|
+
|
|
35
|
+
def get_extra_context(self, request, instance):
|
|
36
|
+
record_template_table = RecordTemplateDisplayTable(
|
|
37
|
+
data=instance.record_templates.all()
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
return {
|
|
41
|
+
"record_template_table": record_template_table,
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class ZoneTemplateEditView(generic.ObjectEditView):
|
|
46
|
+
queryset = ZoneTemplate.objects.all()
|
|
47
|
+
form = ZoneTemplateForm
|
|
48
|
+
default_return_url = "plugins:netbox_dns:zonetemplate_list"
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
class ZoneTemplateDeleteView(generic.ObjectDeleteView):
|
|
52
|
+
queryset = ZoneTemplate.objects.all()
|
|
53
|
+
default_return_url = "plugins:netbox_dns:zonetemplate_list"
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class ZoneTemplateBulkImportView(generic.BulkImportView):
|
|
57
|
+
queryset = ZoneTemplate.objects.all()
|
|
58
|
+
model_form = ZoneTemplateImportForm
|
|
59
|
+
table = ZoneTemplateTable
|
|
60
|
+
default_return_url = "plugins:netbox_dns:zonetemplate_list"
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class ZoneTemplateBulkEditView(generic.BulkEditView):
|
|
64
|
+
queryset = ZoneTemplate.objects.all()
|
|
65
|
+
filterset = ZoneTemplateFilterSet
|
|
66
|
+
table = ZoneTemplateTable
|
|
67
|
+
form = ZoneTemplateBulkEditForm
|
|
68
|
+
default_return_url = "plugins:netbox_dns:zonetemplate_list"
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
class ZoneTemplateBulkDeleteView(generic.BulkDeleteView):
|
|
72
|
+
queryset = ZoneTemplate.objects.all()
|
|
73
|
+
table = ZoneTemplateTable
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: netbox-plugin-dns
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.5
|
|
4
4
|
Summary: NetBox DNS is a NetBox plugin for managing DNS data.
|
|
5
5
|
Home-page: https://github.com/peteeckel/netbox-plugin-dns
|
|
6
6
|
License: MIT
|
|
@@ -47,6 +47,7 @@ The main focus of the plugin is to ensure the quality of the data stored in it.
|
|
|
47
47
|
* Validation of changes to the SOA SERIAL number, whether they are done automatically or manually
|
|
48
48
|
* Validation of record types such as CNAME and singletons, to ensure DNS zone validity
|
|
49
49
|
* Support for [RFC 2317](https://datatracker.ietf.org/doc/html/rfc2317) delegation of PTR zones for IPv4 subnets longer than 24 bits
|
|
50
|
+
* Templating for zones and records enables faster creations of zones with given boilerplate object relations, such as name servers, tags, tenants or registration information, or records like standard SPF or MX records that are the same for a subset of zones
|
|
50
51
|
|
|
51
52
|
Other main features include:
|
|
52
53
|
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
netbox_dns/__init__.py,sha256=F2anVwJ7-NZxBwvYJUkbsxwJlRGsXG4bkKWwFMbyl9k,1244
|
|
2
|
+
netbox_dns/api/nested_serializers.py,sha256=4QJRwFrWMAiDk5GY_AcOsmt63JaGvUO-uI19vKFCahU,3172
|
|
3
|
+
netbox_dns/api/serializers.py,sha256=WNs7_Inr4veHXUHXmORBjHilrVIzSUi5zPiOCtzQZSU,335
|
|
4
|
+
netbox_dns/api/serializers_/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
+
netbox_dns/api/serializers_/contact.py,sha256=SNIyYLlWz7sEL-MvsfUhe4Z7O83Wcax8P34mTgqvsTY,964
|
|
6
|
+
netbox_dns/api/serializers_/nameserver.py,sha256=Imh8i20yUrdh7coAwNsg8kw__BSOyYeKyaQ-f6r4fo0,1118
|
|
7
|
+
netbox_dns/api/serializers_/record.py,sha256=2MYgJu3N9uUA9VAq6JOsRVEYItU3U9QETJtWVCc3y7U,2293
|
|
8
|
+
netbox_dns/api/serializers_/record_template.py,sha256=uMX0NWlJFgXOGLkzha1bnBC0irZTC_C45JEGFrfJj4I,1465
|
|
9
|
+
netbox_dns/api/serializers_/registrar.py,sha256=M9BkaPuO4BZ9tO_SvVdo-lT0ROLUgQTnyjg2NEgvubk,842
|
|
10
|
+
netbox_dns/api/serializers_/view.py,sha256=aK3_ipmVtBuK29g4L0JiVo0V4bOIeU8WqRF_bO8mBdU,950
|
|
11
|
+
netbox_dns/api/serializers_/zone.py,sha256=hudUiUK3GcubajS2ADd_2ysNWKKflcc9lZl58L16ZHU,4867
|
|
12
|
+
netbox_dns/api/serializers_/zone_template.py,sha256=4m3Lc7iV9Fu1WQsaXw4ZGdgYuZ7_mNPh27-X2gbx9jI,3708
|
|
13
|
+
netbox_dns/api/urls.py,sha256=hrqu6VnN6313DjYIOuZih-afSnedIPsSaqjcva45DiI,739
|
|
14
|
+
netbox_dns/api/views.py,sha256=esRLAeMJ-y0oNRNC8NJ2SgGzj3qdoAAY6zYm_Z0t5TM,4632
|
|
15
|
+
netbox_dns/apps.py,sha256=JCW5eS-AQBUubDJve1DjP-IRFKTFGQh1NLGWzJpC5MI,151
|
|
16
|
+
netbox_dns/choices/__init__.py,sha256=jOVs2VGV5SVADRlqVnrFeAy26i8BIeEAbGpiX7K8bL8,42
|
|
17
|
+
netbox_dns/choices/record.py,sha256=gQ0w5wRnuJoRyAthuUvVepA6kKA_GgPUDuKUtJjV8sc,1113
|
|
18
|
+
netbox_dns/choices/zone.py,sha256=izH0hykwsLSb0dvzihj5WyKawgVAQMUL2s_7OO58QjA,472
|
|
19
|
+
netbox_dns/fields/__init__.py,sha256=egA6gLQ4SPYacECcYU4Vl_P7TbzLOMRfaX6rw3k26YA,69
|
|
20
|
+
netbox_dns/fields/address.py,sha256=qlXGD2RdHJMTTB-3JvkvuiKjg9KxbFX7wTtcsj-A7UI,1554
|
|
21
|
+
netbox_dns/fields/network.py,sha256=etraM2hw57hdKwJu6kyP1VZC-f5ZbZylSb1Lqiu8gR0,3667
|
|
22
|
+
netbox_dns/fields/rfc2317.py,sha256=CEtiJ6QdJqyfJVUC6nC6r8ARdpSPfpM2Oa2mKE8qQQY,2512
|
|
23
|
+
netbox_dns/filtersets/__init__.py,sha256=zvHYWy23FFmK4vxLpoMo-OD5OQBtcTUV_HG-5LCtvQE,197
|
|
24
|
+
netbox_dns/filtersets/contact.py,sha256=uMoSxSgvr0Mp2Spns9mIJ8dhDwzp9H98sZleshVjokM,1091
|
|
25
|
+
netbox_dns/filtersets/nameserver.py,sha256=Lrz2FpR4mp1j8Xh9gRgwyJDZokYsaBnKbzB4ZkGyG9I,1147
|
|
26
|
+
netbox_dns/filtersets/record.py,sha256=BBCzcTndo1dQIoRnjEnKCDEXBH1h_81T10EKmnu2ZfE,3750
|
|
27
|
+
netbox_dns/filtersets/record_template.py,sha256=8Yxz6kpA4DesjkeK8WULd5xfAUDTTF_Z50j0L33duDM,1548
|
|
28
|
+
netbox_dns/filtersets/registrar.py,sha256=0k501P_KEoDZcOSdVCg7jRDFTsGFU8nbFjZix13eAG4,977
|
|
29
|
+
netbox_dns/filtersets/view.py,sha256=q3I4iTNWGno_4FhKFnO0rHBdVlYXNr2HerACE62-5rg,552
|
|
30
|
+
netbox_dns/filtersets/zone.py,sha256=LavrDd7D6n02xxMA2h6Mpt3L-qRPYcGjvq4hQJi_XGw,6594
|
|
31
|
+
netbox_dns/filtersets/zone_template.py,sha256=wDRl_6vFLew2OfPqwIp6ctjxq2qQ1zknM1Wt4Y8bFgM,3670
|
|
32
|
+
netbox_dns/forms/__init__.py,sha256=s41w4o77tIwmhnLjsOsg08R9m3wrlomkkfCLTVQuPzc,196
|
|
33
|
+
netbox_dns/forms/contact.py,sha256=q7nlVpTw-OPcndBg89d26Vb4rRIj39EyTJ3TN0zPrvg,5332
|
|
34
|
+
netbox_dns/forms/nameserver.py,sha256=tayuLW1O0jGN1yS8cHk2ODoVJRF43M55IMkLRGZyl3s,2485
|
|
35
|
+
netbox_dns/forms/record.py,sha256=2DDOEANYIpSrqlzlYejxN9sAbs3giPmFoiDZ1FmJIpM,7159
|
|
36
|
+
netbox_dns/forms/record_template.py,sha256=_EVyfm7j_PTqtqcegvg7VdwUK5O7Ho5rFU9ZIzxRYBc,5573
|
|
37
|
+
netbox_dns/forms/registrar.py,sha256=HCM9_z7QYNGMtYwNP4z2MhJBMYYJgY5y1ClaGJuJSng,3758
|
|
38
|
+
netbox_dns/forms/view.py,sha256=r_HQk6AtP-NHq0t5pQ76nRNq2-j9BXO_TnbTuFr9mfQ,2273
|
|
39
|
+
netbox_dns/forms/zone.py,sha256=cu9O4B7C5gROAaiaHkHIBseBYS97znJC_H5ebVxQ89E,23165
|
|
40
|
+
netbox_dns/forms/zone_template.py,sha256=mRz9LmQw_FZJO5tNWhOg3Sa7tAE_ahEwfcOK7Oe5t9s,8161
|
|
41
|
+
netbox_dns/graphql/__init__.py,sha256=ZZSsx-VM108tB_FrcVy3uGGhtmePpkXnY5U1ytnoTvE,490
|
|
42
|
+
netbox_dns/graphql/filters.py,sha256=6Ot_d1e7h5lVXVVBB3hyWUql94K3zsK9Tjb3RVJqluw,1706
|
|
43
|
+
netbox_dns/graphql/schema.py,sha256=P-oQ8ei3sC6XLhgCa_riRbRTrMkPCVTJXkGv0U2rPYw,2682
|
|
44
|
+
netbox_dns/graphql/types.py,sha256=q0gtXhhM_MzBb1zBzXA5gopnuL4szuzXRTTAvOhPz-Y,6025
|
|
45
|
+
netbox_dns/management/commands/cleanup_database.py,sha256=kfnyybudwKGigjJmrOwafPWSUasZr9jQsxN4eWAgMvY,5969
|
|
46
|
+
netbox_dns/management/commands/cleanup_rrset_ttl.py,sha256=UFRURLBcFeGHUS2lrYFv7UWIebjI72aG1EUQJt0XsXw,2046
|
|
47
|
+
netbox_dns/management/commands/setup_coupling.py,sha256=1cUxDvHoX1UebgyCsbrLqIccuXhE8tkvyhW8dofIyr4,4556
|
|
48
|
+
netbox_dns/management/commands/update_soa.py,sha256=Rj_Xk-qpwkAVRubVnM5OqSTwgzi93E0PqjwGb3rYjf0,660
|
|
49
|
+
netbox_dns/migrations/0001_squashed_netbox_dns_0_15.py,sha256=3U0810NWSHPu2dTSHpfzlleDgwMS04FhJ_CkO76SDaw,10283
|
|
50
|
+
netbox_dns/migrations/0001_squashed_netbox_dns_0_22.py,sha256=ML6Hp17lrXiaG0eUlBjKMm6HUNhw0AHPnKrb9AN-F6E,20279
|
|
51
|
+
netbox_dns/migrations/0002_contact_description_registrar_description.py,sha256=ZrI-L3jJ5GzdVx21pomgM4waE-njixHQjl_grjsGr0I,583
|
|
52
|
+
netbox_dns/migrations/0003_default_view.py,sha256=NByVlAyiiK6WCfJ014BiFPkoNcHeqr1IpkgNdHiwbWw,367
|
|
53
|
+
netbox_dns/migrations/0004_create_and_assign_default_view.py,sha256=npBFxWuJCZeMhbZLEH9C_sZcQZRaa3IOlyn4p_GULyk,627
|
|
54
|
+
netbox_dns/migrations/0005_alter_zone_view_not_null.py,sha256=vUfCFD-qeh5M1WCqtE1eYHXZwQVCcf841Z2-0CdcMRI,463
|
|
55
|
+
netbox_dns/migrations/0006_templating.py,sha256=7MOZ2bLwkjK1BQCBPBaFWJ-mS_JNrok1XUSh4rriq9Y,6271
|
|
56
|
+
netbox_dns/migrations/0020_netbox_3_4.py,sha256=UMcHdn8ZAuQjUaM_3rEGpktYrM0TuvhccD7Jt7WQnPs,1271
|
|
57
|
+
netbox_dns/migrations/0021_record_ip_address.py,sha256=EqdhWXmq7aiK4X79xTRUZng3zFncCl-8JoO65HqlJKw,3244
|
|
58
|
+
netbox_dns/migrations/0022_search.py,sha256=KW1ffEZ4-0dppGQ_KD1EN7iw8eQJOnDco-xfJFRZqKQ,172
|
|
59
|
+
netbox_dns/migrations/0023_alter_record_value.py,sha256=4_4v8YZzU8_jadJqIUUjH6SIhNTeALWhclozTqYDmv0,378
|
|
60
|
+
netbox_dns/migrations/0024_tenancy.py,sha256=3kc5l5_AyfhOI6g6mbCfReUAbSgb2DAv0MDMZqJ-3YQ,1745
|
|
61
|
+
netbox_dns/migrations/0025_ipam_coupling_cf.py,sha256=7uHujclWrsYw5QMLWft0Po78Ow5Q8MjPuU7moKyQ2qs,620
|
|
62
|
+
netbox_dns/migrations/0026_domain_registration.py,sha256=qUJ1oUGHIGGNWD7QRLnxElbM5eNp7dYNNn_OYIw8Xvo,5796
|
|
63
|
+
netbox_dns/migrations/0027_alter_registrar_iana_id.py,sha256=QUtRIrqqfkraFmzzeJFZWAEv4PfrOouoHtrV6FRn8Kc,404
|
|
64
|
+
netbox_dns/migrations/0028_rfc2317_fields.py,sha256=D8r43xxBjYXiL6ycmX8RY5_WG7tRYEDjutOeYM1H56I,1364
|
|
65
|
+
netbox_dns/migrations/0029_record_fqdn.py,sha256=UAAU38ekKQyiYDOJlcrz6Qbk4bqZfSHZyAHUZFFQrOw,808
|
|
66
|
+
netbox_dns/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
67
|
+
netbox_dns/mixins/__init__.py,sha256=LxTEfpod_RHCyMtnzDljv0_dwqp2z3Q6tqbXW8LTGD8,35
|
|
68
|
+
netbox_dns/mixins/object_modification.py,sha256=f2C_48jxKPBDJtA0KvjsLx-bEd4YUVN93FF0oUFBTa8,767
|
|
69
|
+
netbox_dns/models/__init__.py,sha256=0JSjJ_F0KR66DDV8emCPlHMQwgghi9tWo_0PuvyWpQQ,346
|
|
70
|
+
netbox_dns/models/contact.py,sha256=lCGeO73rZfis3EOzquxHT7tqm8CGA2oM6ZH_VAI_hgc,3009
|
|
71
|
+
netbox_dns/models/nameserver.py,sha256=B250Zqu0QOYVtHccgU9EKyxdFRAQPRWKvN0lIHCTQsw,3208
|
|
72
|
+
netbox_dns/models/record.py,sha256=NSXvyIB5qBORu7ndiWn6d_7cs55JotCXPVfy5tLMxlc,22632
|
|
73
|
+
netbox_dns/models/record_template.py,sha256=uuRBtlAiBnU4MQnunYnRxiX9APL8QzSiB4Cj51XlioM,4661
|
|
74
|
+
netbox_dns/models/registrar.py,sha256=Wsq6n6TWiV3pxHoSaBTQXXngR7SRSwTyWL_DP036oQU,1557
|
|
75
|
+
netbox_dns/models/view.py,sha256=MvKXB8rwEpUw7241yaU-DHp1672DUjnLm1TyO2ivsp4,2741
|
|
76
|
+
netbox_dns/models/zone.py,sha256=_p6c31ikRuJJQazIG1lnjZRUPcaZ75RuMYSrkp1R5Nw,28239
|
|
77
|
+
netbox_dns/models/zone_template.py,sha256=-Ws20P6aI8je9CW5vgkJyoZ6P3TiIoaDQpgfugucrJ0,3725
|
|
78
|
+
netbox_dns/navigation.py,sha256=EITDZkbpu4KCC9u4Noj7OORWnkL3EYT2RIRvYlTw34Q,5961
|
|
79
|
+
netbox_dns/signals/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
80
|
+
netbox_dns/signals/ipam_coupling.py,sha256=kJUKHUgq5XgWMhxB-312SPaZAYTLIYGgKO0lz2-z_rg,5594
|
|
81
|
+
netbox_dns/tables/__init__.py,sha256=s41w4o77tIwmhnLjsOsg08R9m3wrlomkkfCLTVQuPzc,196
|
|
82
|
+
netbox_dns/tables/contact.py,sha256=YXxJDCyspbI83EHVP6XT3HGLhumGNWKIBuKA59YVOWo,804
|
|
83
|
+
netbox_dns/tables/nameserver.py,sha256=I_i7e2j7AFO2Ipl6UBnyM-mleeb3jE-QgvDN5NB_8j8,764
|
|
84
|
+
netbox_dns/tables/record.py,sha256=IztASHhJ3cvr6OlihcN8X7nEjbfBtsQIa19GEtRm-9g,3189
|
|
85
|
+
netbox_dns/tables/record_template.py,sha256=n9Y9Wl9rfb2N2V_dmEjvbSDShMNaG2tjSXCAx-t1b_o,2159
|
|
86
|
+
netbox_dns/tables/registrar.py,sha256=bLDcMvYR_NdE71saB9f9fNNtSW9v3gbo_XfgGMGu8gs,680
|
|
87
|
+
netbox_dns/tables/view.py,sha256=XrU7Rx_kdA4peIydIG7lbXk7lEHrVXdVsjLZejp9KZE,726
|
|
88
|
+
netbox_dns/tables/zone.py,sha256=qqgqBfqD6CDIVCK_ZP3zsIn7cGhwBJ4jMlUQhEcOLi0,1877
|
|
89
|
+
netbox_dns/tables/zone_template.py,sha256=83ECM1n52kQcnav6_aT1Wco0puiJ5nEqo9rVwLTSg2U,1479
|
|
90
|
+
netbox_dns/template_content.py,sha256=jPOnKC8rbDEm169PoIys5NKCN36uUPH4_6NwR0oZ7N8,3654
|
|
91
|
+
netbox_dns/templates/netbox_dns/contact.html,sha256=fMHAQyLXIxohKoCTxFEnKetl9UVXeQgjasfpv_JONaw,2855
|
|
92
|
+
netbox_dns/templates/netbox_dns/nameserver.html,sha256=DpTdetQVV_jKThDbi62LvbhiCay-1QxR-yiJEiPFm4w,1554
|
|
93
|
+
netbox_dns/templates/netbox_dns/record/managed.html,sha256=G6LPG1koUGuzUiwYdv1okdVa4sKaofiQegDBnsFL0kA,89
|
|
94
|
+
netbox_dns/templates/netbox_dns/record/related.html,sha256=Aqor8uGcuHQTHjlX-Xmni2Yp4N7lOBrMOqQiszrQOC0,742
|
|
95
|
+
netbox_dns/templates/netbox_dns/record.html,sha256=WtEkWy_CstGWE9UDFsATxz0bNpP_Gx9joZusAYGHDFQ,5235
|
|
96
|
+
netbox_dns/templates/netbox_dns/recordtemplate.html,sha256=9tkXtKqa5p3LdOU9REm99WSFwGJaH8OczpIqXZuXMcg,3099
|
|
97
|
+
netbox_dns/templates/netbox_dns/registrar.html,sha256=O5veGmW59Pf5yN25ihPLvRIkA2P7xmSGv0G3NrRG8vI,2152
|
|
98
|
+
netbox_dns/templates/netbox_dns/related_dns_objects.html,sha256=KSzlnw1cStrJa3poKkwrt_ycIH0oH0STWIHRNy3ks4g,806
|
|
99
|
+
netbox_dns/templates/netbox_dns/view.html,sha256=XCa7Sg8fjSkhVqjLvw652FINQdWURLWdQqw8is82iaI,1499
|
|
100
|
+
netbox_dns/templates/netbox_dns/zone/base.html,sha256=n_E4aVYdGeZZl-ARE8sb4DgAAgPs92X1UEFepX3xIlM,495
|
|
101
|
+
netbox_dns/templates/netbox_dns/zone/child.html,sha256=kH56PJFBGCjiRdIh7zCtClnZdfOChqN_sYslsyoz5gU,2147
|
|
102
|
+
netbox_dns/templates/netbox_dns/zone/child_zone.html,sha256=b9CSGWEfWT7hLQ80gApMnu7mXM8w2LT-3UaOYe6HIRQ,510
|
|
103
|
+
netbox_dns/templates/netbox_dns/zone/managed_record.html,sha256=LOchMAJyfMZIICE6q0pX1eorRbtgUtOQ1u0VvJKCDZ8,514
|
|
104
|
+
netbox_dns/templates/netbox_dns/zone/record.html,sha256=tu5RFm2eYJ3fjeUxZYDJqJ9qK8tGslXl1iGs60DlRyM,2194
|
|
105
|
+
netbox_dns/templates/netbox_dns/zone/registration.html,sha256=de2Kph-G8Gv5LD_Wf294SLfO0UKPS9NmHeQYRfJf-Ck,1151
|
|
106
|
+
netbox_dns/templates/netbox_dns/zone/rfc2317_child_zone.html,sha256=rWlmb3zRQbLYQ_1dsa0twwu6y1dRj2tfFVEERH07p-s,517
|
|
107
|
+
netbox_dns/templates/netbox_dns/zone.html,sha256=zPi1sLFnya-ytx8-Pcf_ujc1sKllCRuz48x2E-S1HSo,6285
|
|
108
|
+
netbox_dns/templates/netbox_dns/zonetemplate.html,sha256=qjUWqrg4uDaIFt9-g0OBxTi86i_ctf2Ps4qHh11djQE,3081
|
|
109
|
+
netbox_dns/urls/__init__.py,sha256=FDauSMt7a01YJR8_RWkk0-kSmIL2lr1bHF0OU5ROuQ8,610
|
|
110
|
+
netbox_dns/urls/contact.py,sha256=OSQO-AkAhTaBruAdzVgcC7ip_OuiacvFI_ozgkWlNFU,1549
|
|
111
|
+
netbox_dns/urls/nameserver.py,sha256=BBbY-wqPqCquvLLv1_JhqToj7oDHhPNGCWHt0IfjBNM,1941
|
|
112
|
+
netbox_dns/urls/record.py,sha256=bDprohTso1N0GtPXH4X3TNHnkxopiOSQFXWItifEZ_k,1432
|
|
113
|
+
netbox_dns/urls/record_template.py,sha256=Z-7aA-rPIxRBCmXNUiQcHIgjYfai28Tf_sLtkl2ihDk,1827
|
|
114
|
+
netbox_dns/urls/registrar.py,sha256=u6B0zGGYNUJIKTo9uGiUeZLPD0QMGaQOAPShGEy4NaA,1728
|
|
115
|
+
netbox_dns/urls/view.py,sha256=8AeBnOHWusXXQs4JXpNfMSHqszXAY1GDXGWmNsMulQ8,1327
|
|
116
|
+
netbox_dns/urls/zone.py,sha256=rmB1BkzmWNG06ILUf-39Aj6-SBFkwQouyixMQiamqPc,2005
|
|
117
|
+
netbox_dns/urls/zone_template.py,sha256=w3Gu8qfLCWyHofeLkGZd1HpYSlcslomVlBQJZyqh8kk,1690
|
|
118
|
+
netbox_dns/utilities/__init__.py,sha256=-6-qmb1yTAt9QEtGtokNFBQV_TSheobkLjbWFKEYpfw,1849
|
|
119
|
+
netbox_dns/utilities/ipam_coupling.py,sha256=0XA5kmh2CzbhuhZmQuquNh4vPXBh20TVCA2RlM4pQdQ,3471
|
|
120
|
+
netbox_dns/validators/__init__.py,sha256=Mr8TvmcJTa8Pubj8TzbFBKfbHhEmGcr5JdQvczEJ39A,72
|
|
121
|
+
netbox_dns/validators/dns_name.py,sha256=EvMzp5pdEDE_ny8cm5TIeoNVVjebqgpQumFo2HgqJFc,3069
|
|
122
|
+
netbox_dns/validators/dns_value.py,sha256=J8CP4a3QyocbBHIjmxv0BE79Y5LwviiaBjl9bWuWNS8,2822
|
|
123
|
+
netbox_dns/validators/rfc2317.py,sha256=8EMpFoCM3dtEJYDG1rJAmfwy_LxQdAemLKbPcp9h6T4,585
|
|
124
|
+
netbox_dns/views/__init__.py,sha256=s41w4o77tIwmhnLjsOsg08R9m3wrlomkkfCLTVQuPzc,196
|
|
125
|
+
netbox_dns/views/contact.py,sha256=b2B-He1QOQEwhxoJJHgBlRrwZQANXwpq9-Do55hf8mo,2448
|
|
126
|
+
netbox_dns/views/nameserver.py,sha256=noGTA-Y7RJu5gM6LW1ZCZqPhSfIMzdFj2faDOSkPVeE,3254
|
|
127
|
+
netbox_dns/views/record.py,sha256=x0fR_zkWYWOqLRVqY8rMmQ66EXXLRXaAOghgzK_SIUU,4590
|
|
128
|
+
netbox_dns/views/record_template.py,sha256=MHztU7YbAZZQOe-1ec_WufdYhg2YUJnOHSQZ4-Lf5V8,2510
|
|
129
|
+
netbox_dns/views/registrar.py,sha256=yCWBI5P5O1EsuoAQQ8dhujgXtKnyWSV2gSSJ2LPx2ac,2324
|
|
130
|
+
netbox_dns/views/view.py,sha256=udaSTREI0Fvk3I1tvNkiGhB6c8aPH_2QF0UfdSMSKL4,2107
|
|
131
|
+
netbox_dns/views/zone.py,sha256=U1kOzGdkBHAwUFQoKialc5ct1Sm2wk7_zCpUPMx-Upc,5483
|
|
132
|
+
netbox_dns/views/zone_template.py,sha256=dIFymV02x6ArnP9NJk_c4lukA4r1s59m9941rvIHlzw,2118
|
|
133
|
+
netbox_plugin_dns-1.0.5.dist-info/LICENSE,sha256=I3tDu11bZfhFm3EkV4zOD5TmWgLjnUNLEFwrdjniZYs,1112
|
|
134
|
+
netbox_plugin_dns-1.0.5.dist-info/METADATA,sha256=WTmZRx5rad20dFVt8X2q3ulWq06c9zW09_9jTaw-0V0,6404
|
|
135
|
+
netbox_plugin_dns-1.0.5.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
136
|
+
netbox_plugin_dns-1.0.5.dist-info/RECORD,,
|