netbox-plugin-dns 1.0b2__py3-none-any.whl → 1.0.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.

Files changed (40) hide show
  1. netbox_dns/__init__.py +3 -3
  2. netbox_dns/api/serializers_/view.py +6 -1
  3. netbox_dns/fields/network.py +20 -21
  4. netbox_dns/fields/rfc2317.py +2 -2
  5. netbox_dns/filtersets/view.py +1 -1
  6. netbox_dns/filtersets/zone.py +4 -4
  7. netbox_dns/forms/record.py +30 -2
  8. netbox_dns/forms/view.py +6 -3
  9. netbox_dns/forms/zone.py +71 -102
  10. netbox_dns/graphql/types.py +1 -4
  11. netbox_dns/migrations/0001_squashed_netbox_dns_0_22.py +4 -2
  12. netbox_dns/migrations/0003_default_view.py +15 -0
  13. netbox_dns/migrations/0004_create_and_assign_default_view.py +26 -0
  14. netbox_dns/migrations/0005_alter_zone_view_not_null.py +18 -0
  15. netbox_dns/mixins/__init__.py +1 -0
  16. netbox_dns/mixins/object_modification.py +26 -0
  17. netbox_dns/models/nameserver.py +7 -6
  18. netbox_dns/models/record.py +94 -35
  19. netbox_dns/models/view.py +56 -1
  20. netbox_dns/models/zone.py +101 -67
  21. netbox_dns/signals/ipam_coupling.py +1 -2
  22. netbox_dns/tables/view.py +12 -2
  23. netbox_dns/template_content.py +1 -1
  24. netbox_dns/templates/netbox_dns/record.html +1 -1
  25. netbox_dns/templates/netbox_dns/view.html +4 -0
  26. netbox_dns/templates/netbox_dns/zone.html +2 -4
  27. netbox_dns/urls/__init__.py +17 -0
  28. netbox_dns/urls/contact.py +51 -0
  29. netbox_dns/urls/nameserver.py +69 -0
  30. netbox_dns/urls/record.py +41 -0
  31. netbox_dns/urls/registrar.py +63 -0
  32. netbox_dns/urls/view.py +39 -0
  33. netbox_dns/urls/zone.py +57 -0
  34. netbox_dns/validators/dns_name.py +24 -11
  35. netbox_dns/views/record.py +10 -18
  36. {netbox_plugin_dns-1.0b2.dist-info → netbox_plugin_dns-1.0.2.dist-info}/LICENSE +2 -1
  37. {netbox_plugin_dns-1.0b2.dist-info → netbox_plugin_dns-1.0.2.dist-info}/METADATA +15 -14
  38. {netbox_plugin_dns-1.0b2.dist-info → netbox_plugin_dns-1.0.2.dist-info}/RECORD +39 -28
  39. netbox_dns/urls.py +0 -297
  40. {netbox_plugin_dns-1.0b2.dist-info → netbox_plugin_dns-1.0.2.dist-info}/WHEEL +0 -0
@@ -0,0 +1,63 @@
1
+ from django.urls import path
2
+
3
+ from netbox.views.generic import ObjectChangeLogView, ObjectJournalView
4
+
5
+ from netbox_dns.models import Registrar
6
+ from netbox_dns.views import (
7
+ RegistrarListView,
8
+ RegistrarView,
9
+ RegistrarDeleteView,
10
+ RegistrarEditView,
11
+ RegistrarBulkImportView,
12
+ RegistrarBulkEditView,
13
+ RegistrarBulkDeleteView,
14
+ RegistrarZoneListView,
15
+ )
16
+
17
+ registrar_urlpatterns = [
18
+ path("registrars/", RegistrarListView.as_view(), name="registrar_list"),
19
+ path("registrars/add/", RegistrarEditView.as_view(), name="registrar_add"),
20
+ path(
21
+ "registrars/import/",
22
+ RegistrarBulkImportView.as_view(),
23
+ name="registrar_import",
24
+ ),
25
+ path(
26
+ "registrars/edit/",
27
+ RegistrarBulkEditView.as_view(),
28
+ name="registrar_bulk_edit",
29
+ ),
30
+ path(
31
+ "registrars/delete/",
32
+ RegistrarBulkDeleteView.as_view(),
33
+ name="registrar_bulk_delete",
34
+ ),
35
+ path("registrars/<int:pk>/", RegistrarView.as_view(), name="registrar"),
36
+ path(
37
+ "registrars/<int:pk>/edit/",
38
+ RegistrarEditView.as_view(),
39
+ name="registrar_edit",
40
+ ),
41
+ path(
42
+ "registrars/<int:pk>/delete/",
43
+ RegistrarDeleteView.as_view(),
44
+ name="registrar_delete",
45
+ ),
46
+ path(
47
+ "registrars/<int:pk>/zones/",
48
+ RegistrarZoneListView.as_view(),
49
+ name="registrar_zones",
50
+ ),
51
+ path(
52
+ "registrars/<int:pk>/journal/",
53
+ ObjectJournalView.as_view(),
54
+ name="registrar_journal",
55
+ kwargs={"model": Registrar},
56
+ ),
57
+ path(
58
+ "registrars/<int:pk>/changelog/",
59
+ ObjectChangeLogView.as_view(),
60
+ name="registrar_changelog",
61
+ kwargs={"model": Registrar},
62
+ ),
63
+ ]
@@ -0,0 +1,39 @@
1
+ from django.urls import path
2
+
3
+ from netbox.views.generic import ObjectChangeLogView, ObjectJournalView
4
+
5
+ from netbox_dns.models import View
6
+ from netbox_dns.views import (
7
+ ViewListView,
8
+ ViewView,
9
+ ViewDeleteView,
10
+ ViewEditView,
11
+ ViewBulkImportView,
12
+ ViewBulkEditView,
13
+ ViewBulkDeleteView,
14
+ ViewZoneListView,
15
+ )
16
+
17
+ view_urlpatterns = [
18
+ path("views/", ViewListView.as_view(), name="view_list"),
19
+ path("views/add/", ViewEditView.as_view(), name="view_add"),
20
+ path("views/import/", ViewBulkImportView.as_view(), name="view_import"),
21
+ path("views/edit/", ViewBulkEditView.as_view(), name="view_bulk_edit"),
22
+ path("views/delete/", ViewBulkDeleteView.as_view(), name="view_bulk_delete"),
23
+ path("views/<int:pk>/", ViewView.as_view(), name="view"),
24
+ path("views/<int:pk>/edit/", ViewEditView.as_view(), name="view_edit"),
25
+ path("views/<int:pk>/delete/", ViewDeleteView.as_view(), name="view_delete"),
26
+ path("views/<int:pk>/zones/", ViewZoneListView.as_view(), name="view_zones"),
27
+ path(
28
+ "views/<int:pk>/journal/",
29
+ ObjectJournalView.as_view(),
30
+ name="view_journal",
31
+ kwargs={"model": View},
32
+ ),
33
+ path(
34
+ "views/<int:pk>/changelog/",
35
+ ObjectChangeLogView.as_view(),
36
+ name="view_changelog",
37
+ kwargs={"model": View},
38
+ ),
39
+ ]
@@ -0,0 +1,57 @@
1
+ from django.urls import path
2
+
3
+ from netbox.views.generic import ObjectChangeLogView, ObjectJournalView
4
+
5
+ from netbox_dns.models import Zone
6
+ from netbox_dns.views import (
7
+ ZoneListView,
8
+ ZoneView,
9
+ ZoneDeleteView,
10
+ ZoneEditView,
11
+ ZoneBulkImportView,
12
+ ZoneBulkEditView,
13
+ ZoneBulkDeleteView,
14
+ ZoneRecordListView,
15
+ ZoneManagedRecordListView,
16
+ ZoneRegistrationView,
17
+ ZoneRFC2317ChildZoneListView,
18
+ )
19
+
20
+ zone_urlpatterns = [
21
+ path("zones/", ZoneListView.as_view(), name="zone_list"),
22
+ path("zones/add/", ZoneEditView.as_view(), name="zone_add"),
23
+ path("zones/import/", ZoneBulkImportView.as_view(), name="zone_import"),
24
+ path("zones/edit/", ZoneBulkEditView.as_view(), name="zone_bulk_edit"),
25
+ path("zones/delete/", ZoneBulkDeleteView.as_view(), name="zone_bulk_delete"),
26
+ path("zones/<int:pk>/", ZoneView.as_view(), name="zone"),
27
+ path("zones/<int:pk>/delete/", ZoneDeleteView.as_view(), name="zone_delete"),
28
+ path("zones/<int:pk>/edit/", ZoneEditView.as_view(), name="zone_edit"),
29
+ path("zones/<int:pk>/records/", ZoneRecordListView.as_view(), name="zone_records"),
30
+ path(
31
+ "zones/<int:pk>/managedrecords/",
32
+ ZoneManagedRecordListView.as_view(),
33
+ name="zone_managed_records",
34
+ ),
35
+ path(
36
+ "zones/<int:pk>/rfc2317childzones/",
37
+ ZoneRFC2317ChildZoneListView.as_view(),
38
+ name="zone_rfc2317_child_zones",
39
+ ),
40
+ path(
41
+ "zones/<int:pk>/registration/",
42
+ ZoneRegistrationView.as_view(),
43
+ name="zone_registration",
44
+ ),
45
+ path(
46
+ "zones/<int:pk>/journal/",
47
+ ObjectJournalView.as_view(),
48
+ name="zone_journal",
49
+ kwargs={"model": Zone},
50
+ ),
51
+ path(
52
+ "zones/<int:pk>/changelog/",
53
+ ObjectChangeLogView.as_view(),
54
+ name="zone_changelog",
55
+ kwargs={"model": Zone},
56
+ ),
57
+ ]
@@ -14,19 +14,25 @@ def has_invalid_double_dash(name):
14
14
  return bool(re.findall(r"\b(?!xn)..--", name, re.IGNORECASE))
15
15
 
16
16
 
17
- def validate_fqdn(name):
18
- if get_plugin_config("netbox_dns", "tolerate_underscores_in_hostnames"):
17
+ def validate_fqdn(name, always_tolerant=False):
18
+ if always_tolerant or get_plugin_config(
19
+ "netbox_dns", "tolerate_underscores_in_hostnames"
20
+ ):
19
21
  regex = rf"^(\*|{TOLERANT_LABEL})(\.{TOLERANT_LABEL})+\.?$"
20
22
  else:
21
23
  regex = rf"^(\*|{LABEL})(\.{LABEL})+\.?$"
22
24
 
23
25
  if not re.match(regex, name, flags=re.IGNORECASE) or has_invalid_double_dash(name):
24
- raise ValidationError("Not a valid fully qualified DNS host name")
26
+ raise ValidationError(f"{name} is not a valid fully qualified DNS host name")
25
27
 
26
28
 
27
- def validate_extended_hostname(name, tolerate_leading_underscores=False):
28
- if tolerate_leading_underscores:
29
- if get_plugin_config("netbox_dns", "tolerate_underscores_in_hostnames"):
29
+ def validate_extended_hostname(
30
+ name, tolerate_leading_underscores=False, always_tolerant=False
31
+ ):
32
+ if always_tolerant or tolerate_leading_underscores:
33
+ if always_tolerant or get_plugin_config(
34
+ "netbox_dns", "tolerate_underscores_in_hostnames"
35
+ ):
30
36
  regex = rf"^([*@]|(\*\.)?{TOLERANT_LEADING_UNDERSCORE_LABEL}(\.{TOLERANT_LEADING_UNDERSCORE_LABEL})*\.?)$"
31
37
  else:
32
38
  regex = rf"^([*@]|(\*\.)?{LEADING_UNDERSCORE_LABEL}(\.{LEADING_UNDERSCORE_LABEL})*\.?)$"
@@ -36,17 +42,24 @@ def validate_extended_hostname(name, tolerate_leading_underscores=False):
36
42
  regex = rf"^([*@]|(\*\.)?{LABEL}(\.{LABEL})*\.?)$"
37
43
 
38
44
  if not re.match(regex, name, flags=re.IGNORECASE) or has_invalid_double_dash(name):
39
- raise ValidationError("Not a valid DNS host name")
45
+ raise ValidationError(f"{name} is not a valid DNS host name")
40
46
 
41
47
 
42
- def validate_domain_name(name):
43
- if name == "." and get_plugin_config("netbox_dns", "enable_root_zones"):
48
+ def validate_domain_name(name, always_tolerant=False, allow_empty_label=False):
49
+ if name == "@" and allow_empty_label:
44
50
  return
45
51
 
46
- if get_plugin_config("netbox_dns", "tolerate_underscores_in_hostnames"):
52
+ if name == "." and (
53
+ always_tolerant or get_plugin_config("netbox_dns", "enable_root_zones")
54
+ ):
55
+ return
56
+
57
+ if always_tolerant:
58
+ regex = rf"^{TOLERANT_LEADING_UNDERSCORE_LABEL}(\.{TOLERANT_LEADING_UNDERSCORE_LABEL})*\.?$"
59
+ elif get_plugin_config("netbox_dns", "tolerate_underscores_in_hostnames"):
47
60
  regex = rf"^{TOLERANT_LABEL}(\.{TOLERANT_LABEL})*\.?$"
48
61
  else:
49
62
  regex = rf"^{LABEL}(\.{LABEL})*\.?$"
50
63
 
51
64
  if not re.match(regex, name, flags=re.IGNORECASE) or has_invalid_double_dash(name):
52
- raise ValidationError("Not a valid DNS domain name")
65
+ raise ValidationError(f"{name} is not a valid DNS domain name")
@@ -1,8 +1,5 @@
1
1
  from dns import name as dns_name
2
2
 
3
- from django.db.models import Q
4
- from django.db.models.functions import Length
5
-
6
3
  from netbox.views import generic
7
4
 
8
5
  from netbox_dns.filtersets import RecordFilterSet
@@ -41,15 +38,11 @@ class RecordView(generic.ObjectView):
41
38
  queryset = Record.objects.all().prefetch_related("zone", "ptr_record")
42
39
 
43
40
  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
41
  value_fqdn = dns_name.from_text(instance.value_fqdn)
51
42
 
52
- cname_targets = Record.objects.filter(view_filter, fqdn=value_fqdn)
43
+ cname_targets = Record.objects.filter(
44
+ zone__view=instance.zone.view, fqdn=value_fqdn
45
+ )
53
46
 
54
47
  if cname_targets:
55
48
  return RelatedRecordTable(
@@ -59,14 +52,11 @@ class RecordView(generic.ObjectView):
59
52
  return None
60
53
 
61
54
  def get_cname_records(self, instance):
62
- view_filter = (
63
- Q(zone__view__isnull=True)
64
- if instance.zone.view is None
65
- else Q(zone__view=instance.zone.view)
66
- )
67
55
  cname_records = set(
68
56
  Record.objects.filter(
69
- view_filter, value=instance.fqdn, type=RecordTypeChoices.CNAME
57
+ zone__view=instance.zone.view,
58
+ value=instance.fqdn,
59
+ type=RecordTypeChoices.CNAME,
70
60
  )
71
61
  )
72
62
 
@@ -77,12 +67,14 @@ class RecordView(generic.ObjectView):
77
67
  ]
78
68
 
79
69
  parent_zones = Zone.objects.filter(
80
- instance.zone.view_filter, name__in=parent_zone_names
70
+ view=instance.zone.view, name__in=parent_zone_names
81
71
  )
82
72
 
83
73
  for parent_zone in parent_zones:
84
74
  parent_cname_records = Record.objects.filter(
85
- view_filter, type=RecordTypeChoices.CNAME, zone=parent_zone
75
+ zone__view=instance.zone.view,
76
+ type=RecordTypeChoices.CNAME,
77
+ zone=parent_zone,
86
78
  )
87
79
  cname_records = cname_records.union(
88
80
  set(
@@ -1,6 +1,7 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2021 Aurora Research Lab
3
+ Copyright (c) 2021-2023 Aurora Research Lab
4
+ Copyright (c) 2023 Peter Eckel
4
5
 
5
6
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
7
  of this software and associated documentation files (the "Software"), to deal
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: netbox-plugin-dns
3
- Version: 1.0b2
3
+ Version: 1.0.2
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
@@ -8,18 +8,18 @@ Keywords: netbox,netbox-plugin,dns
8
8
  Author: Peter Eckel
9
9
  Author-email: pete@netbox-dns.org
10
10
  Requires-Python: >=3.10,<4.0
11
- Classifier: Development Status :: 4 - Beta
11
+ Classifier: Development Status :: 5 - Production/Stable
12
12
  Classifier: License :: OSI Approved :: MIT License
13
13
  Classifier: Programming Language :: Python :: 3
14
14
  Classifier: Programming Language :: Python :: 3.10
15
15
  Classifier: Programming Language :: Python :: 3.11
16
16
  Classifier: Programming Language :: Python :: 3.12
17
- Requires-Dist: dnspython (>=2.2.1,<3.0.0)
17
+ Requires-Dist: dnspython (>=2.6.1,<3.0.0)
18
18
  Project-URL: Repository, https://github.com/peteeckel/netbox-plugin-dns
19
19
  Description-Content-Type: text/markdown
20
20
 
21
21
  # NetBox DNS
22
- The NetBox DNS plugin enables NetBox to manage operational DNS data such as name servers, zones, records and views, as well as registration data for domains. It can automate tasks like creating PTR records, generating zone serial numbers, NS and SOA records, as well as validate names and values values for resource records to ensure zone data is consistent, current and conforming to the relevant RFCs.
22
+ The NetBox DNS plugin enables NetBox to manage operational DNS data such as name servers, zones, records and views, as well as registration data for domains. It can automate tasks like creating PTR records, generating zone serial numbers, NS and SOA records, as well as validate names and values values for resource records to ensure zone data is consistent, up-to-date and compliant with to the relevant RFCs.
23
23
 
24
24
  <div align="center">
25
25
  <a href="https://pypi.org/project/netbox-plugin-dns/"><img src="https://img.shields.io/pypi/v/netbox-plugin-dns" alt="PyPi"/></a>
@@ -37,25 +37,26 @@ The NetBox DNS plugin enables NetBox to manage operational DNS data such as name
37
37
  ## Objectives
38
38
  NetBox DNS is designed to be the 'DNS Source of Truth' analogous to NetBox being the 'Network Source of Truth'.
39
39
 
40
- The plugin holds information about DNS name servers, DNS Views and Zones, and DNS Records, making it a data source for automatically provisioning DNS instances. Registrarion information about DNS registrars and contacts for DNS domains can also be stored and associated with zones.
40
+ The plugin stores information about DNS name servers, DNS views and zones, and DNS records, making it a data source for automatic provisioning of DNS instances. Registration information about DNS registrars and contacts for DNS domains can also be stored and associated with zones.
41
41
 
42
- The main focus of the plugin is to ensure the quality of data stored in it. To achieve this, many validation and automation mechanisms are in place:
42
+ The main focus of the plugin is to ensure the quality of the data stored in it. To achieve this, there are many validation and automation mechanisms in place:
43
43
 
44
44
  * Validation of record names and values
45
45
  * Automatic maintenance of PTR records for IPv6 and IPv4 address records
46
46
  * Automatic generation of SOA records, optionally including the serial number of the zone data
47
+ * Validation of changes to the SOA SERIAL number, whether they are done automatically or manually
47
48
  * Validation of record types such as CNAME and singletons, to ensure DNS zone validity
48
- * [RFC 2317](https://datatracker.ietf.org/doc/html/rfc2317) support for delegation of PTR zones for IPv4 subnets longer than 24 bits
49
+ * Support for [RFC 2317](https://datatracker.ietf.org/doc/html/rfc2317) delegation of PTR zones for IPv4 subnets longer than 24 bits
49
50
 
50
- Other main features are:
51
+ Other main features include:
51
52
 
52
53
  * Support for BIND views, providing lightweight namespaces for zones
53
- * Support for IDN, inclucing the validation of punycode names
54
- * Fully supported NetBox REST and GraphQL API
55
- * Support for all major NetBox features like Global Search, Tenancy, Change Logs, Tagging, Journaling etc.
54
+ * Support for IDN, including the validation of punycode names
55
+ * Full support for the NetBox REST and GraphQL APIs
56
+ * Support for all major NetBox features such as global search, tenancy, change logs, tagging, journaling etc.
56
57
 
57
- ## Non-Objectives
58
- In the same way in which NetBox is not a network management application, NetBox DNS does not provide functionality to manage specific name servers or DNS service providers or generate input like configuration and zone files for them. The focus is on the completeness and integrity of the data needed to run DNS zones, not on the peculiarities of a plethora of servers and services actually using the data. This functionality is left to specialized integration tools, or in many cases it can be easily implemented using Ansible or similar tools based on NetBox DNS data. Example code for some simple use cases is provided.
58
+ ## Non-objectives
59
+ In the same way as NetBox is not a network management application, NetBox DNS does not provide any functionality to manage specific name servers or DNS service providers or to generate input such as configuration and zone files for them. The focus is on the completeness and integrity of the data needed to run DNS zones, not on the peculiarities of a plethora of servers and services that actually use the data. This functionality is left to specialized integration tools, or in many cases it can be easily implemented using Ansible or similar tools based on NetBox DNS data. Example code for some simple use cases is provided.
59
60
 
60
61
  For integration with a large number of DNS server implementations integration tools like [octodns-netbox-dns](https://pypi.org/project/octodns-netbox-dns/) are available.
61
62
 
@@ -99,7 +100,7 @@ Full documentation on using plugins with NetBox: [Using Plugins - NetBox Documen
99
100
 
100
101
  ## Contribute
101
102
 
102
- Contributions are always welcome! Please see: [contributing guide](CONTRIBUTING.md)
103
+ Contributions are always welcome! Please see the [Contribution Guidelines](CONTRIBUTING.md)
103
104
 
104
105
  ## Documentation
105
106
 
@@ -1,4 +1,4 @@
1
- netbox_dns/__init__.py,sha256=SLW3Fu-mT6oDSVx4BOS6-sjEjF33vQh_ImHOkzS7wBU,1053
1
+ netbox_dns/__init__.py,sha256=-p2PZ7vCqtkAgdnSagyqpcfTghoVPFbsph9FYddm-jg,1038
2
2
  netbox_dns/api/nested_serializers.py,sha256=kkTU4Hylkbam9-lIniv8E0nTQwE1bz8D_GzIEOUy0Mw,2145
3
3
  netbox_dns/api/serializers.py,sha256=C4-TP1luq9QjEHjPS5cW7u2flAEdIFjghpVd_sa5S_Y,249
4
4
  netbox_dns/api/serializers_/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -6,40 +6,43 @@ netbox_dns/api/serializers_/contact.py,sha256=dH4rSmJQWy3B2GcZhF86OtaUxJRl_pF7eV
6
6
  netbox_dns/api/serializers_/nameserver.py,sha256=Y1Ou6wAFddL28bIR10kYdHMHucbFGD7Q1M71L1z-gzY,1093
7
7
  netbox_dns/api/serializers_/record.py,sha256=USnaNU5Mj6Uxo-qqOtBn_y1hj6UO1UcdCbj_9emDHfQ,2284
8
8
  netbox_dns/api/serializers_/registrar.py,sha256=hnd6yzxd3wtIaUFkaeVyJ9q63M3IFdq_JftJj8KMIEQ,805
9
- netbox_dns/api/serializers_/view.py,sha256=cCeaTBiAAVBvPd8hBAl_XIW6O3FpwXNh0dcY-vX1H_I,798
9
+ netbox_dns/api/serializers_/view.py,sha256=wSUQ9Sq181n51hzhMEddhPMZOjKEL_CUnvikAaCfTSI,918
10
10
  netbox_dns/api/serializers_/zone.py,sha256=Px6FCLtApAEptkLpVo2bsNAzhRdeyOq_XoTqjqZQQSE,4351
11
11
  netbox_dns/api/urls.py,sha256=R9VmmWtdrjvr35i5d_SfZK2lGn6JzmPuWEKTQlZ8MJo,575
12
12
  netbox_dns/api/views.py,sha256=NI6ge3aCum394G0YN3mVSTQdFPB5kMOPdWRMR05aDO8,3566
13
13
  netbox_dns/apps.py,sha256=JCW5eS-AQBUubDJve1DjP-IRFKTFGQh1NLGWzJpC5MI,151
14
14
  netbox_dns/fields/__init__.py,sha256=egA6gLQ4SPYacECcYU4Vl_P7TbzLOMRfaX6rw3k26YA,69
15
15
  netbox_dns/fields/address.py,sha256=qklRDbZJVK20t2OIxGBoo9VVeuVTWvWkf2gHaZMnoAI,1494
16
- netbox_dns/fields/network.py,sha256=wKAuqopoJTXr6kOZ2X65VWhLNygLsFUmy4WR6ScSWWo,3606
17
- netbox_dns/fields/rfc2317.py,sha256=ODlg5UXzTZ5m1R0J8G89UgcMdYRg4Ka0INPKDY_I250,2518
16
+ netbox_dns/fields/network.py,sha256=L9dm_zc6hBn7PM0cPNfkcKLr28BjhVmd1zJAMDMXTYI,3652
17
+ netbox_dns/fields/rfc2317.py,sha256=sp-G37GWDzyQzNzArEG291mwHLcizz--Mpa8O81nSDc,2497
18
18
  netbox_dns/filtersets/__init__.py,sha256=Aw8HrCTjaJfu5JSwJsQRHfOUz4zKwAmZNByT9q6BrFU,136
19
19
  netbox_dns/filtersets/contact.py,sha256=OHwaV0nUhOchNN4etXviqo6eJVnXs0o8W0rwXBhRpx8,1057
20
20
  netbox_dns/filtersets/nameserver.py,sha256=mX-0iCndZZo-_YiYqMT89JY7lYRvrdB2CMo5kIXXJWg,1110
21
21
  netbox_dns/filtersets/record.py,sha256=Xop2yRT_UJcLvnk9DmKSekOt2a3NTFcCaIAKLskPx4M,3687
22
22
  netbox_dns/filtersets/registrar.py,sha256=CzugumDLbFtkMaURLupMciKgV6VWHCzr1duXWQUGUKA,941
23
- netbox_dns/filtersets/view.py,sha256=KhM0xB4hEBSAE9LYsoOjsPdsxswlPsRnBuQ85yYv51E,505
24
- netbox_dns/filtersets/zone.py,sha256=DZLO1m0WKrZ6vxiq8mNE9m82ni8asAOZ1xSe9gULVYE,6564
23
+ netbox_dns/filtersets/view.py,sha256=QOnPLDcgwvuYxNXtXL4rfjAx_nsOeqkXno3bo7LB2-k,521
24
+ netbox_dns/filtersets/zone.py,sha256=zBoeHftcyXPLn7j3rnsYmK9z9fnbclBv2p1-DWb33mU,6562
25
25
  netbox_dns/forms/__init__.py,sha256=Aw8HrCTjaJfu5JSwJsQRHfOUz4zKwAmZNByT9q6BrFU,136
26
26
  netbox_dns/forms/contact.py,sha256=zC6DY5x05RmuIkURlnL3QwdmVeWLSbw5XqQ568RVUOM,5220
27
27
  netbox_dns/forms/nameserver.py,sha256=x3vmPQfiGLvIayOhTq--wC7pp24pOuVLArosUZOXpc4,2361
28
- netbox_dns/forms/record.py,sha256=3obkPtQCreDkO0OCZFc2JfFz7RtD5cKvKwtYc_2c2u0,6272
28
+ netbox_dns/forms/record.py,sha256=izHchLyREY6pZi0vbT17TD5P4p6GDiT6syFMnM5Wu0c,7031
29
29
  netbox_dns/forms/registrar.py,sha256=Z1V03Vk5k1KeMioQeNbBIo3LbFlh4LYiHIw72I4hN34,3638
30
- netbox_dns/forms/view.py,sha256=yWq0dtCc0P8Zxk6geX0O3w-vPJtgoXNADRvAaYNiqc0,1932
31
- netbox_dns/forms/zone.py,sha256=0KsQdVD5OCmF3lXQa99cc8rEqML4W1OjvzjcDUxu__g,22627
30
+ netbox_dns/forms/view.py,sha256=ohV8Vtd57w2eNU2m-YXYxbBdGvfZWj2ZldxiXcsv3H8,2053
31
+ netbox_dns/forms/zone.py,sha256=yZS1vs_3N4Jk8hsW3ukP0yMlgnqrrS3_FDmiUrI_m3A,21134
32
32
  netbox_dns/graphql/__init__.py,sha256=B9FHsY2Nntz4Vg9EtKbYB_gyzPCIM76CMQSGbf0Q9ek,358
33
33
  netbox_dns/graphql/filters.py,sha256=Kwjrn0SaxaeqhxzjFb6isXYVvL_IXOwUpNsQd_c-ffY,1257
34
34
  netbox_dns/graphql/schema.py,sha256=2CHe93vQQgFhl5cQTYCJp3JikK_QnBok8xi5UFvPmac,1915
35
- netbox_dns/graphql/types.py,sha256=Md-OZgih9GFomQuqwOK-sIHyNGET8iMAkQ8s9cryC2A,4207
35
+ netbox_dns/graphql/types.py,sha256=_ZJHskaEIrzU1Gr6gLlAQkDY1RlL0C7w6mkwkONKTlA,4176
36
36
  netbox_dns/management/commands/cleanup_database.py,sha256=HbfhYONCv1xlAbGP4e4Yv9IIoB0U-R8wAnyOjYMvxM0,5960
37
37
  netbox_dns/management/commands/cleanup_rrset_ttl.py,sha256=WJb_K95GbyszAS4HWEf8UMzpqKA1fIsLkLon0ytSog8,2029
38
38
  netbox_dns/management/commands/setup_coupling.py,sha256=1cUxDvHoX1UebgyCsbrLqIccuXhE8tkvyhW8dofIyr4,4556
39
39
  netbox_dns/management/commands/update_soa.py,sha256=Rj_Xk-qpwkAVRubVnM5OqSTwgzi93E0PqjwGb3rYjf0,660
40
40
  netbox_dns/migrations/0001_squashed_netbox_dns_0_15.py,sha256=3U0810NWSHPu2dTSHpfzlleDgwMS04FhJ_CkO76SDaw,10283
41
- netbox_dns/migrations/0001_squashed_netbox_dns_0_22.py,sha256=Fs4V6fi3D_1tn2GdUhkMVrvO9pqffCHCKH7ce38-3cE,20243
41
+ netbox_dns/migrations/0001_squashed_netbox_dns_0_22.py,sha256=Hy-pTB8EkK742cz6M2yhgi-v-nDBLPZ1XUDwOtAGswY,20279
42
42
  netbox_dns/migrations/0002_contact_description_registrar_description.py,sha256=ZrI-L3jJ5GzdVx21pomgM4waE-njixHQjl_grjsGr0I,583
43
+ netbox_dns/migrations/0003_default_view.py,sha256=NByVlAyiiK6WCfJ014BiFPkoNcHeqr1IpkgNdHiwbWw,367
44
+ netbox_dns/migrations/0004_create_and_assign_default_view.py,sha256=npBFxWuJCZeMhbZLEH9C_sZcQZRaa3IOlyn4p_GULyk,627
45
+ netbox_dns/migrations/0005_alter_zone_view_not_null.py,sha256=vUfCFD-qeh5M1WCqtE1eYHXZwQVCcf841Z2-0CdcMRI,463
43
46
  netbox_dns/migrations/0020_netbox_3_4.py,sha256=UMcHdn8ZAuQjUaM_3rEGpktYrM0TuvhccD7Jt7WQnPs,1271
44
47
  netbox_dns/migrations/0021_record_ip_address.py,sha256=k72KACwnaCkgXLMgrex_lZCB1xd614llxRBeBBuJTYU,3243
45
48
  netbox_dns/migrations/0022_search.py,sha256=KW1ffEZ4-0dppGQ_KD1EN7iw8eQJOnDco-xfJFRZqKQ,172
@@ -51,53 +54,61 @@ netbox_dns/migrations/0027_alter_registrar_iana_id.py,sha256=QUtRIrqqfkraFmzzeJF
51
54
  netbox_dns/migrations/0028_rfc2317_fields.py,sha256=D8r43xxBjYXiL6ycmX8RY5_WG7tRYEDjutOeYM1H56I,1364
52
55
  netbox_dns/migrations/0029_record_fqdn.py,sha256=UAAU38ekKQyiYDOJlcrz6Qbk4bqZfSHZyAHUZFFQrOw,808
53
56
  netbox_dns/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
+ netbox_dns/mixins/__init__.py,sha256=LxTEfpod_RHCyMtnzDljv0_dwqp2z3Q6tqbXW8LTGD8,35
58
+ netbox_dns/mixins/object_modification.py,sha256=wq01fyCAai2staM2g5wV9BbW1hDUeRdXfJrSSkc2YK8,726
54
59
  netbox_dns/models/__init__.py,sha256=Q7UIEe2vGh18AZN4er6CykciwXPQGgUq0L-9718wZqU,182
55
60
  netbox_dns/models/contact.py,sha256=xXmNGuM6k1U98jO3mMmp93PXamh1YZQ270JOcy0FFnE,2958
56
- netbox_dns/models/nameserver.py,sha256=LuE0VNwu3jM-IKf6ubq4kWHZpCAmTPdhGhz3btYtE0U,3021
57
- netbox_dns/models/record.py,sha256=_CbAL0aj-Ko1pHsifitnOqNsO6XqiYgQnjA2QhaNEIA,23763
61
+ netbox_dns/models/nameserver.py,sha256=5Z0sFTqpxksCFCOExxXZEY_mpEVTKLMtFv5urD9yvdg,3121
62
+ netbox_dns/models/record.py,sha256=foj8PrFwilyXCU-H69vJanq5CkiD2N_oUC86_aA8WmE,26299
58
63
  netbox_dns/models/registrar.py,sha256=yidjVCq7WPECsHLKQRRCSzGbvG2jIXu8lqAKox0SU5Q,1502
59
- netbox_dns/models/view.py,sha256=-CniIpddvoGAQQSS8y5R6Oq6IuPU_mGSi8J-3WLtYNU,920
60
- netbox_dns/models/zone.py,sha256=8V7cJPhX3mWsmhWNH3Jc7-6cRPTeLXxb4CdOeo2YNOk,26519
64
+ netbox_dns/models/view.py,sha256=HgQSpD8zQCxDpNel0b1_m4GlMYoRBpxiu6-Dtb1YnxI,2712
65
+ netbox_dns/models/zone.py,sha256=ZBCMw2mUWaxsu-ULNI9MDVBy5XbuJlqOtQVEHoMmj24,28160
61
66
  netbox_dns/navigation.py,sha256=ykZJE5X-sqlnaTIU_pRzsio8Ux8zZVLH-iNsC2QqIxs,4062
62
67
  netbox_dns/signals/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
- netbox_dns/signals/ipam_coupling.py,sha256=yBKICUcueJvzWCpUICEA0BYxf3WwaD2ZVNCb2bFRBEQ,5595
68
+ netbox_dns/signals/ipam_coupling.py,sha256=kJUKHUgq5XgWMhxB-312SPaZAYTLIYGgKO0lz2-z_rg,5594
64
69
  netbox_dns/tables/__init__.py,sha256=Aw8HrCTjaJfu5JSwJsQRHfOUz4zKwAmZNByT9q6BrFU,136
65
70
  netbox_dns/tables/contact.py,sha256=guT_wC3NJMYbVbXeMOg6nqmmmDcnjfbRI-SkjFDEYdU,774
66
71
  netbox_dns/tables/nameserver.py,sha256=8BfXzDXNuhZHEyHjGlL4EA1LYx7XU3EPGHlby0k33II,767
67
72
  netbox_dns/tables/record.py,sha256=VwBWMiZN_Lkl9SXfJLzd8-7TM1CKetwE7azhScF4r7I,3162
68
73
  netbox_dns/tables/registrar.py,sha256=6C8XpxvR9O7IoVK0RD5RoZgXjkm-ORSBeKP6KbwcjHA,648
69
- netbox_dns/tables/view.py,sha256=r9CLS96m-KojX3OYZ-k45FbVseHO20nPxRzlKrRrLio,501
74
+ netbox_dns/tables/view.py,sha256=NaZmDVefmrRWF711_zOJqOmguU66LtI6bOZQ9ZdxniA,699
70
75
  netbox_dns/tables/zone.py,sha256=4TlTB7lVsztZJ41aetkqr6PWosjZP-xc2sB9gDnw0z8,1886
71
- netbox_dns/template_content.py,sha256=0Az-YtDweyjX10NylMxk3Fv1_VIigCzY-Es48QSQRvA,3805
76
+ netbox_dns/template_content.py,sha256=NmtfseYrYcU3RxzCI5okwCpMTfTEs4d8aJnDYwo4MO8,3801
72
77
  netbox_dns/templates/netbox_dns/contact.html,sha256=fMHAQyLXIxohKoCTxFEnKetl9UVXeQgjasfpv_JONaw,2855
73
78
  netbox_dns/templates/netbox_dns/nameserver.html,sha256=DpTdetQVV_jKThDbi62LvbhiCay-1QxR-yiJEiPFm4w,1554
74
79
  netbox_dns/templates/netbox_dns/record/managed.html,sha256=G6LPG1koUGuzUiwYdv1okdVa4sKaofiQegDBnsFL0kA,89
75
80
  netbox_dns/templates/netbox_dns/record/related.html,sha256=Aqor8uGcuHQTHjlX-Xmni2Yp4N7lOBrMOqQiszrQOC0,742
76
- netbox_dns/templates/netbox_dns/record.html,sha256=tzqX7FpSLwx3nzQHsOnlR_mfPZIehv6qs2erfC3KtDM,5481
81
+ netbox_dns/templates/netbox_dns/record.html,sha256=uJfZSgBcWpVXMfOwROmV5P73KS94caenvxxgsKG4qVA,5498
77
82
  netbox_dns/templates/netbox_dns/registrar.html,sha256=O5veGmW59Pf5yN25ihPLvRIkA2P7xmSGv0G3NrRG8vI,2152
78
83
  netbox_dns/templates/netbox_dns/related_dns_objects.html,sha256=KSzlnw1cStrJa3poKkwrt_ycIH0oH0STWIHRNy3ks4g,806
79
- netbox_dns/templates/netbox_dns/view.html,sha256=Ua91W33MRVKzEJcSUY7tgnO-rRD0FhFPdi72Sx_6iY0,1321
84
+ netbox_dns/templates/netbox_dns/view.html,sha256=XCa7Sg8fjSkhVqjLvw652FINQdWURLWdQqw8is82iaI,1499
80
85
  netbox_dns/templates/netbox_dns/zone/base.html,sha256=n_E4aVYdGeZZl-ARE8sb4DgAAgPs92X1UEFepX3xIlM,495
81
86
  netbox_dns/templates/netbox_dns/zone/child.html,sha256=kH56PJFBGCjiRdIh7zCtClnZdfOChqN_sYslsyoz5gU,2147
82
87
  netbox_dns/templates/netbox_dns/zone/managed_record.html,sha256=LOchMAJyfMZIICE6q0pX1eorRbtgUtOQ1u0VvJKCDZ8,514
83
88
  netbox_dns/templates/netbox_dns/zone/record.html,sha256=tu5RFm2eYJ3fjeUxZYDJqJ9qK8tGslXl1iGs60DlRyM,2194
84
89
  netbox_dns/templates/netbox_dns/zone/registration.html,sha256=de2Kph-G8Gv5LD_Wf294SLfO0UKPS9NmHeQYRfJf-Ck,1151
85
90
  netbox_dns/templates/netbox_dns/zone/rfc2317_child_zone.html,sha256=rWlmb3zRQbLYQ_1dsa0twwu6y1dRj2tfFVEERH07p-s,517
86
- netbox_dns/templates/netbox_dns/zone.html,sha256=BW8ig7bSuPXfcx2oiqLGCRVgs2IQIssoiT7QfEI0y54,6717
87
- netbox_dns/urls.py,sha256=NxqvnRxLM6VwUBTY6KA8u-PRjNklmBai7gy6NXc-1xo,9172
91
+ netbox_dns/templates/netbox_dns/zone.html,sha256=K-jNmluO_TqOhv_DPBkJ8y0JF5zu9N574gkWCvVWruE,6633
92
+ netbox_dns/urls/__init__.py,sha256=ky-ertisnz10vB18bi7JGwZwkvbRAeDErAqn621Xmbc,438
93
+ netbox_dns/urls/contact.py,sha256=OSQO-AkAhTaBruAdzVgcC7ip_OuiacvFI_ozgkWlNFU,1549
94
+ netbox_dns/urls/nameserver.py,sha256=BBbY-wqPqCquvLLv1_JhqToj7oDHhPNGCWHt0IfjBNM,1941
95
+ netbox_dns/urls/record.py,sha256=bDprohTso1N0GtPXH4X3TNHnkxopiOSQFXWItifEZ_k,1432
96
+ netbox_dns/urls/registrar.py,sha256=u6B0zGGYNUJIKTo9uGiUeZLPD0QMGaQOAPShGEy4NaA,1728
97
+ netbox_dns/urls/view.py,sha256=8AeBnOHWusXXQs4JXpNfMSHqszXAY1GDXGWmNsMulQ8,1327
98
+ netbox_dns/urls/zone.py,sha256=wYRAhtq695K0QSrvNj6gdFaf1gExEN5vwmYXLAA9FrU,1849
88
99
  netbox_dns/utilities/__init__.py,sha256=dVPi1gAGaRum-aQYi0oLgagRYrTVQNY5bmi2Ig02cOo,1835
89
100
  netbox_dns/utilities/ipam_coupling.py,sha256=6z1Fx8fhesf15gLTHYc0KVqE3_YhJbNPAjqFOvWlqK8,3441
90
101
  netbox_dns/validators/__init__.py,sha256=5W8s31R1aT5B_mKJjTRwogEKj-Xun05iCyvRuYVGkdM,47
91
- netbox_dns/validators/dns_name.py,sha256=bGThrQ7wBdPwwPmx4bHD2OEHBNnZ8XXFKCOLI_u5QW4,2097
102
+ netbox_dns/validators/dns_name.py,sha256=Q_Xf4YpztLWHlg5OLGaalfh5W5GakDpRiZ38KXqcuaU,2543
92
103
  netbox_dns/validators/rfc2317.py,sha256=L2Z-z5ghktFyWMLVZPeK8OEVGnQzbXD11fha2xGHM5E,501
93
104
  netbox_dns/views/__init__.py,sha256=Aw8HrCTjaJfu5JSwJsQRHfOUz4zKwAmZNByT9q6BrFU,136
94
105
  netbox_dns/views/contact.py,sha256=mBWM92UVjoz90JCUGO7kaFUI0_yA7tH4lSHxOZQB3MQ,2253
95
106
  netbox_dns/views/nameserver.py,sha256=Sxl1h8v1W-uP0Qxz-Re0Ei1LgnWJuQGjI7ZaHS7qLeE,3011
96
- netbox_dns/views/record.py,sha256=qBgCCHRoiupLKUurNAShchhButlX3_CrpAmInIEOSdg,4616
107
+ netbox_dns/views/record.py,sha256=DDHbxQ33P_mduoPquvyXrdrqNT6r79qShLg1uJzU4Ic,4347
97
108
  netbox_dns/views/registrar.py,sha256=NK6jTYRwRjaVjYmI7T4Phh_gjXg9yPrxl-7vciZ9doc,2090
98
109
  netbox_dns/views/view.py,sha256=a3l6pybhqGb_RMxrRgFT1Gia9tRq8EmXFxPv9WUId0U,1913
99
110
  netbox_dns/views/zone.py,sha256=EqkjXuX1xhkjDgaSNgFBvnA74IhuK_zDWlHPb3_4YKQ,4591
100
- netbox_plugin_dns-1.0b2.dist-info/LICENSE,sha256=tziMJKpkMbySr09L6bIwsu7Ca9ICoqpMO3yAXgEMQA4,1076
101
- netbox_plugin_dns-1.0b2.dist-info/METADATA,sha256=qRoOU1e8sRzum0UwmlMLRKbSOh3Conrhkfr8vKkOXIg,5990
102
- netbox_plugin_dns-1.0b2.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
103
- netbox_plugin_dns-1.0b2.dist-info/RECORD,,
111
+ netbox_plugin_dns-1.0.2.dist-info/LICENSE,sha256=I3tDu11bZfhFm3EkV4zOD5TmWgLjnUNLEFwrdjniZYs,1112
112
+ netbox_plugin_dns-1.0.2.dist-info/METADATA,sha256=g50relhX2IGxacZ1-5DMEyzS5CxjjoLwnCQHipiNCko,6146
113
+ netbox_plugin_dns-1.0.2.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
114
+ netbox_plugin_dns-1.0.2.dist-info/RECORD,,