netbox-plugin-dns 1.3.5__py3-none-any.whl → 1.4.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.

netbox_dns/__init__.py CHANGED
@@ -4,7 +4,7 @@ from django.core.exceptions import ImproperlyConfigured
4
4
  from netbox.plugins import PluginConfig
5
5
  from netbox.plugins.utils import get_plugin_config
6
6
 
7
- __version__ = "1.3.5"
7
+ __version__ = "1.4.0"
8
8
 
9
9
 
10
10
  def _check_list(setting):
@@ -16,7 +16,7 @@ class DNSConfig(PluginConfig):
16
16
  name = "netbox_dns"
17
17
  verbose_name = _("NetBox DNS")
18
18
  description = _("NetBox plugin for DNS data")
19
- min_version = "4.3.0"
19
+ min_version = "4.3.2"
20
20
  version = __version__
21
21
  author = "Peter Eckel"
22
22
  author_email = "pete@netbox-dns.org"
@@ -30,6 +30,7 @@ class ZoneTemplateSerializer(NetBoxModelSerializer):
30
30
  "soa_mname",
31
31
  "soa_rname",
32
32
  "dnssec_policy",
33
+ "parental_agents",
33
34
  "registrar",
34
35
  "registrant",
35
36
  "tech_c",
@@ -1,3 +1,6 @@
1
+ import netaddr
2
+ from netaddr.core import AddrFormatError
3
+
1
4
  import django_filters
2
5
 
3
6
  from django.db.models import Q
@@ -5,6 +8,7 @@ from django.utils.translation import gettext as _
5
8
 
6
9
  from netbox.filtersets import NetBoxModelFilterSet
7
10
  from tenancy.filtersets import TenancyFilterSet
11
+ from utilities.filters import MultiValueCharFilter
8
12
 
9
13
  from netbox_dns.models import (
10
14
  ZoneTemplate,
@@ -76,6 +80,10 @@ class ZoneTemplateFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
76
80
  to_field_name="name",
77
81
  label=_("DNSSEC Policy"),
78
82
  )
83
+ parental_agents = MultiValueCharFilter(
84
+ method="filter_parental_agents",
85
+ label=_("Parental Agents"),
86
+ )
79
87
  registrar_id = django_filters.ModelMultipleChoiceFilter(
80
88
  queryset=Registrar.objects.all(),
81
89
  label=_("Registrar ID"),
@@ -127,6 +135,19 @@ class ZoneTemplateFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
127
135
  label=_("Billing Contact"),
128
136
  )
129
137
 
138
+ def filter_parental_agents(self, queryset, name, value):
139
+ if not value:
140
+ return queryset
141
+
142
+ query_values = []
143
+ for v in value:
144
+ try:
145
+ query_values.append(str(netaddr.IPAddress(v)))
146
+ except (AddrFormatError, ValueError):
147
+ pass
148
+
149
+ return queryset.filter(parental_agents__overlap=query_values)
150
+
130
151
  def search(self, queryset, name, value):
131
152
  if not value.strip():
132
153
  return queryset
@@ -15,7 +15,8 @@ from utilities.forms.fields import (
15
15
  DynamicModelMultipleChoiceField,
16
16
  )
17
17
  from utilities.forms.rendering import FieldSet
18
- from utilities.forms import add_blank_choice
18
+ from utilities.forms.widgets import HTMXSelect
19
+ from utilities.forms import add_blank_choice, get_field_value
19
20
  from tenancy.models import Tenant, TenantGroup
20
21
  from tenancy.forms import TenancyForm, TenancyFilterForm
21
22
 
@@ -52,6 +53,10 @@ class DNSSECKeyTemplateForm(TenancyForm, NetBoxModelForm):
52
53
  "tags",
53
54
  )
54
55
 
56
+ widgets = {
57
+ "algorithm": HTMXSelect(),
58
+ }
59
+
55
60
  fieldsets = (
56
61
  FieldSet(
57
62
  "name",
@@ -76,6 +81,13 @@ class DNSSECKeyTemplateForm(TenancyForm, NetBoxModelForm):
76
81
  ),
77
82
  )
78
83
 
84
+ def __init__(self, *args, **kwargs):
85
+ super().__init__(*args, **kwargs)
86
+
87
+ algorithm = get_field_value(self, "algorithm")
88
+ if algorithm != DNSSECKeyTemplateAlgorithmChoices.RSASHA256:
89
+ del self.fields["key_size"]
90
+
79
91
  lifetime = TimePeriodField(
80
92
  required=False,
81
93
  )
netbox_dns/forms/zone.py CHANGED
@@ -21,9 +21,13 @@ from utilities.forms.fields import (
21
21
  CSVModelMultipleChoiceField,
22
22
  DynamicModelChoiceField,
23
23
  )
24
- from utilities.forms.widgets import BulkEditNullBooleanSelect, DatePicker
24
+ from utilities.forms.widgets import BulkEditNullBooleanSelect, DatePicker, HTMXSelect
25
25
  from utilities.forms.rendering import FieldSet
26
- from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, add_blank_choice
26
+ from utilities.forms import (
27
+ BOOLEAN_WITH_BLANK_CHOICES,
28
+ add_blank_choice,
29
+ get_field_value,
30
+ )
27
31
  from tenancy.models import Tenant, TenantGroup
28
32
  from tenancy.forms import TenancyForm, TenancyFilterForm
29
33
 
@@ -79,9 +83,9 @@ class ZoneTemplateUpdateMixin:
79
83
  self.cleaned_data["tags"] = template.tags.all()
80
84
 
81
85
  for field in template.template_fields:
82
- if self.cleaned_data.get(field) in (None, "") and getattr(
86
+ if self.cleaned_data.get(field) in (None, "", []) and getattr(
83
87
  template, field
84
- ) not in (None, ""):
88
+ ) not in (None, "", []):
85
89
  self.cleaned_data[field] = getattr(template, field)
86
90
 
87
91
  self._check_soa_mname()
@@ -207,6 +211,8 @@ class ZoneForm(ZoneTemplateUpdateMixin, TenancyForm, NetBoxModelForm):
207
211
  }
208
212
 
209
213
  widgets = {
214
+ "dnssec_policy": HTMXSelect(),
215
+ "registrar": HTMXSelect(),
210
216
  "expiration_date": DatePicker,
211
217
  }
212
218
 
@@ -310,6 +316,15 @@ class ZoneForm(ZoneTemplateUpdateMixin, TenancyForm, NetBoxModelForm):
310
316
  name__in=default_nameservers
311
317
  )
312
318
 
319
+ if not get_field_value(self, "dnssec_policy"):
320
+ del self.fields["inline_signing"]
321
+ del self.fields["parental_agents"]
322
+
323
+ if not get_field_value(self, "registrar"):
324
+ del self.fields["registry_domain_id"]
325
+ del self.fields["expiration_date"]
326
+ del self.fields["domain_status"]
327
+
313
328
  view = DynamicModelChoiceField(
314
329
  queryset=View.objects.all(),
315
330
  required=True,
@@ -1,5 +1,6 @@
1
1
  from django import forms
2
2
  from django.utils.translation import gettext_lazy as _
3
+ from django.contrib.postgres.forms import SimpleArrayField
3
4
 
4
5
  from netbox.forms import (
5
6
  NetBoxModelBulkEditForm,
@@ -46,6 +47,7 @@ class ZoneTemplateForm(TenancyForm, NetBoxModelForm):
46
47
  "soa_mname",
47
48
  "soa_rname",
48
49
  "dnssec_policy",
50
+ "parental_agents",
49
51
  "record_templates",
50
52
  "description",
51
53
  "registrar",
@@ -80,6 +82,7 @@ class ZoneTemplateForm(TenancyForm, NetBoxModelForm):
80
82
  ),
81
83
  FieldSet(
82
84
  "dnssec_policy",
85
+ "parental_agents",
83
86
  name=_("DNSSEC"),
84
87
  ),
85
88
  FieldSet(
@@ -145,6 +148,7 @@ class ZoneTemplateFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
145
148
  ),
146
149
  FieldSet(
147
150
  "dnssec_policy",
151
+ "parental_agents",
148
152
  name=_("DNSSEC"),
149
153
  ),
150
154
  FieldSet(
@@ -197,6 +201,10 @@ class ZoneTemplateFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
197
201
  null_option=_("None"),
198
202
  label=_("DNSSEC Policy ID"),
199
203
  )
204
+ parental_agents = forms.GenericIPAddressField(
205
+ required=False,
206
+ label=_("Parental Agents"),
207
+ )
200
208
  registrar_id = DynamicModelMultipleChoiceField(
201
209
  queryset=Registrar.objects.all(),
202
210
  required=False,
@@ -241,6 +249,7 @@ class ZoneTemplateImportForm(NetBoxModelImportForm):
241
249
  "soa_rname",
242
250
  "record_templates",
243
251
  "dnssec_policy",
252
+ "parental_agents",
244
253
  "description",
245
254
  "registrar",
246
255
  "registrant",
@@ -351,6 +360,7 @@ class ZoneTemplateBulkEditForm(NetBoxModelBulkEditForm):
351
360
  ),
352
361
  FieldSet(
353
362
  "dnssec_policy",
363
+ "parental_agents",
354
364
  name=_("DNSSEC"),
355
365
  ),
356
366
  FieldSet(
@@ -411,6 +421,11 @@ class ZoneTemplateBulkEditForm(NetBoxModelBulkEditForm):
411
421
  required=False,
412
422
  label=_("DNSSEC Policy"),
413
423
  )
424
+ parental_agents = SimpleArrayField(
425
+ required=False,
426
+ base_field=forms.GenericIPAddressField(),
427
+ label=_("Parental Agents"),
428
+ )
414
429
  registrar = DynamicModelChoiceField(
415
430
  queryset=Registrar.objects.all(),
416
431
  required=False,
@@ -290,6 +290,7 @@ class NetBoxDNSZoneTemplateType(NetBoxObjectType):
290
290
  ]
291
291
  | None
292
292
  )
293
+ parental_agents: List[str]
293
294
  record_templates: List[
294
295
  Annotated[
295
296
  "NetBoxDNSRecordTemplateType", strawberry.lazy("netbox_dns.graphql.types")
Binary file
Binary file
@@ -186,7 +186,7 @@ class Command(BaseCommand):
186
186
 
187
187
  for record in orphaned_ptr_records:
188
188
  if options.get("verbosity") > 1:
189
- self.stdout.write("Removing orphaned PTR record '{record}'")
189
+ self.stdout.write(f"Removing orphaned PTR record '{record}'")
190
190
  record.delete()
191
191
 
192
192
  def _record_remove_orphaned_address_records(self, **options):
@@ -201,5 +201,5 @@ class Command(BaseCommand):
201
201
 
202
202
  for record in orphaned_address_records:
203
203
  if options.get("verbosity") > 1:
204
- self.stdout.write("Removing orphaned address record '{record}'")
204
+ self.stdout.write(f"Removing orphaned address record '{record}'")
205
205
  record.delete()
@@ -8,13 +8,6 @@ from netbox_dns.utilities import update_dns_records, get_zones
8
8
  class Command(BaseCommand):
9
9
  help = "Rebuild DNSsync relationships between IP addresses and records"
10
10
 
11
- def add_arguments(self, parser):
12
- parser.add_argument(
13
- "--force",
14
- action="store_true",
15
- help="Update records even if DNS name was not changed (required for rebuilding filtered views)",
16
- )
17
-
18
11
  def handle(self, *model_names, **options):
19
12
  ip_addresses = IPAddress.objects.all()
20
13
  for ip_address in ip_addresses:
@@ -24,10 +17,7 @@ class Command(BaseCommand):
24
17
  )
25
18
  if options.get("verbosity") >= 3:
26
19
  self.stdout.write(f" Zones: {get_zones(ip_address)}")
27
- if (
28
- update_dns_records(ip_address, force=options.get("force"))
29
- and options.get("verbosity") >= 1
30
- ):
20
+ if update_dns_records(ip_address) and options.get("verbosity") >= 1:
31
21
  self.stdout.write(
32
22
  f"Updated DNS records for IP Address {ip_address}, VRF {ip_address.vrf}"
33
23
  )
@@ -0,0 +1,27 @@
1
+ # Generated by Django 5.2.3 on 2025-07-30 18:54
2
+
3
+ from django.db import migrations
4
+
5
+ from netbox_dns.choices import RecordTypeChoices
6
+
7
+
8
+ def set_disable_ptr_false(apps, schema_editor):
9
+ Record = apps.get_model("netbox_dns", "Record")
10
+
11
+ for record in Record.objects.exclude(
12
+ type__in=(RecordTypeChoices.A, RecordTypeChoices.AAAA)
13
+ ):
14
+ if record.disable_ptr:
15
+ record.disable_ptr = False
16
+ record.save()
17
+
18
+
19
+ class Migration(migrations.Migration):
20
+
21
+ dependencies = [
22
+ ("netbox_dns", "0022_alter_record_ipam_ip_address"),
23
+ ]
24
+
25
+ operations = [
26
+ migrations.RunPython(set_disable_ptr_false),
27
+ ]
@@ -0,0 +1,25 @@
1
+ # Generated by Django 5.2.5 on 2025-09-02 15:40
2
+
3
+ import django.contrib.postgres.fields
4
+ from django.db import migrations, models
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+
9
+ dependencies = [
10
+ ("netbox_dns", "0023_disable_ptr_false"),
11
+ ]
12
+
13
+ operations = [
14
+ migrations.AddField(
15
+ model_name="zonetemplate",
16
+ name="parental_agents",
17
+ field=django.contrib.postgres.fields.ArrayField(
18
+ base_field=models.GenericIPAddressField(),
19
+ blank=True,
20
+ default=list,
21
+ null=True,
22
+ size=None,
23
+ ),
24
+ ),
25
+ ]
@@ -91,6 +91,9 @@ class DNSSECKeyTemplate(ContactsMixin, NetBoxModel):
91
91
  return DNSSECKeyTemplateTypeChoices.colors.get(self.type)
92
92
 
93
93
  def clean(self, *args, **kwargs):
94
+ if self.algorithm != DNSSECKeyTemplateAlgorithmChoices.RSASHA256:
95
+ self.key_size = self._meta.get_field("key_size").get_default()
96
+
94
97
  super().clean(*args, **kwargs)
95
98
 
96
99
  validate_key_template(self)
netbox_dns/models/zone.py CHANGED
@@ -650,7 +650,7 @@ class Zone(ObjectModificationMixin, ContactsMixin, NetBoxModel):
650
650
  expiration_error = _("The registration for this domain has expired.")
651
651
  elif (self.expiration_date - date.today()).days < expiration_warning_days:
652
652
  expiration_warning = _(
653
- f"The registration for his domain will expire less than {expiration_warning_days} days."
653
+ f"The registration for this domain will expire in less than {expiration_warning_days} days."
654
654
  )
655
655
 
656
656
  return expiration_warning, expiration_error
@@ -800,6 +800,17 @@ class Zone(ObjectModificationMixin, ContactsMixin, NetBoxModel):
800
800
  super().clean_fields(exclude=exclude)
801
801
 
802
802
  def clean(self, *args, **kwargs):
803
+ if not self.dnssec_policy:
804
+ self.inline_signing = self._meta.get_field("inline_signing").get_default()
805
+ self.parental_agents = self._meta.get_field("parental_agents").get_default()
806
+
807
+ if not self.registrar:
808
+ self.registry_domain_id = self._meta.get_field(
809
+ "registry_domain_id"
810
+ ).get_default()
811
+ self.expiration_date = self._meta.get_field("expiration_date").get_default()
812
+ self.domain_status = self._meta.get_field("domain_status").get_default()
813
+
803
814
  if self.soa_ttl is None:
804
815
  self.soa_ttl = self.default_ttl
805
816
 
@@ -4,6 +4,7 @@ from dns.exception import DNSException
4
4
  from django.db import models
5
5
  from django.utils.translation import gettext_lazy as _
6
6
  from django.core.exceptions import ValidationError
7
+ from django.contrib.postgres.fields import ArrayField
7
8
 
8
9
  from netbox.models import NetBoxModel
9
10
  from netbox.search import SearchIndex, register_search
@@ -31,6 +32,7 @@ class ZoneTemplate(NetBoxModel):
31
32
  "soa_mname",
32
33
  "soa_rname",
33
34
  "dnssec_policy",
35
+ "parental_agents",
34
36
  "registrar",
35
37
  "registrant",
36
38
  "admin_c",
@@ -43,6 +45,7 @@ class ZoneTemplate(NetBoxModel):
43
45
  "soa_mname",
44
46
  "soa_rname",
45
47
  "dnssec_policy",
48
+ "parental_agents",
46
49
  "registrar",
47
50
  "registrant",
48
51
  "admin_c",
@@ -98,6 +101,14 @@ class ZoneTemplate(NetBoxModel):
98
101
  blank=True,
99
102
  null=True,
100
103
  )
104
+ parental_agents = ArrayField(
105
+ base_field=models.GenericIPAddressField(
106
+ protocol="both",
107
+ ),
108
+ blank=True,
109
+ null=True,
110
+ default=list,
111
+ )
101
112
  registrar = models.ForeignKey(
102
113
  verbose_name=_("Registrar"),
103
114
  to="Registrar",
@@ -61,6 +61,16 @@
61
61
  <th scope="row">{% trans "Policy" %}</th>
62
62
  <td>{{ object.dnssec_policy|linkify }}</td>
63
63
  </tr>
64
+ <tr>
65
+ <th scope="row">{% trans "Parental Agents" %}</th>
66
+ <td>
67
+ <table>
68
+ {% for parental_agent in object.parental_agents %}
69
+ <tr><td>{{ parental_agent }}</td></tr>
70
+ {% endfor %}
71
+ </table>
72
+ </td>
73
+ </tr>
64
74
  </table>
65
75
  </div>
66
76
  {% endif %}
@@ -187,15 +187,14 @@ def update_dns_records(ip_address, view=None, force=False):
187
187
  continue
188
188
 
189
189
  record.update_fqdn()
190
- if not _match_data(ip_address, record) or force:
191
- updated, deleted = record.update_from_ip_address(ip_address)
192
-
193
- if deleted:
194
- record.delete()
195
- updated = True
196
- elif updated:
197
- record.save()
198
- updated = True
190
+ updated, deleted = record.update_from_ip_address(ip_address)
191
+
192
+ if deleted:
193
+ record.delete()
194
+ updated = True
195
+ elif updated:
196
+ record.save()
197
+ updated = True
199
198
 
200
199
  zones = Zone.objects.filter(pk__in=[zone.pk for zone in zones]).exclude(
201
200
  pk__in=set(ip_address.netbox_dns_records.values_list("zone", flat=True))
@@ -68,7 +68,9 @@ class RecordView(generic.ObjectView):
68
68
  value_fqdn = dns_name.from_text(instance.value_fqdn)
69
69
 
70
70
  cname_targets = Record.objects.filter(
71
- zone__view=instance.zone.view, fqdn=value_fqdn
71
+ zone__view=instance.zone.view,
72
+ fqdn=value_fqdn,
73
+ active=True,
72
74
  )
73
75
 
74
76
  if cname_targets:
@@ -98,6 +100,7 @@ class RecordView(generic.ObjectView):
98
100
  zone__view=instance.zone.view,
99
101
  value=instance.fqdn,
100
102
  type=RecordTypeChoices.CNAME,
103
+ active=True,
101
104
  )
102
105
  )
103
106
 
@@ -112,6 +115,7 @@ class RecordView(generic.ObjectView):
112
115
  zone__view=instance.zone.view,
113
116
  type=RecordTypeChoices.CNAME,
114
117
  zone=parent_zone,
118
+ active=True,
115
119
  )
116
120
  cname_records = cname_records.union(
117
121
  {
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: netbox-plugin-dns
3
- Version: 1.3.5
3
+ Version: 1.4.0
4
4
  Summary: NetBox DNS is a NetBox plugin for managing DNS data.
5
5
  Author-email: Peter Eckel <pete@netbox-dns.org>
6
6
  Project-URL: Homepage, https://github.com/peteeckel/netbox-plugin-dns
@@ -1,4 +1,4 @@
1
- netbox_dns/__init__.py,sha256=-aNWTjZrScH61wzPGKzqdWwZf8ojcrz1HXDy7OBqi1o,4890
1
+ netbox_dns/__init__.py,sha256=P1EJoyjZlxYhyBzq2Ws6Ijofan-7SRkkyLo6zuBstV4,4890
2
2
  netbox_dns/apps.py,sha256=JCW5eS-AQBUubDJve1DjP-IRFKTFGQh1NLGWzJpC5MI,151
3
3
  netbox_dns/navigation.py,sha256=ZF2-bKRfuxXnLArSCvozyRXRd7GME14sVJZdmDEMhBk,7741
4
4
  netbox_dns/template_content.py,sha256=nwjbWkMc02vpTmcFQdiAA1TdopJiZ0MkRy6qa18_wLI,4848
@@ -19,7 +19,7 @@ netbox_dns/api/serializers_/registrar.py,sha256=ul_6SJVqxvTE2ysXBy52U59oTzwmaD78
19
19
  netbox_dns/api/serializers_/registration_contact.py,sha256=P_aoG_1rriHn4KkwTx5Dhw37Rn3VY2whg0vAIm55cjk,1108
20
20
  netbox_dns/api/serializers_/view.py,sha256=ipuL4FVTl5MYt5_ThayBAOBMGu61ZUGnCb8Co1tNQGU,1894
21
21
  netbox_dns/api/serializers_/zone.py,sha256=JfjhxmfbpJRNzFqnjueFvpJS5ASnbomm1jzJrjYPpqo,6407
22
- netbox_dns/api/serializers_/zone_template.py,sha256=AYlkOiAuPf0hWcj-FU3j_byY3MO3kkZ7f5xuIGA5m-Y,4407
22
+ netbox_dns/api/serializers_/zone_template.py,sha256=sThICHWbQpXRKCFq8I--3PSkad-aPzh7TBdoDm31jzg,4438
23
23
  netbox_dns/choices/__init__.py,sha256=K3JfawICeoUny8O_Dqexr7DOxwyg3QqijZ4DO6j5yP8,106
24
24
  netbox_dns/choices/dnssec_key_template.py,sha256=Xl3y_ScKJmnsqMH1sv6ezLcZI1rruHDGJP5e2IRSC4s,1511
25
25
  netbox_dns/choices/dnssec_policy.py,sha256=1EH1VoLbewiTZmnACpxq6GN0UJDVA1L6cxs-Jf6OagI,839
@@ -43,9 +43,9 @@ netbox_dns/filtersets/registrar.py,sha256=6QrsrWXu19bMa99DzwwXqfNqxpvTG0JwGEpybh
43
43
  netbox_dns/filtersets/registration_contact.py,sha256=42j7NkwkbSEfomCDekkIE9ZWNug_qfvmTO_D1e-fFIw,1140
44
44
  netbox_dns/filtersets/view.py,sha256=g8Qz363F9sieNtf4zA2L87mR86HFtkpvHTCkql6TxGk,1107
45
45
  netbox_dns/filtersets/zone.py,sha256=Uzlgo2dGCQhH_S3tI8gVYHi7tMoNS1YK5agbLRkV7bc,7603
46
- netbox_dns/filtersets/zone_template.py,sha256=U7lj26nxxSHZ0csRxWbdUTbgopTzTt_sxE5z3skn9mo,4738
46
+ netbox_dns/filtersets/zone_template.py,sha256=W-s-Gm1OhnHRdQaU0sBie7ZAup4CfBMX3xeZfKGgJXc,5358
47
47
  netbox_dns/forms/__init__.py,sha256=tObkTOHw_6kVtEcwdyshN0Ql-8VGhwsgQw7owL_s2lI,273
48
- netbox_dns/forms/dnssec_key_template.py,sha256=7zQCbpLaMiVcZ__zMswVJ2MNqlStFm22YWr1wZbi93I,5793
48
+ netbox_dns/forms/dnssec_key_template.py,sha256=zWOTdsbfCcjpizOZn6Y8HRewJarFwtlXcW4H0ZyqJVI,6176
49
49
  netbox_dns/forms/dnssec_policy.py,sha256=_KCGgWZB8yrC2wNFefqaM32cYMFzHsCAdqq83AF9jiw,17139
50
50
  netbox_dns/forms/nameserver.py,sha256=_iQJXbdFrrtMnRT8yZHnOp1Nj1iwxjHIAH_hrvCkrKU,3848
51
51
  netbox_dns/forms/record.py,sha256=wRl3uRY13VK8cF79u69-DDJmHJnZjwuLR60PsUGJ3p0,8493
@@ -53,13 +53,13 @@ netbox_dns/forms/record_template.py,sha256=5yuY2ppV2diEOdm_IN3QSLLEdWkOkWZOYRtOh
53
53
  netbox_dns/forms/registrar.py,sha256=oLMcXJOpt0F02a2Aga6A45rja7TvI18nTCZb_Dx_8t0,4038
54
54
  netbox_dns/forms/registration_contact.py,sha256=GtUmHzPmAFNRt81rTgJbmb5TMoEJ-mpmjltkuyppJwc,6157
55
55
  netbox_dns/forms/view.py,sha256=KZ2enzbqAEElt3b5C02kMJwnIDEjdQf_BsgMuMqKP50,10836
56
- netbox_dns/forms/zone.py,sha256=aVeSvUwohcqqetPupj4FQRgouE5fS53vvIoe82zmoaA,30334
57
- netbox_dns/forms/zone_template.py,sha256=ACx8YJirsrGMMQExVL-aEOaitsUYMyNBL793CoQZrWQ,11716
56
+ netbox_dns/forms/zone.py,sha256=fu3WmQKGknEv9z7vjHqRdnBBfPyYQ3rWJZPRP8a4pkQ,30813
57
+ netbox_dns/forms/zone_template.py,sha256=SN4E-DkD1RgUcZhvUNzRFg4-FHbkvdFs1l28eShAx4o,12203
58
58
  netbox_dns/graphql/__init__.py,sha256=0xg_5d1PPFTadBOZo752t5sfZeLFrqs2jM51Rbf8ti4,652
59
59
  netbox_dns/graphql/enums.py,sha256=vC-v24AuNbaGoekLTDu1PBVbnR1aYeX6LmvrZkfd2F4,1453
60
60
  netbox_dns/graphql/filter_lookups.py,sha256=P6wW2JrtkzUiIx6mJz_DvwYg5Sov68IKAx0zVQfuvYY,355
61
61
  netbox_dns/graphql/schema.py,sha256=KlbJmlfQEqZhvb6-cYmq94mrMFcQoCh3MldaUD5eVV4,2904
62
- netbox_dns/graphql/types.py,sha256=H03lx5YTkxLevGtTHGV5VkdKbTJbgvUYPGqBWl3X8Q4,10182
62
+ netbox_dns/graphql/types.py,sha256=97vPzKAGzz9tn8qm-kc_1vZHtwc5QMHq-vLkZ42Regg,10213
63
63
  netbox_dns/graphql/filters/__init__.py,sha256=bKppz_w3X2xNNHOcxZZiIO7zSkDaNTrZJ__k1U7rKik,275
64
64
  netbox_dns/graphql/filters/dnssec_key_template.py,sha256=hK7KgikQOC-BMp88PR1moHQboWd-DS59GwQ0TJADdLM,2076
65
65
  netbox_dns/graphql/filters/dnssec_policy.py,sha256=hu2_W74PDxN4QLRQTFd-qh_qf55ztoWtShTiVhOuvD8,4656
@@ -71,12 +71,12 @@ netbox_dns/graphql/filters/registration_contact.py,sha256=feCw4zZd2UQ9895Gg0PJ4R
71
71
  netbox_dns/graphql/filters/view.py,sha256=ozXGNJ0ELri2FAnQXPHDs3--Hznzx4ZF5mH264nr-DI,934
72
72
  netbox_dns/graphql/filters/zone.py,sha256=2mqPq4jikCWhbGRbIIcKbCXRtA9QiH6rXb5ufk1DAFE,5253
73
73
  netbox_dns/graphql/filters/zone_template.py,sha256=6ZxBN_VPXvBDGXXwcYlkX6wJXx_IlMAZIEDX5-ARO_4,3100
74
- netbox_dns/locale/de/LC_MESSAGES/django.mo,sha256=fSlYDunygrkHE4TAIlHI0ol67Lz3qiu2hUkeirewlOQ,29995
74
+ netbox_dns/locale/de/LC_MESSAGES/django.mo,sha256=Q6edOBPHxBTbVYE-7TM9G_o83ED_9TpGgefOazR6TP0,29831
75
75
  netbox_dns/locale/en/LC_MESSAGES/django.mo,sha256=GDnSZkfHs3yjtTsll7dksEEej4B50F8pc9RGytZNubM,393
76
- netbox_dns/locale/fr/LC_MESSAGES/django.mo,sha256=hZjbClaXZndP8VtqAiXWBdYEFVD9CQrKJXelL6kMOPE,30021
77
- netbox_dns/management/commands/cleanup_database.py,sha256=bkMdDlZpSzqIRx18N86wyda2ufFzNlejefyeRdHg5Nk,7951
76
+ netbox_dns/locale/fr/LC_MESSAGES/django.mo,sha256=tPKMUteOF0qV4FlH1YrbbzC9fiW3nYS5fMLP0GLWayE,29810
77
+ netbox_dns/management/commands/cleanup_database.py,sha256=Dv1DCN55MzIHoQk3TBV-SmaNf_mFo-PbzCm7fOmZspY,7953
78
78
  netbox_dns/management/commands/cleanup_rrset_ttl.py,sha256=7W4_qRzm_Crnb1L4X8lfrXRJanBqDGLC1yCLvrIaGG4,2256
79
- netbox_dns/management/commands/rebuild_dnssync.py,sha256=SlY-NsMu4BJ7Bi1lnswfVHjhCzsgL6hRue6pJXSO_0w,1247
79
+ netbox_dns/management/commands/rebuild_dnssync.py,sha256=Wnix38pzuC1AtGm9-xU8W8j7NYLlUIMpmw5mT2rhBYc,929
80
80
  netbox_dns/management/commands/setup_dnssync.py,sha256=qtVj6egSjclaQbuI60hLfl-zg89VJVbX-TB17f1k77Y,5730
81
81
  netbox_dns/migrations/0001_squashed_netbox_dns_0_15.py,sha256=3U0810NWSHPu2dTSHpfzlleDgwMS04FhJ_CkO76SDaw,10283
82
82
  netbox_dns/migrations/0001_squashed_netbox_dns_0_22.py,sha256=ML6Hp17lrXiaG0eUlBjKMm6HUNhw0AHPnKrb9AN-F6E,20279
@@ -105,7 +105,9 @@ netbox_dns/migrations/0021_record_ip_address.py,sha256=EqdhWXmq7aiK4X79xTRUZng3z
105
105
  netbox_dns/migrations/0022_alter_record_ipam_ip_address.py,sha256=KKmB3moxPJBKytOBymy0tS6ABIKjpNd5YY6cG--Lluk,727
106
106
  netbox_dns/migrations/0022_search.py,sha256=KW1ffEZ4-0dppGQ_KD1EN7iw8eQJOnDco-xfJFRZqKQ,172
107
107
  netbox_dns/migrations/0023_alter_record_value.py,sha256=4_4v8YZzU8_jadJqIUUjH6SIhNTeALWhclozTqYDmv0,378
108
+ netbox_dns/migrations/0023_disable_ptr_false.py,sha256=Wo-d60QmPCcvdVIVShF8L7z-L2eofJwWTIiyrr51bjU,652
108
109
  netbox_dns/migrations/0024_tenancy.py,sha256=3kc5l5_AyfhOI6g6mbCfReUAbSgb2DAv0MDMZqJ-3YQ,1745
110
+ netbox_dns/migrations/0024_zonetemplate_parental_agents.py,sha256=e1mQ1NwP8eqqfgc74PFSRmnENL5VCLPIFzInePsZd4w,635
109
111
  netbox_dns/migrations/0025_ipam_coupling_cf.py,sha256=7uHujclWrsYw5QMLWft0Po78Ow5Q8MjPuU7moKyQ2qs,620
110
112
  netbox_dns/migrations/0026_domain_registration.py,sha256=qUJ1oUGHIGGNWD7QRLnxElbM5eNp7dYNNn_OYIw8Xvo,5796
111
113
  netbox_dns/migrations/0027_alter_registrar_iana_id.py,sha256=QUtRIrqqfkraFmzzeJFZWAEv4PfrOouoHtrV6FRn8Kc,404
@@ -115,7 +117,7 @@ netbox_dns/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3h
115
117
  netbox_dns/mixins/__init__.py,sha256=LxTEfpod_RHCyMtnzDljv0_dwqp2z3Q6tqbXW8LTGD8,35
116
118
  netbox_dns/mixins/object_modification.py,sha256=AR64fU5f7g-scNAj9b54eSoS9dpjyOpqrxXVXPcOhY8,1807
117
119
  netbox_dns/models/__init__.py,sha256=CuwFENIVUv0FNMDlY18Am-mvN5kBGkPOGavCP0cle7c,273
118
- netbox_dns/models/dnssec_key_template.py,sha256=Nv0vjdkOFWMptRYR1sT60bM6D8n_SnCpPZhI7WE5_UQ,2588
120
+ netbox_dns/models/dnssec_key_template.py,sha256=AcyD9PLtg1lLZAFlEJ8TugSlglOSIBVihxgmi39zRm4,2738
119
121
  netbox_dns/models/dnssec_policy.py,sha256=REsE8p04bgJVF8yJuWuUITXpsZmvVlXWyQuJ9I6dEMs,5268
120
122
  netbox_dns/models/nameserver.py,sha256=oVfyc_iWRzxVE2tIhfRb1Vuj2gZmlfFFzEtXj9ZEr6s,3848
121
123
  netbox_dns/models/record.py,sha256=7f4h3ngUvPpQ4IQroTJAWO8wD2fqy1u8j-LuA23PWtM,32761
@@ -123,8 +125,8 @@ netbox_dns/models/record_template.py,sha256=Qr43_YZm1z3Od1cBdDY9wpNlV-UCzvpn2c6_
123
125
  netbox_dns/models/registrar.py,sha256=-ozazecvd-oryEoDlOUvTWhEQKKQp3my6YVTEzWlUuI,1747
124
126
  netbox_dns/models/registration_contact.py,sha256=9ehnTjg8KUrUYJKRRu2SaJX-NE5dO4wy90FRPlT2ys4,3620
125
127
  netbox_dns/models/view.py,sha256=pwo7i8gtukIRgAC1A4rm58jcEpIbsSW_IUq6vSv-mRo,4618
126
- netbox_dns/models/zone.py,sha256=qZ5yYNbj4mYm61zfq-aFL_5sVSxJo1PQSMY4cAj8vEQ,35953
127
- netbox_dns/models/zone_template.py,sha256=ShPg6_ts6W-dpdGzUg3oZnGHEEQ-_Jf0EdYwVWzaPwI,5093
128
+ netbox_dns/models/zone.py,sha256=zHRCXfRliqhE9lQwfTU5xXHn_8dhd7yOn5L_7NaLhLE,36500
129
+ netbox_dns/models/zone_template.py,sha256=jm7XsBADOWhGYOH-_n9a97CTE6w_BCP3gMEUIO-tfTs,5391
128
130
  netbox_dns/signals/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
129
131
  netbox_dns/signals/dnssec.py,sha256=o4MOEg6ftxoDWFAhDtajkXzb7Nb6KuUHjtx1zNu7C1w,1040
130
132
  netbox_dns/signals/ipam_dnssync.py,sha256=1zhlf4cMcJLlFosX7YzyqVYdFFHV4MFwTz5KCdL8xQc,7730
@@ -149,7 +151,7 @@ netbox_dns/templates/netbox_dns/registrar.html,sha256=4kJuj3biiDxQrIMQEQUEmF4iGR
149
151
  netbox_dns/templates/netbox_dns/registrationcontact.html,sha256=sljVp_MrPSJRc2vJCPFXq9MiWOw4wjbr1kI_YStBntw,3094
150
152
  netbox_dns/templates/netbox_dns/view.html,sha256=1MuzOYNQezRrryNjlklgxErjGTFoVnwqcxf4qceuglw,3320
151
153
  netbox_dns/templates/netbox_dns/zone.html,sha256=Hx2SL9gk7IKzBv5q45eESQADBPOCgbsW1yGe96-wlik,8262
152
- netbox_dns/templates/netbox_dns/zonetemplate.html,sha256=a3QD0O_8CW2MUBnU_nXGweGhCwo5pYDVlwJHzovC1RU,4344
154
+ netbox_dns/templates/netbox_dns/zonetemplate.html,sha256=juPdeCtpZGcCqM-nJT4IVTmwgOtTOEvDek2iiAJ6aQw,4801
153
155
  netbox_dns/templates/netbox_dns/record/managed.html,sha256=uwpxQTxyfAXkWqThLT-T2ZssKNUhXTDDMnLWJSVuDNU,119
154
156
  netbox_dns/templates/netbox_dns/record/related.html,sha256=R59aPhE4CyIZtTH0ncwDyS6_wAe_Y-oZjuN_j4qk8iA,1158
155
157
  netbox_dns/templates/netbox_dns/view/button.html,sha256=EMOB5x78XpyfN1qi-pY1CKKKLjyHo9rFUa4Uhq6rFMc,322
@@ -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=qVbJAL2GcTpKZaz4XBfTc4Gn8xREukQy0VvhK6jIpQ8,10493
174
+ netbox_dns/utilities/ipam_dnssync.py,sha256=PZXnn2TIPhCMh9Mxjbl9LfP63w0lMPRzO1lNPDyYpVo,10404
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
@@ -179,15 +181,15 @@ netbox_dns/views/__init__.py,sha256=tObkTOHw_6kVtEcwdyshN0Ql-8VGhwsgQw7owL_s2lI,
179
181
  netbox_dns/views/dnssec_key_template.py,sha256=06omBc2RCTltGH078mNLLwz3A_y9gqrtQ08ex1XEwlg,2694
180
182
  netbox_dns/views/dnssec_policy.py,sha256=ZvkCVfvI78w8e9c0m8lSWgRwg-jg07PM8Od0HwAVjGI,4427
181
183
  netbox_dns/views/nameserver.py,sha256=cLB0W1UnnvEmYdoCYH5HmjrFhbEZ1gWxJTKdMS-wuh0,3564
182
- netbox_dns/views/record.py,sha256=cPvsc20EUFcVidQ9YGIdsSTLHZKYzZD3JcV9bFv7iak,7123
184
+ netbox_dns/views/record.py,sha256=eAHMxsd2xKL9Yc_lijSC28RkvDnOolh-tdYLxb0d9aA,7219
183
185
  netbox_dns/views/record_template.py,sha256=Cye1rjlpAewRgIv7QGD7o5n-knjzqjEUJzZHVxtGX4s,3041
184
186
  netbox_dns/views/registrar.py,sha256=gYpMyz3rRJDmBfEeRfVENvR6fdWXN1y0XbN4JBlXoHc,2625
185
187
  netbox_dns/views/registration_contact.py,sha256=5bJWjNBisqCkBo6d2TJyyBJlc95WM7VcSA6wsEB184k,3383
186
188
  netbox_dns/views/view.py,sha256=xLXt7sKrda3FpNXsBSJk8L8P2XhZ1sVb5OOXovCsKEU,3089
187
189
  netbox_dns/views/zone.py,sha256=rxf0ETFnBF88JbhxUZWtcid_CAm7tssYfp2EFjk7zyg,7160
188
190
  netbox_dns/views/zone_template.py,sha256=5P9DT3XBRL-TiM5zFhBTMlMusL4bP2jTu3GHxKz5ojc,2553
189
- netbox_plugin_dns-1.3.5.dist-info/licenses/LICENSE,sha256=I3tDu11bZfhFm3EkV4zOD5TmWgLjnUNLEFwrdjniZYs,1112
190
- netbox_plugin_dns-1.3.5.dist-info/METADATA,sha256=eG5VsqM5B-Boc4GvUAc8VG7GuUQTXiFkcrMHEz0I1WA,7787
191
- netbox_plugin_dns-1.3.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
192
- netbox_plugin_dns-1.3.5.dist-info/top_level.txt,sha256=sA1Rwl1mRKvMC6XHe2ylZ1GF-Q1NGd08XedK9Y4xZc4,11
193
- netbox_plugin_dns-1.3.5.dist-info/RECORD,,
191
+ netbox_plugin_dns-1.4.0.dist-info/licenses/LICENSE,sha256=I3tDu11bZfhFm3EkV4zOD5TmWgLjnUNLEFwrdjniZYs,1112
192
+ netbox_plugin_dns-1.4.0.dist-info/METADATA,sha256=-mX00xQQAcUokvjTXBkBtXpxbYJakdQm-vmgHaaZY5M,7787
193
+ netbox_plugin_dns-1.4.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
194
+ netbox_plugin_dns-1.4.0.dist-info/top_level.txt,sha256=sA1Rwl1mRKvMC6XHe2ylZ1GF-Q1NGd08XedK9Y4xZc4,11
195
+ netbox_plugin_dns-1.4.0.dist-info/RECORD,,