netbox-plugin-dns 1.3.1__py3-none-any.whl → 1.3.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.
- netbox_dns/__init__.py +1 -1
- netbox_dns/graphql/filters/dnssec_key_template.py +1 -1
- netbox_dns/graphql/filters/dnssec_policy.py +1 -1
- netbox_dns/graphql/filters/nameserver.py +1 -1
- netbox_dns/graphql/filters/record.py +1 -1
- netbox_dns/graphql/filters/record_template.py +1 -1
- netbox_dns/graphql/filters/registrar.py +1 -1
- netbox_dns/graphql/filters/registration_contact.py +1 -1
- netbox_dns/graphql/filters/view.py +1 -1
- netbox_dns/graphql/filters/zone.py +1 -1
- netbox_dns/graphql/filters/zone_template.py +1 -1
- netbox_dns/management/commands/remove_orphaned_ptr_records.py +35 -0
- netbox_dns/migrations/0022_alter_record_ipam_ip_address.py +26 -0
- netbox_dns/models/record.py +58 -44
- netbox_dns/templates/netbox_dns/record.html +7 -0
- netbox_dns/utilities/ipam_dnssync.py +21 -3
- {netbox_plugin_dns-1.3.1.dist-info → netbox_plugin_dns-1.3.2.dist-info}/METADATA +1 -1
- {netbox_plugin_dns-1.3.1.dist-info → netbox_plugin_dns-1.3.2.dist-info}/RECORD +21 -19
- {netbox_plugin_dns-1.3.1.dist-info → netbox_plugin_dns-1.3.2.dist-info}/WHEEL +1 -1
- {netbox_plugin_dns-1.3.1.dist-info → netbox_plugin_dns-1.3.2.dist-info}/licenses/LICENSE +0 -0
- {netbox_plugin_dns-1.3.1.dist-info → netbox_plugin_dns-1.3.2.dist-info}/top_level.txt +0 -0
netbox_dns/__init__.py
CHANGED
|
@@ -23,7 +23,7 @@ from netbox_dns.models import DNSSECKeyTemplate
|
|
|
23
23
|
__all__ = ("NetBoxDNSDNSSECKeyTemplateFilter",)
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
@strawberry_django.
|
|
26
|
+
@strawberry_django.filter_type(DNSSECKeyTemplate, lookups=True)
|
|
27
27
|
class NetBoxDNSDNSSECKeyTemplateFilter(
|
|
28
28
|
ContactFilterMixin, TenancyFilterMixin, NetBoxModelFilterMixin
|
|
29
29
|
):
|
|
@@ -21,7 +21,7 @@ from netbox_dns.graphql.filter_lookups import PolicyDigestArrayLookup
|
|
|
21
21
|
__all__ = ("NetBoxDNSDNSSECPolicyFilter", "PolicyDigestArrayLookup")
|
|
22
22
|
|
|
23
23
|
|
|
24
|
-
@strawberry_django.
|
|
24
|
+
@strawberry_django.filter_type(DNSSECPolicy, lookups=True)
|
|
25
25
|
class NetBoxDNSDNSSECPolicyFilter(
|
|
26
26
|
ContactFilterMixin, TenancyFilterMixin, NetBoxModelFilterMixin
|
|
27
27
|
):
|
|
@@ -16,7 +16,7 @@ from netbox_dns.models import NameServer
|
|
|
16
16
|
__all__ = ("NetBoxDNSNameServerFilter",)
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
@strawberry_django.
|
|
19
|
+
@strawberry_django.filter_type(NameServer, lookups=True)
|
|
20
20
|
class NetBoxDNSNameServerFilter(
|
|
21
21
|
ContactFilterMixin, TenancyFilterMixin, NetBoxModelFilterMixin
|
|
22
22
|
):
|
|
@@ -24,7 +24,7 @@ from netbox_dns.models import Record
|
|
|
24
24
|
__all__ = ("NetBoxDNSRecordFilter",)
|
|
25
25
|
|
|
26
26
|
|
|
27
|
-
@strawberry_django.
|
|
27
|
+
@strawberry_django.filter_type(Record, lookups=True)
|
|
28
28
|
class NetBoxDNSRecordFilter(
|
|
29
29
|
ContactFilterMixin, TenancyFilterMixin, NetBoxModelFilterMixin
|
|
30
30
|
):
|
|
@@ -20,7 +20,7 @@ from netbox_dns.models import RecordTemplate
|
|
|
20
20
|
__all__ = ("NetBoxDNSRecordTemplateFilter",)
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
@strawberry_django.
|
|
23
|
+
@strawberry_django.filter_type(RecordTemplate, lookups=True)
|
|
24
24
|
class NetBoxDNSRecordTemplateFilter(
|
|
25
25
|
ContactFilterMixin, TenancyFilterMixin, NetBoxModelFilterMixin
|
|
26
26
|
):
|
|
@@ -15,7 +15,7 @@ from netbox_dns.models import Registrar
|
|
|
15
15
|
__all__ = ("NetBoxDNSRegistrarFilter",)
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
@strawberry_django.
|
|
18
|
+
@strawberry_django.filter_type(Registrar, lookups=True)
|
|
19
19
|
class NetBoxDNSRegistrarFilter(NetBoxModelFilterMixin):
|
|
20
20
|
name: FilterLookup[str] | None = strawberry_django.filter_field()
|
|
21
21
|
description: FilterLookup[str] | None = strawberry_django.filter_field()
|
|
@@ -9,7 +9,7 @@ from netbox_dns.models import RegistrationContact
|
|
|
9
9
|
__all__ = ("NetBoxDNSRegistrationContactFilter",)
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
@strawberry_django.
|
|
12
|
+
@strawberry_django.filter_type(RegistrationContact, lookups=True)
|
|
13
13
|
class NetBoxDNSRegistrationContactFilter(NetBoxModelFilterMixin):
|
|
14
14
|
name: FilterLookup[str] | None = strawberry_django.filter_field()
|
|
15
15
|
description: FilterLookup[str] | None = strawberry_django.filter_field()
|
|
@@ -16,7 +16,7 @@ from netbox_dns.models import View
|
|
|
16
16
|
__all__ = ("NetBoxDNSViewFilter",)
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
@strawberry_django.
|
|
19
|
+
@strawberry_django.filter_type(View, lookups=True)
|
|
20
20
|
class NetBoxDNSViewFilter(
|
|
21
21
|
ContactFilterMixin, TenancyFilterMixin, NetBoxModelFilterMixin
|
|
22
22
|
):
|
|
@@ -23,7 +23,7 @@ from netbox_dns.models import Zone
|
|
|
23
23
|
__all__ = ("NetBoxDNSZoneFilter",)
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
@strawberry_django.
|
|
26
|
+
@strawberry_django.filter_type(Zone, lookups=True)
|
|
27
27
|
class NetBoxDNSZoneFilter(
|
|
28
28
|
ContactFilterMixin, TenancyFilterMixin, NetBoxModelFilterMixin
|
|
29
29
|
):
|
|
@@ -21,7 +21,7 @@ from netbox_dns.models import ZoneTemplate
|
|
|
21
21
|
__all__ = ("NetBoxDNSZoneTemplateFilter",)
|
|
22
22
|
|
|
23
23
|
|
|
24
|
-
@strawberry_django.
|
|
24
|
+
@strawberry_django.filter_type(ZoneTemplate, lookups=True)
|
|
25
25
|
class NetBoxDNSZoneTemplateFilter(
|
|
26
26
|
ContactFilterMixin, TenancyFilterMixin, NetBoxModelFilterMixin
|
|
27
27
|
):
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
from django.core.management.base import BaseCommand
|
|
2
|
+
|
|
3
|
+
from netbox_dns.models import Record
|
|
4
|
+
from netbox_dns.choices import RecordTypeChoices
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class Command(BaseCommand):
|
|
8
|
+
help = "Remove managed PTR records without an address record"
|
|
9
|
+
|
|
10
|
+
def handle(self, *model_names, **options):
|
|
11
|
+
orphaned_ptr_records = Record.objects.filter(
|
|
12
|
+
type=RecordTypeChoices.PTR,
|
|
13
|
+
address_records__isnull=True,
|
|
14
|
+
managed=True,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
if not orphaned_ptr_records.exists():
|
|
18
|
+
if options.get("verbosity") >= 1:
|
|
19
|
+
self.stdout.write("No orphaned PTR records found")
|
|
20
|
+
return
|
|
21
|
+
|
|
22
|
+
if options.get("verbosity") >= 1:
|
|
23
|
+
self.stdout.write(
|
|
24
|
+
f"Removing {orphaned_ptr_records.count()} orphaned PTR record(s) ..."
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
for record in orphaned_ptr_records:
|
|
28
|
+
if options.get("verbosity") >= 2:
|
|
29
|
+
self.stdout.write(
|
|
30
|
+
f"removing PTR record {record} from zone {record.zone}"
|
|
31
|
+
)
|
|
32
|
+
record.delete()
|
|
33
|
+
|
|
34
|
+
if options.get("verbosity") >= 1:
|
|
35
|
+
self.stdout.write("... done.")
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Generated by Django 5.2.1 on 2025-05-19 19:34
|
|
2
|
+
|
|
3
|
+
import django.db.models.deletion
|
|
4
|
+
from django.db import migrations, models
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class Migration(migrations.Migration):
|
|
8
|
+
|
|
9
|
+
dependencies = [
|
|
10
|
+
("ipam", "0081_remove_service_device_virtual_machine_add_parent_gfk_index"),
|
|
11
|
+
("netbox_dns", "0021_alter_record_ptr_record"),
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
operations = [
|
|
15
|
+
migrations.AlterField(
|
|
16
|
+
model_name="record",
|
|
17
|
+
name="ipam_ip_address",
|
|
18
|
+
field=models.ForeignKey(
|
|
19
|
+
blank=True,
|
|
20
|
+
null=True,
|
|
21
|
+
on_delete=django.db.models.deletion.SET_NULL,
|
|
22
|
+
related_name="netbox_dns_records",
|
|
23
|
+
to="ipam.ipaddress",
|
|
24
|
+
),
|
|
25
|
+
),
|
|
26
|
+
]
|
netbox_dns/models/record.py
CHANGED
|
@@ -6,7 +6,7 @@ from dns import name as dns_name
|
|
|
6
6
|
from dns import rdata
|
|
7
7
|
|
|
8
8
|
from django.core.exceptions import ValidationError
|
|
9
|
-
from django.db import
|
|
9
|
+
from django.db import models
|
|
10
10
|
from django.db.models import Q, ExpressionWrapper, BooleanField, Min
|
|
11
11
|
from django.conf import settings
|
|
12
12
|
from django.utils.translation import gettext_lazy as _
|
|
@@ -245,7 +245,7 @@ class Record(ObjectModificationMixin, ContactsMixin, NetBoxModel):
|
|
|
245
245
|
ipam_ip_address = models.ForeignKey(
|
|
246
246
|
verbose_name=_("IPAM IP Address"),
|
|
247
247
|
to="ipam.IPAddress",
|
|
248
|
-
on_delete=models.
|
|
248
|
+
on_delete=models.SET_NULL,
|
|
249
249
|
related_name="netbox_dns_records",
|
|
250
250
|
blank=True,
|
|
251
251
|
null=True,
|
|
@@ -378,6 +378,10 @@ class Record(ObjectModificationMixin, ContactsMixin, NetBoxModel):
|
|
|
378
378
|
def update_ptr_record(self, update_rfc2317_cname=True, save_zone_serial=True):
|
|
379
379
|
ptr_zone = self.ptr_zone
|
|
380
380
|
|
|
381
|
+
# +
|
|
382
|
+
# Check whether a PTR record is optioned for and return if that is not the
|
|
383
|
+
# case.
|
|
384
|
+
# -
|
|
381
385
|
if (
|
|
382
386
|
ptr_zone is None
|
|
383
387
|
or self.disable_ptr
|
|
@@ -388,6 +392,10 @@ class Record(ObjectModificationMixin, ContactsMixin, NetBoxModel):
|
|
|
388
392
|
self.ptr_record = None
|
|
389
393
|
return
|
|
390
394
|
|
|
395
|
+
# +
|
|
396
|
+
# Determine the ptr_name and ptr_value related to the ptr_zone. RFC2317
|
|
397
|
+
# PTR names and zones need to be handled differently.
|
|
398
|
+
# -
|
|
391
399
|
if ptr_zone.is_rfc2317_zone:
|
|
392
400
|
ptr_name = self.rfc2317_ptr_name
|
|
393
401
|
else:
|
|
@@ -396,9 +404,12 @@ class Record(ObjectModificationMixin, ContactsMixin, NetBoxModel):
|
|
|
396
404
|
.relativize(dns_name.from_text(ptr_zone.name))
|
|
397
405
|
.to_text()
|
|
398
406
|
)
|
|
399
|
-
|
|
400
407
|
ptr_value = self.fqdn
|
|
401
|
-
|
|
408
|
+
|
|
409
|
+
# +
|
|
410
|
+
# If there is an existing and matching PTR record there is nothing to be done.
|
|
411
|
+
# -
|
|
412
|
+
if (ptr_record := self.ptr_record) is not None:
|
|
402
413
|
if (
|
|
403
414
|
ptr_record.zone == ptr_zone
|
|
404
415
|
and ptr_record.name == ptr_name
|
|
@@ -407,15 +418,37 @@ class Record(ObjectModificationMixin, ContactsMixin, NetBoxModel):
|
|
|
407
418
|
):
|
|
408
419
|
return
|
|
409
420
|
|
|
410
|
-
|
|
421
|
+
# +
|
|
422
|
+
# If there is an RFC2317 CNAME for the PTR record and it is either
|
|
423
|
+
# not required or needs to be changed, remove it.
|
|
424
|
+
# -
|
|
411
425
|
if (
|
|
412
|
-
not ptr_record.zone.is_rfc2317_zone
|
|
413
|
-
|
|
414
|
-
):
|
|
426
|
+
ptr_record.zone.pk != ptr_zone.pk or not ptr_record.zone.is_rfc2317_zone
|
|
427
|
+
) and ptr_record.rfc2317_cname_record is not None:
|
|
415
428
|
ptr_record.rfc2317_cname_record.delete(
|
|
416
429
|
save_zone_serial=save_zone_serial
|
|
417
430
|
)
|
|
431
|
+
ptr_record.rfc2317_cname_record = None
|
|
432
|
+
|
|
433
|
+
# +
|
|
434
|
+
# If the PTR record is used exclusively by the address record it can be
|
|
435
|
+
# modified to match the new name, zone, value and TTL.
|
|
436
|
+
# -
|
|
437
|
+
if ptr_record.address_records.count() == 1:
|
|
438
|
+
ptr_record.zone = ptr_zone
|
|
439
|
+
ptr_record.name = ptr_name
|
|
440
|
+
ptr_record.value = ptr_value
|
|
441
|
+
ptr_record.ttl = self.ttl
|
|
442
|
+
ptr_record.save(
|
|
443
|
+
update_rfc2317_cname=update_rfc2317_cname,
|
|
444
|
+
save_zone_serial=save_zone_serial,
|
|
445
|
+
)
|
|
446
|
+
return
|
|
418
447
|
|
|
448
|
+
# +
|
|
449
|
+
# Either there was no PTR record or the existing PTR record could not be re-used,
|
|
450
|
+
# so we need to either get find a matching PTR record or create a new one.
|
|
451
|
+
# -
|
|
419
452
|
try:
|
|
420
453
|
ptr_record = Record.objects.get(
|
|
421
454
|
name=ptr_name,
|
|
@@ -423,43 +456,24 @@ class Record(ObjectModificationMixin, ContactsMixin, NetBoxModel):
|
|
|
423
456
|
type=RecordTypeChoices.PTR,
|
|
424
457
|
value=ptr_value,
|
|
425
458
|
)
|
|
426
|
-
except Record.DoesNotExist:
|
|
427
|
-
pass
|
|
428
|
-
|
|
429
|
-
with transaction.atomic():
|
|
430
|
-
if ptr_record is not None:
|
|
431
|
-
if ptr_record.zone.pk != ptr_zone.pk:
|
|
432
|
-
if ptr_record.rfc2317_cname_record is not None:
|
|
433
|
-
ptr_record.rfc2317_cname_record.delete()
|
|
434
|
-
ptr_record.rfc2317_cname_record = None
|
|
435
|
-
|
|
436
|
-
if ptr_record.address_records.count() == 1:
|
|
437
|
-
ptr_record.zone = ptr_zone
|
|
438
|
-
ptr_record.name = ptr_name
|
|
439
|
-
ptr_record.value = ptr_value
|
|
440
|
-
ptr_record.ttl = self.ttl
|
|
441
|
-
ptr_record.save(
|
|
442
|
-
update_rfc2317_cname=update_rfc2317_cname,
|
|
443
|
-
save_zone_serial=save_zone_serial,
|
|
444
|
-
)
|
|
445
459
|
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
460
|
+
# +
|
|
461
|
+
# If no existing PTR record could be found in the database, create a new
|
|
462
|
+
# one from scratch.
|
|
463
|
+
# -
|
|
464
|
+
except Record.DoesNotExist:
|
|
465
|
+
ptr_record = Record(
|
|
466
|
+
zone_id=ptr_zone.pk,
|
|
467
|
+
type=RecordTypeChoices.PTR,
|
|
468
|
+
name=ptr_name,
|
|
469
|
+
ttl=self.ttl,
|
|
470
|
+
value=ptr_value,
|
|
471
|
+
managed=True,
|
|
472
|
+
)
|
|
473
|
+
ptr_record.save(
|
|
474
|
+
update_rfc2317_cname=update_rfc2317_cname,
|
|
475
|
+
save_zone_serial=save_zone_serial,
|
|
476
|
+
)
|
|
463
477
|
|
|
464
478
|
self.ptr_record = ptr_record
|
|
465
479
|
|
|
@@ -6,6 +6,13 @@
|
|
|
6
6
|
{% load i18n %}
|
|
7
7
|
|
|
8
8
|
{% block control-buttons %}
|
|
9
|
+
{% if perms.netbox_dns.add_record and object.type != "CNAME" %}
|
|
10
|
+
<a href="{% url 'plugins:netbox_dns:record_add' %}?view={{ object.zone.view.pk }}&zone={{ object.zone.pk }}&value={{ object.fqdn }}&type=CNAME&return_url={{ object.get_absolute_url }}">
|
|
11
|
+
<button type="submit" class="btn btn-primary" name="add-record">
|
|
12
|
+
<i class="mdi mdi-plus-thick" aria-hidden="true"></i>{% trans "Add CNAME" %}
|
|
13
|
+
</button>
|
|
14
|
+
</a>
|
|
15
|
+
{% endif %}
|
|
9
16
|
{% if object.managed %}
|
|
10
17
|
{% else %}
|
|
11
18
|
{{ block.super }}
|
|
@@ -10,7 +10,7 @@ from django.db.models import Q
|
|
|
10
10
|
from netbox.context import current_request
|
|
11
11
|
from ipam.models import IPAddress, Prefix
|
|
12
12
|
|
|
13
|
-
from netbox_dns.choices import RecordStatusChoices
|
|
13
|
+
from netbox_dns.choices import RecordStatusChoices, RecordTypeChoices
|
|
14
14
|
|
|
15
15
|
from .dns import get_parent_zone_names
|
|
16
16
|
from .conversions import regex_from_list
|
|
@@ -213,10 +213,28 @@ def update_dns_records(ip_address, view=None, force=False):
|
|
|
213
213
|
|
|
214
214
|
|
|
215
215
|
def delete_dns_records(ip_address, view=None):
|
|
216
|
-
|
|
216
|
+
from netbox_dns.models import Record
|
|
217
|
+
|
|
218
|
+
if current_request.get() is None:
|
|
217
219
|
address_records = ip_address.netbox_dns_records.all()
|
|
218
220
|
else:
|
|
219
|
-
|
|
221
|
+
# +
|
|
222
|
+
# This is a dirty hack made necessary by NetBox grand idea of manipulating
|
|
223
|
+
# objects in its event handling code, removing references to related objects
|
|
224
|
+
# in pre_delete() before our pre_delete() handler has the chance to handle
|
|
225
|
+
# them.
|
|
226
|
+
#
|
|
227
|
+
# TODO: Find something better. This is really awful.
|
|
228
|
+
# -
|
|
229
|
+
address_records = Record.objects.filter(
|
|
230
|
+
type__in=(RecordTypeChoices.A, RecordTypeChoices.AAAA),
|
|
231
|
+
managed=True,
|
|
232
|
+
ip_address=ip_address.address.ip,
|
|
233
|
+
ipam_ip_address__isnull=True,
|
|
234
|
+
)
|
|
235
|
+
|
|
236
|
+
if view is not None:
|
|
237
|
+
address_records &= Record.objects.filter(zone__view=view)
|
|
220
238
|
|
|
221
239
|
if not address_records.exists():
|
|
222
240
|
return False
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
netbox_dns/__init__.py,sha256=
|
|
1
|
+
netbox_dns/__init__.py,sha256=EjxvbIOO4SlZ6nP_tL6bjBWj5tImlXFh_mPUGQjpHkE,4890
|
|
2
2
|
netbox_dns/apps.py,sha256=JCW5eS-AQBUubDJve1DjP-IRFKTFGQh1NLGWzJpC5MI,151
|
|
3
3
|
netbox_dns/navigation.py,sha256=u90MwWBySg1Z9yfZEdvUctYWEkab5z1Y3019J7U_-3g,7741
|
|
4
4
|
netbox_dns/template_content.py,sha256=nwjbWkMc02vpTmcFQdiAA1TdopJiZ0MkRy6qa18_wLI,4848
|
|
@@ -61,22 +61,23 @@ netbox_dns/graphql/filter_lookups.py,sha256=P6wW2JrtkzUiIx6mJz_DvwYg5Sov68IKAx0z
|
|
|
61
61
|
netbox_dns/graphql/schema.py,sha256=KlbJmlfQEqZhvb6-cYmq94mrMFcQoCh3MldaUD5eVV4,2904
|
|
62
62
|
netbox_dns/graphql/types.py,sha256=H03lx5YTkxLevGtTHGV5VkdKbTJbgvUYPGqBWl3X8Q4,10182
|
|
63
63
|
netbox_dns/graphql/filters/__init__.py,sha256=bKppz_w3X2xNNHOcxZZiIO7zSkDaNTrZJ__k1U7rKik,275
|
|
64
|
-
netbox_dns/graphql/filters/dnssec_key_template.py,sha256=
|
|
65
|
-
netbox_dns/graphql/filters/dnssec_policy.py,sha256=
|
|
66
|
-
netbox_dns/graphql/filters/nameserver.py,sha256=
|
|
67
|
-
netbox_dns/graphql/filters/record.py,sha256=
|
|
68
|
-
netbox_dns/graphql/filters/record_template.py,sha256=
|
|
69
|
-
netbox_dns/graphql/filters/registrar.py,sha256=
|
|
70
|
-
netbox_dns/graphql/filters/registration_contact.py,sha256=
|
|
71
|
-
netbox_dns/graphql/filters/view.py,sha256=
|
|
72
|
-
netbox_dns/graphql/filters/zone.py,sha256=
|
|
73
|
-
netbox_dns/graphql/filters/zone_template.py,sha256=
|
|
64
|
+
netbox_dns/graphql/filters/dnssec_key_template.py,sha256=hK7KgikQOC-BMp88PR1moHQboWd-DS59GwQ0TJADdLM,2076
|
|
65
|
+
netbox_dns/graphql/filters/dnssec_policy.py,sha256=hu2_W74PDxN4QLRQTFd-qh_qf55ztoWtShTiVhOuvD8,4656
|
|
66
|
+
netbox_dns/graphql/filters/nameserver.py,sha256=sDVIrRXBeyscGfQSost4SqrBnBQ_ZIK13GjaXkKAcCw,1050
|
|
67
|
+
netbox_dns/graphql/filters/record.py,sha256=v3-8zyVrA0Hl4AC9d4SkYAQLHpQ1StIP-ws8xM_5Qb4,3313
|
|
68
|
+
netbox_dns/graphql/filters/record_template.py,sha256=sCAm-ct3aXjz9XNtAfUhPXaXRRHIaiXq_oQ4oFzxFY8,1819
|
|
69
|
+
netbox_dns/graphql/filters/registrar.py,sha256=4tv1nlZU41-sOsNXf3-JyZESpAdktsDj7JTr1hv0aG4,1158
|
|
70
|
+
netbox_dns/graphql/filters/registration_contact.py,sha256=feCw4zZd2UQ9895Gg0PJ4R-oGm90ss5XB6ve3B9JlVg,1402
|
|
71
|
+
netbox_dns/graphql/filters/view.py,sha256=ozXGNJ0ELri2FAnQXPHDs3--Hznzx4ZF5mH264nr-DI,934
|
|
72
|
+
netbox_dns/graphql/filters/zone.py,sha256=2mqPq4jikCWhbGRbIIcKbCXRtA9QiH6rXb5ufk1DAFE,5253
|
|
73
|
+
netbox_dns/graphql/filters/zone_template.py,sha256=6ZxBN_VPXvBDGXXwcYlkX6wJXx_IlMAZIEDX5-ARO_4,3100
|
|
74
74
|
netbox_dns/locale/de/LC_MESSAGES/django.mo,sha256=lwJghKXnXryPoDpC8TpvN2QyzY8vCBfF-Bmf_MWhZYs,29944
|
|
75
75
|
netbox_dns/locale/en/LC_MESSAGES/django.mo,sha256=GDnSZkfHs3yjtTsll7dksEEej4B50F8pc9RGytZNubM,393
|
|
76
76
|
netbox_dns/locale/fr/LC_MESSAGES/django.mo,sha256=vL8TcVYyBiDFZ3GVdZe4Kkc42mmtbMF3fot8maY-Q_s,30088
|
|
77
77
|
netbox_dns/management/commands/cleanup_database.py,sha256=1-tAl0Sht80qaNZyfFyUW19Eh9gBUuc7GdbHN4aemGU,5935
|
|
78
78
|
netbox_dns/management/commands/cleanup_rrset_ttl.py,sha256=UFRURLBcFeGHUS2lrYFv7UWIebjI72aG1EUQJt0XsXw,2046
|
|
79
79
|
netbox_dns/management/commands/rebuild_dnssync.py,sha256=Tcl385u6kJTX47SvSyRzKm1RIx4nYRYCMcKr3uVnV60,1246
|
|
80
|
+
netbox_dns/management/commands/remove_orphaned_ptr_records.py,sha256=vYYvI2yr4U1EiAoWm26PkULzaz3rr_Yfaw2eg9i4oIw,1142
|
|
80
81
|
netbox_dns/management/commands/setup_dnssync.py,sha256=qtVj6egSjclaQbuI60hLfl-zg89VJVbX-TB17f1k77Y,5730
|
|
81
82
|
netbox_dns/management/commands/update_soa.py,sha256=Rj_Xk-qpwkAVRubVnM5OqSTwgzi93E0PqjwGb3rYjf0,660
|
|
82
83
|
netbox_dns/migrations/0001_squashed_netbox_dns_0_15.py,sha256=3U0810NWSHPu2dTSHpfzlleDgwMS04FhJ_CkO76SDaw,10283
|
|
@@ -103,6 +104,7 @@ netbox_dns/migrations/0020_netbox_3_4.py,sha256=UMcHdn8ZAuQjUaM_3rEGpktYrM0Tuvhc
|
|
|
103
104
|
netbox_dns/migrations/0020_remove_dnssecpolicy_parental_agents_and_more.py,sha256=Fq2Tv-yz4TAY0yzyVs6j79ztIJa1wOm5oSdbPosYdh0,756
|
|
104
105
|
netbox_dns/migrations/0021_alter_record_ptr_record.py,sha256=arSb_EVRX0RjuldPpFTjfyLHPmzQbyzHq9qw1It50c0,656
|
|
105
106
|
netbox_dns/migrations/0021_record_ip_address.py,sha256=EqdhWXmq7aiK4X79xTRUZng3zFncCl-8JoO65HqlJKw,3244
|
|
107
|
+
netbox_dns/migrations/0022_alter_record_ipam_ip_address.py,sha256=KKmB3moxPJBKytOBymy0tS6ABIKjpNd5YY6cG--Lluk,727
|
|
106
108
|
netbox_dns/migrations/0022_search.py,sha256=KW1ffEZ4-0dppGQ_KD1EN7iw8eQJOnDco-xfJFRZqKQ,172
|
|
107
109
|
netbox_dns/migrations/0023_alter_record_value.py,sha256=4_4v8YZzU8_jadJqIUUjH6SIhNTeALWhclozTqYDmv0,378
|
|
108
110
|
netbox_dns/migrations/0024_tenancy.py,sha256=3kc5l5_AyfhOI6g6mbCfReUAbSgb2DAv0MDMZqJ-3YQ,1745
|
|
@@ -118,7 +120,7 @@ netbox_dns/models/__init__.py,sha256=CuwFENIVUv0FNMDlY18Am-mvN5kBGkPOGavCP0cle7c
|
|
|
118
120
|
netbox_dns/models/dnssec_key_template.py,sha256=Nv0vjdkOFWMptRYR1sT60bM6D8n_SnCpPZhI7WE5_UQ,2588
|
|
119
121
|
netbox_dns/models/dnssec_policy.py,sha256=REsE8p04bgJVF8yJuWuUITXpsZmvVlXWyQuJ9I6dEMs,5268
|
|
120
122
|
netbox_dns/models/nameserver.py,sha256=oVfyc_iWRzxVE2tIhfRb1Vuj2gZmlfFFzEtXj9ZEr6s,3848
|
|
121
|
-
netbox_dns/models/record.py,sha256=
|
|
123
|
+
netbox_dns/models/record.py,sha256=2HSxvroCGhvb7eg4qSXl1ACN7yzGGywbyBjhPR6siEk,31867
|
|
122
124
|
netbox_dns/models/record_template.py,sha256=Qr43_YZm1z3Od1cBdDY9wpNlV-UCzvpn2c6_dDzFzN8,5145
|
|
123
125
|
netbox_dns/models/registrar.py,sha256=-ozazecvd-oryEoDlOUvTWhEQKKQp3my6YVTEzWlUuI,1747
|
|
124
126
|
netbox_dns/models/registration_contact.py,sha256=9ehnTjg8KUrUYJKRRu2SaJX-NE5dO4wy90FRPlT2ys4,3620
|
|
@@ -143,7 +145,7 @@ netbox_dns/tables/zone_template.py,sha256=90geASGP6jSqKnvx2t-DaSxNZpp7j67lH1t0Uz
|
|
|
143
145
|
netbox_dns/templates/netbox_dns/dnsseckeytemplate.html,sha256=dSEyHgUp0k_5JSdR4s4m_7Rom67TqvRIQN0zbQKYfjE,2839
|
|
144
146
|
netbox_dns/templates/netbox_dns/dnssecpolicy.html,sha256=dXHAt8ISsSWv-vK_kaJMcAzUBh4TZ2hAmeaYa47u0PU,7694
|
|
145
147
|
netbox_dns/templates/netbox_dns/nameserver.html,sha256=MawPiuAmjFrbv0zRi-7xkm8vr-dT1tlEno8EcoQ9peU,1714
|
|
146
|
-
netbox_dns/templates/netbox_dns/record.html,sha256=
|
|
148
|
+
netbox_dns/templates/netbox_dns/record.html,sha256=aFvbIEhhfp0AH5tRDNSgc2nQIymGgnVilk5Q8lCpKKw,7055
|
|
147
149
|
netbox_dns/templates/netbox_dns/recordtemplate.html,sha256=a29PAUl-KI_I1lxWpVdPp2loJtzgis9DG9erOWrOZM0,3708
|
|
148
150
|
netbox_dns/templates/netbox_dns/registrar.html,sha256=4kJuj3biiDxQrIMQEQUEmF4iGRE4psr6Fh0CBP1evz8,2308
|
|
149
151
|
netbox_dns/templates/netbox_dns/registrationcontact.html,sha256=sljVp_MrPSJRc2vJCPFXq9MiWOw4wjbr1kI_YStBntw,3094
|
|
@@ -169,7 +171,7 @@ netbox_dns/templatetags/netbox_dns.py,sha256=DND1DMPzv636Rak3M6Hor_Vw6pjqUfSTquo
|
|
|
169
171
|
netbox_dns/utilities/__init__.py,sha256=cSGf-nGaRWx9b-Xrh3dLMJYoWNsZ6FF-qdmV4F1uOgg,74
|
|
170
172
|
netbox_dns/utilities/conversions.py,sha256=qYnzecmR28l8Je_H0vFvzJ2sikTiEiyxr6drl_aRocg,3016
|
|
171
173
|
netbox_dns/utilities/dns.py,sha256=UBiyQe8thiOTnKOmU9e2iRHHnGF9toVLe4efU623kX4,322
|
|
172
|
-
netbox_dns/utilities/ipam_dnssync.py,sha256=
|
|
174
|
+
netbox_dns/utilities/ipam_dnssync.py,sha256=cJ1P1RuLE_MmlF7yHuLXiv5TNBtinzj2dL7U4S7eAWw,10318
|
|
173
175
|
netbox_dns/validators/__init__.py,sha256=X0hPZlC3VZcXMcvXKZ2_5LSoEJdXPNSBr4QtEIFSBJ0,94
|
|
174
176
|
netbox_dns/validators/dns_name.py,sha256=1MKnYAmkSTIQGf6zInqkpbIj5SCeCM0YGKmYOqFzUK4,3770
|
|
175
177
|
netbox_dns/validators/dns_value.py,sha256=cADhgTohXAtOLPzaoMKO9DahEUiDanpdiuKonrwFw0E,5278
|
|
@@ -186,8 +188,8 @@ netbox_dns/views/registration_contact.py,sha256=5bJWjNBisqCkBo6d2TJyyBJlc95WM7Vc
|
|
|
186
188
|
netbox_dns/views/view.py,sha256=xLXt7sKrda3FpNXsBSJk8L8P2XhZ1sVb5OOXovCsKEU,3089
|
|
187
189
|
netbox_dns/views/zone.py,sha256=tJiQWMmcuWX6OBtsflQwoTNVjp_GzeZ3-jmywRp74ZU,7065
|
|
188
190
|
netbox_dns/views/zone_template.py,sha256=5P9DT3XBRL-TiM5zFhBTMlMusL4bP2jTu3GHxKz5ojc,2553
|
|
189
|
-
netbox_plugin_dns-1.3.
|
|
190
|
-
netbox_plugin_dns-1.3.
|
|
191
|
-
netbox_plugin_dns-1.3.
|
|
192
|
-
netbox_plugin_dns-1.3.
|
|
193
|
-
netbox_plugin_dns-1.3.
|
|
191
|
+
netbox_plugin_dns-1.3.2.dist-info/licenses/LICENSE,sha256=I3tDu11bZfhFm3EkV4zOD5TmWgLjnUNLEFwrdjniZYs,1112
|
|
192
|
+
netbox_plugin_dns-1.3.2.dist-info/METADATA,sha256=q6Zuz8KKMmZYwfUL2eaTCF_viJG4S5qm98MBm76nUQ8,7787
|
|
193
|
+
netbox_plugin_dns-1.3.2.dist-info/WHEEL,sha256=zaaOINJESkSfm_4HQVc5ssNzHCPXhJm0kEUakpsEHaU,91
|
|
194
|
+
netbox_plugin_dns-1.3.2.dist-info/top_level.txt,sha256=sA1Rwl1mRKvMC6XHe2ylZ1GF-Q1NGd08XedK9Y4xZc4,11
|
|
195
|
+
netbox_plugin_dns-1.3.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|