netbox-plugin-dns 1.2.5__py3-none-any.whl → 1.2.7__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 +16 -8
- netbox_dns/api/field_serializers.py +25 -0
- netbox_dns/api/nested_serializers.py +19 -1
- netbox_dns/api/serializers.py +3 -0
- netbox_dns/api/serializers_/dnssec_key_template.py +59 -0
- netbox_dns/api/serializers_/dnssec_policy.py +113 -0
- netbox_dns/api/serializers_/record.py +2 -0
- netbox_dns/api/serializers_/record_template.py +2 -0
- netbox_dns/api/serializers_/zone.py +20 -1
- netbox_dns/api/serializers_/zone_template.py +13 -4
- netbox_dns/api/urls.py +4 -0
- netbox_dns/api/views.py +18 -0
- netbox_dns/choices/__init__.py +2 -0
- netbox_dns/choices/dnssec_key_template.py +63 -0
- netbox_dns/choices/dnssec_policy.py +40 -0
- netbox_dns/choices/record.py +2 -25
- netbox_dns/choices/utilities.py +26 -0
- netbox_dns/choices/zone.py +96 -1
- netbox_dns/fields/__init__.py +2 -0
- netbox_dns/fields/choice_array.py +33 -0
- netbox_dns/fields/timeperiod.py +33 -0
- netbox_dns/filtersets/__init__.py +3 -0
- netbox_dns/filtersets/dnssec_key_template.py +51 -0
- netbox_dns/filtersets/dnssec_policy.py +97 -0
- netbox_dns/filtersets/zone.py +30 -6
- netbox_dns/filtersets/zone_template.py +13 -2
- netbox_dns/forms/__init__.py +2 -0
- netbox_dns/forms/dnssec_key_template.py +189 -0
- netbox_dns/forms/dnssec_policy.py +593 -0
- netbox_dns/forms/nameserver.py +2 -0
- netbox_dns/forms/record.py +12 -6
- netbox_dns/forms/record_template.py +10 -3
- netbox_dns/forms/zone.py +142 -31
- netbox_dns/forms/zone_template.py +38 -0
- netbox_dns/graphql/__init__.py +7 -3
- netbox_dns/graphql/filters.py +16 -0
- netbox_dns/graphql/schema.py +20 -0
- netbox_dns/graphql/types.py +67 -3
- netbox_dns/locale/de/LC_MESSAGES/django.mo +0 -0
- netbox_dns/locale/fr/LC_MESSAGES/django.mo +0 -0
- netbox_dns/migrations/0015_dnssec.py +168 -0
- netbox_dns/migrations/0016_dnssec_policy_status.py +18 -0
- netbox_dns/migrations/0017_dnssec_policy_zone_zone_template.py +41 -0
- netbox_dns/migrations/0018_zone_domain_status_zone_expiration_date.py +23 -0
- netbox_dns/models/__init__.py +2 -0
- netbox_dns/models/dnssec_key_template.py +114 -0
- netbox_dns/models/dnssec_policy.py +203 -0
- netbox_dns/models/record.py +1 -1
- netbox_dns/models/zone.py +74 -19
- netbox_dns/models/zone_template.py +17 -7
- netbox_dns/navigation.py +49 -0
- netbox_dns/signals/dnssec.py +32 -0
- netbox_dns/tables/__init__.py +2 -0
- netbox_dns/tables/dnssec_key_template.py +48 -0
- netbox_dns/tables/dnssec_policy.py +131 -0
- netbox_dns/tables/zone.py +23 -2
- netbox_dns/tables/zone_template.py +4 -0
- netbox_dns/template_content.py +2 -1
- netbox_dns/templates/netbox_dns/dnsseckeytemplate.html +70 -0
- netbox_dns/templates/netbox_dns/dnssecpolicy.html +155 -0
- netbox_dns/templates/netbox_dns/zone/registration.html +19 -0
- netbox_dns/templates/netbox_dns/zone.html +16 -0
- netbox_dns/templates/netbox_dns/zonetemplate/child.html +46 -0
- netbox_dns/templates/netbox_dns/zonetemplate.html +12 -0
- netbox_dns/urls.py +23 -0
- netbox_dns/utilities/conversions.py +13 -0
- netbox_dns/validators/__init__.py +1 -0
- netbox_dns/validators/dnssec.py +148 -0
- netbox_dns/views/__init__.py +2 -0
- netbox_dns/views/dnssec_key_template.py +87 -0
- netbox_dns/views/dnssec_policy.py +155 -0
- netbox_dns/views/zone.py +11 -1
- {netbox_plugin_dns-1.2.5.dist-info → netbox_plugin_dns-1.2.7.dist-info}/METADATA +3 -2
- {netbox_plugin_dns-1.2.5.dist-info → netbox_plugin_dns-1.2.7.dist-info}/RECORD +77 -49
- {netbox_plugin_dns-1.2.5.dist-info → netbox_plugin_dns-1.2.7.dist-info}/WHEEL +1 -1
- {netbox_plugin_dns-1.2.5.dist-info → netbox_plugin_dns-1.2.7.dist-info/licenses}/LICENSE +0 -0
- {netbox_plugin_dns-1.2.5.dist-info → netbox_plugin_dns-1.2.7.dist-info}/top_level.txt +0 -0
|
@@ -23,6 +23,7 @@ from tenancy.forms import TenancyForm, TenancyFilterForm
|
|
|
23
23
|
from netbox_dns.models import RecordTemplate, ZoneTemplate
|
|
24
24
|
from netbox_dns.choices import RecordSelectableTypeChoices, RecordStatusChoices
|
|
25
25
|
from netbox_dns.utilities import name_to_unicode
|
|
26
|
+
from netbox_dns.fields import TimePeriodField
|
|
26
27
|
|
|
27
28
|
|
|
28
29
|
__all__ = (
|
|
@@ -50,7 +51,7 @@ class RecordTemplateForm(TenancyForm, NetBoxModelForm):
|
|
|
50
51
|
required=False,
|
|
51
52
|
label=_("Disable PTR"),
|
|
52
53
|
)
|
|
53
|
-
ttl =
|
|
54
|
+
ttl = TimePeriodField(
|
|
54
55
|
required=False,
|
|
55
56
|
label=_("TTL"),
|
|
56
57
|
)
|
|
@@ -99,6 +100,7 @@ class RecordTemplateFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
|
|
|
99
100
|
"type",
|
|
100
101
|
"value",
|
|
101
102
|
"status",
|
|
103
|
+
"ttl",
|
|
102
104
|
"disable_ptr",
|
|
103
105
|
"description",
|
|
104
106
|
name=_("Attributes"),
|
|
@@ -129,6 +131,10 @@ class RecordTemplateFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
|
|
|
129
131
|
required=False,
|
|
130
132
|
label=_("Status"),
|
|
131
133
|
)
|
|
134
|
+
ttl = TimePeriodField(
|
|
135
|
+
required=False,
|
|
136
|
+
label=_("TTL"),
|
|
137
|
+
)
|
|
132
138
|
disable_ptr = forms.NullBooleanField(
|
|
133
139
|
required=False,
|
|
134
140
|
label=_("Disable PTR"),
|
|
@@ -140,6 +146,7 @@ class RecordTemplateFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
|
|
|
140
146
|
zone_template_id = DynamicModelMultipleChoiceField(
|
|
141
147
|
queryset=ZoneTemplate.objects.all(),
|
|
142
148
|
required=False,
|
|
149
|
+
null_option=_("None"),
|
|
143
150
|
label=_("Zone Templates"),
|
|
144
151
|
)
|
|
145
152
|
tag = TagFilterField(RecordTemplate)
|
|
@@ -156,7 +163,7 @@ class RecordTemplateImportForm(NetBoxModelImportForm):
|
|
|
156
163
|
required=False,
|
|
157
164
|
label=_("Status"),
|
|
158
165
|
)
|
|
159
|
-
ttl =
|
|
166
|
+
ttl = TimePeriodField(
|
|
160
167
|
required=False,
|
|
161
168
|
label=_("TTL"),
|
|
162
169
|
)
|
|
@@ -209,7 +216,7 @@ class RecordTemplateBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
209
216
|
required=False,
|
|
210
217
|
label=_("Status"),
|
|
211
218
|
)
|
|
212
|
-
ttl =
|
|
219
|
+
ttl = TimePeriodField(
|
|
213
220
|
required=False,
|
|
214
221
|
label=_("TTL"),
|
|
215
222
|
)
|
netbox_dns/forms/zone.py
CHANGED
|
@@ -23,7 +23,7 @@ from utilities.forms.fields import (
|
|
|
23
23
|
DynamicModelChoiceField,
|
|
24
24
|
)
|
|
25
25
|
from utilities.release import load_release_data
|
|
26
|
-
from utilities.forms.widgets import BulkEditNullBooleanSelect
|
|
26
|
+
from utilities.forms.widgets import BulkEditNullBooleanSelect, DatePicker
|
|
27
27
|
from utilities.forms.rendering import FieldSet
|
|
28
28
|
from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, add_blank_choice
|
|
29
29
|
from tenancy.models import Tenant, TenantGroup
|
|
@@ -36,10 +36,11 @@ from netbox_dns.models import (
|
|
|
36
36
|
Registrar,
|
|
37
37
|
RegistrationContact,
|
|
38
38
|
ZoneTemplate,
|
|
39
|
+
DNSSECPolicy,
|
|
39
40
|
)
|
|
40
|
-
from netbox_dns.choices import ZoneStatusChoices
|
|
41
|
+
from netbox_dns.choices import ZoneStatusChoices, ZoneEPPStatusChoices
|
|
41
42
|
from netbox_dns.utilities import name_to_unicode, network_to_reverse
|
|
42
|
-
from netbox_dns.fields import RFC2317NetworkFormField
|
|
43
|
+
from netbox_dns.fields import RFC2317NetworkFormField, TimePeriodField
|
|
43
44
|
from netbox_dns.validators import validate_ipv4, validate_prefix, validate_rfc2317
|
|
44
45
|
|
|
45
46
|
|
|
@@ -58,10 +59,21 @@ class RollbackTransaction(Exception):
|
|
|
58
59
|
|
|
59
60
|
|
|
60
61
|
class ZoneTemplateUpdateMixin:
|
|
62
|
+
def _check_soa_mname(self):
|
|
63
|
+
if (
|
|
64
|
+
self.cleaned_data.get("soa_mname") is None
|
|
65
|
+
and "soa_mname" in self.fields.keys()
|
|
66
|
+
):
|
|
67
|
+
self.add_error(
|
|
68
|
+
"soa_mname",
|
|
69
|
+
_("soa_mname not set and no template or default value defined"),
|
|
70
|
+
)
|
|
71
|
+
|
|
61
72
|
def clean(self, *args, **kwargs):
|
|
62
73
|
super().clean(*args, **kwargs)
|
|
63
74
|
|
|
64
75
|
if (template := self.cleaned_data.get("template")) is None:
|
|
76
|
+
self._check_soa_mname()
|
|
65
77
|
return
|
|
66
78
|
|
|
67
79
|
if not self.cleaned_data.get("nameservers") and template.nameservers.all():
|
|
@@ -76,11 +88,7 @@ class ZoneTemplateUpdateMixin:
|
|
|
76
88
|
) not in (None, ""):
|
|
77
89
|
self.cleaned_data[field] = getattr(template, field)
|
|
78
90
|
|
|
79
|
-
|
|
80
|
-
self.add_error(
|
|
81
|
-
"soa_mname",
|
|
82
|
-
_("soa_mname not set and no template or default value defined"),
|
|
83
|
-
)
|
|
91
|
+
self._check_soa_mname()
|
|
84
92
|
|
|
85
93
|
if self.errors:
|
|
86
94
|
return
|
|
@@ -171,7 +179,7 @@ class ZoneForm(ZoneTemplateUpdateMixin, TenancyForm, NetBoxModelForm):
|
|
|
171
179
|
label=_("Nameservers"),
|
|
172
180
|
quick_add=QUICK_ADD,
|
|
173
181
|
)
|
|
174
|
-
default_ttl =
|
|
182
|
+
default_ttl = TimePeriodField(
|
|
175
183
|
required=False,
|
|
176
184
|
help_text=_("Default TTL for new records in this zone"),
|
|
177
185
|
validators=[MinValueValidator(1)],
|
|
@@ -181,7 +189,7 @@ class ZoneForm(ZoneTemplateUpdateMixin, TenancyForm, NetBoxModelForm):
|
|
|
181
189
|
required=False,
|
|
182
190
|
label=_("Description"),
|
|
183
191
|
)
|
|
184
|
-
soa_ttl =
|
|
192
|
+
soa_ttl = TimePeriodField(
|
|
185
193
|
required=True,
|
|
186
194
|
help_text=_("TTL for the SOA record of the zone"),
|
|
187
195
|
validators=[MinValueValidator(1)],
|
|
@@ -199,25 +207,25 @@ class ZoneForm(ZoneTemplateUpdateMixin, TenancyForm, NetBoxModelForm):
|
|
|
199
207
|
help_text=_("Mailbox of the zone's administrator"),
|
|
200
208
|
label=_("SOA RName"),
|
|
201
209
|
)
|
|
202
|
-
soa_refresh =
|
|
210
|
+
soa_refresh = TimePeriodField(
|
|
203
211
|
required=True,
|
|
204
212
|
help_text=_("Refresh interval for secondary nameservers"),
|
|
205
213
|
validators=[MinValueValidator(1)],
|
|
206
214
|
label=_("SOA Refresh"),
|
|
207
215
|
)
|
|
208
|
-
soa_retry =
|
|
216
|
+
soa_retry = TimePeriodField(
|
|
209
217
|
required=True,
|
|
210
218
|
help_text=_("Retry interval for secondary nameservers"),
|
|
211
219
|
validators=[MinValueValidator(1)],
|
|
212
220
|
label=_("SOA Retry"),
|
|
213
221
|
)
|
|
214
|
-
soa_expire =
|
|
222
|
+
soa_expire = TimePeriodField(
|
|
215
223
|
required=True,
|
|
216
224
|
validators=[MinValueValidator(1)],
|
|
217
225
|
help_text=_("Expire time after which the zone is considered unavailable"),
|
|
218
226
|
label=_("SOA Expire"),
|
|
219
227
|
)
|
|
220
|
-
soa_minimum =
|
|
228
|
+
soa_minimum = TimePeriodField(
|
|
221
229
|
required=True,
|
|
222
230
|
help_text=_("Minimum TTL for negative results, e.g. NXRRSET, NXDOMAIN"),
|
|
223
231
|
validators=[MinValueValidator(1)],
|
|
@@ -243,7 +251,7 @@ class ZoneForm(ZoneTemplateUpdateMixin, TenancyForm, NetBoxModelForm):
|
|
|
243
251
|
rfc2317_parent_managed = forms.BooleanField(
|
|
244
252
|
required=False,
|
|
245
253
|
help_text=_(
|
|
246
|
-
"IPv4 reverse zone for
|
|
254
|
+
"IPv4 reverse zone for delegating the RFC2317 PTR records is managed in NetBox DNS"
|
|
247
255
|
),
|
|
248
256
|
label=_("RFC2317 Parent Managed"),
|
|
249
257
|
)
|
|
@@ -271,6 +279,11 @@ class ZoneForm(ZoneTemplateUpdateMixin, TenancyForm, NetBoxModelForm):
|
|
|
271
279
|
"soa_serial",
|
|
272
280
|
name=_("SOA"),
|
|
273
281
|
),
|
|
282
|
+
FieldSet(
|
|
283
|
+
"dnssec_policy",
|
|
284
|
+
"inline_signing",
|
|
285
|
+
name=_("DNSSEC"),
|
|
286
|
+
),
|
|
274
287
|
FieldSet(
|
|
275
288
|
"rfc2317_prefix",
|
|
276
289
|
"rfc2317_parent_managed",
|
|
@@ -279,6 +292,8 @@ class ZoneForm(ZoneTemplateUpdateMixin, TenancyForm, NetBoxModelForm):
|
|
|
279
292
|
FieldSet(
|
|
280
293
|
"registrar",
|
|
281
294
|
"registry_domain_id",
|
|
295
|
+
"expiration_date",
|
|
296
|
+
"domain_status",
|
|
282
297
|
"registrant",
|
|
283
298
|
"admin_c",
|
|
284
299
|
"tech_c",
|
|
@@ -369,8 +384,12 @@ class ZoneForm(ZoneTemplateUpdateMixin, TenancyForm, NetBoxModelForm):
|
|
|
369
384
|
"soa_minimum",
|
|
370
385
|
"rfc2317_prefix",
|
|
371
386
|
"rfc2317_parent_managed",
|
|
387
|
+
"dnssec_policy",
|
|
388
|
+
"inline_signing",
|
|
372
389
|
"registrar",
|
|
373
390
|
"registry_domain_id",
|
|
391
|
+
"expiration_date",
|
|
392
|
+
"domain_status",
|
|
374
393
|
"registrant",
|
|
375
394
|
"admin_c",
|
|
376
395
|
"tech_c",
|
|
@@ -379,8 +398,8 @@ class ZoneForm(ZoneTemplateUpdateMixin, TenancyForm, NetBoxModelForm):
|
|
|
379
398
|
"tenant",
|
|
380
399
|
"tags",
|
|
381
400
|
)
|
|
382
|
-
|
|
383
|
-
"
|
|
401
|
+
widgets = {
|
|
402
|
+
"expiration_date": DatePicker,
|
|
384
403
|
}
|
|
385
404
|
|
|
386
405
|
|
|
@@ -403,6 +422,11 @@ class ZoneFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
|
|
|
403
422
|
"soa_serial_auto",
|
|
404
423
|
name=_("SOA"),
|
|
405
424
|
),
|
|
425
|
+
FieldSet(
|
|
426
|
+
"dnssec_policy_id",
|
|
427
|
+
"inline_signing",
|
|
428
|
+
name=_("DNSSEC"),
|
|
429
|
+
),
|
|
406
430
|
FieldSet(
|
|
407
431
|
"rfc2317_prefix",
|
|
408
432
|
"rfc2317_parent_managed",
|
|
@@ -412,6 +436,9 @@ class ZoneFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
|
|
|
412
436
|
FieldSet(
|
|
413
437
|
"registrar_id",
|
|
414
438
|
"registry_domain_id",
|
|
439
|
+
"expiration_date_before",
|
|
440
|
+
"expiration_date_after",
|
|
441
|
+
"domain_status",
|
|
415
442
|
"registrant_id",
|
|
416
443
|
"admin_c_id",
|
|
417
444
|
"tech_c_id",
|
|
@@ -438,6 +465,7 @@ class ZoneFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
|
|
|
438
465
|
nameserver_id = DynamicModelMultipleChoiceField(
|
|
439
466
|
queryset=NameServer.objects.all(),
|
|
440
467
|
required=False,
|
|
468
|
+
null_option=_("None"),
|
|
441
469
|
label=_("Nameservers"),
|
|
442
470
|
)
|
|
443
471
|
active = forms.NullBooleanField(
|
|
@@ -475,35 +503,67 @@ class ZoneFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
|
|
|
475
503
|
rfc2317_parent_zone_id = DynamicModelMultipleChoiceField(
|
|
476
504
|
queryset=Zone.objects.all(),
|
|
477
505
|
required=False,
|
|
506
|
+
null_option=_("None"),
|
|
478
507
|
label=_("Parent Zone"),
|
|
479
508
|
)
|
|
509
|
+
dnssec_policy_id = DynamicModelMultipleChoiceField(
|
|
510
|
+
queryset=DNSSECPolicy.objects.all(),
|
|
511
|
+
required=False,
|
|
512
|
+
null_option=_("None"),
|
|
513
|
+
label=_("DNSSEC Policy"),
|
|
514
|
+
)
|
|
515
|
+
inline_signing = forms.NullBooleanField(
|
|
516
|
+
required=False,
|
|
517
|
+
widget=forms.Select(choices=BOOLEAN_WITH_BLANK_CHOICES),
|
|
518
|
+
label=_("Use Inline Signing"),
|
|
519
|
+
)
|
|
480
520
|
registrar_id = DynamicModelMultipleChoiceField(
|
|
481
521
|
queryset=Registrar.objects.all(),
|
|
482
522
|
required=False,
|
|
523
|
+
null_option=_("None"),
|
|
483
524
|
label=_("Registrar"),
|
|
484
525
|
)
|
|
485
526
|
registry_domain_id = forms.CharField(
|
|
486
527
|
required=False,
|
|
487
528
|
label=_("Registry Domain ID"),
|
|
488
529
|
)
|
|
530
|
+
expiration_date_after = forms.DateField(
|
|
531
|
+
required=False,
|
|
532
|
+
label=_("Expiration Date after"),
|
|
533
|
+
widget=DatePicker,
|
|
534
|
+
)
|
|
535
|
+
expiration_date_before = forms.DateField(
|
|
536
|
+
required=False,
|
|
537
|
+
label=_("Expiration Date before"),
|
|
538
|
+
widget=DatePicker,
|
|
539
|
+
)
|
|
540
|
+
domain_status = forms.MultipleChoiceField(
|
|
541
|
+
choices=ZoneEPPStatusChoices,
|
|
542
|
+
required=False,
|
|
543
|
+
label=_("Domain Status"),
|
|
544
|
+
)
|
|
489
545
|
registrant_id = DynamicModelMultipleChoiceField(
|
|
490
546
|
queryset=RegistrationContact.objects.all(),
|
|
491
547
|
required=False,
|
|
548
|
+
null_option=_("None"),
|
|
492
549
|
label=_("Registrant"),
|
|
493
550
|
)
|
|
494
551
|
admin_c_id = DynamicModelMultipleChoiceField(
|
|
495
552
|
queryset=RegistrationContact.objects.all(),
|
|
496
553
|
required=False,
|
|
554
|
+
null_option=_("None"),
|
|
497
555
|
label=_("Administrative Contact"),
|
|
498
556
|
)
|
|
499
557
|
tech_c_id = DynamicModelMultipleChoiceField(
|
|
500
558
|
queryset=RegistrationContact.objects.all(),
|
|
501
559
|
required=False,
|
|
560
|
+
null_option=_("None"),
|
|
502
561
|
label=_("Technical Contact"),
|
|
503
562
|
)
|
|
504
563
|
billing_c_id = DynamicModelMultipleChoiceField(
|
|
505
564
|
queryset=RegistrationContact.objects.all(),
|
|
506
565
|
required=False,
|
|
566
|
+
null_option=_("None"),
|
|
507
567
|
label=_("Billing Contact"),
|
|
508
568
|
)
|
|
509
569
|
tag = TagFilterField(Zone)
|
|
@@ -530,11 +590,11 @@ class ZoneImportForm(ZoneTemplateUpdateMixin, NetBoxModelImportForm):
|
|
|
530
590
|
required=False,
|
|
531
591
|
label=_("Nameservers"),
|
|
532
592
|
)
|
|
533
|
-
default_ttl =
|
|
593
|
+
default_ttl = TimePeriodField(
|
|
534
594
|
required=False,
|
|
535
595
|
label=_("Default TTL"),
|
|
536
596
|
)
|
|
537
|
-
soa_ttl =
|
|
597
|
+
soa_ttl = TimePeriodField(
|
|
538
598
|
required=False,
|
|
539
599
|
help_text=_("TTL for the SOA record of the zone"),
|
|
540
600
|
label=_("SOA TTL"),
|
|
@@ -562,22 +622,22 @@ class ZoneImportForm(ZoneTemplateUpdateMixin, NetBoxModelImportForm):
|
|
|
562
622
|
required=False,
|
|
563
623
|
label=_("SOA Serial"),
|
|
564
624
|
)
|
|
565
|
-
soa_refresh =
|
|
625
|
+
soa_refresh = TimePeriodField(
|
|
566
626
|
required=False,
|
|
567
627
|
help_text=_("Refresh interval for secondary nameservers"),
|
|
568
628
|
label=_("SOA Refresh"),
|
|
569
629
|
)
|
|
570
|
-
soa_retry =
|
|
630
|
+
soa_retry = TimePeriodField(
|
|
571
631
|
required=False,
|
|
572
632
|
help_text=_("Retry interval for secondary nameservers"),
|
|
573
633
|
label=_("SOA Retry"),
|
|
574
634
|
)
|
|
575
|
-
soa_expire =
|
|
635
|
+
soa_expire = TimePeriodField(
|
|
576
636
|
required=False,
|
|
577
637
|
help_text=_("Expire time after which the zone is considered unavailable"),
|
|
578
638
|
label=_("SOA Expire"),
|
|
579
639
|
)
|
|
580
|
-
soa_minimum =
|
|
640
|
+
soa_minimum = TimePeriodField(
|
|
581
641
|
required=False,
|
|
582
642
|
help_text=_("Minimum TTL for negative results, e.g. NXRRSET, NXDOMAIN"),
|
|
583
643
|
label=_("SOA Minimum TTL"),
|
|
@@ -590,10 +650,23 @@ class ZoneImportForm(ZoneTemplateUpdateMixin, NetBoxModelImportForm):
|
|
|
590
650
|
rfc2317_parent_managed = forms.BooleanField(
|
|
591
651
|
required=False,
|
|
592
652
|
help_text=_(
|
|
593
|
-
"IPv4 reverse zone for
|
|
653
|
+
"IPv4 reverse zone for delegating the RFC2317 PTR records is managed in NetBox DNS"
|
|
594
654
|
),
|
|
595
655
|
label=_("RFC2317 Parent Managed"),
|
|
596
656
|
)
|
|
657
|
+
dnssec_policy = CSVModelChoiceField(
|
|
658
|
+
queryset=DNSSECPolicy.objects.all(),
|
|
659
|
+
required=False,
|
|
660
|
+
to_field_name="name",
|
|
661
|
+
error_messages={
|
|
662
|
+
"invalid_choice": _("DNSSEC policy %(value)s not found"),
|
|
663
|
+
},
|
|
664
|
+
label=_("DNSSEC Policy"),
|
|
665
|
+
)
|
|
666
|
+
inline_signing = forms.BooleanField(
|
|
667
|
+
required=False,
|
|
668
|
+
label=_("Use Inline Signing"),
|
|
669
|
+
)
|
|
597
670
|
registrar = CSVModelChoiceField(
|
|
598
671
|
queryset=Registrar.objects.all(),
|
|
599
672
|
required=False,
|
|
@@ -607,6 +680,11 @@ class ZoneImportForm(ZoneTemplateUpdateMixin, NetBoxModelImportForm):
|
|
|
607
680
|
required=False,
|
|
608
681
|
label=_("Registry Domain ID"),
|
|
609
682
|
)
|
|
683
|
+
domain_status = CSVChoiceField(
|
|
684
|
+
choices=ZoneEPPStatusChoices,
|
|
685
|
+
required=False,
|
|
686
|
+
label=_("Domain Status"),
|
|
687
|
+
)
|
|
610
688
|
registrant = CSVModelChoiceField(
|
|
611
689
|
queryset=RegistrationContact.objects.all(),
|
|
612
690
|
required=False,
|
|
@@ -676,10 +754,14 @@ class ZoneImportForm(ZoneTemplateUpdateMixin, NetBoxModelImportForm):
|
|
|
676
754
|
"soa_retry",
|
|
677
755
|
"soa_expire",
|
|
678
756
|
"soa_minimum",
|
|
757
|
+
"dnssec_policy",
|
|
758
|
+
"inline_signing",
|
|
679
759
|
"rfc2317_prefix",
|
|
680
760
|
"rfc2317_parent_managed",
|
|
681
761
|
"registrar",
|
|
682
762
|
"registry_domain_id",
|
|
763
|
+
"expiration_date",
|
|
764
|
+
"domain_status",
|
|
683
765
|
"registrant",
|
|
684
766
|
"admin_c",
|
|
685
767
|
"tech_c",
|
|
@@ -726,7 +808,7 @@ class ZoneBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
726
808
|
required=False,
|
|
727
809
|
label=_("Nameservers"),
|
|
728
810
|
)
|
|
729
|
-
default_ttl =
|
|
811
|
+
default_ttl = TimePeriodField(
|
|
730
812
|
required=False,
|
|
731
813
|
validators=[MinValueValidator(1)],
|
|
732
814
|
label=_("Default TTL"),
|
|
@@ -736,7 +818,7 @@ class ZoneBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
736
818
|
required=False,
|
|
737
819
|
label=_("Description"),
|
|
738
820
|
)
|
|
739
|
-
soa_ttl =
|
|
821
|
+
soa_ttl = TimePeriodField(
|
|
740
822
|
required=False,
|
|
741
823
|
validators=[MinValueValidator(1)],
|
|
742
824
|
label=_("SOA TTL"),
|
|
@@ -760,22 +842,22 @@ class ZoneBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
760
842
|
validators=[MinValueValidator(1), MaxValueValidator(4294967295)],
|
|
761
843
|
label=_("SOA Serial"),
|
|
762
844
|
)
|
|
763
|
-
soa_refresh =
|
|
845
|
+
soa_refresh = TimePeriodField(
|
|
764
846
|
required=False,
|
|
765
847
|
validators=[MinValueValidator(1)],
|
|
766
848
|
label=_("SOA Refresh"),
|
|
767
849
|
)
|
|
768
|
-
soa_retry =
|
|
850
|
+
soa_retry = TimePeriodField(
|
|
769
851
|
required=False,
|
|
770
852
|
validators=[MinValueValidator(1)],
|
|
771
853
|
label=_("SOA Retry"),
|
|
772
854
|
)
|
|
773
|
-
soa_expire =
|
|
855
|
+
soa_expire = TimePeriodField(
|
|
774
856
|
required=False,
|
|
775
857
|
validators=[MinValueValidator(1)],
|
|
776
858
|
label=_("SOA Expire"),
|
|
777
859
|
)
|
|
778
|
-
soa_minimum =
|
|
860
|
+
soa_minimum = TimePeriodField(
|
|
779
861
|
required=False,
|
|
780
862
|
validators=[MinValueValidator(1)],
|
|
781
863
|
label=_("SOA Minimum TTL"),
|
|
@@ -790,10 +872,20 @@ class ZoneBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
790
872
|
required=False,
|
|
791
873
|
widget=BulkEditNullBooleanSelect(),
|
|
792
874
|
help_text=_(
|
|
793
|
-
"IPv4 reverse zone for
|
|
875
|
+
"IPv4 reverse zone for delegating the RFC2317 PTR records is managed in NetBox DNS"
|
|
794
876
|
),
|
|
795
877
|
label=_("RFC2317 Parent Managed"),
|
|
796
878
|
)
|
|
879
|
+
dnssec_policy = DynamicModelChoiceField(
|
|
880
|
+
queryset=DNSSECPolicy.objects.all(),
|
|
881
|
+
required=False,
|
|
882
|
+
label=_("DNSSEC Policy"),
|
|
883
|
+
)
|
|
884
|
+
inline_signing = forms.NullBooleanField(
|
|
885
|
+
required=False,
|
|
886
|
+
widget=BulkEditNullBooleanSelect(),
|
|
887
|
+
label=_("Use Inline Signing"),
|
|
888
|
+
)
|
|
797
889
|
registrar = DynamicModelChoiceField(
|
|
798
890
|
queryset=Registrar.objects.all(),
|
|
799
891
|
required=False,
|
|
@@ -803,6 +895,16 @@ class ZoneBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
803
895
|
required=False,
|
|
804
896
|
label=_("Registry Domain ID"),
|
|
805
897
|
)
|
|
898
|
+
expiration_date = forms.DateField(
|
|
899
|
+
required=False,
|
|
900
|
+
label=_("Expiration Date"),
|
|
901
|
+
widget=DatePicker,
|
|
902
|
+
)
|
|
903
|
+
domain_status = forms.ChoiceField(
|
|
904
|
+
choices=add_blank_choice(ZoneEPPStatusChoices),
|
|
905
|
+
required=False,
|
|
906
|
+
label=_("Domain Status"),
|
|
907
|
+
)
|
|
806
908
|
registrant = DynamicModelChoiceField(
|
|
807
909
|
queryset=RegistrationContact.objects.all(),
|
|
808
910
|
required=False,
|
|
@@ -857,6 +959,11 @@ class ZoneBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
857
959
|
"soa_serial",
|
|
858
960
|
name=_("SOA"),
|
|
859
961
|
),
|
|
962
|
+
FieldSet(
|
|
963
|
+
"dnssec_policy",
|
|
964
|
+
"inline_signing",
|
|
965
|
+
name=_("DNSSEC"),
|
|
966
|
+
),
|
|
860
967
|
FieldSet(
|
|
861
968
|
"rfc2317_prefix",
|
|
862
969
|
"rfc2317_parent_managed",
|
|
@@ -865,6 +972,8 @@ class ZoneBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
865
972
|
FieldSet(
|
|
866
973
|
"registrar",
|
|
867
974
|
"registry_domain_id",
|
|
975
|
+
"expiration_date",
|
|
976
|
+
"domain_status",
|
|
868
977
|
"registrant",
|
|
869
978
|
"admin_c",
|
|
870
979
|
"tech_c",
|
|
@@ -879,6 +988,8 @@ class ZoneBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
879
988
|
"nameservers",
|
|
880
989
|
"rfc2317_prefix",
|
|
881
990
|
"registrar",
|
|
991
|
+
"expiration_date",
|
|
992
|
+
"domain_status",
|
|
882
993
|
"registry_domain_id",
|
|
883
994
|
"registrant",
|
|
884
995
|
"admin_c",
|
|
@@ -27,6 +27,7 @@ from netbox_dns.models import (
|
|
|
27
27
|
NameServer,
|
|
28
28
|
Registrar,
|
|
29
29
|
RegistrationContact,
|
|
30
|
+
DNSSECPolicy,
|
|
30
31
|
)
|
|
31
32
|
|
|
32
33
|
|
|
@@ -62,6 +63,7 @@ class ZoneTemplateForm(TenancyForm, NetBoxModelForm):
|
|
|
62
63
|
FieldSet("name", "description", "nameservers", name=_("Zone Template")),
|
|
63
64
|
FieldSet("soa_mname", "soa_rname", name=_("SOA")),
|
|
64
65
|
FieldSet("record_templates", name=_("Record Templates")),
|
|
66
|
+
FieldSet("dnssec_policy", name=_("DNSSEC")),
|
|
65
67
|
FieldSet(
|
|
66
68
|
"registrar",
|
|
67
69
|
"registrant",
|
|
@@ -82,6 +84,7 @@ class ZoneTemplateForm(TenancyForm, NetBoxModelForm):
|
|
|
82
84
|
"nameservers",
|
|
83
85
|
"soa_mname",
|
|
84
86
|
"soa_rname",
|
|
87
|
+
"dnssec_policy",
|
|
85
88
|
"record_templates",
|
|
86
89
|
"description",
|
|
87
90
|
"registrar",
|
|
@@ -105,6 +108,7 @@ class ZoneTemplateFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
|
|
|
105
108
|
FieldSet("name", "nameserver_id", "description", name=_("Attributes")),
|
|
106
109
|
FieldSet("soa_mname_id", "soa_rname", name=_("SOA")),
|
|
107
110
|
FieldSet("record_template_id", name=_("Record Templates")),
|
|
111
|
+
FieldSet("dnssec_policy", name=_("DNSSEC")),
|
|
108
112
|
FieldSet(
|
|
109
113
|
"registrar_id",
|
|
110
114
|
"registrant_id",
|
|
@@ -123,11 +127,13 @@ class ZoneTemplateFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
|
|
|
123
127
|
nameserver_id = DynamicModelMultipleChoiceField(
|
|
124
128
|
queryset=NameServer.objects.all(),
|
|
125
129
|
required=False,
|
|
130
|
+
null_option=_("None"),
|
|
126
131
|
label=_("Nameservers"),
|
|
127
132
|
)
|
|
128
133
|
soa_mname_id = DynamicModelMultipleChoiceField(
|
|
129
134
|
queryset=NameServer.objects.all(),
|
|
130
135
|
required=False,
|
|
136
|
+
null_option=_("None"),
|
|
131
137
|
label=_("MName"),
|
|
132
138
|
)
|
|
133
139
|
soa_rname = forms.CharField(
|
|
@@ -137,34 +143,46 @@ class ZoneTemplateFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
|
|
|
137
143
|
record_template_id = DynamicModelMultipleChoiceField(
|
|
138
144
|
queryset=RecordTemplate.objects.all(),
|
|
139
145
|
required=False,
|
|
146
|
+
null_option=_("None"),
|
|
140
147
|
label=_("Record Templates"),
|
|
141
148
|
)
|
|
142
149
|
description = forms.CharField(
|
|
143
150
|
required=False,
|
|
144
151
|
)
|
|
152
|
+
dnssec_policy_id = DynamicModelMultipleChoiceField(
|
|
153
|
+
queryset=DNSSECPolicy.objects.all(),
|
|
154
|
+
required=False,
|
|
155
|
+
null_option=_("None"),
|
|
156
|
+
label=_("DNSSEC Policy ID"),
|
|
157
|
+
)
|
|
145
158
|
registrar_id = DynamicModelMultipleChoiceField(
|
|
146
159
|
queryset=Registrar.objects.all(),
|
|
147
160
|
required=False,
|
|
161
|
+
null_option=_("None"),
|
|
148
162
|
label=_("Registrar"),
|
|
149
163
|
)
|
|
150
164
|
registrant_id = DynamicModelMultipleChoiceField(
|
|
151
165
|
queryset=RegistrationContact.objects.all(),
|
|
152
166
|
required=False,
|
|
167
|
+
null_option=_("None"),
|
|
153
168
|
label=_("Registrant"),
|
|
154
169
|
)
|
|
155
170
|
admin_c_id = DynamicModelMultipleChoiceField(
|
|
156
171
|
queryset=RegistrationContact.objects.all(),
|
|
157
172
|
required=False,
|
|
173
|
+
null_option=_("None"),
|
|
158
174
|
label=_("Administrative Contact"),
|
|
159
175
|
)
|
|
160
176
|
tech_c_id = DynamicModelMultipleChoiceField(
|
|
161
177
|
queryset=RegistrationContact.objects.all(),
|
|
162
178
|
required=False,
|
|
179
|
+
null_option=_("None"),
|
|
163
180
|
label=_("Technical Contact"),
|
|
164
181
|
)
|
|
165
182
|
billing_c_id = DynamicModelMultipleChoiceField(
|
|
166
183
|
queryset=RegistrationContact.objects.all(),
|
|
167
184
|
required=False,
|
|
185
|
+
null_option=_("None"),
|
|
168
186
|
label=_("Billing Contact"),
|
|
169
187
|
)
|
|
170
188
|
tag = TagFilterField(ZoneTemplate)
|
|
@@ -189,6 +207,15 @@ class ZoneTemplateImportForm(NetBoxModelImportForm):
|
|
|
189
207
|
required=False,
|
|
190
208
|
label=_("Record Templates"),
|
|
191
209
|
)
|
|
210
|
+
dnssec_policy = CSVModelChoiceField(
|
|
211
|
+
queryset=DNSSECPolicy.objects.all(),
|
|
212
|
+
required=False,
|
|
213
|
+
to_field_name="name",
|
|
214
|
+
error_messages={
|
|
215
|
+
"invalid_choice": _("DNSSEC policy %(value)s not found"),
|
|
216
|
+
},
|
|
217
|
+
label=_("DNSSEC Policy"),
|
|
218
|
+
)
|
|
192
219
|
registrar = CSVModelChoiceField(
|
|
193
220
|
queryset=Registrar.objects.all(),
|
|
194
221
|
required=False,
|
|
@@ -250,6 +277,7 @@ class ZoneTemplateImportForm(NetBoxModelImportForm):
|
|
|
250
277
|
"soa_mname",
|
|
251
278
|
"soa_rname",
|
|
252
279
|
"record_templates",
|
|
280
|
+
"dnssec_policy",
|
|
253
281
|
"description",
|
|
254
282
|
"registrar",
|
|
255
283
|
"registrant",
|
|
@@ -281,6 +309,11 @@ class ZoneTemplateBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
281
309
|
description = forms.CharField(
|
|
282
310
|
max_length=200, required=False, label=_("Description")
|
|
283
311
|
)
|
|
312
|
+
dnssec_policy = DynamicModelChoiceField(
|
|
313
|
+
queryset=DNSSECPolicy.objects.all(),
|
|
314
|
+
required=False,
|
|
315
|
+
label=_("DNSSEC Policy"),
|
|
316
|
+
)
|
|
284
317
|
registrar = DynamicModelChoiceField(
|
|
285
318
|
queryset=Registrar.objects.all(),
|
|
286
319
|
required=False,
|
|
@@ -334,6 +367,10 @@ class ZoneTemplateBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
334
367
|
"record_templates",
|
|
335
368
|
name=_("Record Templates"),
|
|
336
369
|
),
|
|
370
|
+
FieldSet(
|
|
371
|
+
"dnssec_policy",
|
|
372
|
+
name=_("DNSSEC"),
|
|
373
|
+
),
|
|
337
374
|
FieldSet(
|
|
338
375
|
"registrar",
|
|
339
376
|
"registrant",
|
|
@@ -351,6 +388,7 @@ class ZoneTemplateBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
351
388
|
"soa_mname",
|
|
352
389
|
"soa_rname",
|
|
353
390
|
"record_templates",
|
|
391
|
+
"dnssec_policy",
|
|
354
392
|
"registrar",
|
|
355
393
|
"registrant",
|
|
356
394
|
"admin_c",
|
netbox_dns/graphql/__init__.py
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
from .schema import (
|
|
2
|
-
NetBoxDNSViewQuery,
|
|
3
2
|
NetBoxDNSNameServerQuery,
|
|
4
|
-
|
|
5
|
-
NetBoxDNSRegistrarQuery,
|
|
3
|
+
NetBoxDNSViewQuery,
|
|
6
4
|
NetBoxDNSZoneQuery,
|
|
7
5
|
NetBoxDNSRecordQuery,
|
|
6
|
+
NetBoxDNSDNSSECKeyTemplateQuery,
|
|
7
|
+
NetBoxDNSDNSSECPolicyQuery,
|
|
8
|
+
NetBoxDNSRegistrationContactQuery,
|
|
9
|
+
NetBoxDNSRegistrarQuery,
|
|
8
10
|
NetBoxDNSZoneTemplateQuery,
|
|
9
11
|
NetBoxDNSRecordTemplateQuery,
|
|
10
12
|
)
|
|
@@ -14,6 +16,8 @@ schema = [
|
|
|
14
16
|
NetBoxDNSViewQuery,
|
|
15
17
|
NetBoxDNSZoneQuery,
|
|
16
18
|
NetBoxDNSRecordQuery,
|
|
19
|
+
NetBoxDNSDNSSECKeyTemplateQuery,
|
|
20
|
+
NetBoxDNSDNSSECPolicyQuery,
|
|
17
21
|
NetBoxDNSRegistrationContactQuery,
|
|
18
22
|
NetBoxDNSRegistrarQuery,
|
|
19
23
|
NetBoxDNSZoneTemplateQuery,
|