netbox-plugin-dns 1.4.1__tar.gz → 1.4.3__tar.gz

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 (204) hide show
  1. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/PKG-INFO +1 -1
  2. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/__init__.py +1 -1
  3. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/api/nested_serializers.py +1 -0
  4. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/api/serializers_/dnssec_policy.py +2 -0
  5. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/api/serializers_/zone.py +5 -0
  6. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/fields/address.py +17 -0
  7. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/filtersets/dnssec_policy.py +1 -0
  8. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/filtersets/zone.py +22 -1
  9. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/forms/dnssec_policy.py +42 -0
  10. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/forms/zone.py +8 -15
  11. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/graphql/filters/dnssec_policy.py +1 -0
  12. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/graphql/filters/zone.py +2 -1
  13. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/graphql/types.py +6 -2
  14. netbox_plugin_dns-1.4.3/netbox_dns/migrations/0025_remove_zone_inline_signing_and_more.py +22 -0
  15. netbox_plugin_dns-1.4.3/netbox_dns/migrations/0026_alter_dnssecpolicy_nsec3_opt_out.py +18 -0
  16. netbox_plugin_dns-1.4.3/netbox_dns/migrations/0027_zone_comments.py +18 -0
  17. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/models/dnssec_policy.py +7 -3
  18. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/models/zone.py +28 -10
  19. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/tables/dnssec_policy.py +11 -6
  20. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/tables/record.py +6 -4
  21. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/tables/record_template.py +10 -4
  22. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/tables/view.py +2 -2
  23. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/tables/zone.py +3 -1
  24. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/template_content.py +26 -6
  25. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/templates/netbox_dns/dnssecpolicy.html +9 -1
  26. netbox_plugin_dns-1.4.3/netbox_dns/templates/netbox_dns/record/related.html +21 -0
  27. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/templates/netbox_dns/zone.html +1 -4
  28. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_plugin_dns.egg-info/PKG-INFO +1 -1
  29. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_plugin_dns.egg-info/SOURCES.txt +3 -0
  30. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/pyproject.toml +1 -1
  31. netbox_plugin_dns-1.4.1/netbox_dns/templates/netbox_dns/record/related.html +0 -30
  32. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/LICENSE +0 -0
  33. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/README.md +0 -0
  34. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/api/field_serializers.py +0 -0
  35. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/api/serializers.py +0 -0
  36. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/api/serializers_/__init__.py +0 -0
  37. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/api/serializers_/dnssec_key_template.py +0 -0
  38. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/api/serializers_/nameserver.py +0 -0
  39. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/api/serializers_/prefix.py +0 -0
  40. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/api/serializers_/record.py +0 -0
  41. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/api/serializers_/record_template.py +0 -0
  42. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/api/serializers_/registrar.py +0 -0
  43. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/api/serializers_/registration_contact.py +0 -0
  44. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/api/serializers_/view.py +0 -0
  45. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/api/serializers_/zone_template.py +0 -0
  46. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/api/urls.py +0 -0
  47. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/api/views.py +0 -0
  48. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/apps.py +0 -0
  49. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/choices/__init__.py +0 -0
  50. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/choices/dnssec_key_template.py +0 -0
  51. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/choices/dnssec_policy.py +0 -0
  52. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/choices/record.py +0 -0
  53. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/choices/utilities.py +0 -0
  54. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/choices/zone.py +0 -0
  55. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/fields/__init__.py +0 -0
  56. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/fields/choice_array.py +0 -0
  57. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/fields/ipam.py +0 -0
  58. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/fields/network.py +0 -0
  59. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/fields/rfc2317.py +0 -0
  60. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/fields/timeperiod.py +0 -0
  61. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/filtersets/__init__.py +0 -0
  62. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/filtersets/dnssec_key_template.py +0 -0
  63. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/filtersets/nameserver.py +0 -0
  64. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/filtersets/record.py +0 -0
  65. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/filtersets/record_template.py +0 -0
  66. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/filtersets/registrar.py +0 -0
  67. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/filtersets/registration_contact.py +0 -0
  68. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/filtersets/view.py +0 -0
  69. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/filtersets/zone_template.py +0 -0
  70. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/forms/__init__.py +0 -0
  71. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/forms/dnssec_key_template.py +0 -0
  72. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/forms/nameserver.py +0 -0
  73. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/forms/record.py +0 -0
  74. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/forms/record_template.py +0 -0
  75. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/forms/registrar.py +0 -0
  76. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/forms/registration_contact.py +0 -0
  77. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/forms/view.py +0 -0
  78. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/forms/zone_template.py +0 -0
  79. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/graphql/__init__.py +0 -0
  80. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/graphql/enums.py +0 -0
  81. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/graphql/filter_lookups.py +0 -0
  82. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/graphql/filters/__init__.py +0 -0
  83. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/graphql/filters/dnssec_key_template.py +0 -0
  84. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/graphql/filters/nameserver.py +0 -0
  85. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/graphql/filters/record.py +0 -0
  86. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/graphql/filters/record_template.py +0 -0
  87. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/graphql/filters/registrar.py +0 -0
  88. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/graphql/filters/registration_contact.py +0 -0
  89. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/graphql/filters/view.py +0 -0
  90. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/graphql/filters/zone_template.py +0 -0
  91. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/graphql/schema.py +0 -0
  92. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/locale/de/LC_MESSAGES/django.mo +0 -0
  93. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/locale/en/LC_MESSAGES/django.mo +0 -0
  94. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/locale/fr/LC_MESSAGES/django.mo +0 -0
  95. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/management/commands/cleanup_database.py +0 -0
  96. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/management/commands/cleanup_rrset_ttl.py +0 -0
  97. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/management/commands/rebuild_dnssync.py +0 -0
  98. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/management/commands/setup_dnssync.py +0 -0
  99. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0001_squashed_netbox_dns_0_15.py +0 -0
  100. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0001_squashed_netbox_dns_0_22.py +0 -0
  101. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0002_contact_description_registrar_description.py +0 -0
  102. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0003_default_view.py +0 -0
  103. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0004_create_and_assign_default_view.py +0 -0
  104. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0005_alter_zone_view_not_null.py +0 -0
  105. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0006_templating.py +0 -0
  106. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0007_alter_ordering_options.py +0 -0
  107. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0008_view_prefixes.py +0 -0
  108. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0009_rename_contact_registrationcontact.py +0 -0
  109. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0010_view_ip_address_filter.py +0 -0
  110. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0011_rename_related_fields.py +0 -0
  111. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0012_natural_ordering.py +0 -0
  112. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0013_zonetemplate_soa_mname_zonetemplate_soa_rname.py +0 -0
  113. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0014_alter_unique_constraints_lowercase.py +0 -0
  114. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0015_dnssec.py +0 -0
  115. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0016_dnssec_policy_status.py +0 -0
  116. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0017_dnssec_policy_zone_zone_template.py +0 -0
  117. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0018_zone_domain_status_zone_expiration_date.py +0 -0
  118. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0019_dnssecpolicy_parental_agents.py +0 -0
  119. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0020_netbox_3_4.py +0 -0
  120. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0020_remove_dnssecpolicy_parental_agents_and_more.py +0 -0
  121. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0021_alter_record_ptr_record.py +0 -0
  122. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0021_record_ip_address.py +0 -0
  123. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0022_alter_record_ipam_ip_address.py +0 -0
  124. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0022_search.py +0 -0
  125. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0023_alter_record_value.py +0 -0
  126. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0023_disable_ptr_false.py +0 -0
  127. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0024_tenancy.py +0 -0
  128. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0024_zonetemplate_parental_agents.py +0 -0
  129. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0025_ipam_coupling_cf.py +0 -0
  130. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0026_domain_registration.py +0 -0
  131. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0027_alter_registrar_iana_id.py +0 -0
  132. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0028_rfc2317_fields.py +0 -0
  133. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/0029_record_fqdn.py +0 -0
  134. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/migrations/__init__.py +0 -0
  135. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/mixins/__init__.py +0 -0
  136. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/mixins/object_modification.py +0 -0
  137. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/models/__init__.py +0 -0
  138. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/models/dnssec_key_template.py +0 -0
  139. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/models/nameserver.py +0 -0
  140. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/models/record.py +0 -0
  141. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/models/record_template.py +0 -0
  142. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/models/registrar.py +0 -0
  143. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/models/registration_contact.py +0 -0
  144. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/models/view.py +0 -0
  145. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/models/zone_template.py +0 -0
  146. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/navigation.py +0 -0
  147. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/signals/__init__.py +0 -0
  148. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/signals/dnssec.py +0 -0
  149. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/signals/ipam_dnssync.py +0 -0
  150. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/tables/__init__.py +0 -0
  151. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/tables/dnssec_key_template.py +0 -0
  152. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/tables/ipam_dnssync.py +0 -0
  153. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/tables/nameserver.py +0 -0
  154. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/tables/registrar.py +0 -0
  155. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/tables/registration_contact.py +0 -0
  156. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/tables/zone_template.py +0 -0
  157. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/templates/netbox_dns/dnsseckeytemplate.html +0 -0
  158. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/templates/netbox_dns/nameserver.html +0 -0
  159. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/templates/netbox_dns/record/managed.html +0 -0
  160. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/templates/netbox_dns/record.html +0 -0
  161. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/templates/netbox_dns/recordtemplate.html +0 -0
  162. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/templates/netbox_dns/registrar.html +0 -0
  163. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/templates/netbox_dns/registrationcontact.html +0 -0
  164. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/templates/netbox_dns/view/button.html +0 -0
  165. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/templates/netbox_dns/view/prefix.html +0 -0
  166. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/templates/netbox_dns/view/related.html +0 -0
  167. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/templates/netbox_dns/view.html +0 -0
  168. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/templates/netbox_dns/zone/base.html +0 -0
  169. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/templates/netbox_dns/zone/child.html +0 -0
  170. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/templates/netbox_dns/zone/child_zone.html +0 -0
  171. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/templates/netbox_dns/zone/delegation_record.html +0 -0
  172. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/templates/netbox_dns/zone/managed_record.html +0 -0
  173. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/templates/netbox_dns/zone/record.html +0 -0
  174. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/templates/netbox_dns/zone/registration.html +0 -0
  175. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/templates/netbox_dns/zone/rfc2317_child_zone.html +0 -0
  176. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/templates/netbox_dns/zonetemplate/child.html +0 -0
  177. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/templates/netbox_dns/zonetemplate.html +0 -0
  178. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/templatetags/__init__.py +0 -0
  179. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/templatetags/netbox_dns.py +0 -0
  180. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/urls.py +0 -0
  181. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/utilities/__init__.py +0 -0
  182. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/utilities/conversions.py +0 -0
  183. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/utilities/dns.py +0 -0
  184. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/utilities/ipam_dnssync.py +0 -0
  185. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/validators/__init__.py +0 -0
  186. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/validators/dns_name.py +0 -0
  187. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/validators/dns_value.py +0 -0
  188. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/validators/dnssec.py +0 -0
  189. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/validators/rfc2317.py +0 -0
  190. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/views/__init__.py +0 -0
  191. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/views/dnssec_key_template.py +0 -0
  192. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/views/dnssec_policy.py +0 -0
  193. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/views/nameserver.py +0 -0
  194. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/views/record.py +0 -0
  195. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/views/record_template.py +0 -0
  196. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/views/registrar.py +0 -0
  197. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/views/registration_contact.py +0 -0
  198. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/views/view.py +0 -0
  199. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/views/zone.py +0 -0
  200. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_dns/views/zone_template.py +0 -0
  201. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_plugin_dns.egg-info/dependency_links.txt +0 -0
  202. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_plugin_dns.egg-info/requires.txt +0 -0
  203. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/netbox_plugin_dns.egg-info/top_level.txt +0 -0
  204. {netbox_plugin_dns-1.4.1 → netbox_plugin_dns-1.4.3}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: netbox-plugin-dns
3
- Version: 1.4.1
3
+ Version: 1.4.3
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
@@ -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.4.1"
7
+ __version__ = "1.4.3"
8
8
 
9
9
 
10
10
  def _check_list(setting):
@@ -145,6 +145,7 @@ class NestedDNSSECPolicySerializer(WritableNestedSerializer):
145
145
  "name",
146
146
  "description",
147
147
  "status",
148
+ "inline_signing",
148
149
  )
149
150
 
150
151
  url = serializers.HyperlinkedIdentityField(
@@ -26,6 +26,7 @@ class DNSSECPolicySerializer(NetBoxModelSerializer):
26
26
  "description",
27
27
  "status",
28
28
  "tags",
29
+ "inline_signing",
29
30
  "key_templates",
30
31
  "zones",
31
32
  "zone_templates",
@@ -60,6 +61,7 @@ class DNSSECPolicySerializer(NetBoxModelSerializer):
60
61
  "name",
61
62
  "description",
62
63
  "status",
64
+ "inline_signing",
63
65
  )
64
66
 
65
67
  url = serializers.HyperlinkedIdentityField(
@@ -61,6 +61,7 @@ class ZoneSerializer(NetBoxModelSerializer):
61
61
  "tech_c",
62
62
  "admin_c",
63
63
  "billing_c",
64
+ "comments",
64
65
  "active",
65
66
  "custom_fields",
66
67
  "tenant",
@@ -195,6 +196,7 @@ class ZoneSerializer(NetBoxModelSerializer):
195
196
  default=None,
196
197
  help_text=_("Template to apply to the zone"),
197
198
  )
199
+ inline_signing = serializers.SerializerMethodField()
198
200
  active = serializers.BooleanField(
199
201
  required=False,
200
202
  read_only=True,
@@ -212,6 +214,9 @@ class ZoneSerializer(NetBoxModelSerializer):
212
214
 
213
215
  return super().validate(data)
214
216
 
217
+ def get_inline_signing(self, instance):
218
+ return instance.inline_signing
219
+
215
220
  def create(self, validated_data):
216
221
  template = validated_data.pop("template", None)
217
222
  nameservers = validated_data.pop("nameservers", None)
@@ -1,4 +1,5 @@
1
1
  from django.db import models
2
+ from django.db.models import Lookup
2
3
  from django.core.exceptions import ValidationError
3
4
  from django.utils.translation import gettext_lazy as _
4
5
 
@@ -50,3 +51,19 @@ class AddressField(models.Field):
50
51
 
51
52
  def db_type(self, connection):
52
53
  return "inet"
54
+
55
+
56
+ class AddressContained(Lookup):
57
+ lookup_name = "contained"
58
+
59
+ def get_prep_lookup(self):
60
+ return str(self.rhs)
61
+
62
+ def as_sql(self, compiler, connection):
63
+ lhs, lhs_params = self.process_lhs(compiler, connection)
64
+ rhs, rhs_params = self.process_rhs(compiler, connection)
65
+ params = lhs_params + rhs_params
66
+ return f"CAST(HOST({lhs}) AS INET) <<= {rhs}", params
67
+
68
+
69
+ AddressField.register_lookup(AddressContained)
@@ -23,6 +23,7 @@ class DNSSECPolicyFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
23
23
  "name",
24
24
  "description",
25
25
  "status",
26
+ "inline_signing",
26
27
  "dnskey_ttl",
27
28
  "purge_keys",
28
29
  "publish_safety",
@@ -41,9 +41,9 @@ class ZoneFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
41
41
  "soa_minimum",
42
42
  "soa_serial_auto",
43
43
  "rfc2317_parent_managed",
44
- "inline_signing",
45
44
  "registry_domain_id",
46
45
  "domain_status",
46
+ "inline_signing",
47
47
  )
48
48
 
49
49
  status = django_filters.MultipleChoiceFilter(
@@ -172,6 +172,10 @@ class ZoneFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
172
172
  active = django_filters.BooleanFilter(
173
173
  label=_("Zone is active"),
174
174
  )
175
+ inline_signing = django_filters.BooleanFilter(
176
+ label=_("Zone is using a DNSSEC policy with inline signing"),
177
+ method="filter_inline_signing",
178
+ )
175
179
 
176
180
  def filter_parental_agents(self, queryset, name, value):
177
181
  if not value:
@@ -214,6 +218,22 @@ class ZoneFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
214
218
  except (netaddr.AddrFormatError, ValueError):
215
219
  return queryset.none()
216
220
 
221
+ def filter_inline_signing(self, queryset, name, value):
222
+ if value is None:
223
+ return queryset
224
+
225
+ if value:
226
+ return queryset.filter(
227
+ dnssec_policy__isnull=False, dnssec_policy__inline_signing=True
228
+ )
229
+ else:
230
+ return queryset.filter(
231
+ Q(
232
+ Q(dnssec_policy__isnull=True)
233
+ | Q(dnssec_policy__inline_signing=False)
234
+ )
235
+ )
236
+
217
237
  def search(self, queryset, name, value):
218
238
  if not value.strip():
219
239
  return queryset
@@ -228,5 +248,6 @@ class ZoneFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
228
248
  | Q(admin_c__name__icontains=value)
229
249
  | Q(tech_c__name__icontains=value)
230
250
  | Q(billing_c__name__icontains=value)
251
+ | Q(comments__icontains=value)
231
252
  )
232
253
  return queryset.filter(qs_filter)
@@ -41,6 +41,7 @@ class DNSSECPolicyForm(TenancyForm, NetBoxModelForm):
41
41
  "name",
42
42
  "description",
43
43
  "status",
44
+ "inline_signing",
44
45
  "key_templates",
45
46
  "dnskey_ttl",
46
47
  "purge_keys",
@@ -71,6 +72,7 @@ class DNSSECPolicyForm(TenancyForm, NetBoxModelForm):
71
72
  "description",
72
73
  "status",
73
74
  "key_templates",
75
+ "inline_signing",
74
76
  name=_("Attributes"),
75
77
  ),
76
78
  FieldSet(
@@ -111,6 +113,14 @@ class DNSSECPolicyForm(TenancyForm, NetBoxModelForm):
111
113
  ),
112
114
  )
113
115
 
116
+ def __init__(self, *args, **kwargs):
117
+ super().__init__(*args, **kwargs)
118
+
119
+ if not self.initial.get("use_nsec3"):
120
+ self.initial["nsec3_iterations"] = None
121
+ self.initial["nsec3_opt_out"] = None
122
+ self.initial["nsec3_salt_size"] = None
123
+
114
124
  key_templates = DynamicModelMultipleChoiceField(
115
125
  queryset=DNSSECKeyTemplate.objects.all(),
116
126
  required=False,
@@ -178,6 +188,21 @@ class DNSSECPolicyForm(TenancyForm, NetBoxModelForm):
178
188
  label=_("Parent Propagation Delay"),
179
189
  placeholder=DNSSECPolicy.get_fallback_setting("parent_propagation_delay"),
180
190
  )
191
+ nsec3_opt_out = forms.NullBooleanField(
192
+ required=False,
193
+ widget=forms.Select(choices=BOOLEAN_WITH_BLANK_CHOICES),
194
+ label=_("NSEC3 Opt-Out"),
195
+ )
196
+
197
+ def clean(self, *args, **kwargs):
198
+ super().clean(*args, **kwargs)
199
+
200
+ if not self.cleaned_data.get("use_nsec3"):
201
+ self.cleaned_data["nsec3_iterations"] = None
202
+ self.cleaned_data["nsec3_opt_out"] = None
203
+ self.cleaned_data["nsec3_salt_size"] = None
204
+
205
+ return self.cleaned_data
181
206
 
182
207
 
183
208
  class DNSSECPolicyFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
@@ -194,6 +219,7 @@ class DNSSECPolicyFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
194
219
  "description",
195
220
  "status",
196
221
  "key_template_id",
222
+ "inline_signing",
197
223
  name=_("Attributes"),
198
224
  ),
199
225
  FieldSet(
@@ -250,6 +276,11 @@ class DNSSECPolicyFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
250
276
  required=False,
251
277
  label=_("Status"),
252
278
  )
279
+ inline_signing = forms.NullBooleanField(
280
+ required=False,
281
+ widget=forms.Select(choices=BOOLEAN_WITH_BLANK_CHOICES),
282
+ label=_("Use Inline Signing"),
283
+ )
253
284
  key_template_id = DynamicModelMultipleChoiceField(
254
285
  queryset=DNSSECKeyTemplate.objects.all(),
255
286
  required=False,
@@ -355,6 +386,7 @@ class DNSSECPolicyImportForm(NetBoxModelImportForm):
355
386
  fields = (
356
387
  "name",
357
388
  "description",
389
+ "inline_signing",
358
390
  "key_templates",
359
391
  "dnskey_ttl",
360
392
  "purge_keys",
@@ -383,6 +415,10 @@ class DNSSECPolicyImportForm(NetBoxModelImportForm):
383
415
  required=False,
384
416
  label=_("Status"),
385
417
  )
418
+ inline_signing = forms.BooleanField(
419
+ required=False,
420
+ label=_("Use Inline Signing"),
421
+ )
386
422
  dnskey_ttl = TimePeriodField(
387
423
  required=False,
388
424
  label=_("DNSKEY TTL"),
@@ -446,6 +482,7 @@ class DNSSECPolicyBulkEditForm(NetBoxModelBulkEditForm):
446
482
  FieldSet(
447
483
  "description",
448
484
  "key_templates",
485
+ "inline_signing",
449
486
  name=_("Attributes"),
450
487
  ),
451
488
  FieldSet(
@@ -516,6 +553,11 @@ class DNSSECPolicyBulkEditForm(NetBoxModelBulkEditForm):
516
553
  required=False,
517
554
  label=_("Status"),
518
555
  )
556
+ inline_signing = forms.NullBooleanField(
557
+ required=False,
558
+ widget=BulkEditNullBooleanSelect(),
559
+ label=_("Use Inline Signing"),
560
+ )
519
561
  dnskey_ttl = TimePeriodField(
520
562
  required=False,
521
563
  label=_("DNSKEY TTL"),
@@ -20,6 +20,7 @@ from utilities.forms.fields import (
20
20
  CSVModelChoiceField,
21
21
  CSVModelMultipleChoiceField,
22
22
  DynamicModelChoiceField,
23
+ CommentField,
23
24
  )
24
25
  from utilities.forms.widgets import BulkEditNullBooleanSelect, DatePicker, HTMXSelect
25
26
  from utilities.forms.rendering import FieldSet
@@ -183,7 +184,6 @@ class ZoneForm(ZoneTemplateUpdateMixin, TenancyForm, NetBoxModelForm):
183
184
  "rfc2317_prefix",
184
185
  "rfc2317_parent_managed",
185
186
  "dnssec_policy",
186
- "inline_signing",
187
187
  "parental_agents",
188
188
  "registrar",
189
189
  "registry_domain_id",
@@ -195,6 +195,7 @@ class ZoneForm(ZoneTemplateUpdateMixin, TenancyForm, NetBoxModelForm):
195
195
  "billing_c",
196
196
  "tenant_group",
197
197
  "tenant",
198
+ "comments",
198
199
  "tags",
199
200
  )
200
201
 
@@ -241,7 +242,6 @@ class ZoneForm(ZoneTemplateUpdateMixin, TenancyForm, NetBoxModelForm):
241
242
  ),
242
243
  FieldSet(
243
244
  "dnssec_policy",
244
- "inline_signing",
245
245
  "parental_agents",
246
246
  name=_("DNSSEC"),
247
247
  ),
@@ -317,7 +317,6 @@ class ZoneForm(ZoneTemplateUpdateMixin, TenancyForm, NetBoxModelForm):
317
317
  )
318
318
 
319
319
  if not get_field_value(self, "dnssec_policy"):
320
- del self.fields["inline_signing"]
321
320
  del self.fields["parental_agents"]
322
321
 
323
322
  if not get_field_value(self, "registrar"):
@@ -415,6 +414,8 @@ class ZoneForm(ZoneTemplateUpdateMixin, TenancyForm, NetBoxModelForm):
415
414
  label=_("RFC2317 Prefix"),
416
415
  )
417
416
 
417
+ comments = CommentField()
418
+
418
419
  def clean_default_ttl(self):
419
420
  return (
420
421
  self.cleaned_data["default_ttl"]
@@ -552,7 +553,7 @@ class ZoneFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
552
553
  inline_signing = forms.NullBooleanField(
553
554
  required=False,
554
555
  widget=forms.Select(choices=BOOLEAN_WITH_BLANK_CHOICES),
555
- label=_("Use Inline Signing"),
556
+ label=_("DNSSEC Policy uses inline signing"),
556
557
  )
557
558
  parental_agents = forms.GenericIPAddressField(
558
559
  required=False,
@@ -632,7 +633,6 @@ class ZoneImportForm(ZoneTemplateUpdateMixin, NetBoxModelImportForm):
632
633
  "soa_expire",
633
634
  "soa_minimum",
634
635
  "dnssec_policy",
635
- "inline_signing",
636
636
  "parental_agents",
637
637
  "rfc2317_prefix",
638
638
  "rfc2317_parent_managed",
@@ -645,6 +645,7 @@ class ZoneImportForm(ZoneTemplateUpdateMixin, NetBoxModelImportForm):
645
645
  "tech_c",
646
646
  "billing_c",
647
647
  "tenant",
648
+ "comments",
648
649
  "tags",
649
650
  )
650
651
 
@@ -741,10 +742,6 @@ class ZoneImportForm(ZoneTemplateUpdateMixin, NetBoxModelImportForm):
741
742
  },
742
743
  label=_("DNSSEC Policy"),
743
744
  )
744
- inline_signing = forms.BooleanField(
745
- required=False,
746
- label=_("Use Inline Signing"),
747
- )
748
745
  registrar = CSVModelChoiceField(
749
746
  queryset=Registrar.objects.all(),
750
747
  required=False,
@@ -860,7 +857,6 @@ class ZoneBulkEditForm(NetBoxModelBulkEditForm):
860
857
  ),
861
858
  FieldSet(
862
859
  "dnssec_policy",
863
- "inline_signing",
864
860
  "parental_agents",
865
861
  name=_("DNSSEC"),
866
862
  ),
@@ -900,6 +896,7 @@ class ZoneBulkEditForm(NetBoxModelBulkEditForm):
900
896
  "tech_c",
901
897
  "billing_c",
902
898
  "tenant",
899
+ "comments",
903
900
  )
904
901
 
905
902
  view = DynamicModelChoiceField(
@@ -990,11 +987,6 @@ class ZoneBulkEditForm(NetBoxModelBulkEditForm):
990
987
  required=False,
991
988
  label=_("DNSSEC Policy"),
992
989
  )
993
- inline_signing = forms.NullBooleanField(
994
- required=False,
995
- widget=BulkEditNullBooleanSelect(),
996
- label=_("Use Inline Signing"),
997
- )
998
990
  parental_agents = SimpleArrayField(
999
991
  required=False,
1000
992
  base_field=forms.GenericIPAddressField(),
@@ -1049,3 +1041,4 @@ class ZoneBulkEditForm(NetBoxModelBulkEditForm):
1049
1041
  required=False,
1050
1042
  label=_("Tenant"),
1051
1043
  )
1044
+ comments = CommentField()
@@ -34,6 +34,7 @@ class NetBoxDNSDNSSECPolicyFilter(
34
34
  ]
35
35
  | None
36
36
  ) = strawberry_django.filter_field()
37
+ inline_signing: FilterLookup[bool] | None = strawberry_django.filter_field()
37
38
  key_templates: (
38
39
  Annotated[
39
40
  "NetBoxDNSDNSSECKeyTemplateFilter",
@@ -91,7 +91,6 @@ class NetBoxDNSZoneFilter(
91
91
  ]
92
92
  | None
93
93
  )
94
- inline_signing: FilterLookup[bool] | None = strawberry_django.filter_field()
95
94
 
96
95
  registrar: (
97
96
  Annotated[
@@ -142,5 +141,7 @@ class NetBoxDNSZoneFilter(
142
141
  rfc2317_parent_zone_id: ID | None = strawberry_django.filter_field()
143
142
  rfc2317_parent_managed: FilterLookup[bool] | None = strawberry_django.filter_field()
144
143
 
144
+ comments: FilterLookup[str] | None = strawberry_django.filter_field()
145
+
145
146
  arpa_network: FilterLookup[str] | None = strawberry_django.filter_field()
146
147
  active: FilterLookup[bool] | None = strawberry_django.filter_field()
@@ -89,7 +89,7 @@ class NetBoxDNSZoneType(NetBoxObjectType):
89
89
  ]
90
90
  | None
91
91
  )
92
- inline_signing: bool
92
+ inline_signing: bool | None
93
93
  parental_agents: List[str]
94
94
  registrar: (
95
95
  Annotated["NetBoxDNSRegistrarType", strawberry.lazy("netbox_dns.graphql.types")]
@@ -136,6 +136,9 @@ class NetBoxDNSZoneType(NetBoxObjectType):
136
136
  rfc2317_child_zones: List[
137
137
  Annotated["NetBoxDNSRecordType", strawberry.lazy("netbox_dns.graphql.types")]
138
138
  ]
139
+
140
+ comments: str | None
141
+
139
142
  arpa_network: str | None
140
143
  tenant: Annotated["TenantType", strawberry.lazy("tenancy.graphql.types")] | None
141
144
 
@@ -194,6 +197,7 @@ class NetBoxDNSDNSSECPolicyType(NetBoxObjectType):
194
197
  description: str | None
195
198
  status: str
196
199
  tenant: Annotated["TenantType", strawberry.lazy("tenancy.graphql.types")] | None
200
+ inline_signing: bool
197
201
  key_templates: List[
198
202
  Annotated[
199
203
  "NetBoxDNSDNSSECKeyTemplateType",
@@ -216,7 +220,7 @@ class NetBoxDNSDNSSECPolicyType(NetBoxObjectType):
216
220
  parent_propagation_delay: BigInt | None
217
221
  use_nsec3: bool
218
222
  nsec3_iterations: BigInt | None
219
- nsec3_opt_out: bool
223
+ nsec3_opt_out: bool | None
220
224
  nsec3_salt_size: BigInt | None
221
225
 
222
226
 
@@ -0,0 +1,22 @@
1
+ # Generated by Django 5.2.6 on 2025-10-05 16:57
2
+
3
+ from django.db import migrations, models
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+
8
+ dependencies = [
9
+ ("netbox_dns", "0024_zonetemplate_parental_agents"),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.RemoveField(
14
+ model_name="zone",
15
+ name="inline_signing",
16
+ ),
17
+ migrations.AddField(
18
+ model_name="dnssecpolicy",
19
+ name="inline_signing",
20
+ field=models.BooleanField(default=True),
21
+ ),
22
+ ]
@@ -0,0 +1,18 @@
1
+ # Generated by Django 5.2.6 on 2025-10-08 14:04
2
+
3
+ from django.db import migrations, models
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+
8
+ dependencies = [
9
+ ("netbox_dns", "0025_remove_zone_inline_signing_and_more"),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.AlterField(
14
+ model_name="dnssecpolicy",
15
+ name="nsec3_opt_out",
16
+ field=models.BooleanField(blank=True, null=True),
17
+ ),
18
+ ]
@@ -0,0 +1,18 @@
1
+ # Generated by Django 5.2.7 on 2025-10-24 12:10
2
+
3
+ from django.db import migrations, models
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+
8
+ dependencies = [
9
+ ("netbox_dns", "0026_alter_dnssecpolicy_nsec3_opt_out"),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.AddField(
14
+ model_name="zone",
15
+ name="comments",
16
+ field=models.TextField(blank=True),
17
+ ),
18
+ ]
@@ -51,6 +51,11 @@ class DNSSECPolicy(ContactsMixin, NetBoxModel):
51
51
  null=False,
52
52
  )
53
53
 
54
+ inline_signing = models.BooleanField(
55
+ verbose_name=_("Inline Signing"),
56
+ help_text=_("Use inline signing"),
57
+ default=True,
58
+ )
54
59
  key_templates = models.ManyToManyField(
55
60
  verbose_name=_("Key Templates"),
56
61
  to="DNSSECKeyTemplate",
@@ -145,9 +150,8 @@ class DNSSECPolicy(ContactsMixin, NetBoxModel):
145
150
  )
146
151
  nsec3_opt_out = models.BooleanField(
147
152
  verbose_name=_("NSEC3 Opt-Out"),
148
- blank=False,
149
- null=False,
150
- default=False,
153
+ blank=True,
154
+ null=True,
151
155
  )
152
156
  nsec3_salt_size = models.PositiveIntegerField(
153
157
  verbose_name=_("NSEC3 Salt Size"),
@@ -25,6 +25,7 @@ from netbox.search import SearchIndex, register_search
25
25
  from netbox.plugins.utils import get_plugin_config
26
26
  from utilities.querysets import RestrictedQuerySet
27
27
  from ipam.models import IPAddress
28
+ from ipam.choices import IPAddressFamilyChoices
28
29
 
29
30
  from netbox_dns.choices import (
30
31
  RecordClassChoices,
@@ -123,7 +124,6 @@ class Zone(ObjectModificationMixin, ContactsMixin, NetBoxModel):
123
124
  "description",
124
125
  "status",
125
126
  "dnssec_policy",
126
- "inline_signing",
127
127
  "parental_agents",
128
128
  "registrar",
129
129
  "registry_domain_id",
@@ -135,6 +135,7 @@ class Zone(ObjectModificationMixin, ContactsMixin, NetBoxModel):
135
135
  "billing_c",
136
136
  "rfc2317_parent_managed",
137
137
  "tenant",
138
+ "comments",
138
139
  }
139
140
 
140
141
  objects = ZoneManager()
@@ -262,11 +263,6 @@ class Zone(ObjectModificationMixin, ContactsMixin, NetBoxModel):
262
263
  blank=True,
263
264
  null=True,
264
265
  )
265
- inline_signing = models.BooleanField(
266
- verbose_name=_("Inline Signing"),
267
- help_text=_("Use inline signing for DNSSEC"),
268
- default=True,
269
- )
270
266
  parental_agents = ArrayField(
271
267
  base_field=models.GenericIPAddressField(
272
268
  protocol="both",
@@ -367,6 +363,10 @@ class Zone(ObjectModificationMixin, ContactsMixin, NetBoxModel):
367
363
  blank=True,
368
364
  null=True,
369
365
  )
366
+ comments = models.TextField(
367
+ verbose_name=_("Comments"),
368
+ blank=True,
369
+ )
370
370
 
371
371
  @property
372
372
  def fqdn(self):
@@ -432,6 +432,13 @@ class Zone(ObjectModificationMixin, ContactsMixin, NetBoxModel):
432
432
  def is_rfc2317_zone(self):
433
433
  return self.rfc2317_prefix is not None
434
434
 
435
+ @property
436
+ def inline_signing(self):
437
+ if self.dnssec_policy is None:
438
+ return None
439
+
440
+ return self.dnssec_policy.inline_signing
441
+
435
442
  def get_rfc2317_parent_zone(self):
436
443
  if not self.is_rfc2317_zone:
437
444
  return None
@@ -801,7 +808,6 @@ class Zone(ObjectModificationMixin, ContactsMixin, NetBoxModel):
801
808
 
802
809
  def clean(self, *args, **kwargs):
803
810
  if not self.dnssec_policy:
804
- self.inline_signing = self._meta.get_field("inline_signing").get_default()
805
811
  self.parental_agents = self._meta.get_field("parental_agents").get_default()
806
812
 
807
813
  if not self.registrar:
@@ -970,9 +976,21 @@ class Zone(ObjectModificationMixin, ContactsMixin, NetBoxModel):
970
976
  zones = self.view.zones.filter(
971
977
  arpa_network__net_contains_or_equals=self.arpa_network
972
978
  )
979
+
980
+ if self.arpa_network.version == IPAddressFamilyChoices.FAMILY_4:
981
+ record_type = RecordTypeChoices.A
982
+ else:
983
+ record_type = RecordTypeChoices.AAAA
984
+
973
985
  address_records = Record.objects.filter(
974
- Q(ptr_record__isnull=True) | Q(ptr_record__zone__in=zones),
975
- type__in=(RecordTypeChoices.A, RecordTypeChoices.AAAA),
986
+ Q(
987
+ ptr_record__isnull=True,
988
+ zone__view=self.view,
989
+ ip_address__isnull=False,
990
+ ip_address__contained=self.arpa_network,
991
+ type=record_type,
992
+ )
993
+ | Q(ptr_record__zone__in=zones),
976
994
  disable_ptr=False,
977
995
  )
978
996
 
@@ -1001,7 +1019,7 @@ class Zone(ObjectModificationMixin, ContactsMixin, NetBoxModel):
1001
1019
  arpa_network__net_contains=self.rfc2317_prefix
1002
1020
  )
1003
1021
  address_records = Record.objects.filter(
1004
- Q(ptr_record__isnull=True)
1022
+ Q(ptr_record__isnull=True, ip_address__contained=self.rfc2317_prefix)
1005
1023
  | Q(ptr_record__zone__in=zones)
1006
1024
  | Q(ptr_record__zone=self),
1007
1025
  type=RecordTypeChoices.A,