netbox-ddns 1.4.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.
- netbox_ddns/__init__.py +2 -2
- netbox_ddns/admin.py +0 -156
- netbox_ddns/api/serializers.py +20 -2
- netbox_ddns/api/views.py +1 -0
- netbox_ddns/filtersets.py +23 -1
- netbox_ddns/forms.py +54 -3
- netbox_ddns/migrations/0011_server_created_server_custom_field_data_and_more.py +36 -0
- netbox_ddns/migrations/0012_zone_created_zone_custom_field_data_and_more.py +36 -0
- netbox_ddns/migrations/0013_reversezone_created_reversezone_custom_field_data_and_more.py +36 -0
- netbox_ddns/models.py +52 -12
- netbox_ddns/navigation.py +58 -0
- netbox_ddns/tables.py +34 -33
- netbox_ddns/template_content.py +31 -3
- netbox_ddns/templates/netbox_ddns/extradnsname.html +23 -131
- netbox_ddns/templates/netbox_ddns/ipaddress/dns_extra.html +1 -1
- netbox_ddns/templates/netbox_ddns/reversezone.html +51 -0
- netbox_ddns/templates/netbox_ddns/server.html +68 -0
- netbox_ddns/templates/netbox_ddns/update_reverse_zone.html +11 -0
- netbox_ddns/templates/netbox_ddns/update_zone.html +11 -0
- netbox_ddns/templates/netbox_ddns/zone.html +53 -0
- netbox_ddns/urls.py +26 -14
- netbox_ddns/views.py +250 -84
- {netbox_ddns-1.4.0.dist-info → netbox_ddns-1.5.0.dist-info}/METADATA +2 -2
- netbox_ddns-1.5.0.dist-info/RECORD +47 -0
- {netbox_ddns-1.4.0.dist-info → netbox_ddns-1.5.0.dist-info}/WHEEL +1 -1
- netbox_ddns-1.4.0.dist-info/RECORD +0 -38
- {netbox_ddns-1.4.0.dist-info → netbox_ddns-1.5.0.dist-info}/LICENSE.txt +0 -0
- {netbox_ddns-1.4.0.dist-info → netbox_ddns-1.5.0.dist-info}/top_level.txt +0 -0
netbox_ddns/views.py
CHANGED
|
@@ -1,116 +1,203 @@
|
|
|
1
1
|
from django.contrib import messages
|
|
2
2
|
from django.contrib.auth.mixins import PermissionRequiredMixin
|
|
3
|
-
from django.
|
|
4
|
-
from django.shortcuts import get_object_or_404, redirect, render
|
|
5
|
-
from django.urls import reverse
|
|
3
|
+
from django.shortcuts import get_object_or_404, redirect
|
|
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.
|
|
12
|
-
from netbox_ddns.
|
|
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
|
-
from
|
|
16
|
-
from utilities.htmx import htmx_partial
|
|
17
|
-
from utilities.views import get_viewname
|
|
15
|
+
from netbox.views.generic import ObjectDeleteView, ObjectEditView, ObjectView, ObjectListView, BulkDeleteView
|
|
18
16
|
|
|
19
|
-
|
|
20
|
-
# NetBox <= 2.9
|
|
21
|
-
from utilities.views import ObjectDeleteView, ObjectEditView
|
|
22
|
-
except ImportError:
|
|
23
|
-
# NetBox >= 2.10
|
|
24
|
-
from netbox.views.generic import ObjectDeleteView, ObjectEditView, ObjectView
|
|
17
|
+
from django.views.generic import View
|
|
25
18
|
|
|
19
|
+
from utilities.views import register_model_view, GetRelatedModelsMixin
|
|
26
20
|
|
|
27
|
-
# noinspection PyMethodMayBeStatic
|
|
28
|
-
class ExtraDNSNameObjectMixin:
|
|
29
|
-
def get_object(self, *args, **kwargs):
|
|
30
|
-
# NetBox < 3.2.0
|
|
31
|
-
if not kwargs and len(args) == 1:
|
|
32
|
-
kwargs = args[0]
|
|
33
|
-
elif len(args) > 1:
|
|
34
|
-
raise TypeError('Method takes 1 positional argument but more were given')
|
|
35
21
|
|
|
36
|
-
|
|
37
|
-
|
|
22
|
+
# ReverseZone
|
|
23
|
+
@register_model_view(ReverseZone)
|
|
24
|
+
class ReverseZoneView(ObjectView):
|
|
25
|
+
queryset = ReverseZone.objects.all()
|
|
38
26
|
|
|
39
|
-
|
|
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
|
+
}
|
|
40
33
|
|
|
41
|
-
if 'pk' in kwargs:
|
|
42
|
-
return get_object_or_404(ExtraDNSName, ip_address=ip_address, pk=kwargs['pk'])
|
|
43
34
|
|
|
44
|
-
|
|
35
|
+
@register_model_view(ReverseZone, 'list', path='', detail=False)
|
|
36
|
+
class ReverseZoneListView(ObjectListView):
|
|
37
|
+
queryset = ReverseZone.objects.all()
|
|
38
|
+
table = ReverseZoneTable
|
|
45
39
|
|
|
46
|
-
def get_return_url(self, request, obj=None):
|
|
47
|
-
# First, see if `return_url` was specified as a query parameter or form data. Use this URL only if it's
|
|
48
|
-
# considered safe.
|
|
49
|
-
return_url = request.GET.get('return_url') or request.POST.get('return_url')
|
|
50
|
-
if return_url and return_url.startswith('/'):
|
|
51
|
-
return return_url
|
|
52
|
-
|
|
53
|
-
# Otherwise check we have an object and can return to its ip-address
|
|
54
|
-
elif obj is not None and obj.ip_address is not None:
|
|
55
|
-
return obj.ip_address.get_absolute_url()
|
|
56
40
|
|
|
57
|
-
|
|
58
|
-
|
|
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
|
|
59
46
|
|
|
60
47
|
|
|
61
|
-
|
|
62
|
-
|
|
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):
|
|
166
|
+
queryset = ExtraDNSName.objects.all()
|
|
167
|
+
form = ExtraDNSNameForm
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
@register_model_view(ExtraDNSName, 'edit')
|
|
171
|
+
class ExtraDNSNameEditView(ObjectEditView):
|
|
63
172
|
queryset = ExtraDNSName.objects.all()
|
|
64
|
-
form =
|
|
65
|
-
# NetBox < 3.2.0
|
|
66
|
-
@property
|
|
67
|
-
def model_form(self):
|
|
68
|
-
return self.form
|
|
173
|
+
form = ExtraDNSNameIPAddressForm
|
|
69
174
|
|
|
70
175
|
|
|
71
|
-
|
|
72
|
-
|
|
176
|
+
@register_model_view(ExtraDNSName, 'delete')
|
|
177
|
+
class ExtraDNSNameDeleteView(ObjectDeleteView):
|
|
73
178
|
queryset = ExtraDNSName.objects.all()
|
|
74
179
|
|
|
75
|
-
|
|
76
|
-
|
|
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)
|
|
77
184
|
|
|
78
185
|
|
|
79
|
-
|
|
80
|
-
|
|
186
|
+
@register_model_view(ExtraDNSName, 'bulk_delete', path='delete', detail=False)
|
|
187
|
+
class ExtraDNSNameBulkDeleteView(BulkDeleteView):
|
|
81
188
|
queryset = ExtraDNSName.objects.all()
|
|
189
|
+
filterset = ExtraDNSNameFilterSet
|
|
190
|
+
table = ExtraDNSNameTable
|
|
82
191
|
|
|
83
|
-
# Override request handler to fix the error on delete GET due to missing reverse route argument
|
|
84
|
-
def get(self, request, *args, **kwargs):
|
|
85
|
-
"""
|
|
86
|
-
GET request handler.
|
|
87
|
-
|
|
88
|
-
Args:
|
|
89
|
-
request: The current request
|
|
90
|
-
"""
|
|
91
|
-
obj = self.get_object(**kwargs)
|
|
92
|
-
form = ConfirmationForm(initial=request.GET)
|
|
93
|
-
|
|
94
|
-
try:
|
|
95
|
-
dependent_objects = self._get_dependent_objects(obj)
|
|
96
|
-
except ProtectedError as e:
|
|
97
|
-
return self._handle_protected_objects(obj, e.protected_objects, request, e)
|
|
98
|
-
except RestrictedError as e:
|
|
99
|
-
return self._handle_protected_objects(obj, e.restricted_objects, request, e)
|
|
100
|
-
|
|
101
|
-
# If this is an HTMX request, return only the rendered deletion form as modal content
|
|
102
|
-
if htmx_partial(request):
|
|
103
|
-
viewname = get_viewname(self.queryset.model, action='delete')
|
|
104
|
-
form_url = reverse(viewname, kwargs={'pk': obj.pk, 'ipaddress_pk': obj.ip_address.pk})
|
|
105
|
-
return render(request, 'htmx/delete_form.html', {
|
|
106
|
-
'object': obj,
|
|
107
|
-
'object_type': self.queryset.model._meta.verbose_name,
|
|
108
|
-
'form': form,
|
|
109
|
-
'form_url': form_url,
|
|
110
|
-
'dependent_objects': dependent_objects,
|
|
111
|
-
**self.get_extra_context(request, obj),
|
|
112
|
-
})
|
|
113
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)
|
|
114
201
|
|
|
115
202
|
|
|
116
203
|
class IPAddressDNSNameRecreateView(PermissionRequiredMixin, View):
|
|
@@ -153,3 +240,82 @@ class IPAddressDNSNameRecreateView(PermissionRequiredMixin, View):
|
|
|
153
240
|
messages.info(request, _("Updating DNS for {names}").format(names=', '.join(updated_names)))
|
|
154
241
|
|
|
155
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())
|
|
@@ -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,38 +0,0 @@
|
|
|
1
|
-
netbox_ddns/__init__.py,sha256=IZOC5tt2ftbeV5deUVxlZZ_W19rc-sjm4PpGcEtqb8s,652
|
|
2
|
-
netbox_ddns/admin.py,sha256=cCi0PnfuNv9PSygWbjFCh0ah6F0m3Ty0C3L-VtQYkFg,5658
|
|
3
|
-
netbox_ddns/background_tasks.py,sha256=oCw6V3aas1Q1C8ftsn1TisrJ0JU51sdDt_iTlm-ZNmk,7070
|
|
4
|
-
netbox_ddns/filtersets.py,sha256=dv2jGdhtBVeDu2sSxO9E8tJI6byhQcLdFGrK8XTvxXc,245
|
|
5
|
-
netbox_ddns/forms.py,sha256=zxj7IDk6kLxb-Z4HBcPH_-VuHP8bxfy2eEeKuYuf6Gg,188
|
|
6
|
-
netbox_ddns/models.py,sha256=me_0d4F3U0CEDNZAuhDNh9PaYY6IwIweo68INzDoTJE,12048
|
|
7
|
-
netbox_ddns/search.py,sha256=G07DBvjOzKNjbtm9d6_n___GKXQyJ2aCfSDjPRdRzGs,212
|
|
8
|
-
netbox_ddns/signals.py,sha256=yHkgZImnyTqRwPXAr2W9bd4rJof7YblkylJnDn1_FDc,4185
|
|
9
|
-
netbox_ddns/tables.py,sha256=v3VVoVc6Nscu46QZeptewroof40U_9T_a5yrvuaATIQ,1682
|
|
10
|
-
netbox_ddns/template_content.py,sha256=cnv3dOUd1LiidpSH2bMtYCs15sDcHLlqRv4cwfoeKNQ,1228
|
|
11
|
-
netbox_ddns/urls.py,sha256=m7Y86NHch-dNBOt_vn-3CEIiWyoEqReAfTHYRjLsFsk,946
|
|
12
|
-
netbox_ddns/utils.py,sha256=qAomseFWGL_VvL0sPF3Zmb6taMl3P9eEASqbMunmoyA,901
|
|
13
|
-
netbox_ddns/validators.py,sha256=K8EzI6D-Mm_H3Es6LzzXx5ntBDsr8tY79_DHZmbamWM,851
|
|
14
|
-
netbox_ddns/views.py,sha256=We1hUOmj9WH78BV-IKYO1OArXeCJaJoCrKD3XY5H6oo,5622
|
|
15
|
-
netbox_ddns/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
16
|
-
netbox_ddns/api/serializers.py,sha256=JtLoVrd7PB5DS-FGwKuOU393QMKbWEzqze31rLXInw8,616
|
|
17
|
-
netbox_ddns/api/urls.py,sha256=eoDxcu9tvR31xtTu0QebvTPqsCpckJfTqFj6Pm6-EyY,204
|
|
18
|
-
netbox_ddns/api/views.py,sha256=gaIYp6fKOkvmgdeWo7qrRYKOG6Fzs95uqnwQ1YjHd4w,361
|
|
19
|
-
netbox_ddns/migrations/0001_initial.py,sha256=pYwGDj9C3mPUuc8lfiXqTOYEhZ-MpGhLywGRulHcZQA,2461
|
|
20
|
-
netbox_ddns/migrations/0002_add_ttl.py,sha256=HP_lzWLZeSzgkIFFiGUgdzkPDRYt48uNwNTdAFwEwdg,617
|
|
21
|
-
netbox_ddns/migrations/0003_dnsstatus.py,sha256=TBQltrJeyk9q24_WdFpnUfMbV2-1VDt3ADuXN65bVJw,1200
|
|
22
|
-
netbox_ddns/migrations/0004_ensure_trailing_dot.py,sha256=SxKzmMC8IaO9ZDGRPzI3tWWt6AT0q01Dg1tY60mc1Mc,1243
|
|
23
|
-
netbox_ddns/migrations/0005_extradnsname.py,sha256=80f8OANyKpOa5LMZPQgRBdFQQ7ELjUeE0AU4fw5p114,1429
|
|
24
|
-
netbox_ddns/migrations/0006_extradns_cname.py,sha256=-To2qntWjzhnn3eTUX0JZRtf79NU06hkTJKs3CmTJiM,456
|
|
25
|
-
netbox_ddns/migrations/0007_zone_meta.py,sha256=iKHEk-KUJYbaAvuXL6YrsZsMcEPCYqs0EoEb6hRr_m8,416
|
|
26
|
-
netbox_ddns/migrations/0008_server_server_port.py,sha256=qqCMbOVJgxNmoEd2WofNy6QT6QbsiiML_ZzAaXuo0WI,530
|
|
27
|
-
netbox_ddns/migrations/0009_alter_dnsstatus_id_alter_extradnsname_id_and_more.py,sha256=3pjw6MqigeunuaHX011a2-yzxhwG3cELmtp4pmTx_BQ,1204
|
|
28
|
-
netbox_ddns/migrations/0010_extradnsname_created_extradnsname_custom_field_data_and_more.py,sha256=4bpm4nZLCHU0CqnCF6qWGtZd5x9flKrhJYRuAGFycwA,1157
|
|
29
|
-
netbox_ddns/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
30
|
-
netbox_ddns/templates/netbox_ddns/extradnsname.html,sha256=yWxangwanerD-poPxCLql3y-ojzoFCFRVGzVEwfzMNk,6234
|
|
31
|
-
netbox_ddns/templates/netbox_ddns/ipaddress/dns_extra.html,sha256=80fVzSSQUY1b5wfN_fLqbp_oCpByOlVsEQx5ezj2F_w,713
|
|
32
|
-
netbox_ddns/templates/netbox_ddns/ipaddress/dns_info.html,sha256=x4cpUovY3ZxmFoJeTLeqNUIw4ezoBkNfsYaRA6abUh4,1714
|
|
33
|
-
netbox_ddns/templates/netbox_ddns/ipaddress/dns_refresh_button.html,sha256=BBFwn2AP9PHfaU1ieYoB6X2eX84pPrUYYILbwYiKApc,430
|
|
34
|
-
netbox_ddns-1.4.0.dist-info/LICENSE.txt,sha256=DVQuDIgE45qn836wDaWnYhSdxoLXgpRRKH4RuTjpRZQ,10174
|
|
35
|
-
netbox_ddns-1.4.0.dist-info/METADATA,sha256=t8W8fHcCq9L2BnReAtSVgeuzLEIRV2OWuoGVZJnQAns,2266
|
|
36
|
-
netbox_ddns-1.4.0.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
|
|
37
|
-
netbox_ddns-1.4.0.dist-info/top_level.txt,sha256=nSPx7dwqPj2hyzG2H0ohzHt0kkyzA-6M3zYRL6qAm-s,12
|
|
38
|
-
netbox_ddns-1.4.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|