netbox-plugin-dns 1.2.5__py3-none-any.whl → 1.2.7b2__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.

Files changed (65) hide show
  1. netbox_dns/__init__.py +15 -1
  2. netbox_dns/api/serializers.py +3 -0
  3. netbox_dns/api/serializers_/dnssec_key_template.py +46 -0
  4. netbox_dns/api/serializers_/dnssec_policy.py +83 -0
  5. netbox_dns/api/serializers_/zone.py +10 -0
  6. netbox_dns/api/serializers_/zone_template.py +13 -4
  7. netbox_dns/api/urls.py +4 -0
  8. netbox_dns/api/views.py +18 -0
  9. netbox_dns/choices/__init__.py +2 -0
  10. netbox_dns/choices/dnssec_key_template.py +63 -0
  11. netbox_dns/choices/dnssec_policy.py +40 -0
  12. netbox_dns/choices/record.py +2 -25
  13. netbox_dns/choices/utilities.py +26 -0
  14. netbox_dns/fields/__init__.py +2 -0
  15. netbox_dns/fields/choice_array.py +20 -0
  16. netbox_dns/fields/timeperiod.py +31 -0
  17. netbox_dns/filtersets/__init__.py +3 -0
  18. netbox_dns/filtersets/dnssec_key_template.py +51 -0
  19. netbox_dns/filtersets/dnssec_policy.py +73 -0
  20. netbox_dns/filtersets/zone.py +23 -4
  21. netbox_dns/filtersets/zone_template.py +11 -0
  22. netbox_dns/forms/__init__.py +2 -0
  23. netbox_dns/forms/dnssec_key_template.py +188 -0
  24. netbox_dns/forms/dnssec_policy.py +563 -0
  25. netbox_dns/forms/record.py +12 -6
  26. netbox_dns/forms/record_template.py +9 -3
  27. netbox_dns/forms/zone.py +70 -22
  28. netbox_dns/forms/zone_template.py +29 -0
  29. netbox_dns/graphql/__init__.py +7 -3
  30. netbox_dns/graphql/filters.py +16 -0
  31. netbox_dns/graphql/schema.py +20 -0
  32. netbox_dns/graphql/types.py +67 -3
  33. netbox_dns/locale/de/LC_MESSAGES/django.mo +0 -0
  34. netbox_dns/locale/fr/LC_MESSAGES/django.mo +0 -0
  35. netbox_dns/migrations/0015_dnssec.py +168 -0
  36. netbox_dns/migrations/0016_dnssec_policy_status.py +18 -0
  37. netbox_dns/migrations/0017_dnssec_policy_zone_zone_template.py +41 -0
  38. netbox_dns/models/__init__.py +2 -0
  39. netbox_dns/models/dnssec_key_template.py +114 -0
  40. netbox_dns/models/dnssec_policy.py +201 -0
  41. netbox_dns/models/zone.py +29 -16
  42. netbox_dns/models/zone_template.py +16 -6
  43. netbox_dns/navigation.py +49 -0
  44. netbox_dns/signals/dnssec.py +32 -0
  45. netbox_dns/tables/__init__.py +2 -0
  46. netbox_dns/tables/dnssec_key_template.py +48 -0
  47. netbox_dns/tables/dnssec_policy.py +131 -0
  48. netbox_dns/tables/zone.py +17 -1
  49. netbox_dns/tables/zone_template.py +4 -0
  50. netbox_dns/templates/netbox_dns/dnsseckeytemplate.html +70 -0
  51. netbox_dns/templates/netbox_dns/dnssecpolicy.html +155 -0
  52. netbox_dns/templates/netbox_dns/zone.html +16 -0
  53. netbox_dns/templates/netbox_dns/zonetemplate/child.html +46 -0
  54. netbox_dns/templates/netbox_dns/zonetemplate.html +12 -0
  55. netbox_dns/urls.py +16 -0
  56. netbox_dns/validators/__init__.py +1 -0
  57. netbox_dns/validators/dnssec.py +146 -0
  58. netbox_dns/views/__init__.py +2 -0
  59. netbox_dns/views/dnssec_key_template.py +87 -0
  60. netbox_dns/views/dnssec_policy.py +153 -0
  61. {netbox_plugin_dns-1.2.5.dist-info → netbox_plugin_dns-1.2.7b2.dist-info}/METADATA +2 -2
  62. {netbox_plugin_dns-1.2.5.dist-info → netbox_plugin_dns-1.2.7b2.dist-info}/RECORD +65 -39
  63. {netbox_plugin_dns-1.2.5.dist-info → netbox_plugin_dns-1.2.7b2.dist-info}/WHEEL +1 -1
  64. {netbox_plugin_dns-1.2.5.dist-info → netbox_plugin_dns-1.2.7b2.dist-info}/LICENSE +0 -0
  65. {netbox_plugin_dns-1.2.5.dist-info → netbox_plugin_dns-1.2.7b2.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,563 @@
1
+ from packaging.version import Version
2
+
3
+ from django import forms
4
+ from django.utils.translation import gettext_lazy as _
5
+
6
+ from netbox.forms import (
7
+ NetBoxModelBulkEditForm,
8
+ NetBoxModelFilterSetForm,
9
+ NetBoxModelImportForm,
10
+ NetBoxModelForm,
11
+ )
12
+ from utilities.forms.fields import (
13
+ TagFilterField,
14
+ CSVModelChoiceField,
15
+ CSVChoiceField,
16
+ DynamicModelChoiceField,
17
+ DynamicModelMultipleChoiceField,
18
+ )
19
+ from utilities.release import load_release_data
20
+ from utilities.forms.rendering import FieldSet
21
+ from utilities.forms.widgets import BulkEditNullBooleanSelect
22
+ from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, add_blank_choice
23
+ from tenancy.models import Tenant, TenantGroup
24
+ from tenancy.forms import TenancyForm, TenancyFilterForm
25
+
26
+ from netbox_dns.models import DNSSECPolicy, DNSSECKeyTemplate
27
+ from netbox_dns.choices import DNSSECPolicyDigestChoices, DNSSECPolicyStatusChoices
28
+ from netbox_dns.fields import TimePeriodField
29
+
30
+
31
+ __all__ = (
32
+ "DNSSECPolicyForm",
33
+ "DNSSECPolicyFilterForm",
34
+ "DNSSECPolicyImportForm",
35
+ "DNSSECPolicyBulkEditForm",
36
+ )
37
+
38
+ QUICK_ADD = Version(load_release_data().version) >= Version("4.2.5")
39
+
40
+
41
+ class DNSSECPolicyForm(TenancyForm, NetBoxModelForm):
42
+ fieldsets = (
43
+ FieldSet(
44
+ "name",
45
+ "description",
46
+ "status",
47
+ "key_templates",
48
+ name=_("Attributes"),
49
+ ),
50
+ FieldSet(
51
+ "dnskey_ttl",
52
+ "purge_keys",
53
+ "publish_safety",
54
+ "retire_safety",
55
+ "signatures_jitter",
56
+ "signatures_refresh",
57
+ "signatures_validity",
58
+ "signatures_validity_dnskey",
59
+ "max_zone_ttl",
60
+ "zone_propagation_delay",
61
+ name=_("Timing"),
62
+ ),
63
+ FieldSet(
64
+ "create_cdnskey",
65
+ "cds_digest_types",
66
+ "parent_ds_ttl",
67
+ "parent_propagation_delay",
68
+ name=_("Parent Delegation"),
69
+ ),
70
+ FieldSet(
71
+ "use_nsec3",
72
+ "nsec3_iterations",
73
+ "nsec3_opt_out",
74
+ "nsec3_salt_size",
75
+ name=_("Proof of Non-Existence"),
76
+ ),
77
+ FieldSet("tenant_group_id", "tenant_id", name=_("Tenancy")),
78
+ FieldSet("tags", name=_("Tags")),
79
+ )
80
+
81
+ key_templates = DynamicModelMultipleChoiceField(
82
+ queryset=DNSSECKeyTemplate.objects.all(),
83
+ required=False,
84
+ label=_("Key Templates"),
85
+ help_text=_("Select CSK or KSK/ZSK templates for signing"),
86
+ quick_add=QUICK_ADD,
87
+ )
88
+
89
+ class Meta:
90
+ model = DNSSECPolicy
91
+ fields = (
92
+ "name",
93
+ "description",
94
+ "status",
95
+ "key_templates",
96
+ "dnskey_ttl",
97
+ "purge_keys",
98
+ "publish_safety",
99
+ "retire_safety",
100
+ "signatures_jitter",
101
+ "signatures_refresh",
102
+ "signatures_validity",
103
+ "signatures_validity_dnskey",
104
+ "max_zone_ttl",
105
+ "zone_propagation_delay",
106
+ "create_cdnskey",
107
+ "cds_digest_types",
108
+ "parent_ds_ttl",
109
+ "parent_propagation_delay",
110
+ "use_nsec3",
111
+ "nsec3_iterations",
112
+ "nsec3_opt_out",
113
+ "nsec3_salt_size",
114
+ "tenant_group",
115
+ "tenant",
116
+ "tags",
117
+ )
118
+
119
+ dnskey_ttl = TimePeriodField(
120
+ required=False,
121
+ label=_("DNSKEY TTL"),
122
+ )
123
+ purge_keys = TimePeriodField(
124
+ required=False,
125
+ label=_("Purge Keys"),
126
+ )
127
+ publish_safety = TimePeriodField(
128
+ required=False,
129
+ label=_("Publish Safety"),
130
+ )
131
+ retire_safety = TimePeriodField(
132
+ required=False,
133
+ label=_("Retire Safety"),
134
+ )
135
+ signatures_jitter = TimePeriodField(
136
+ required=False,
137
+ label=_("Signatures Jitter"),
138
+ )
139
+ signatures_refresh = TimePeriodField(
140
+ required=False,
141
+ label=_("Signatures Refresh"),
142
+ )
143
+ signatures_validity = TimePeriodField(
144
+ required=False,
145
+ label=_("Signatures Validity"),
146
+ )
147
+ signatures_validity_dnskey = TimePeriodField(
148
+ required=False,
149
+ label=_("Signatures Validity (DNSKEY)"),
150
+ )
151
+ max_zone_ttl = TimePeriodField(
152
+ required=False,
153
+ label=_("Max Zone TTL"),
154
+ )
155
+ zone_propagation_delay = TimePeriodField(
156
+ required=False,
157
+ label=_("Zone Propagation Delay"),
158
+ )
159
+ parent_ds_ttl = TimePeriodField(
160
+ required=False,
161
+ label=_("Parent DS TTL"),
162
+ )
163
+ parent_propagation_delay = TimePeriodField(
164
+ required=False,
165
+ label=_("Parent Propagation Delay"),
166
+ )
167
+
168
+
169
+ class DNSSECPolicyFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
170
+ model = DNSSECPolicy
171
+ fieldsets = (
172
+ FieldSet("q", "filter_id", "tag"),
173
+ FieldSet(
174
+ "name",
175
+ "description",
176
+ "status",
177
+ "key_template_id",
178
+ name=_("Attributes"),
179
+ ),
180
+ FieldSet(
181
+ "dnskey_ttl",
182
+ "purge_keys",
183
+ "publish_safety",
184
+ "retire_safety",
185
+ "signatures_jitter",
186
+ "signatures_refresh",
187
+ "signatures_validity",
188
+ "signatures_validity_dnskey",
189
+ "max_zone_ttl",
190
+ "zone_propagation_delay",
191
+ name=_("Timing"),
192
+ ),
193
+ FieldSet(
194
+ "create_cdnskey",
195
+ "cds_digest_types",
196
+ "parent_ds_ttl",
197
+ "parent_propagation_delay",
198
+ name=_("Parent Delegation"),
199
+ ),
200
+ FieldSet(
201
+ "use_nsec3",
202
+ "nsec3_iterations",
203
+ "nsec3_opt_out",
204
+ "nsec3_salt_size",
205
+ name=_("Proof of Non-Existence"),
206
+ ),
207
+ FieldSet("tenant_group_id", "tenant_id", name=_("Tenancy")),
208
+ FieldSet("tags", name=_("Tags")),
209
+ )
210
+
211
+ name = forms.CharField(
212
+ required=False,
213
+ )
214
+ description = forms.CharField(
215
+ required=False,
216
+ )
217
+ status = forms.MultipleChoiceField(
218
+ choices=DNSSECPolicyStatusChoices,
219
+ required=False,
220
+ label=_("Status"),
221
+ )
222
+ key_template_id = DynamicModelMultipleChoiceField(
223
+ queryset=DNSSECKeyTemplate.objects.all(),
224
+ required=False,
225
+ label=_("Key Templates"),
226
+ )
227
+ dnskey_ttl = TimePeriodField(
228
+ required=False,
229
+ label=_("DNSKEY TTL"),
230
+ )
231
+ purge_keys = TimePeriodField(
232
+ required=False,
233
+ label=_("Purge Keys"),
234
+ )
235
+ publish_safety = TimePeriodField(
236
+ required=False,
237
+ label=_("Publish Safety"),
238
+ )
239
+ retire_safety = TimePeriodField(
240
+ required=False,
241
+ label=_("Retire Safety"),
242
+ )
243
+ signatures_jitter = TimePeriodField(
244
+ required=False,
245
+ label=_("Signatures Jitter"),
246
+ )
247
+ signatures_refresh = TimePeriodField(
248
+ required=False,
249
+ label=_("Signatures Refresh"),
250
+ )
251
+ signatures_validity = TimePeriodField(
252
+ required=False,
253
+ label=_("Signatures Validity"),
254
+ )
255
+ signatures_validity_dnskey = TimePeriodField(
256
+ required=False,
257
+ label=_("Signatures Validity (DNSKEY)"),
258
+ )
259
+ max_zone_ttl = TimePeriodField(
260
+ required=False,
261
+ label=_("Max Zone TTL"),
262
+ )
263
+ zone_propagation_delay = TimePeriodField(
264
+ required=False,
265
+ label=_("Zone Propagation Delay"),
266
+ )
267
+ create_cdnskey = forms.NullBooleanField(
268
+ required=False,
269
+ widget=forms.Select(choices=BOOLEAN_WITH_BLANK_CHOICES),
270
+ label=_("Create CDNSKEY"),
271
+ )
272
+ cds_digest_types = forms.MultipleChoiceField(
273
+ required=False,
274
+ choices=DNSSECPolicyDigestChoices,
275
+ label=_("CDS Digest Types"),
276
+ )
277
+ parent_ds_ttl = TimePeriodField(
278
+ required=False,
279
+ label=_("Parent DS TTL"),
280
+ )
281
+ parent_propagation_delay = TimePeriodField(
282
+ required=False,
283
+ label=_("Parent Propagation Delay"),
284
+ )
285
+ use_nsec3 = forms.NullBooleanField(
286
+ required=False,
287
+ widget=forms.Select(choices=BOOLEAN_WITH_BLANK_CHOICES),
288
+ label=_("Use NSEC3"),
289
+ )
290
+ nsec3_iterations = forms.IntegerField(
291
+ required=False,
292
+ label=_("NSEC3 Iterations"),
293
+ )
294
+ nsec3_opt_out = forms.NullBooleanField(
295
+ required=False,
296
+ widget=forms.Select(choices=BOOLEAN_WITH_BLANK_CHOICES),
297
+ label=_("NSEC3 Opt-Out"),
298
+ )
299
+ nsec3_salt_size = forms.IntegerField(
300
+ required=False,
301
+ label=_("NSEC3 Salt Size"),
302
+ )
303
+
304
+ tag = TagFilterField(DNSSECPolicy)
305
+
306
+
307
+ class DNSSECPolicyImportForm(NetBoxModelImportForm):
308
+ status = CSVChoiceField(
309
+ choices=DNSSECPolicyStatusChoices,
310
+ required=False,
311
+ label=_("Status"),
312
+ )
313
+ dnskey_ttl = TimePeriodField(
314
+ required=False,
315
+ label=_("DNSKEY TTL"),
316
+ )
317
+ purge_keys = TimePeriodField(
318
+ required=False,
319
+ label=_("Purge Keys"),
320
+ )
321
+ publish_safety = TimePeriodField(
322
+ required=False,
323
+ label=_("Publish Safety"),
324
+ )
325
+ retire_safety = TimePeriodField(
326
+ required=False,
327
+ label=_("Retire Safety"),
328
+ )
329
+ signatures_jitter = TimePeriodField(
330
+ required=False,
331
+ label=_("Signatures Jitter"),
332
+ )
333
+ signatures_refresh = TimePeriodField(
334
+ required=False,
335
+ label=_("Signatures Refresh"),
336
+ )
337
+ signatures_validity = TimePeriodField(
338
+ required=False,
339
+ label=_("Signatures Validity"),
340
+ )
341
+ signatures_validity_dnskey = TimePeriodField(
342
+ required=False,
343
+ label=_("Signatures Validity (DNSKEY)"),
344
+ )
345
+ max_zone_ttl = TimePeriodField(
346
+ required=False,
347
+ label=_("Max Zone TTL"),
348
+ )
349
+ zone_propagation_delay = TimePeriodField(
350
+ required=False,
351
+ label=_("Zone Propagation Delay"),
352
+ )
353
+ parent_ds_ttl = TimePeriodField(
354
+ required=False,
355
+ label=_("Parent DS TTL"),
356
+ )
357
+ parent_propagation_delay = TimePeriodField(
358
+ required=False,
359
+ label=_("Parent Propagation Delay"),
360
+ )
361
+ tenant = CSVModelChoiceField(
362
+ queryset=Tenant.objects.all(),
363
+ to_field_name="name",
364
+ required=False,
365
+ label=_("Tenant"),
366
+ )
367
+
368
+ class Meta:
369
+ model = DNSSECPolicy
370
+ fields = (
371
+ "name",
372
+ "description",
373
+ "key_templates",
374
+ "dnskey_ttl",
375
+ "purge_keys",
376
+ "publish_safety",
377
+ "retire_safety",
378
+ "signatures_jitter",
379
+ "signatures_refresh",
380
+ "signatures_validity",
381
+ "signatures_validity_dnskey",
382
+ "max_zone_ttl",
383
+ "zone_propagation_delay",
384
+ "create_cdnskey",
385
+ "cds_digest_types",
386
+ "parent_ds_ttl",
387
+ "parent_propagation_delay",
388
+ "use_nsec3",
389
+ "nsec3_iterations",
390
+ "nsec3_opt_out",
391
+ "nsec3_salt_size",
392
+ "tenant",
393
+ "tags",
394
+ )
395
+
396
+
397
+ class DNSSECPolicyBulkEditForm(NetBoxModelBulkEditForm):
398
+ model = DNSSECPolicy
399
+
400
+ description = forms.CharField(
401
+ max_length=200,
402
+ required=False,
403
+ label=_("Description"),
404
+ )
405
+ status = forms.ChoiceField(
406
+ choices=add_blank_choice(DNSSECPolicyStatusChoices),
407
+ required=False,
408
+ label=_("Status"),
409
+ )
410
+ dnskey_ttl = TimePeriodField(
411
+ required=False,
412
+ label=_("DNSKEY TTL"),
413
+ )
414
+ purge_keys = TimePeriodField(
415
+ required=False,
416
+ label=_("Purge Keys"),
417
+ )
418
+ publish_safety = TimePeriodField(
419
+ required=False,
420
+ label=_("Publish Safety"),
421
+ )
422
+ retire_safety = TimePeriodField(
423
+ required=False,
424
+ label=_("Retire Safety"),
425
+ )
426
+ signatures_jitter = TimePeriodField(
427
+ required=False,
428
+ label=_("Signatures Jitter"),
429
+ )
430
+ signatures_refresh = TimePeriodField(
431
+ required=False,
432
+ label=_("Signatures Refresh"),
433
+ )
434
+ signatures_validity = TimePeriodField(
435
+ required=False,
436
+ label=_("Signatures Validity"),
437
+ )
438
+ signatures_validity_dnskey = TimePeriodField(
439
+ required=False,
440
+ label=_("Signatures Validity (DNSKEY)"),
441
+ )
442
+ max_zone_ttl = TimePeriodField(
443
+ required=False,
444
+ label=_("Max Zone TTL"),
445
+ )
446
+ zone_propagation_delay = TimePeriodField(
447
+ required=False,
448
+ label=_("Zone Propagation Delay"),
449
+ )
450
+ create_cdnskey = forms.NullBooleanField(
451
+ required=False,
452
+ widget=BulkEditNullBooleanSelect(),
453
+ label=_("Create CDNSKEY"),
454
+ )
455
+ cds_digest_types = forms.MultipleChoiceField(
456
+ choices=DNSSECPolicyDigestChoices,
457
+ required=False,
458
+ label=_("CDS Digest Types"),
459
+ )
460
+ parent_ds_ttl = TimePeriodField(
461
+ required=False,
462
+ label=_("Parent DS TTL"),
463
+ )
464
+ parent_propagation_delay = TimePeriodField(
465
+ required=False,
466
+ label=_("Parent Propagation Delay"),
467
+ )
468
+ use_nsec3 = forms.NullBooleanField(
469
+ required=False,
470
+ widget=BulkEditNullBooleanSelect(),
471
+ label=_("Use NSEC3"),
472
+ )
473
+ nsec3_iterations = forms.IntegerField(
474
+ required=False,
475
+ label=_("NSEC3 Iterations"),
476
+ )
477
+ nsec3_opt_out = forms.NullBooleanField(
478
+ required=False,
479
+ widget=BulkEditNullBooleanSelect(),
480
+ label=_("NSEC3 Opt-Out"),
481
+ )
482
+ nsec3_salt_size = forms.IntegerField(
483
+ required=False,
484
+ label=_("NSEC3 Salt Size"),
485
+ )
486
+ tenant_group = DynamicModelChoiceField(
487
+ queryset=TenantGroup.objects.all(),
488
+ required=False,
489
+ label=_("Tenant Group"),
490
+ )
491
+ tenant = DynamicModelChoiceField(
492
+ queryset=Tenant.objects.all(),
493
+ required=False,
494
+ label=_("Tenant"),
495
+ )
496
+
497
+ fieldsets = (
498
+ FieldSet(
499
+ "description",
500
+ "key_templates",
501
+ name=_("Attributes"),
502
+ ),
503
+ FieldSet(
504
+ "dnskey_ttl",
505
+ "purge_keys",
506
+ "publish_safety",
507
+ "retire_safety",
508
+ "signatures_jitter",
509
+ "signatures_refresh",
510
+ "signatures_validity",
511
+ "signatures_validity_dnskey",
512
+ "max_zone_ttl",
513
+ "zone_propagation_delay",
514
+ name=_("Timing"),
515
+ ),
516
+ FieldSet(
517
+ "create_cdnskey",
518
+ "cds_digest_types",
519
+ "parent_ds_ttl",
520
+ "parent_propagation_delay",
521
+ name=_("Parent Delegation"),
522
+ ),
523
+ FieldSet(
524
+ "use_nsec3",
525
+ "nsec3_iterations",
526
+ "nsec3_opt_out",
527
+ "nsec3_salt_size",
528
+ name=_("Proof of Non-Existence"),
529
+ ),
530
+ FieldSet("tenant_group", "tenant", name=_("Tenancy")),
531
+ )
532
+
533
+ nullable_fields = (
534
+ "description",
535
+ "tenant",
536
+ "dnskey_ttl",
537
+ "purge_keys",
538
+ "publish_safety",
539
+ "retire_safety",
540
+ "signatures_jitter",
541
+ "signatures_refresh",
542
+ "signatures_validity",
543
+ "signatures_validity_dnskey",
544
+ "max_zone_ttl",
545
+ "zone_propagation_delay",
546
+ "cds_digest_types",
547
+ "parent_ds_ttl",
548
+ "parent_propagation_delay",
549
+ "nsec3_iterations",
550
+ "nsec3_opt_out",
551
+ "nsec3_salt_size",
552
+ "cds_digest_types",
553
+ "parent_ds_ttl",
554
+ "parent_propagation_delay",
555
+ )
556
+
557
+ def clean_cds_digest_types(self, *args, **kwargs):
558
+ if not (
559
+ cds_digest_types := self.cleaned_data.get("cds_digest_types")
560
+ ) and "cds_digest_types" not in self.data.get("_nullify", []):
561
+ return self.initial.get("cds_digest_types")
562
+
563
+ return cds_digest_types
@@ -23,6 +23,7 @@ from tenancy.forms import TenancyForm, TenancyFilterForm
23
23
  from netbox_dns.models import View, Zone, Record
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__ = (
@@ -67,7 +68,7 @@ class RecordForm(TenancyForm, NetBoxModelForm):
67
68
  required=False,
68
69
  label=_("Disable PTR"),
69
70
  )
70
- ttl = forms.IntegerField(
71
+ ttl = TimePeriodField(
71
72
  required=False,
72
73
  label=_("TTL"),
73
74
  )
@@ -112,16 +113,17 @@ class RecordFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
112
113
  fieldsets = (
113
114
  FieldSet("q", "filter_id", "tag"),
114
115
  FieldSet(
116
+ "name",
115
117
  "view_id",
116
118
  "zone_id",
117
- "name",
118
119
  "fqdn",
119
120
  "type",
120
121
  "value",
121
- "disable_ptr",
122
122
  "status",
123
- "active",
123
+ "ttl",
124
+ "disable_ptr",
124
125
  "description",
126
+ "active",
125
127
  name=_("Attributes"),
126
128
  ),
127
129
  FieldSet("tenant_group_id", "tenant_id", name=_("Tenancy")),
@@ -154,6 +156,10 @@ class RecordFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
154
156
  required=False,
155
157
  label=_("Status"),
156
158
  )
159
+ ttl = TimePeriodField(
160
+ required=False,
161
+ label=_("TTL"),
162
+ )
157
163
  view_id = DynamicModelMultipleChoiceField(
158
164
  queryset=View.objects.all(),
159
165
  required=False,
@@ -224,7 +230,7 @@ class RecordImportForm(NetBoxModelImportForm):
224
230
  required=False,
225
231
  label=_("Status"),
226
232
  )
227
- ttl = forms.IntegerField(
233
+ ttl = TimePeriodField(
228
234
  required=False,
229
235
  label=_("TTL"),
230
236
  )
@@ -286,7 +292,7 @@ class RecordBulkEditForm(NetBoxModelBulkEditForm):
286
292
  required=False,
287
293
  label=_("Status"),
288
294
  )
289
- ttl = forms.IntegerField(
295
+ ttl = TimePeriodField(
290
296
  required=False,
291
297
  label=_("TTL"),
292
298
  )
@@ -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 = forms.IntegerField(
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"),
@@ -156,7 +162,7 @@ class RecordTemplateImportForm(NetBoxModelImportForm):
156
162
  required=False,
157
163
  label=_("Status"),
158
164
  )
159
- ttl = forms.IntegerField(
165
+ ttl = TimePeriodField(
160
166
  required=False,
161
167
  label=_("TTL"),
162
168
  )
@@ -209,7 +215,7 @@ class RecordTemplateBulkEditForm(NetBoxModelBulkEditForm):
209
215
  required=False,
210
216
  label=_("Status"),
211
217
  )
212
- ttl = forms.IntegerField(
218
+ ttl = TimePeriodField(
213
219
  required=False,
214
220
  label=_("TTL"),
215
221
  )