netbox-ddns 1.3.0__py3-none-any.whl → 1.5.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.
Files changed (34) hide show
  1. netbox_ddns/__init__.py +2 -2
  2. netbox_ddns/admin.py +0 -156
  3. netbox_ddns/api/__init__.py +0 -0
  4. netbox_ddns/api/serializers.py +35 -0
  5. netbox_ddns/api/urls.py +10 -0
  6. netbox_ddns/api/views.py +11 -0
  7. netbox_ddns/filtersets.py +30 -0
  8. netbox_ddns/forms.py +54 -3
  9. netbox_ddns/migrations/0009_alter_dnsstatus_id_alter_extradnsname_id_and_more.py +38 -0
  10. netbox_ddns/migrations/0010_extradnsname_created_extradnsname_custom_field_data_and_more.py +36 -0
  11. netbox_ddns/migrations/0011_server_created_server_custom_field_data_and_more.py +36 -0
  12. netbox_ddns/migrations/0012_zone_created_zone_custom_field_data_and_more.py +36 -0
  13. netbox_ddns/migrations/0013_reversezone_created_reversezone_custom_field_data_and_more.py +36 -0
  14. netbox_ddns/models.py +54 -14
  15. netbox_ddns/navigation.py +58 -0
  16. netbox_ddns/search.py +10 -0
  17. netbox_ddns/tables.py +34 -33
  18. netbox_ddns/template_content.py +31 -3
  19. netbox_ddns/templates/netbox_ddns/extradnsname.html +61 -0
  20. netbox_ddns/templates/netbox_ddns/ipaddress/dns_extra.html +2 -2
  21. netbox_ddns/templates/netbox_ddns/ipaddress/dns_refresh_button.html +1 -1
  22. netbox_ddns/templates/netbox_ddns/reversezone.html +51 -0
  23. netbox_ddns/templates/netbox_ddns/server.html +68 -0
  24. netbox_ddns/templates/netbox_ddns/update_reverse_zone.html +11 -0
  25. netbox_ddns/templates/netbox_ddns/update_zone.html +11 -0
  26. netbox_ddns/templates/netbox_ddns/zone.html +53 -0
  27. netbox_ddns/urls.py +26 -10
  28. netbox_ddns/views.py +255 -48
  29. {netbox_ddns-1.3.0.dist-info → netbox_ddns-1.5.0.dist-info}/METADATA +2 -2
  30. netbox_ddns-1.5.0.dist-info/RECORD +47 -0
  31. {netbox_ddns-1.3.0.dist-info → netbox_ddns-1.5.0.dist-info}/WHEEL +1 -1
  32. netbox_ddns-1.3.0.dist-info/RECORD +0 -29
  33. {netbox_ddns-1.3.0.dist-info → netbox_ddns-1.5.0.dist-info}/LICENSE.txt +0 -0
  34. {netbox_ddns-1.3.0.dist-info → netbox_ddns-1.5.0.dist-info}/top_level.txt +0 -0
netbox_ddns/views.py CHANGED
@@ -1,76 +1,204 @@
1
1
  from django.contrib import messages
2
2
  from django.contrib.auth.mixins import PermissionRequiredMixin
3
- from django.http import Http404
4
3
  from django.shortcuts import get_object_or_404, redirect
5
- from django.urls import reverse
6
4
  from django.utils.translation import gettext as _
7
- from django.views import View
8
5
 
9
6
  from ipam.models import IPAddress
7
+ from ipam.tables import IPAddressTable
10
8
  from netbox_ddns.background_tasks import dns_create
11
- from netbox_ddns.forms import ExtraDNSNameEditForm
12
- from netbox_ddns.models import DNSStatus, ExtraDNSName
9
+ from netbox_ddns.filtersets import ServerFilterSet, ZoneFilterSet, ReverseZoneFilterSet, ExtraDNSNameFilterSet
10
+ from netbox_ddns.forms import ServerForm, ZoneForm, ReverseZoneForm, ExtraDNSNameIPAddressForm, ExtraDNSNameForm
11
+ from netbox_ddns.models import DNSStatus, ExtraDNSName, Server, Zone, ReverseZone
12
+ from netbox_ddns.tables import ServerTable, ZoneTable, ReverseZoneTable, ExtraDNSNameTable
13
13
  from netbox_ddns.utils import normalize_fqdn
14
14
 
15
- try:
16
- # NetBox <= 2.9
17
- from utilities.views import ObjectDeleteView, ObjectEditView
18
- except ImportError:
19
- # NetBox >= 2.10
20
- from netbox.views.generic import ObjectDeleteView, ObjectEditView
15
+ from netbox.views.generic import ObjectDeleteView, ObjectEditView, ObjectView, ObjectListView, BulkDeleteView
21
16
 
17
+ from django.views.generic import View
22
18
 
23
- # noinspection PyMethodMayBeStatic
24
- class ExtraDNSNameObjectMixin:
25
- def get_object(self, *args, **kwargs):
26
- # NetBox < 3.2.0
27
- if not kwargs and len(args) == 1:
28
- kwargs = args[0]
29
- elif len(args) > 1:
30
- raise TypeError('Method takes 1 positional argument but more were given')
19
+ from utilities.views import register_model_view, GetRelatedModelsMixin
31
20
 
32
- if 'ipaddress_pk' not in kwargs:
33
- raise Http404
34
21
 
35
- ip_address = get_object_or_404(IPAddress, pk=kwargs['ipaddress_pk'])
22
+ # ReverseZone
23
+ @register_model_view(ReverseZone)
24
+ class ReverseZoneView(ObjectView):
25
+ queryset = ReverseZone.objects.all()
36
26
 
37
- if 'pk' in kwargs:
38
- return get_object_or_404(ExtraDNSName, ip_address=ip_address, pk=kwargs['pk'])
27
+ def get_extra_context(self, request, instance):
28
+ ip_address_table = IPAddressTable(instance.get_managed_ip_address().restrict(request.user, 'view'))
29
+ ip_address_table.configure(request)
30
+ return {
31
+ 'ip_address_table': ip_address_table,
32
+ }
39
33
 
40
- return ExtraDNSName(ip_address=ip_address)
41
34
 
42
- def get_return_url(self, request, obj=None):
43
- # First, see if `return_url` was specified as a query parameter or form data. Use this URL only if it's
44
- # considered safe.
45
- return_url = request.GET.get('return_url') or request.POST.get('return_url')
46
- if return_url and return_url.startswith('/'):
47
- return return_url
48
-
49
- # Otherwise check we have an object and can return to its ip-address
50
- elif obj is not None and obj.ip_address is not None:
51
- return obj.ip_address.get_absolute_url()
35
+ @register_model_view(ReverseZone, 'list', path='', detail=False)
36
+ class ReverseZoneListView(ObjectListView):
37
+ queryset = ReverseZone.objects.all()
38
+ table = ReverseZoneTable
52
39
 
53
- # If all else fails, return home. Ideally this should never happen.
54
- return reverse('home')
55
40
 
41
+ @register_model_view(ReverseZone, 'add', detail=False)
42
+ @register_model_view(ReverseZone, 'edit')
43
+ class ReverseZoneEditView(ObjectEditView):
44
+ queryset = ReverseZone.objects.all()
45
+ form = ReverseZoneForm
56
46
 
57
- class ExtraDNSNameCreateView(PermissionRequiredMixin, ExtraDNSNameObjectMixin, ObjectEditView):
58
- permission_required = 'netbox_ddns.add_extradnsname'
47
+
48
+ @register_model_view(ReverseZone, 'delete')
49
+ class ReverseZoneDeleteView(ObjectDeleteView):
50
+ queryset = ReverseZone.objects.all()
51
+
52
+
53
+ @register_model_view(ReverseZone, 'bulk_delete', path='delete', detail=False)
54
+ class ReverseZoneBulkDeleteView(BulkDeleteView):
55
+ queryset = ReverseZone.objects.all()
56
+ filterset = ReverseZoneFilterSet
57
+ table = ReverseZoneTable
58
+
59
+
60
+ # Zone
61
+ @register_model_view(Zone)
62
+ class ZoneView(ObjectView):
63
+ queryset = Zone.objects.all()
64
+
65
+ def get_extra_context(self, request, instance):
66
+ ip_address_table = IPAddressTable(instance.get_managed_ip_address().restrict(request.user, 'view'))
67
+ ip_address_table.configure(request)
68
+
69
+ extra_dns_name_table = ExtraDNSNameTable(instance.get_managed_extra_dns_name().restrict(request.user, 'view'))
70
+ extra_dns_name_table.configure(request)
71
+ return {
72
+ 'ip_address_table': ip_address_table,
73
+ 'extra_dns_name_table': extra_dns_name_table,
74
+ }
75
+
76
+
77
+ @register_model_view(Zone, 'list', path='', detail=False)
78
+ class ZoneListView(ObjectListView):
79
+ queryset = Zone.objects.all()
80
+ table = ZoneTable
81
+ filterset = ZoneFilterSet
82
+
83
+
84
+ @register_model_view(Zone, 'add', detail=False)
85
+ @register_model_view(Zone, 'edit')
86
+ class ZoneEditView(ObjectEditView):
87
+ queryset = Zone.objects.all()
88
+ form = ZoneForm
89
+
90
+
91
+ @register_model_view(Zone, 'delete')
92
+ class ZoneDeleteView(ObjectDeleteView):
93
+ queryset = Zone.objects.all()
94
+
95
+
96
+ @register_model_view(Zone, 'bulk_delete', path='delete', detail=False)
97
+ class ZoneBulkDeleteView(BulkDeleteView):
98
+ queryset = Zone.objects.all()
99
+ filterset = ZoneFilterSet
100
+ table = ZoneTable
101
+
102
+
103
+ # Server
104
+ @register_model_view(Server)
105
+ class ServerView(ObjectView):
106
+ queryset = Server.objects.all()
107
+
108
+ def get_extra_context(self, request, instance):
109
+ zone_table = ZoneTable(instance.zone_set.all(), exclude=["server"])
110
+ zone_table.configure(request)
111
+ reversezone_table = ZoneTable(instance.reversezone_set.all(), exclude=["server"])
112
+ reversezone_table.configure(request)
113
+ return {
114
+ 'zone_table': zone_table,
115
+ 'reversezone_table': reversezone_table,
116
+ }
117
+
118
+
119
+ @register_model_view(Server, 'list', path='', detail=False)
120
+ class ServerListView(ObjectListView):
121
+ queryset = Server.objects.all()
122
+ table = ServerTable
123
+ filterset = ServerFilterSet
124
+
125
+
126
+ @register_model_view(Server, 'add', detail=False)
127
+ @register_model_view(Server, 'edit')
128
+ class ServerEditView(ObjectEditView):
129
+ queryset = Server.objects.all()
130
+ form = ServerForm
131
+
132
+
133
+ @register_model_view(Server, 'delete')
134
+ class ServerDeleteView(ObjectDeleteView):
135
+ queryset = Server.objects.all()
136
+
137
+
138
+ @register_model_view(Server, 'bulk_delete', path='delete', detail=False)
139
+ class ServerBulkDeleteView(BulkDeleteView):
140
+ queryset = Server.objects.all()
141
+ filterset = ServerFilterSet
142
+ table = ServerTable
143
+
144
+
145
+ # ExtraDNSName
146
+ @register_model_view(ExtraDNSName)
147
+ class ExtraDNSNameView(ObjectView):
148
+ queryset = ExtraDNSName.objects.all()
149
+ def get_extra_context(self, request, instance):
150
+ zone = Zone.objects.find_for_dns_name(instance.name)
151
+ server = zone.server if zone else None
152
+ return {
153
+ 'zone': zone,
154
+ 'server': server,
155
+ }
156
+
157
+ @register_model_view(ExtraDNSName, 'list', path='', detail=False)
158
+ class ExtraDNSNameListView(ObjectListView):
159
+ queryset = ExtraDNSName.objects.all()
160
+ table = ExtraDNSNameTable
161
+ filterset = ExtraDNSNameFilterSet
162
+
163
+
164
+ @register_model_view(ExtraDNSName, 'add', detail=False)
165
+ class ExtraDNSNameEditView(ObjectEditView):
59
166
  queryset = ExtraDNSName.objects.all()
60
- form = ExtraDNSNameEditForm
61
- # NetBox < 3.2.0
62
- @property
63
- def model_form(self):
64
- return self.form
167
+ form = ExtraDNSNameForm
168
+
65
169
 
66
- class ExtraDNSNameEditView(ExtraDNSNameCreateView):
67
- permission_required = 'netbox_ddns.change_extradnsname'
170
+ @register_model_view(ExtraDNSName, 'edit')
171
+ class ExtraDNSNameEditView(ObjectEditView):
172
+ queryset = ExtraDNSName.objects.all()
173
+ form = ExtraDNSNameIPAddressForm
68
174
 
69
175
 
70
- class ExtraDNSNameDeleteView(PermissionRequiredMixin, ExtraDNSNameObjectMixin, ObjectDeleteView):
71
- permission_required = 'netbox_ddns.delete_extradnsname'
176
+ @register_model_view(ExtraDNSName, 'delete')
177
+ class ExtraDNSNameDeleteView(ObjectDeleteView):
72
178
  queryset = ExtraDNSName.objects.all()
73
179
 
180
+ def get_return_url(self, request, obj=None):
181
+ if obj and obj.ip_address:
182
+ return obj.ip_address.get_absolute_url()
183
+ return super().get_return_url(request, obj)
184
+
185
+
186
+ @register_model_view(ExtraDNSName, 'bulk_delete', path='delete', detail=False)
187
+ class ExtraDNSNameBulkDeleteView(BulkDeleteView):
188
+ queryset = ExtraDNSName.objects.all()
189
+ filterset = ExtraDNSNameFilterSet
190
+ table = ExtraDNSNameTable
191
+
192
+
193
+ class ExtraDNSNameCreateView(PermissionRequiredMixin, ObjectEditView):
194
+ permission_required = 'netbox_ddns.add_extradnsname'
195
+ queryset = ExtraDNSName.objects.all()
196
+ form = ExtraDNSNameIPAddressForm
197
+
198
+ def get_object(self, *args, **kwargs):
199
+ ip_address = get_object_or_404(IPAddress, pk=kwargs['ipaddress_pk'])
200
+ return ExtraDNSName(ip_address=ip_address)
201
+
74
202
 
75
203
  class IPAddressDNSNameRecreateView(PermissionRequiredMixin, View):
76
204
  permission_required = 'ipam.change_ipaddress'
@@ -112,3 +240,82 @@ class IPAddressDNSNameRecreateView(PermissionRequiredMixin, View):
112
240
  messages.info(request, _("Updating DNS for {names}").format(names=', '.join(updated_names)))
113
241
 
114
242
  return redirect('ipam:ipaddress', pk=ip_address.pk)
243
+
244
+
245
+ class UpdateForwardZone(PermissionRequiredMixin, View):
246
+ permission_required = 'ipam.change_ipaddress'
247
+
248
+ def post(self, request, pk):
249
+ zone = get_object_or_404(Zone, pk=pk)
250
+ counter = 0
251
+
252
+ ip_addresses = zone.get_managed_ip_address()
253
+ for ip_address in ip_addresses:
254
+ new_address = ip_address.address.ip
255
+ new_dns_name = normalize_fqdn(ip_address.dns_name)
256
+
257
+ if new_dns_name:
258
+ status, created = DNSStatus.objects.get_or_create(ip_address=ip_address)
259
+
260
+ dns_create.delay(
261
+ dns_name=new_dns_name,
262
+ address=new_address,
263
+ status=status,
264
+ reverse=False,
265
+ )
266
+ counter += 1
267
+
268
+ extra_names = zone.get_managed_extra_dns_name()
269
+ for extra in extra_names:
270
+ new_address = extra.ip_address.address.ip
271
+ new_dns_name = extra.name
272
+
273
+ dns_create.delay(
274
+ dns_name=new_dns_name,
275
+ address=new_address,
276
+ status=extra,
277
+ reverse=False,
278
+ )
279
+ counter += 1
280
+
281
+ messages.info(
282
+ request, _("Updating {count} forward records in {name}").format(
283
+ count=counter,
284
+ name=zone.name
285
+ )
286
+ )
287
+ return redirect(zone.get_absolute_url())
288
+
289
+
290
+ class UpdateReverseZone(PermissionRequiredMixin, View):
291
+ permission_required = 'ipam.change_ipaddress'
292
+
293
+ def post(self, request, pk):
294
+ reversezone = get_object_or_404(ReverseZone, pk=pk)
295
+
296
+ counter = 0
297
+
298
+ ip_addresses = reversezone.get_managed_ip_address()
299
+
300
+ for ip_address in ip_addresses:
301
+ new_address = ip_address.address.ip
302
+ new_dns_name = normalize_fqdn(ip_address.dns_name)
303
+
304
+ if new_dns_name:
305
+ status, created = DNSStatus.objects.get_or_create(ip_address=ip_address)
306
+
307
+ dns_create.delay(
308
+ dns_name=new_dns_name,
309
+ address=new_address,
310
+ status=status,
311
+ forward=False,
312
+ )
313
+ counter += 1
314
+
315
+ messages.info(
316
+ request, _("Updating {count} reverse records in {name}").format(
317
+ count=counter,
318
+ name=reversezone.name
319
+ )
320
+ )
321
+ return redirect(reversezone.get_absolute_url())
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: netbox-ddns
3
- Version: 1.3.0
3
+ Version: 1.5.0
4
4
  Summary: Dynamic DNS Connector for NetBox
5
5
  Home-page: https://github.com/sjm-steffann/netbox-ddns
6
6
  Author: Sander Steffann
@@ -0,0 +1,47 @@
1
+ netbox_ddns/__init__.py,sha256=UtIar40H5eO-n802D0-MRAAFeqQouOTjB0aaaZvA9qU,652
2
+ netbox_ddns/admin.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ netbox_ddns/background_tasks.py,sha256=oCw6V3aas1Q1C8ftsn1TisrJ0JU51sdDt_iTlm-ZNmk,7070
4
+ netbox_ddns/filtersets.py,sha256=nhHgkef7IqUA9ljyFn5rTuFYl4wKHzMkPfbLMCeHMtk,828
5
+ netbox_ddns/forms.py,sha256=ERHgLdmEyJfHLp1R4PxOEmmWNKNeZUSImTChjuftxW8,1520
6
+ netbox_ddns/models.py,sha256=C5XcotUzYHLFbdffr1mdM3p6XFT_WvjOr70g-vFoReg,13926
7
+ netbox_ddns/navigation.py,sha256=PiDri64dpW2MCiFZBst_YDEhKfeYwG58BvxIfzhQDFc,1899
8
+ netbox_ddns/search.py,sha256=G07DBvjOzKNjbtm9d6_n___GKXQyJ2aCfSDjPRdRzGs,212
9
+ netbox_ddns/signals.py,sha256=yHkgZImnyTqRwPXAr2W9bd4rJof7YblkylJnDn1_FDc,4185
10
+ netbox_ddns/tables.py,sha256=yKZq_yo8RtqDGrTxQdQ1UVTDAWCcJvB_S36o74NLPSQ,1376
11
+ netbox_ddns/template_content.py,sha256=eHFkkH5X5JcKLA1d7Qj_ooG1zD84ebI43mKqGzhafgs,2122
12
+ netbox_ddns/urls.py,sha256=gBHvHlfWwQfQPBkl47v73PDDuIhgjGs4hUkCkCJSQbA,1543
13
+ netbox_ddns/utils.py,sha256=qAomseFWGL_VvL0sPF3Zmb6taMl3P9eEASqbMunmoyA,901
14
+ netbox_ddns/validators.py,sha256=K8EzI6D-Mm_H3Es6LzzXx5ntBDsr8tY79_DHZmbamWM,851
15
+ netbox_ddns/views.py,sha256=X01Hc6chcrPyVWYwWsx8nrXMfsx10_OU3GVB3XtNbDE,10275
16
+ netbox_ddns/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
+ netbox_ddns/api/serializers.py,sha256=8rQUNLIIoUOz2M7AHKxdedDIS7QAMUSdrnMcTWuwG78,1098
18
+ netbox_ddns/api/urls.py,sha256=eoDxcu9tvR31xtTu0QebvTPqsCpckJfTqFj6Pm6-EyY,204
19
+ netbox_ddns/api/views.py,sha256=9P5vqubPTd0MYOrApnmDYSzjdEo9kmq0BcjVqUFtIA8,362
20
+ netbox_ddns/migrations/0001_initial.py,sha256=pYwGDj9C3mPUuc8lfiXqTOYEhZ-MpGhLywGRulHcZQA,2461
21
+ netbox_ddns/migrations/0002_add_ttl.py,sha256=HP_lzWLZeSzgkIFFiGUgdzkPDRYt48uNwNTdAFwEwdg,617
22
+ netbox_ddns/migrations/0003_dnsstatus.py,sha256=TBQltrJeyk9q24_WdFpnUfMbV2-1VDt3ADuXN65bVJw,1200
23
+ netbox_ddns/migrations/0004_ensure_trailing_dot.py,sha256=SxKzmMC8IaO9ZDGRPzI3tWWt6AT0q01Dg1tY60mc1Mc,1243
24
+ netbox_ddns/migrations/0005_extradnsname.py,sha256=80f8OANyKpOa5LMZPQgRBdFQQ7ELjUeE0AU4fw5p114,1429
25
+ netbox_ddns/migrations/0006_extradns_cname.py,sha256=-To2qntWjzhnn3eTUX0JZRtf79NU06hkTJKs3CmTJiM,456
26
+ netbox_ddns/migrations/0007_zone_meta.py,sha256=iKHEk-KUJYbaAvuXL6YrsZsMcEPCYqs0EoEb6hRr_m8,416
27
+ netbox_ddns/migrations/0008_server_server_port.py,sha256=qqCMbOVJgxNmoEd2WofNy6QT6QbsiiML_ZzAaXuo0WI,530
28
+ netbox_ddns/migrations/0009_alter_dnsstatus_id_alter_extradnsname_id_and_more.py,sha256=3pjw6MqigeunuaHX011a2-yzxhwG3cELmtp4pmTx_BQ,1204
29
+ netbox_ddns/migrations/0010_extradnsname_created_extradnsname_custom_field_data_and_more.py,sha256=4bpm4nZLCHU0CqnCF6qWGtZd5x9flKrhJYRuAGFycwA,1157
30
+ netbox_ddns/migrations/0011_server_created_server_custom_field_data_and_more.py,sha256=D0resBMdiy7JEznlq1Fcw018CPFZFIn7lEBp5sC6frU,1133
31
+ netbox_ddns/migrations/0012_zone_created_zone_custom_field_data_and_more.py,sha256=5Rx21TsOxbb-bFRWceRTzBWVuw2b9p70w9yha7SfizE,1113
32
+ netbox_ddns/migrations/0013_reversezone_created_reversezone_custom_field_data_and_more.py,sha256=BTo5lpO9NZMwHOCiOhINMfp4aFeIQXkXLQ5HKTARIk0,1137
33
+ netbox_ddns/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
+ netbox_ddns/templates/netbox_ddns/extradnsname.html,sha256=noeIxirmaaxBFCCbhCloIfctGQGY7JRi92z19by7e8s,2630
35
+ netbox_ddns/templates/netbox_ddns/reversezone.html,sha256=Ez5su5iqpbwZbRP8LUS0qcojWrnukyTtWBSLVGjI8MQ,1787
36
+ netbox_ddns/templates/netbox_ddns/server.html,sha256=C1MdMk-d3PRjdgEhUngqGVv5MDiYjayrdFOnJTsozxg,2449
37
+ netbox_ddns/templates/netbox_ddns/update_reverse_zone.html,sha256=oF01zNC5sDJVhoWzoj7jQxZqaBE9xvZRsJ-JmI5zonI,429
38
+ netbox_ddns/templates/netbox_ddns/update_zone.html,sha256=76o3CI7CbaJh6VDtAq2SgeW-kLGmY8SjYlkTfLDE8hw,422
39
+ netbox_ddns/templates/netbox_ddns/zone.html,sha256=j1xHfagwx7hEuOWT5h4YIwGkKD9KM3guYtzZsdYhi8o,1912
40
+ netbox_ddns/templates/netbox_ddns/ipaddress/dns_extra.html,sha256=8lk_HTcDiXugbHMq2hsOdjRB3gv-HX9XnrvZJVHnpoA,724
41
+ netbox_ddns/templates/netbox_ddns/ipaddress/dns_info.html,sha256=x4cpUovY3ZxmFoJeTLeqNUIw4ezoBkNfsYaRA6abUh4,1714
42
+ netbox_ddns/templates/netbox_ddns/ipaddress/dns_refresh_button.html,sha256=BBFwn2AP9PHfaU1ieYoB6X2eX84pPrUYYILbwYiKApc,430
43
+ netbox_ddns-1.5.0.dist-info/LICENSE.txt,sha256=DVQuDIgE45qn836wDaWnYhSdxoLXgpRRKH4RuTjpRZQ,10174
44
+ netbox_ddns-1.5.0.dist-info/METADATA,sha256=z9VdpNI1Xw62cffAK0eGaWyavsKQw5oikYpD-XoCVUA,2266
45
+ netbox_ddns-1.5.0.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
46
+ netbox_ddns-1.5.0.dist-info/top_level.txt,sha256=nSPx7dwqPj2hyzG2H0ohzHt0kkyzA-6M3zYRL6qAm-s,12
47
+ netbox_ddns-1.5.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,29 +0,0 @@
1
- netbox_ddns/__init__.py,sha256=OTcu4ObcjjMxFMaT-aHc6S1U8SsGS5cXYc0NJopawB0,652
2
- netbox_ddns/admin.py,sha256=cCi0PnfuNv9PSygWbjFCh0ah6F0m3Ty0C3L-VtQYkFg,5658
3
- netbox_ddns/background_tasks.py,sha256=oCw6V3aas1Q1C8ftsn1TisrJ0JU51sdDt_iTlm-ZNmk,7070
4
- netbox_ddns/forms.py,sha256=zxj7IDk6kLxb-Z4HBcPH_-VuHP8bxfy2eEeKuYuf6Gg,188
5
- netbox_ddns/models.py,sha256=22j5CQ8UfipKAJXz5MbyfkFIyquQqLPbDjZJtxpWKgk,12017
6
- netbox_ddns/signals.py,sha256=yHkgZImnyTqRwPXAr2W9bd4rJof7YblkylJnDn1_FDc,4185
7
- netbox_ddns/tables.py,sha256=3HFCZPr0Wj_gpEJeuDo-a0vG6YJ-9Q6_Zy_dMF3-vlA,1696
8
- netbox_ddns/template_content.py,sha256=cnv3dOUd1LiidpSH2bMtYCs15sDcHLlqRv4cwfoeKNQ,1228
9
- netbox_ddns/urls.py,sha256=04WS4w3RAX5KntnLSs5YLboIqDqNhubOeb_TVqUl9x0,788
10
- netbox_ddns/utils.py,sha256=qAomseFWGL_VvL0sPF3Zmb6taMl3P9eEASqbMunmoyA,901
11
- netbox_ddns/validators.py,sha256=K8EzI6D-Mm_H3Es6LzzXx5ntBDsr8tY79_DHZmbamWM,851
12
- netbox_ddns/views.py,sha256=eSSmg2jyZY0AA3_hsZL00kGr7FqwWCDHtwzNt08ZGcQ,3950
13
- netbox_ddns/migrations/0001_initial.py,sha256=pYwGDj9C3mPUuc8lfiXqTOYEhZ-MpGhLywGRulHcZQA,2461
14
- netbox_ddns/migrations/0002_add_ttl.py,sha256=HP_lzWLZeSzgkIFFiGUgdzkPDRYt48uNwNTdAFwEwdg,617
15
- netbox_ddns/migrations/0003_dnsstatus.py,sha256=TBQltrJeyk9q24_WdFpnUfMbV2-1VDt3ADuXN65bVJw,1200
16
- netbox_ddns/migrations/0004_ensure_trailing_dot.py,sha256=SxKzmMC8IaO9ZDGRPzI3tWWt6AT0q01Dg1tY60mc1Mc,1243
17
- netbox_ddns/migrations/0005_extradnsname.py,sha256=80f8OANyKpOa5LMZPQgRBdFQQ7ELjUeE0AU4fw5p114,1429
18
- netbox_ddns/migrations/0006_extradns_cname.py,sha256=-To2qntWjzhnn3eTUX0JZRtf79NU06hkTJKs3CmTJiM,456
19
- netbox_ddns/migrations/0007_zone_meta.py,sha256=iKHEk-KUJYbaAvuXL6YrsZsMcEPCYqs0EoEb6hRr_m8,416
20
- netbox_ddns/migrations/0008_server_server_port.py,sha256=qqCMbOVJgxNmoEd2WofNy6QT6QbsiiML_ZzAaXuo0WI,530
21
- netbox_ddns/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
- netbox_ddns/templates/netbox_ddns/ipaddress/dns_extra.html,sha256=LmyLtOMpylHiicf4_zU1NIUVIafnEPUIt3hDiD2aK_o,720
23
- netbox_ddns/templates/netbox_ddns/ipaddress/dns_info.html,sha256=x4cpUovY3ZxmFoJeTLeqNUIw4ezoBkNfsYaRA6abUh4,1714
24
- netbox_ddns/templates/netbox_ddns/ipaddress/dns_refresh_button.html,sha256=_aBikAGy-UPmfo5MtX3YgLbocrQ8zf2091fW8PDzIRk,437
25
- netbox_ddns-1.3.0.dist-info/LICENSE.txt,sha256=DVQuDIgE45qn836wDaWnYhSdxoLXgpRRKH4RuTjpRZQ,10174
26
- netbox_ddns-1.3.0.dist-info/METADATA,sha256=POraBfrmm-XJTcN3kptGPdqSOI5m3p3A3mmTDkZK-8o,2266
27
- netbox_ddns-1.3.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
28
- netbox_ddns-1.3.0.dist-info/top_level.txt,sha256=nSPx7dwqPj2hyzG2H0ohzHt0kkyzA-6M3zYRL6qAm-s,12
29
- netbox_ddns-1.3.0.dist-info/RECORD,,