netbox-plugin-dns 1.2.1__tar.gz → 1.2.2__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 (154) hide show
  1. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/PKG-INFO +12 -2
  2. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/README.md +11 -1
  3. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/__init__.py +2 -1
  4. netbox_plugin_dns-1.2.2/netbox_dns/choices/record.py +80 -0
  5. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/forms/record.py +9 -4
  6. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/forms/record_template.py +9 -4
  7. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/models/nameserver.py +1 -0
  8. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/models/record.py +1 -0
  9. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/models/view.py +1 -0
  10. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/models/zone.py +1 -0
  11. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/zone.html +10 -1
  12. netbox_plugin_dns-1.2.2/netbox_dns/templatetags/__init__.py +0 -0
  13. netbox_plugin_dns-1.2.2/netbox_dns/templatetags/netbox_dns.py +10 -0
  14. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/validators/dns_name.py +1 -1
  15. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_plugin_dns.egg-info/PKG-INFO +12 -2
  16. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_plugin_dns.egg-info/SOURCES.txt +2 -0
  17. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/pyproject.toml +1 -1
  18. netbox_plugin_dns-1.2.1/netbox_dns/choices/record.py +0 -51
  19. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/LICENSE +0 -0
  20. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/nested_serializers.py +0 -0
  21. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/serializers.py +0 -0
  22. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/serializers_/__init__.py +0 -0
  23. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/serializers_/nameserver.py +0 -0
  24. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/serializers_/prefix.py +0 -0
  25. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/serializers_/record.py +0 -0
  26. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/serializers_/record_template.py +0 -0
  27. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/serializers_/registrar.py +0 -0
  28. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/serializers_/registration_contact.py +0 -0
  29. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/serializers_/view.py +0 -0
  30. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/serializers_/zone.py +0 -0
  31. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/serializers_/zone_template.py +0 -0
  32. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/urls.py +0 -0
  33. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/views.py +0 -0
  34. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/apps.py +0 -0
  35. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/choices/__init__.py +0 -0
  36. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/choices/zone.py +0 -0
  37. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/fields/__init__.py +0 -0
  38. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/fields/address.py +0 -0
  39. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/fields/ipam.py +0 -0
  40. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/fields/network.py +0 -0
  41. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/fields/rfc2317.py +0 -0
  42. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/filtersets/__init__.py +0 -0
  43. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/filtersets/nameserver.py +0 -0
  44. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/filtersets/record.py +0 -0
  45. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/filtersets/record_template.py +0 -0
  46. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/filtersets/registrar.py +0 -0
  47. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/filtersets/registration_contact.py +0 -0
  48. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/filtersets/view.py +0 -0
  49. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/filtersets/zone.py +0 -0
  50. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/filtersets/zone_template.py +0 -0
  51. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/forms/__init__.py +0 -0
  52. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/forms/nameserver.py +0 -0
  53. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/forms/registrar.py +0 -0
  54. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/forms/registration_contact.py +0 -0
  55. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/forms/view.py +0 -0
  56. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/forms/zone.py +0 -0
  57. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/forms/zone_template.py +0 -0
  58. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/graphql/__init__.py +0 -0
  59. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/graphql/filters.py +0 -0
  60. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/graphql/schema.py +0 -0
  61. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/graphql/types.py +0 -0
  62. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/locale/de/LC_MESSAGES/django.mo +0 -0
  63. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/locale/en/LC_MESSAGES/django.mo +0 -0
  64. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/management/commands/cleanup_database.py +0 -0
  65. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/management/commands/cleanup_rrset_ttl.py +0 -0
  66. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/management/commands/rebuild_dnssync.py +0 -0
  67. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/management/commands/setup_dnssync.py +0 -0
  68. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/management/commands/update_soa.py +0 -0
  69. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0001_squashed_netbox_dns_0_15.py +0 -0
  70. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0001_squashed_netbox_dns_0_22.py +0 -0
  71. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0002_contact_description_registrar_description.py +0 -0
  72. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0003_default_view.py +0 -0
  73. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0004_create_and_assign_default_view.py +0 -0
  74. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0005_alter_zone_view_not_null.py +0 -0
  75. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0006_templating.py +0 -0
  76. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0007_alter_ordering_options.py +0 -0
  77. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0008_view_prefixes.py +0 -0
  78. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0009_rename_contact_registrationcontact.py +0 -0
  79. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0010_view_ip_address_filter.py +0 -0
  80. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0011_rename_related_fields.py +0 -0
  81. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0012_natural_ordering.py +0 -0
  82. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0020_netbox_3_4.py +0 -0
  83. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0021_record_ip_address.py +0 -0
  84. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0022_search.py +0 -0
  85. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0023_alter_record_value.py +0 -0
  86. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0024_tenancy.py +0 -0
  87. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0025_ipam_coupling_cf.py +0 -0
  88. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0026_domain_registration.py +0 -0
  89. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0027_alter_registrar_iana_id.py +0 -0
  90. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0028_rfc2317_fields.py +0 -0
  91. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0029_record_fqdn.py +0 -0
  92. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/__init__.py +0 -0
  93. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/mixins/__init__.py +0 -0
  94. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/mixins/object_modification.py +0 -0
  95. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/models/__init__.py +0 -0
  96. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/models/record_template.py +0 -0
  97. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/models/registrar.py +0 -0
  98. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/models/registration_contact.py +0 -0
  99. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/models/zone_template.py +0 -0
  100. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/navigation.py +0 -0
  101. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/signals/__init__.py +0 -0
  102. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/signals/ipam_dnssync.py +0 -0
  103. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/tables/__init__.py +0 -0
  104. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/tables/ipam_dnssync.py +0 -0
  105. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/tables/nameserver.py +0 -0
  106. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/tables/record.py +0 -0
  107. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/tables/record_template.py +0 -0
  108. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/tables/registrar.py +0 -0
  109. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/tables/registration_contact.py +0 -0
  110. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/tables/view.py +0 -0
  111. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/tables/zone.py +0 -0
  112. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/tables/zone_template.py +0 -0
  113. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/template_content.py +0 -0
  114. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/nameserver.html +0 -0
  115. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/record/managed.html +0 -0
  116. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/record/related.html +0 -0
  117. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/record.html +0 -0
  118. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/recordtemplate.html +0 -0
  119. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/registrar.html +0 -0
  120. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/registrationcontact.html +0 -0
  121. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/view/button.html +0 -0
  122. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/view/prefix.html +0 -0
  123. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/view/related.html +0 -0
  124. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/view.html +0 -0
  125. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/zone/base.html +0 -0
  126. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/zone/child.html +0 -0
  127. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/zone/child_zone.html +0 -0
  128. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/zone/delegation_record.html +0 -0
  129. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/zone/managed_record.html +0 -0
  130. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/zone/record.html +0 -0
  131. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/zone/registration.html +0 -0
  132. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/zone/rfc2317_child_zone.html +0 -0
  133. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/zonetemplate.html +0 -0
  134. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/urls.py +0 -0
  135. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/utilities/__init__.py +0 -0
  136. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/utilities/conversions.py +0 -0
  137. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/utilities/dns.py +0 -0
  138. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/utilities/ipam_dnssync.py +0 -0
  139. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/validators/__init__.py +0 -0
  140. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/validators/dns_value.py +0 -0
  141. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/validators/rfc2317.py +0 -0
  142. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/views/__init__.py +0 -0
  143. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/views/nameserver.py +0 -0
  144. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/views/record.py +0 -0
  145. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/views/record_template.py +0 -0
  146. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/views/registrar.py +0 -0
  147. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/views/registration_contact.py +0 -0
  148. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/views/view.py +0 -0
  149. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/views/zone.py +0 -0
  150. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_dns/views/zone_template.py +0 -0
  151. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_plugin_dns.egg-info/dependency_links.txt +0 -0
  152. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_plugin_dns.egg-info/requires.txt +0 -0
  153. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/netbox_plugin_dns.egg-info/top_level.txt +0 -0
  154. {netbox_plugin_dns-1.2.1 → netbox_plugin_dns-1.2.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: netbox-plugin-dns
3
- Version: 1.2.1
3
+ Version: 1.2.2
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
@@ -66,9 +66,19 @@ For integration with a large number of DNS server implementations integration to
66
66
 
67
67
  ## Requirements
68
68
 
69
- * NetBox 4.0.0 or higher
69
+ * NetBox 4.2.0 or higher
70
70
  * Python 3.10 or higher
71
71
 
72
+ ## Compatibility with earlier NetBox Versions
73
+
74
+ NetBox Version | NetBox DNS Version | Comment
75
+ -------------- | ------------------ | -------
76
+ 3.5 | 0.22 |
77
+ 3.6 | 0.22 |
78
+ 3.7 | 0.22 |
79
+ 4.0 - 4.1 | 1.0 | Supports legacy IPAM Coupling
80
+ 4.0 - 4.1 | 1.1 | Supports IPAM DNSsync
81
+
72
82
  ## Installation & Configuration
73
83
 
74
84
  ### Installation
@@ -50,9 +50,19 @@ For integration with a large number of DNS server implementations integration to
50
50
 
51
51
  ## Requirements
52
52
 
53
- * NetBox 4.0.0 or higher
53
+ * NetBox 4.2.0 or higher
54
54
  * Python 3.10 or higher
55
55
 
56
+ ## Compatibility with earlier NetBox Versions
57
+
58
+ NetBox Version | NetBox DNS Version | Comment
59
+ -------------- | ------------------ | -------
60
+ 3.5 | 0.22 |
61
+ 3.6 | 0.22 |
62
+ 3.7 | 0.22 |
63
+ 4.0 - 4.1 | 1.0 | Supports legacy IPAM Coupling
64
+ 4.0 - 4.1 | 1.1 | Supports IPAM DNSsync
65
+
56
66
  ## Installation & Configuration
57
67
 
58
68
  ### Installation
@@ -7,7 +7,7 @@ from ipam.choices import IPAddressStatusChoices
7
7
 
8
8
  from netbox_dns.choices import RecordTypeChoices, RecordStatusChoices, ZoneStatusChoices
9
9
 
10
- __version__ = "1.2.1"
10
+ __version__ = "1.2.2"
11
11
 
12
12
 
13
13
  def _check_list(setting):
@@ -36,6 +36,7 @@ class DNSConfig(PluginConfig):
36
36
  ZoneStatusChoices.STATUS_ACTIVE,
37
37
  ZoneStatusChoices.STATUS_DYNAMIC,
38
38
  ],
39
+ "filter_record_types": [],
39
40
  "record_active_status": [
40
41
  RecordStatusChoices.STATUS_ACTIVE,
41
42
  ],
@@ -0,0 +1,80 @@
1
+ from dns import rdatatype, rdataclass
2
+
3
+ from django.utils.translation import gettext_lazy as _
4
+ from django.core.exceptions import ImproperlyConfigured
5
+
6
+ from netbox.plugins.utils import get_plugin_config
7
+ from utilities.choices import ChoiceSet
8
+
9
+
10
+ __all__ = (
11
+ "RecordTypeChoices",
12
+ "RecordSelectableTypeChoices",
13
+ "RecordClassChoices",
14
+ "RecordStatusChoices",
15
+ )
16
+
17
+
18
+ def define_choice_attributes(filter_name=None):
19
+ try:
20
+ if filter_name is not None:
21
+ filter_choices = get_plugin_config("netbox_dns", filter_name, [])
22
+ else:
23
+ filter_choices = []
24
+ except ImproperlyConfigured:
25
+ filter_choices = []
26
+
27
+ def decorator(cls):
28
+ choices = []
29
+ for choice in cls._choices:
30
+ if choice[0] not in filter_choices:
31
+ setattr(cls, choice[0], choice[0])
32
+ choices.append(choice)
33
+ cls._choices = choices
34
+ cls.CHOICES = choices
35
+
36
+ return cls
37
+
38
+ return decorator
39
+
40
+
41
+ @define_choice_attributes()
42
+ class RecordTypeChoices(ChoiceSet):
43
+ CHOICES = [
44
+ (rdtype.name, rdtype.name)
45
+ for rdtype in sorted(rdatatype.RdataType, key=lambda a: a.name)
46
+ if not rdatatype.is_metatype(rdtype)
47
+ ]
48
+ SINGLETONS = [
49
+ rdtype.name for rdtype in rdatatype.RdataType if rdatatype.is_singleton(rdtype)
50
+ ]
51
+
52
+
53
+ @define_choice_attributes(filter_name="filter_record_types")
54
+ class RecordSelectableTypeChoices(ChoiceSet):
55
+ CHOICES = [
56
+ (rdtype.name, rdtype.name)
57
+ for rdtype in sorted(rdatatype.RdataType, key=lambda a: a.name)
58
+ if not rdatatype.is_metatype(rdtype)
59
+ ]
60
+
61
+
62
+ @define_choice_attributes()
63
+ class RecordClassChoices(ChoiceSet):
64
+ CHOICES = [
65
+ (rdclass.name, rdclass.name)
66
+ for rdclass in sorted(rdataclass.RdataClass)
67
+ if not rdataclass.is_metaclass(rdclass)
68
+ ]
69
+
70
+
71
+ class RecordStatusChoices(ChoiceSet):
72
+ key = "Record.status"
73
+
74
+ STATUS_ACTIVE = "active"
75
+ STATUS_INACTIVE = "inactive"
76
+
77
+ CHOICES = [
78
+ (STATUS_ACTIVE, _("Active"), "blue"),
79
+ (STATUS_INACTIVE, _("Inactive"), "red"),
80
+ ]
@@ -21,7 +21,7 @@ from tenancy.models import Tenant, TenantGroup
21
21
  from tenancy.forms import TenancyForm, TenancyFilterForm
22
22
 
23
23
  from netbox_dns.models import View, Zone, Record
24
- from netbox_dns.choices import RecordTypeChoices, RecordStatusChoices
24
+ from netbox_dns.choices import RecordSelectableTypeChoices, RecordStatusChoices
25
25
  from netbox_dns.utilities import name_to_unicode
26
26
 
27
27
 
@@ -57,6 +57,11 @@ class RecordForm(TenancyForm, NetBoxModelForm):
57
57
  },
58
58
  label=_("Zone"),
59
59
  )
60
+ type = forms.ChoiceField(
61
+ choices=add_blank_choice(RecordSelectableTypeChoices),
62
+ required=True,
63
+ label=_("Type"),
64
+ )
60
65
 
61
66
  disable_ptr = forms.BooleanField(
62
67
  required=False,
@@ -123,7 +128,7 @@ class RecordFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
123
128
  )
124
129
 
125
130
  type = forms.MultipleChoiceField(
126
- choices=RecordTypeChoices,
131
+ choices=RecordSelectableTypeChoices,
127
132
  required=False,
128
133
  label=_("Type"),
129
134
  )
@@ -210,7 +215,7 @@ class RecordImportForm(NetBoxModelImportForm):
210
215
  help_text=_("This field is required if the zone is not in the default view"),
211
216
  )
212
217
  type = CSVChoiceField(
213
- choices=RecordTypeChoices,
218
+ choices=RecordSelectableTypeChoices,
214
219
  required=True,
215
220
  label=_("Type"),
216
221
  )
@@ -268,7 +273,7 @@ class RecordBulkEditForm(NetBoxModelBulkEditForm):
268
273
  label=_("Zone"),
269
274
  )
270
275
  type = forms.ChoiceField(
271
- choices=add_blank_choice(RecordTypeChoices),
276
+ choices=add_blank_choice(RecordSelectableTypeChoices),
272
277
  required=False,
273
278
  label=_("Type"),
274
279
  )
@@ -21,7 +21,7 @@ from tenancy.models import Tenant, TenantGroup
21
21
  from tenancy.forms import TenancyForm, TenancyFilterForm
22
22
 
23
23
  from netbox_dns.models import RecordTemplate, ZoneTemplate
24
- from netbox_dns.choices import RecordTypeChoices, RecordStatusChoices
24
+ from netbox_dns.choices import RecordSelectableTypeChoices, RecordStatusChoices
25
25
  from netbox_dns.utilities import name_to_unicode
26
26
 
27
27
 
@@ -41,6 +41,11 @@ class RecordTemplateForm(TenancyForm, NetBoxModelForm):
41
41
  if initial_record_name:
42
42
  self.initial["record_name"] = name_to_unicode(initial_record_name)
43
43
 
44
+ type = forms.ChoiceField(
45
+ choices=add_blank_choice(RecordSelectableTypeChoices),
46
+ required=True,
47
+ label=_("Type"),
48
+ )
44
49
  disable_ptr = forms.BooleanField(
45
50
  required=False,
46
51
  label=_("Disable PTR"),
@@ -103,7 +108,7 @@ class RecordTemplateFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
103
108
  )
104
109
 
105
110
  type = forms.MultipleChoiceField(
106
- choices=RecordTypeChoices,
111
+ choices=RecordSelectableTypeChoices,
107
112
  required=False,
108
113
  label=_("Type"),
109
114
  )
@@ -142,7 +147,7 @@ class RecordTemplateFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
142
147
 
143
148
  class RecordTemplateImportForm(NetBoxModelImportForm):
144
149
  type = CSVChoiceField(
145
- choices=RecordTypeChoices,
150
+ choices=RecordSelectableTypeChoices,
146
151
  required=True,
147
152
  label=_("Type"),
148
153
  )
@@ -187,7 +192,7 @@ class RecordTemplateBulkEditForm(NetBoxModelBulkEditForm):
187
192
  model = RecordTemplate
188
193
 
189
194
  type = forms.ChoiceField(
190
- choices=add_blank_choice(RecordTypeChoices),
195
+ choices=add_blank_choice(RecordSelectableTypeChoices),
191
196
  required=False,
192
197
  label=_("Type"),
193
198
  )
@@ -50,6 +50,7 @@ class NameServer(ObjectModificationMixin, ContactsMixin, NetBoxModel):
50
50
  clone_fields = (
51
51
  "name",
52
52
  "description",
53
+ "tenant",
53
54
  )
54
55
 
55
56
  class Meta:
@@ -227,6 +227,7 @@ class Record(ObjectModificationMixin, ContactsMixin, NetBoxModel):
227
227
  "ttl",
228
228
  "disable_ptr",
229
229
  "description",
230
+ "tenant",
230
231
  )
231
232
 
232
233
  class Meta:
@@ -64,6 +64,7 @@ class View(ObjectModificationMixin, ContactsMixin, NetBoxModel):
64
64
  clone_fields = (
65
65
  "name",
66
66
  "description",
67
+ "tenant",
67
68
  )
68
69
 
69
70
  @classmethod
@@ -271,6 +271,7 @@ class Zone(ObjectModificationMixin, ContactsMixin, NetBoxModel):
271
271
  "soa_expire",
272
272
  "soa_minimum",
273
273
  "description",
274
+ "tenant",
274
275
  )
275
276
 
276
277
  class Meta:
@@ -1,6 +1,8 @@
1
1
  {% extends 'netbox_dns/zone/base.html' %}
2
2
  {% load helpers %}
3
3
  {% load i18n %}
4
+ {% load netbox_dns %}
5
+ {% load tz %}
4
6
 
5
7
  {% block content %}
6
8
  <div class="row">
@@ -118,7 +120,14 @@
118
120
  {% if object.soa_serial_auto %}
119
121
  <tr>
120
122
  <th scope="row">{% trans "Serial (auto-generated)" %}</th>
121
- <td>{{ object.soa_serial }}</td>
123
+ <td>
124
+ <table style="width: 100%;">
125
+ <tr>
126
+ <td>{{ object.soa_serial }}</td>
127
+ <td align="right" class="text-muted">{{ object.soa_serial|epoch_to_utc|isodatetime }}</td>
128
+ </tr>
129
+ </table>
130
+ </td>
122
131
  </tr>
123
132
  {% else %}
124
133
  <tr>
@@ -0,0 +1,10 @@
1
+ from datetime import datetime, timezone
2
+
3
+ from django import template
4
+
5
+ register = template.Library()
6
+
7
+
8
+ @register.filter(name="epoch_to_utc")
9
+ def epoch_to_utc(epoch):
10
+ return datetime.fromtimestamp(epoch, tz=timezone.utc)
@@ -28,7 +28,7 @@ def _get_label(tolerate_leading_underscores=False, always_tolerant=False):
28
28
 
29
29
  tolerate_underscores = get_plugin_config(
30
30
  "netbox_dns", "tolerate_underscores_in_labels"
31
- ) or get_plugin_config("netbox_dns", "tolerate_underscores_in_hostnames")
31
+ )
32
32
 
33
33
  if tolerate_leading_underscores:
34
34
  if tolerate_underscores:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: netbox-plugin-dns
3
- Version: 1.2.1
3
+ Version: 1.2.2
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
@@ -66,9 +66,19 @@ For integration with a large number of DNS server implementations integration to
66
66
 
67
67
  ## Requirements
68
68
 
69
- * NetBox 4.0.0 or higher
69
+ * NetBox 4.2.0 or higher
70
70
  * Python 3.10 or higher
71
71
 
72
+ ## Compatibility with earlier NetBox Versions
73
+
74
+ NetBox Version | NetBox DNS Version | Comment
75
+ -------------- | ------------------ | -------
76
+ 3.5 | 0.22 |
77
+ 3.6 | 0.22 |
78
+ 3.7 | 0.22 |
79
+ 4.0 - 4.1 | 1.0 | Supports legacy IPAM Coupling
80
+ 4.0 - 4.1 | 1.1 | Supports IPAM DNSsync
81
+
72
82
  ## Installation & Configuration
73
83
 
74
84
  ### Installation
@@ -125,6 +125,8 @@ netbox_dns/templates/netbox_dns/zone/managed_record.html
125
125
  netbox_dns/templates/netbox_dns/zone/record.html
126
126
  netbox_dns/templates/netbox_dns/zone/registration.html
127
127
  netbox_dns/templates/netbox_dns/zone/rfc2317_child_zone.html
128
+ netbox_dns/templatetags/__init__.py
129
+ netbox_dns/templatetags/netbox_dns.py
128
130
  netbox_dns/utilities/__init__.py
129
131
  netbox_dns/utilities/conversions.py
130
132
  netbox_dns/utilities/dns.py
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "netbox-plugin-dns"
3
- version = "1.2.1"
3
+ version = "1.2.2"
4
4
  description = "NetBox DNS is a NetBox plugin for managing DNS data."
5
5
  authors = [
6
6
  {name="Peter Eckel", email="pete@netbox-dns.org"},
@@ -1,51 +0,0 @@
1
- from dns import rdatatype, rdataclass
2
-
3
- from django.utils.translation import gettext_lazy as _
4
-
5
- from utilities.choices import ChoiceSet
6
-
7
-
8
- def initialize_choice_names(cls):
9
- for choice in cls.CHOICES:
10
- setattr(cls, choice[0], choice[0])
11
- return cls
12
-
13
-
14
- __all__ = (
15
- "RecordTypeChoices",
16
- "RecordClassChoices",
17
- "RecordStatusChoices",
18
- )
19
-
20
-
21
- @initialize_choice_names
22
- class RecordTypeChoices(ChoiceSet):
23
- CHOICES = [
24
- (rdtype.name, rdtype.name)
25
- for rdtype in sorted(rdatatype.RdataType, key=lambda a: a.name)
26
- if not rdatatype.is_metatype(rdtype)
27
- ]
28
- SINGLETONS = [
29
- rdtype.name for rdtype in rdatatype.RdataType if rdatatype.is_singleton(rdtype)
30
- ]
31
-
32
-
33
- @initialize_choice_names
34
- class RecordClassChoices(ChoiceSet):
35
- CHOICES = [
36
- (rdclass.name, rdclass.name)
37
- for rdclass in sorted(rdataclass.RdataClass)
38
- if not rdataclass.is_metaclass(rdclass)
39
- ]
40
-
41
-
42
- class RecordStatusChoices(ChoiceSet):
43
- key = "Record.status"
44
-
45
- STATUS_ACTIVE = "active"
46
- STATUS_INACTIVE = "inactive"
47
-
48
- CHOICES = [
49
- (STATUS_ACTIVE, _("Active"), "blue"),
50
- (STATUS_INACTIVE, _("Inactive"), "red"),
51
- ]