netbox-plugin-dns 1.0.6__py3-none-any.whl → 1.1.0__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 (94) hide show
  1. netbox_dns/__init__.py +23 -4
  2. netbox_dns/api/nested_serializers.py +17 -16
  3. netbox_dns/api/serializers.py +2 -1
  4. netbox_dns/api/serializers_/prefix.py +18 -0
  5. netbox_dns/api/serializers_/record.py +1 -0
  6. netbox_dns/api/serializers_/{contact.py → registration_contact.py} +5 -5
  7. netbox_dns/api/serializers_/view.py +34 -2
  8. netbox_dns/api/serializers_/zone.py +5 -5
  9. netbox_dns/api/serializers_/zone_template.py +5 -5
  10. netbox_dns/api/urls.py +5 -2
  11. netbox_dns/api/views.py +17 -35
  12. netbox_dns/fields/__init__.py +1 -0
  13. netbox_dns/fields/ipam.py +15 -0
  14. netbox_dns/filtersets/__init__.py +1 -1
  15. netbox_dns/filtersets/record.py +1 -1
  16. netbox_dns/filtersets/{contact.py → registration_contact.py} +4 -4
  17. netbox_dns/filtersets/view.py +16 -0
  18. netbox_dns/filtersets/zone.py +15 -15
  19. netbox_dns/filtersets/zone_template.py +15 -15
  20. netbox_dns/forms/__init__.py +1 -1
  21. netbox_dns/forms/{contact.py → registration_contact.py} +16 -16
  22. netbox_dns/forms/view.py +204 -4
  23. netbox_dns/forms/zone.py +15 -18
  24. netbox_dns/forms/zone_template.py +13 -13
  25. netbox_dns/graphql/__init__.py +2 -2
  26. netbox_dns/graphql/filters.py +5 -5
  27. netbox_dns/graphql/schema.py +24 -44
  28. netbox_dns/graphql/types.py +41 -12
  29. netbox_dns/management/commands/rebuild_dnssync.py +18 -0
  30. netbox_dns/management/commands/setup_dnssync.py +140 -0
  31. netbox_dns/migrations/0007_alter_ordering_options.py +25 -0
  32. netbox_dns/migrations/0008_view_prefixes.py +18 -0
  33. netbox_dns/migrations/0009_rename_contact_registrationcontact.py +27 -0
  34. netbox_dns/models/__init__.py +1 -3
  35. netbox_dns/models/nameserver.py +8 -3
  36. netbox_dns/models/record.py +154 -24
  37. netbox_dns/models/record_template.py +4 -1
  38. netbox_dns/models/registrar.py +7 -1
  39. netbox_dns/models/{contact.py → registration_contact.py} +15 -9
  40. netbox_dns/models/view.py +14 -2
  41. netbox_dns/models/zone.py +76 -35
  42. netbox_dns/models/zone_template.py +12 -9
  43. netbox_dns/navigation.py +7 -7
  44. netbox_dns/signals/ipam_dnssync.py +224 -0
  45. netbox_dns/tables/__init__.py +1 -1
  46. netbox_dns/tables/ipam_dnssync.py +11 -0
  47. netbox_dns/tables/nameserver.py +1 -7
  48. netbox_dns/tables/record.py +43 -30
  49. netbox_dns/tables/record_template.py +0 -17
  50. netbox_dns/tables/registrar.py +0 -2
  51. netbox_dns/tables/{contact.py → registration_contact.py} +5 -6
  52. netbox_dns/tables/view.py +19 -4
  53. netbox_dns/tables/zone.py +0 -15
  54. netbox_dns/tables/zone_template.py +2 -16
  55. netbox_dns/template_content.py +41 -40
  56. netbox_dns/templates/netbox_dns/record.html +6 -6
  57. netbox_dns/templates/netbox_dns/{contact.html → registrationcontact.html} +1 -1
  58. netbox_dns/templates/netbox_dns/view/button.html +9 -0
  59. netbox_dns/templates/netbox_dns/view/prefix.html +41 -0
  60. netbox_dns/templates/netbox_dns/view/related.html +17 -0
  61. netbox_dns/templates/netbox_dns/view.html +25 -0
  62. netbox_dns/urls/__init__.py +2 -2
  63. netbox_dns/urls/nameserver.py +14 -38
  64. netbox_dns/urls/record.py +7 -19
  65. netbox_dns/urls/record_template.py +18 -27
  66. netbox_dns/urls/registrar.py +11 -35
  67. netbox_dns/urls/registration_contact.py +60 -0
  68. netbox_dns/urls/view.py +12 -20
  69. netbox_dns/urls/zone.py +8 -46
  70. netbox_dns/urls/zone_template.py +16 -26
  71. netbox_dns/utilities/__init__.py +2 -74
  72. netbox_dns/utilities/conversions.py +83 -0
  73. netbox_dns/utilities/ipam_dnssync.py +295 -0
  74. netbox_dns/validators/dns_name.py +9 -0
  75. netbox_dns/views/__init__.py +1 -1
  76. netbox_dns/views/nameserver.py +7 -3
  77. netbox_dns/views/record.py +12 -7
  78. netbox_dns/views/record_template.py +1 -1
  79. netbox_dns/views/registrar.py +0 -1
  80. netbox_dns/views/registration_contact.py +94 -0
  81. netbox_dns/views/view.py +32 -2
  82. netbox_dns/views/zone.py +7 -6
  83. netbox_dns/views/zone_template.py +2 -2
  84. {netbox_plugin_dns-1.0.6.dist-info → netbox_plugin_dns-1.1.0.dist-info}/METADATA +2 -1
  85. netbox_plugin_dns-1.1.0.dist-info/RECORD +146 -0
  86. netbox_dns/management/commands/setup_coupling.py +0 -109
  87. netbox_dns/signals/ipam_coupling.py +0 -168
  88. netbox_dns/templates/netbox_dns/related_dns_objects.html +0 -21
  89. netbox_dns/urls/contact.py +0 -51
  90. netbox_dns/utilities/ipam_coupling.py +0 -112
  91. netbox_dns/views/contact.py +0 -95
  92. netbox_plugin_dns-1.0.6.dist-info/RECORD +0 -136
  93. {netbox_plugin_dns-1.0.6.dist-info → netbox_plugin_dns-1.1.0.dist-info}/LICENSE +0 -0
  94. {netbox_plugin_dns-1.0.6.dist-info → netbox_plugin_dns-1.1.0.dist-info}/WHEEL +0 -0
@@ -1,6 +1,8 @@
1
1
  from dns import name as dns_name
2
2
 
3
3
  from netbox.views import generic
4
+ from utilities.views import register_model_view
5
+ from tenancy.views import ObjectContactsView
4
6
 
5
7
  from netbox_dns.filtersets import RecordFilterSet
6
8
  from netbox_dns.forms import (
@@ -16,14 +18,14 @@ from netbox_dns.utilities import value_to_unicode
16
18
 
17
19
 
18
20
  __all__ = (
19
- "RecordListView",
20
- "ManagedRecordListView",
21
21
  "RecordView",
22
+ "RecordListView",
22
23
  "RecordEditView",
23
24
  "RecordDeleteView",
24
25
  "RecordBulkImportView",
25
26
  "RecordBulkEditView",
26
27
  "RecordBulkDeleteView",
28
+ "ManagedRecordListView",
27
29
  )
28
30
 
29
31
 
@@ -37,9 +39,7 @@ class RecordListView(generic.ObjectListView):
37
39
 
38
40
 
39
41
  class ManagedRecordListView(generic.ObjectListView):
40
- queryset = Record.objects.filter(managed=True).prefetch_related(
41
- "zone", "address_record"
42
- )
42
+ queryset = Record.objects.prefetch_related("ipam_ip_address", "address_record")
43
43
  filterset = RecordFilterSet
44
44
  filterset_form = RecordFilterForm
45
45
  table = ManagedRecordTable
@@ -90,11 +90,11 @@ class RecordView(generic.ObjectView):
90
90
  zone=parent_zone,
91
91
  )
92
92
  cname_records = cname_records.union(
93
- set(
93
+ {
94
94
  record
95
95
  for record in parent_cname_records
96
96
  if record.value_fqdn == instance.fqdn
97
- )
97
+ }
98
98
  )
99
99
 
100
100
  if cname_records:
@@ -155,3 +155,8 @@ class RecordBulkEditView(generic.BulkEditView):
155
155
  class RecordBulkDeleteView(generic.BulkDeleteView):
156
156
  queryset = Record.objects.filter(managed=False)
157
157
  table = RecordTable
158
+
159
+
160
+ @register_model_view(Record, "contacts")
161
+ class RecordContactsView(ObjectContactsView):
162
+ queryset = Record.objects.all()
@@ -15,8 +15,8 @@ from netbox_dns.utilities import value_to_unicode
15
15
 
16
16
 
17
17
  __all__ = (
18
- "RecordTemplateListView",
19
18
  "RecordTemplateView",
19
+ "RecordTemplateListView",
20
20
  "RecordTemplateEditView",
21
21
  "RecordTemplateDeleteView",
22
22
  "RecordTemplateBulkImportView",
@@ -21,7 +21,6 @@ __all__ = (
21
21
  "RegistrarBulkImportView",
22
22
  "RegistrarBulkEditView",
23
23
  "RegistrarBulkDeleteView",
24
- "RegistrarZoneListView",
25
24
  )
26
25
 
27
26
 
@@ -0,0 +1,94 @@
1
+ from django.db.models import Q
2
+
3
+ from netbox.views import generic
4
+
5
+ from utilities.views import ViewTab, register_model_view
6
+
7
+ from netbox_dns.models import RegistrationContact, Zone
8
+ from netbox_dns.filtersets import RegistrationContactFilterSet, ZoneFilterSet
9
+ from netbox_dns.forms import (
10
+ RegistrationContactForm,
11
+ RegistrationContactFilterForm,
12
+ RegistrationContactImportForm,
13
+ RegistrationContactBulkEditForm,
14
+ )
15
+ from netbox_dns.tables import RegistrationContactTable, ZoneTable
16
+
17
+
18
+ __all__ = (
19
+ "RegistrationContactView",
20
+ "RegistrationContactEditView",
21
+ "RegistrationContactListView",
22
+ "RegistrationContactDeleteView",
23
+ "RegistrationContactBulkImportView",
24
+ "RegistrationContactBulkEditView",
25
+ "RegistrationContactBulkDeleteView",
26
+ )
27
+
28
+
29
+ class RegistrationContactView(generic.ObjectView):
30
+ queryset = RegistrationContact.objects.all()
31
+
32
+
33
+ class RegistrationContactListView(generic.ObjectListView):
34
+ queryset = RegistrationContact.objects.all()
35
+ table = RegistrationContactTable
36
+ filterset = RegistrationContactFilterSet
37
+ filterset_form = RegistrationContactFilterForm
38
+
39
+
40
+ class RegistrationContactEditView(generic.ObjectEditView):
41
+ queryset = RegistrationContact.objects.all()
42
+ form = RegistrationContactForm
43
+ default_return_url = "plugins:netbox_dns:registrationcontact_list"
44
+
45
+
46
+ class RegistrationContactDeleteView(generic.ObjectDeleteView):
47
+ queryset = RegistrationContact.objects.all()
48
+ default_return_url = "plugins:netbox_dns:registrationcontact_list"
49
+
50
+
51
+ class RegistrationContactBulkImportView(generic.BulkImportView):
52
+ queryset = RegistrationContact.objects.all()
53
+ model_form = RegistrationContactImportForm
54
+ table = RegistrationContactTable
55
+ default_return_url = "plugins:netbox_dns:registrationcontact_list"
56
+
57
+
58
+ class RegistrationContactBulkEditView(generic.BulkEditView):
59
+ queryset = RegistrationContact.objects.all()
60
+ filterset = RegistrationContactFilterSet
61
+ table = RegistrationContactTable
62
+ form = RegistrationContactBulkEditForm
63
+
64
+
65
+ class RegistrationContactBulkDeleteView(generic.BulkDeleteView):
66
+ queryset = RegistrationContact.objects.all()
67
+ table = RegistrationContactTable
68
+
69
+
70
+ @register_model_view(RegistrationContact, "zones")
71
+ class RegistrationContactZoneListView(generic.ObjectChildrenView):
72
+ queryset = RegistrationContact.objects.all().prefetch_related(
73
+ "zone_set", "admin_c_zones", "tech_c_zones", "billing_c_zones"
74
+ )
75
+ child_model = Zone
76
+ table = ZoneTable
77
+ filterset = ZoneFilterSet
78
+ template_name = "netbox_dns/zone/child.html"
79
+ hide_if_empty = True
80
+
81
+ tab = ViewTab(
82
+ label="Zones",
83
+ permission="netbox_dns.view_zone",
84
+ badge=lambda obj: len(obj.zones),
85
+ hide_if_empty=True,
86
+ )
87
+
88
+ def get_children(self, request, parent):
89
+ return Zone.objects.filter(
90
+ Q(registrant=parent)
91
+ | Q(admin_c=parent)
92
+ | Q(tech_c=parent)
93
+ | Q(billing_c=parent)
94
+ )
netbox_dns/views/view.py CHANGED
@@ -1,11 +1,20 @@
1
1
  from utilities.views import ViewTab, register_model_view
2
2
 
3
3
  from netbox.views import generic
4
+ from tenancy.views import ObjectContactsView
5
+ from ipam.models import Prefix
4
6
 
5
7
  from netbox_dns.models import View, Zone
6
8
  from netbox_dns.filtersets import ViewFilterSet, ZoneFilterSet
7
- from netbox_dns.forms import ViewForm, ViewFilterForm, ViewImportForm, ViewBulkEditForm
9
+ from netbox_dns.forms import (
10
+ ViewForm,
11
+ ViewFilterForm,
12
+ ViewImportForm,
13
+ ViewBulkEditForm,
14
+ ViewPrefixEditForm,
15
+ )
8
16
  from netbox_dns.tables import ViewTable, ZoneTable
17
+ from netbox_dns.utilities import get_views_by_prefix
9
18
 
10
19
 
11
20
  __all__ = (
@@ -16,7 +25,7 @@ __all__ = (
16
25
  "ViewBulkImportView",
17
26
  "ViewBulkEditView",
18
27
  "ViewBulkDeleteView",
19
- "ViewZoneListView",
28
+ "ViewPrefixEditView",
20
29
  )
21
30
 
22
31
 
@@ -61,6 +70,22 @@ class ViewBulkDeleteView(generic.BulkDeleteView):
61
70
  table = ViewTable
62
71
 
63
72
 
73
+ class ViewPrefixEditView(generic.ObjectEditView):
74
+ queryset = Prefix.objects.all()
75
+ form = ViewPrefixEditForm
76
+ template_name = "netbox_dns/view/prefix.html"
77
+
78
+ def get_extra_context(self, request, instance):
79
+ parents = instance.get_parents()
80
+ if parents:
81
+ return {
82
+ "inherited_views": get_views_by_prefix(parents.last()),
83
+ "inherited_from": parents.filter(netbox_dns_views__isnull=False).last(),
84
+ }
85
+
86
+ return {}
87
+
88
+
64
89
  @register_model_view(View, "zones")
65
90
  class ViewZoneListView(generic.ObjectChildrenView):
66
91
  queryset = View.objects.all().prefetch_related("zone_set")
@@ -79,3 +104,8 @@ class ViewZoneListView(generic.ObjectChildrenView):
79
104
 
80
105
  def get_children(self, request, parent):
81
106
  return parent.zone_set
107
+
108
+
109
+ @register_model_view(View, "contacts")
110
+ class ViewContactsView(ObjectContactsView):
111
+ queryset = View.objects.all()
netbox_dns/views/zone.py CHANGED
@@ -2,6 +2,7 @@ from dns import name as dns_name
2
2
 
3
3
  from netbox.views import generic
4
4
  from utilities.views import ViewTab, register_model_view
5
+ from tenancy.views import ObjectContactsView
5
6
 
6
7
  from netbox_dns.filtersets import ZoneFilterSet, RecordFilterSet
7
8
  from netbox_dns.forms import (
@@ -19,18 +20,13 @@ from netbox_dns.tables import (
19
20
 
20
21
 
21
22
  __all__ = (
22
- "ZoneListView",
23
23
  "ZoneView",
24
+ "ZoneListView",
24
25
  "ZoneEditView",
25
26
  "ZoneDeleteView",
26
27
  "ZoneBulkImportView",
27
28
  "ZoneBulkEditView",
28
29
  "ZoneBulkDeleteView",
29
- "ZoneRegistrationView",
30
- "ZoneRecordListView",
31
- "ZoneManagedRecordListView",
32
- "ZoneRFC2317ChildZoneListView",
33
- "ZoneChildZoneListView",
34
30
  )
35
31
 
36
32
 
@@ -201,3 +197,8 @@ class ZoneChildZoneListView(generic.ObjectChildrenView):
201
197
 
202
198
  def get_children(self, request, parent):
203
199
  return parent.child_zones
200
+
201
+
202
+ @register_model_view(Zone, "contacts")
203
+ class ZoneContactsView(ObjectContactsView):
204
+ queryset = Zone.objects.all()
@@ -1,5 +1,6 @@
1
1
  from netbox.views import generic
2
2
 
3
+ from netbox_dns.models import ZoneTemplate
3
4
  from netbox_dns.filtersets import ZoneTemplateFilterSet
4
5
  from netbox_dns.forms import (
5
6
  ZoneTemplateImportForm,
@@ -7,13 +8,12 @@ from netbox_dns.forms import (
7
8
  ZoneTemplateFilterForm,
8
9
  ZoneTemplateBulkEditForm,
9
10
  )
10
- from netbox_dns.models import ZoneTemplate
11
11
  from netbox_dns.tables import ZoneTemplateTable, RecordTemplateDisplayTable
12
12
 
13
13
 
14
14
  __all__ = (
15
- "ZoneTemplateListView",
16
15
  "ZoneTemplateView",
16
+ "ZoneTemplateListView",
17
17
  "ZoneTemplateEditView",
18
18
  "ZoneTemplateDeleteView",
19
19
  "ZoneTemplateBulkImportView",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: netbox-plugin-dns
3
- Version: 1.0.6
3
+ Version: 1.1.0
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
@@ -48,6 +48,7 @@ The main focus of the plugin is to ensure the quality of the data stored in it.
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
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
51
+ * IPAM DNSsync can be used to automatically create address and pointer records for IP addresses by assigning prefixes to DNS views. When an IP address has a DNS name assigned and there are zones with matching names in the DNS views linked to the IP address' prefix, a matching DNS record will be created in these zones
51
52
 
52
53
  Other main features include:
53
54
 
@@ -0,0 +1,146 @@
1
+ netbox_dns/__init__.py,sha256=VeKyMc8-q9rCbxO2z30AYtLZVrw6myj1JkCgBv2BjSA,1920
2
+ netbox_dns/api/nested_serializers.py,sha256=zRIgWEtKIhvfxKOtxwFRfNeUQGWWNeuulfZ6oeFhe2w,3195
3
+ netbox_dns/api/serializers.py,sha256=bLbAjyIsj75S9wnQAGL-wYOkTlFS1Y7OsBObAPzNJxc,383
4
+ netbox_dns/api/serializers_/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ netbox_dns/api/serializers_/nameserver.py,sha256=PlpVsai24O73B-ZQ4wSaSC0_m_LCtQETDRSUYDb1xGw,1118
6
+ netbox_dns/api/serializers_/prefix.py,sha256=kZ1DjDly6VFZamXSxGa57YC6MfZZcI5S7jmGBkVB2_I,551
7
+ netbox_dns/api/serializers_/record.py,sha256=62924HonaKflFXkTgFft_624BKEikAMkak1AKDYsFvk,2316
8
+ netbox_dns/api/serializers_/record_template.py,sha256=qh-g-_f6M-eU4GzN-l0nPxiNBpZyYBgib26HwfOMtUc,1466
9
+ netbox_dns/api/serializers_/registrar.py,sha256=xLIaeBJ5ckV1Jf-uyCTFcvsLlsRMlpDtIg6q79vXZic,842
10
+ netbox_dns/api/serializers_/registration_contact.py,sha256=3IGWW5xB9XEBGApCGZCZIxpCmy1Y5jQUbA4GzmtaCik,1024
11
+ netbox_dns/api/serializers_/view.py,sha256=u5HqZtPzGCBTFCsH5GkPGsyG-oR4WIJ8XOqdWe3oUow,1723
12
+ netbox_dns/api/serializers_/zone.py,sha256=vQMKyC1Pcnvp7OjRnSZt-cMP5iae9HLuMts6_JyxrG4,4935
13
+ netbox_dns/api/serializers_/zone_template.py,sha256=itwcdMe8NxMbH95yXBJTQkzzMOWzOvzTOOHJWKfEFgg,3782
14
+ netbox_dns/api/urls.py,sha256=WXYJJvqJ25BvwyrmTY-0F6cJMrgEEdEcisGeMVWEeiY,826
15
+ netbox_dns/api/views.py,sha256=4B_mmezzONyWhEtwW_QpO8u5G3LE46mAmADbg4VD4gw,3795
16
+ netbox_dns/apps.py,sha256=JCW5eS-AQBUubDJve1DjP-IRFKTFGQh1NLGWzJpC5MI,151
17
+ netbox_dns/choices/__init__.py,sha256=jOVs2VGV5SVADRlqVnrFeAy26i8BIeEAbGpiX7K8bL8,42
18
+ netbox_dns/choices/record.py,sha256=IYW_g1ZvuNX2ZlRLOkurcrdfWgcXNpi2gQzRfX5C0lY,1113
19
+ netbox_dns/choices/zone.py,sha256=u0zt03gTkeo_und0VxaTTCh3GIFv6UxtUIhoe3VJ00A,472
20
+ netbox_dns/fields/__init__.py,sha256=U1nbFIwwtvr10pp3Sk91jEZeWkVQBSJtr0BVWYgOfiA,89
21
+ netbox_dns/fields/address.py,sha256=DJwc-z5Lg6US85gNIB_Chx7ahs1GYNswdhaXkLiK3jA,1554
22
+ netbox_dns/fields/ipam.py,sha256=wla-kBm77BpD0LNQhgRZS1RYbVois7WDqPpyQkUT02k,481
23
+ netbox_dns/fields/network.py,sha256=FgKEm5DAe_4D7Fubtj8B4SwfU3-Z9KV7kDIzRNpBBnQ,3682
24
+ netbox_dns/fields/rfc2317.py,sha256=24qNNLbI-SGlsKqGaLNaVk8EHFrju65YTET3O-8XgTc,2571
25
+ netbox_dns/filtersets/__init__.py,sha256=f8zJhpC3-TyK1OMgTaXmm1E6C2wUc1mNtoI6LOKkljQ,210
26
+ netbox_dns/filtersets/nameserver.py,sha256=I7RoIUcgXyIoMrhuS0dJr8uPi0AdNj6D3G6t2oSiQ7s,1147
27
+ netbox_dns/filtersets/record.py,sha256=Jt3RlI4MIfeY5xYkLse1y1rzmKCdmuk-CRAxxaNVYbY,3750
28
+ netbox_dns/filtersets/record_template.py,sha256=jGSjGFEnNSoxtUd7diV8wEhw8qZclz2dKLSqyVC7Djo,1548
29
+ netbox_dns/filtersets/registrar.py,sha256=Wh_l-IXRHnJhW7Pyokp3czQZISDKzXnWeSQKp512Drc,977
30
+ netbox_dns/filtersets/registration_contact.py,sha256=903sOcHPRCI0dVzqn1i0pn5VPr_4YpHPh5QE2-akR-Y,1139
31
+ netbox_dns/filtersets/view.py,sha256=sGUhmyr66GY2CVXOFX2g5evDt0nbU6XPPCwptvnicHQ,993
32
+ netbox_dns/filtersets/zone.py,sha256=T6ZLAtfhZRhS5U3R6pYodhFbVr-Te8gm57aaMDHN8us,6774
33
+ netbox_dns/filtersets/zone_template.py,sha256=qWHgveEJdfr36rCuPBGvBuhwNRooFu0ud_wteisGlGc,3850
34
+ netbox_dns/forms/__init__.py,sha256=axENVF9vX9BtDKCNxrapRjye1NnygUg9BS0BBj6a0io,209
35
+ netbox_dns/forms/nameserver.py,sha256=LHomCHmFcASobaD3Z7yhAyA24h-LrYImVMz-EUXbwK4,2836
36
+ netbox_dns/forms/record.py,sha256=svBVAFy-egDEPLcRWkxNi_1bkabKmWgJ87pmdNt6dh4,7155
37
+ netbox_dns/forms/record_template.py,sha256=Q77p9sExJ8Xbl-Co2Px2R0At5O3naQJwx4pnino6i2o,5573
38
+ netbox_dns/forms/registrar.py,sha256=FMnvrcq62R3wNp_2ZUEk3v_PIav0KrWPATaJ7_9KFAo,3758
39
+ netbox_dns/forms/registration_contact.py,sha256=WHpIRnwPD7nIDKi0-zRdv7tLUN2t_n3rmt_mZrqjfEk,5524
40
+ netbox_dns/forms/view.py,sha256=DkfZOLkCClTF-7pLMiZE8J1Z9_oxmeBiEWZ7-_yTZro,9045
41
+ netbox_dns/forms/zone.py,sha256=6NI3uiI2bXIhzPM7CTxR4pbv198xmU-QHEizy16Qb-E,23601
42
+ netbox_dns/forms/zone_template.py,sha256=D0JgQE03uQ_vR6zHkS78a5PzUziNSu1ho_mk61JTRo4,8317
43
+ netbox_dns/graphql/__init__.py,sha256=jghYD6uOSAis6YyLbtI3YJGZfwPw1uL2FBRsHs1EhNk,514
44
+ netbox_dns/graphql/filters.py,sha256=fHCjFIwbPBJJMk2W7HI8LhrfFhCtQtCM9IE8ZMgVafc,1766
45
+ netbox_dns/graphql/schema.py,sha256=z_56Co3d-cmswmnY8MeOryLOGZEGK4WwYW9eekNuYRw,2430
46
+ netbox_dns/graphql/types.py,sha256=W8uKiJrPCu1vnRbG4dj4pAaNiE5Nvnt0mmWCrSoXm68,6652
47
+ netbox_dns/management/commands/cleanup_database.py,sha256=kfnyybudwKGigjJmrOwafPWSUasZr9jQsxN4eWAgMvY,5969
48
+ netbox_dns/management/commands/cleanup_rrset_ttl.py,sha256=UFRURLBcFeGHUS2lrYFv7UWIebjI72aG1EUQJt0XsXw,2046
49
+ netbox_dns/management/commands/rebuild_dnssync.py,sha256=56YGEsAO_NYCXRmuL9Ju_Ni3FLtMD0MO4ObZAAPefLk,617
50
+ netbox_dns/management/commands/setup_dnssync.py,sha256=qtVj6egSjclaQbuI60hLfl-zg89VJVbX-TB17f1k77Y,5730
51
+ netbox_dns/management/commands/update_soa.py,sha256=Rj_Xk-qpwkAVRubVnM5OqSTwgzi93E0PqjwGb3rYjf0,660
52
+ netbox_dns/migrations/0001_squashed_netbox_dns_0_15.py,sha256=3U0810NWSHPu2dTSHpfzlleDgwMS04FhJ_CkO76SDaw,10283
53
+ netbox_dns/migrations/0001_squashed_netbox_dns_0_22.py,sha256=ML6Hp17lrXiaG0eUlBjKMm6HUNhw0AHPnKrb9AN-F6E,20279
54
+ netbox_dns/migrations/0002_contact_description_registrar_description.py,sha256=ZrI-L3jJ5GzdVx21pomgM4waE-njixHQjl_grjsGr0I,583
55
+ netbox_dns/migrations/0003_default_view.py,sha256=NByVlAyiiK6WCfJ014BiFPkoNcHeqr1IpkgNdHiwbWw,367
56
+ netbox_dns/migrations/0004_create_and_assign_default_view.py,sha256=npBFxWuJCZeMhbZLEH9C_sZcQZRaa3IOlyn4p_GULyk,627
57
+ netbox_dns/migrations/0005_alter_zone_view_not_null.py,sha256=vUfCFD-qeh5M1WCqtE1eYHXZwQVCcf841Z2-0CdcMRI,463
58
+ netbox_dns/migrations/0006_templating.py,sha256=7MOZ2bLwkjK1BQCBPBaFWJ-mS_JNrok1XUSh4rriq9Y,6271
59
+ netbox_dns/migrations/0007_alter_ordering_options.py,sha256=IDGgxEWOaSs9_WKJK1C_5_6M1uJtYscn3Vco0UHAol8,639
60
+ netbox_dns/migrations/0008_view_prefixes.py,sha256=LInzrOXTflGd2WUmyXZtjEegg7S_KBNvrbdo3jE28fE,472
61
+ netbox_dns/migrations/0009_rename_contact_registrationcontact.py,sha256=GPRERHZYEnsThVmV92YXqcaKQx942uYGiI_x5XFWofE,893
62
+ netbox_dns/migrations/0020_netbox_3_4.py,sha256=UMcHdn8ZAuQjUaM_3rEGpktYrM0TuvhccD7Jt7WQnPs,1271
63
+ netbox_dns/migrations/0021_record_ip_address.py,sha256=EqdhWXmq7aiK4X79xTRUZng3zFncCl-8JoO65HqlJKw,3244
64
+ netbox_dns/migrations/0022_search.py,sha256=KW1ffEZ4-0dppGQ_KD1EN7iw8eQJOnDco-xfJFRZqKQ,172
65
+ netbox_dns/migrations/0023_alter_record_value.py,sha256=4_4v8YZzU8_jadJqIUUjH6SIhNTeALWhclozTqYDmv0,378
66
+ netbox_dns/migrations/0024_tenancy.py,sha256=3kc5l5_AyfhOI6g6mbCfReUAbSgb2DAv0MDMZqJ-3YQ,1745
67
+ netbox_dns/migrations/0025_ipam_coupling_cf.py,sha256=7uHujclWrsYw5QMLWft0Po78Ow5Q8MjPuU7moKyQ2qs,620
68
+ netbox_dns/migrations/0026_domain_registration.py,sha256=qUJ1oUGHIGGNWD7QRLnxElbM5eNp7dYNNn_OYIw8Xvo,5796
69
+ netbox_dns/migrations/0027_alter_registrar_iana_id.py,sha256=QUtRIrqqfkraFmzzeJFZWAEv4PfrOouoHtrV6FRn8Kc,404
70
+ netbox_dns/migrations/0028_rfc2317_fields.py,sha256=D8r43xxBjYXiL6ycmX8RY5_WG7tRYEDjutOeYM1H56I,1364
71
+ netbox_dns/migrations/0029_record_fqdn.py,sha256=UAAU38ekKQyiYDOJlcrz6Qbk4bqZfSHZyAHUZFFQrOw,808
72
+ netbox_dns/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
+ netbox_dns/mixins/__init__.py,sha256=LxTEfpod_RHCyMtnzDljv0_dwqp2z3Q6tqbXW8LTGD8,35
74
+ netbox_dns/mixins/object_modification.py,sha256=JbGi8a52wkZ3fFBlfat590CfqRJcEWxBsxSeTIx3Qtg,833
75
+ netbox_dns/models/__init__.py,sha256=5Ns9RaemTe5L0L3c6a38RxembWhV-sX9cqfjl05aPQw,313
76
+ netbox_dns/models/nameserver.py,sha256=gvQRcTOVHRiX_rcBZfjNV6rTRKNJtA5HxgggYEgITPA,3296
77
+ netbox_dns/models/record.py,sha256=O8w6PtuUIaFyrZg1ghIe-ZSrdQ9snBEmOeiSlR5mBPQ,26454
78
+ netbox_dns/models/record_template.py,sha256=pyzrtk-VFEHf9hrWTW6pwPKo2AH5cEKR0XI4ZG9nVHk,4753
79
+ netbox_dns/models/registrar.py,sha256=zCSVa6NSN9sRJzvvuSUNK4LcHBbe0OvEiTbIcrrdk9k,1671
80
+ netbox_dns/models/registration_contact.py,sha256=v5BxTtGPrR22TyqIQkgaSH26ozhzIVrkU-PuezHki-g,3217
81
+ netbox_dns/models/view.py,sha256=hSvbb-xc7r3AyTvuxvCnWGqG7gpTkeO_FsZoHXCVMzY,3029
82
+ netbox_dns/models/zone.py,sha256=Xvg4gkskh5s6FlrA4AoAPB8aQ_Z5fBaXd8ACtgaFuEI,29598
83
+ netbox_dns/models/zone_template.py,sha256=LvNqUi_Ucj3zHb9b778kFM2EZ1s9aXp980Et5g7lvTY,3889
84
+ netbox_dns/navigation.py,sha256=YAEfmqoNRSXLSf-n3HLImDXbAfzcRdCh57BVnofmWPQ,6046
85
+ netbox_dns/signals/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
86
+ netbox_dns/signals/ipam_dnssync.py,sha256=ToGg2Z_L3wvM6gNHX-oU8QTEkbrsXuVt7J6IcQbGb9A,7964
87
+ netbox_dns/tables/__init__.py,sha256=axENVF9vX9BtDKCNxrapRjye1NnygUg9BS0BBj6a0io,209
88
+ netbox_dns/tables/ipam_dnssync.py,sha256=7gxf6nXn2zgpnpCr5E5qebXv7QCzrgIqfSzyka53USU,272
89
+ netbox_dns/tables/nameserver.py,sha256=GGi8x8QXbrFoFjxueL1zd5L-hDZwXGs1PcLZ2DyI4JI,652
90
+ netbox_dns/tables/record.py,sha256=Rcl2Iea37jFRURAExlURrVZD1XxRvQdskdh93Mn7aOs,3797
91
+ netbox_dns/tables/record_template.py,sha256=CcXvyGycwp16ZwQFdmdt5W5Tlt__i1sBi3mixVvht3E,1763
92
+ netbox_dns/tables/registrar.py,sha256=Vtl3RKjhWzUDv4wAfjbNV1prZHf6SyGYmSS0XKccI9g,640
93
+ netbox_dns/tables/registration_contact.py,sha256=xUszp7_vbZ79KHewBZkSyxNcWE3W3o8O6Pp0N-8VDXg,838
94
+ netbox_dns/tables/view.py,sha256=w6tq_zDXGf1-MVmoCoZEuPajiuH_rccRH5eU5eurQ_s,1038
95
+ netbox_dns/tables/zone.py,sha256=bVi4sLFdw61kfIiRJnoJOtgkVGGlTZcogw-cAzFtAEQ,1507
96
+ netbox_dns/tables/zone_template.py,sha256=gezSSpbNkiHnstNq470OsTmkl13foFXTGx-NH8W87Hw,1204
97
+ netbox_dns/template_content.py,sha256=YzE-ZJlERhFybrUKJrmNwHk8_8RPNexkV66x62Sbzic,3718
98
+ netbox_dns/templates/netbox_dns/nameserver.html,sha256=DpTdetQVV_jKThDbi62LvbhiCay-1QxR-yiJEiPFm4w,1554
99
+ netbox_dns/templates/netbox_dns/record/managed.html,sha256=G6LPG1koUGuzUiwYdv1okdVa4sKaofiQegDBnsFL0kA,89
100
+ netbox_dns/templates/netbox_dns/record/related.html,sha256=Aqor8uGcuHQTHjlX-Xmni2Yp4N7lOBrMOqQiszrQOC0,742
101
+ netbox_dns/templates/netbox_dns/record.html,sha256=o3z_D6Fqqn7nx1IwPXKQ75ZaPhU6kae0WpaWa3UMcxQ,5211
102
+ netbox_dns/templates/netbox_dns/recordtemplate.html,sha256=9tkXtKqa5p3LdOU9REm99WSFwGJaH8OczpIqXZuXMcg,3099
103
+ netbox_dns/templates/netbox_dns/registrar.html,sha256=O5veGmW59Pf5yN25ihPLvRIkA2P7xmSGv0G3NrRG8vI,2152
104
+ netbox_dns/templates/netbox_dns/registrationcontact.html,sha256=4I3I7G38bIOVifoqgGMyPTAhD0UaD8ZCnXK7Fu9K9VQ,2868
105
+ netbox_dns/templates/netbox_dns/view/button.html,sha256=oXKNyPtY8XIu2sxtZWpFRXKXv862407ESyUQ4YsWCGE,292
106
+ netbox_dns/templates/netbox_dns/view/prefix.html,sha256=HD8f4mnbzFOXDj3Y_yq8yEeDpz_yFud8ZMpqbxzCEnA,1445
107
+ netbox_dns/templates/netbox_dns/view/related.html,sha256=W9Ie2aOsFkWyYtBnZn38seQDBmyJkV9dqFDG-Dq3yMk,736
108
+ netbox_dns/templates/netbox_dns/view.html,sha256=zqf42FGdNudoIIWCaCe9bmP_VOZDbv3GjS-qJNMKPVY,2479
109
+ netbox_dns/templates/netbox_dns/zone/base.html,sha256=n_E4aVYdGeZZl-ARE8sb4DgAAgPs92X1UEFepX3xIlM,495
110
+ netbox_dns/templates/netbox_dns/zone/child.html,sha256=kH56PJFBGCjiRdIh7zCtClnZdfOChqN_sYslsyoz5gU,2147
111
+ netbox_dns/templates/netbox_dns/zone/child_zone.html,sha256=b9CSGWEfWT7hLQ80gApMnu7mXM8w2LT-3UaOYe6HIRQ,510
112
+ netbox_dns/templates/netbox_dns/zone/managed_record.html,sha256=LOchMAJyfMZIICE6q0pX1eorRbtgUtOQ1u0VvJKCDZ8,514
113
+ netbox_dns/templates/netbox_dns/zone/record.html,sha256=tu5RFm2eYJ3fjeUxZYDJqJ9qK8tGslXl1iGs60DlRyM,2194
114
+ netbox_dns/templates/netbox_dns/zone/registration.html,sha256=de2Kph-G8Gv5LD_Wf294SLfO0UKPS9NmHeQYRfJf-Ck,1151
115
+ netbox_dns/templates/netbox_dns/zone/rfc2317_child_zone.html,sha256=rWlmb3zRQbLYQ_1dsa0twwu6y1dRj2tfFVEERH07p-s,517
116
+ netbox_dns/templates/netbox_dns/zone.html,sha256=zPi1sLFnya-ytx8-Pcf_ujc1sKllCRuz48x2E-S1HSo,6285
117
+ netbox_dns/templates/netbox_dns/zonetemplate.html,sha256=qjUWqrg4uDaIFt9-g0OBxTi86i_ctf2Ps4qHh11djQE,3081
118
+ netbox_dns/urls/__init__.py,sha256=AhZrz9E8JkZU_uRYYa3hFueAocsT-UYfOMZOfvosvR4,647
119
+ netbox_dns/urls/nameserver.py,sha256=-arhTF-q_h6IqcZ-CHD4GbBNCxltwRP-RoLY34KWITA,1294
120
+ netbox_dns/urls/record.py,sha256=5HnwrsQKbB3jcCfUSwrArItTYsKBTQaa8WiRt7SBniI,1136
121
+ netbox_dns/urls/record_template.py,sha256=kRAaienuN89WrOZGEcH1eZtiVlNsxsbZ1sjxWGxLKa0,1514
122
+ netbox_dns/urls/registrar.py,sha256=qhf_Qh4CYKmKYNoFIkuJxVtq1V0PMDYmqXq7olB0zfg,1211
123
+ netbox_dns/urls/registration_contact.py,sha256=hS9xzBN1jsHkGJzTYEpoCFZdXSbQx0yJpelB5SK4xq8,1718
124
+ netbox_dns/urls/view.py,sha256=pz-0iP_vGFUvrzIeOjq5Ebkmnaci8c4_5b2L0gYZvUE,1088
125
+ netbox_dns/urls/zone.py,sha256=EzZ_U5v9NfWB5TVAc0i35EI-SVyXl6KrI844sMT0x5Q,937
126
+ netbox_dns/urls/zone_template.py,sha256=nGrIaincQxCabUsLJL9JODoeTToMRSPllm7kuiPzeII,1378
127
+ netbox_dns/utilities/__init__.py,sha256=mmR0JdH1DJVhUKesnO3CZFj0Rw_wrsMPoYTpOOKHl9I,55
128
+ netbox_dns/utilities/conversions.py,sha256=NS37SoMqXc13wNWRkKnLfyQbVi6QKD33fu5ovTKRo74,1979
129
+ netbox_dns/utilities/ipam_dnssync.py,sha256=nopMJ3So1OjD0RDkbinnLLtR-8OHIlrh-0WtDHSZKRY,8622
130
+ netbox_dns/validators/__init__.py,sha256=Mr8TvmcJTa8Pubj8TzbFBKfbHhEmGcr5JdQvczEJ39A,72
131
+ netbox_dns/validators/dns_name.py,sha256=4JojiP6pb1Z1m_PmDv4g65Ckhg5rQkVqm8JAwHW28nA,3432
132
+ netbox_dns/validators/dns_value.py,sha256=y2Zga4hmywqDrTBXcMC-sWaFbw4eoY8pySq7cWnMP8Y,2822
133
+ netbox_dns/validators/rfc2317.py,sha256=ivylEiNKlmX2x41rwqDrFkD5CFf9FtpNEfsKHX_prbE,585
134
+ netbox_dns/views/__init__.py,sha256=axENVF9vX9BtDKCNxrapRjye1NnygUg9BS0BBj6a0io,209
135
+ netbox_dns/views/nameserver.py,sha256=CeZsKTciW85LFX9tMaGkiW1DUDT77jghtHnPCHFTAP8,3405
136
+ netbox_dns/views/record.py,sha256=fNpmSLH9kAaBMtsFy28bRIPRF8DMSBUPh1XlrYhYM9U,4781
137
+ netbox_dns/views/record_template.py,sha256=amYQc8dEwjI8msTSukcq4FwVqKF9eHSlaMBOFkHe0CE,2510
138
+ netbox_dns/views/registrar.py,sha256=ICaX9weZugWJXyRBjpHM5vD3Yz0hnhKKgb5e5DZf6zI,2295
139
+ netbox_dns/views/registration_contact.py,sha256=Yg4gTldQQPfAFgjD7vultw3OmcovWZtiNsUPyT22PiQ,2972
140
+ netbox_dns/views/view.py,sha256=-qdpEVrAI_fquZa-_jW2FvNXmCt3yRHIrkfgKKi01hc,2899
141
+ netbox_dns/views/zone.py,sha256=Na286tp_XcnT-4FIgXsvh1wPByir0RtBil0B2JhfuZE,5495
142
+ netbox_dns/views/zone_template.py,sha256=UaPEReBFoJP1k7MC8jS-iT3KQtJqSFu67jjCRiTCH4c,2118
143
+ netbox_plugin_dns-1.1.0.dist-info/LICENSE,sha256=I3tDu11bZfhFm3EkV4zOD5TmWgLjnUNLEFwrdjniZYs,1112
144
+ netbox_plugin_dns-1.1.0.dist-info/METADATA,sha256=akPhzYzccwtnUBd2peusrqZiBfMKAQlNk1JD-2amaJE,6723
145
+ netbox_plugin_dns-1.1.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
146
+ netbox_plugin_dns-1.1.0.dist-info/RECORD,,
@@ -1,109 +0,0 @@
1
- from django.core.management.base import BaseCommand
2
-
3
- from core.models import ObjectType
4
- from extras.models import CustomField
5
- from extras.choices import CustomFieldTypeChoices
6
- from ipam.models import IPAddress
7
- from netbox_dns.models import Zone
8
-
9
-
10
- class Command(BaseCommand):
11
- help = "Setup IPAddress custom fields needed for IPAM-DNS coupling"
12
-
13
- def add_arguments(self, parser):
14
- parser.add_argument(
15
- "--remove", action="store_true", help="Remove custom fields"
16
- )
17
- parser.add_argument("--verbose", action="store_true", help="Verbose output")
18
-
19
- def handle(self, *model_names, **options):
20
- ipaddress_object_type = ObjectType.objects.get_for_model(IPAddress)
21
-
22
- if options["remove"]:
23
- for cf in (
24
- "ipaddress_dns_record_name",
25
- "ipaddress_dns_record_ttl",
26
- "ipaddress_dns_record_disable_ptr",
27
- "ipaddress_dns_zone_id",
28
- ):
29
- try:
30
- CustomField.objects.get(
31
- name=cf, object_types=ipaddress_object_type
32
- ).delete()
33
- if options.get("verbose"):
34
- self.stdout.write(f"Custom field '{cf}' removed")
35
- except CustomField.DoesNotExist:
36
- pass
37
-
38
- else:
39
- if not CustomField.objects.filter(
40
- name="ipaddress_dns_record_name",
41
- type=CustomFieldTypeChoices.TYPE_TEXT,
42
- object_types=ipaddress_object_type,
43
- ).exists():
44
- cf_name = CustomField.objects.create(
45
- name="ipaddress_dns_record_name",
46
- label="Name",
47
- type=CustomFieldTypeChoices.TYPE_TEXT,
48
- required=False,
49
- group_name="DNS",
50
- )
51
- cf_name.object_types.set([ipaddress_object_type])
52
- if options.get("verbose"):
53
- self.stdout.write(
54
- "Created custom field 'ipaddress_dns_record_name'"
55
- )
56
-
57
- if not CustomField.objects.filter(
58
- name="ipaddress_dns_record_ttl",
59
- type=CustomFieldTypeChoices.TYPE_INTEGER,
60
- object_types=ipaddress_object_type,
61
- ).exists():
62
- cf_ttl = CustomField.objects.create(
63
- name="ipaddress_dns_record_ttl",
64
- label="TTL",
65
- type=CustomFieldTypeChoices.TYPE_INTEGER,
66
- validation_minimum=0,
67
- validation_maximum=2147483647,
68
- required=False,
69
- group_name="DNS",
70
- )
71
- cf_ttl.object_types.set([ipaddress_object_type])
72
- if options.get("verbose"):
73
- self.stdout.write("Created custom field 'ipaddress_dns_record_ttl'")
74
-
75
- if not CustomField.objects.filter(
76
- name="ipaddress_dns_record_disable_ptr",
77
- type=CustomFieldTypeChoices.TYPE_BOOLEAN,
78
- object_types=ipaddress_object_type,
79
- ).exists():
80
- cf_disable_ptr = CustomField.objects.create(
81
- name="ipaddress_dns_record_disable_ptr",
82
- label="Disable PTR",
83
- type=CustomFieldTypeChoices.TYPE_BOOLEAN,
84
- required=False,
85
- default=False,
86
- group_name="DNS",
87
- )
88
- cf_disable_ptr.object_types.set([ipaddress_object_type])
89
- if options.get("verbose"):
90
- self.stdout.write(
91
- "Created custom field 'ipaddress_dns_record_disable_ptr'"
92
- )
93
-
94
- if not CustomField.objects.filter(
95
- name="ipaddress_dns_zone_id",
96
- type=CustomFieldTypeChoices.TYPE_OBJECT,
97
- object_types=ipaddress_object_type,
98
- ).exists():
99
- cf_zone = CustomField.objects.create(
100
- name="ipaddress_dns_zone_id",
101
- label="Zone",
102
- type=CustomFieldTypeChoices.TYPE_OBJECT,
103
- related_object_type=ObjectType.objects.get_for_model(Zone),
104
- required=False,
105
- group_name="DNS",
106
- )
107
- cf_zone.object_types.set([ipaddress_object_type])
108
- if options.get("verbose"):
109
- self.stdout.write("Created custom field 'ipaddress_dns_zone_id'")