netbox-plugin-dns 1.2b1__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.
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/PKG-INFO +14 -4
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/README.md +11 -1
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/__init__.py +5 -2
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/serializers_/record.py +1 -0
- netbox_plugin_dns-1.2.2/netbox_dns/choices/record.py +80 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/filtersets/zone.py +0 -14
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/forms/record.py +9 -4
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/forms/record_template.py +9 -4
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/graphql/types.py +1 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/models/nameserver.py +1 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/models/record.py +44 -1
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/models/view.py +1 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/models/zone.py +1 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/zone.html +10 -1
- netbox_plugin_dns-1.2.2/netbox_dns/templatetags/__init__.py +0 -0
- netbox_plugin_dns-1.2.2/netbox_dns/templatetags/netbox_dns.py +10 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/validators/dns_name.py +1 -1
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/validators/dns_value.py +32 -17
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_plugin_dns.egg-info/PKG-INFO +14 -4
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_plugin_dns.egg-info/SOURCES.txt +2 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/pyproject.toml +2 -2
- netbox_plugin_dns-1.2b1/netbox_dns/choices/record.py +0 -51
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/LICENSE +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/nested_serializers.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/serializers.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/serializers_/__init__.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/serializers_/nameserver.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/serializers_/prefix.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/serializers_/record_template.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/serializers_/registrar.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/serializers_/registration_contact.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/serializers_/view.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/serializers_/zone.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/serializers_/zone_template.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/urls.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/views.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/apps.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/choices/__init__.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/choices/zone.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/fields/__init__.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/fields/address.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/fields/ipam.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/fields/network.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/fields/rfc2317.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/filtersets/__init__.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/filtersets/nameserver.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/filtersets/record.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/filtersets/record_template.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/filtersets/registrar.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/filtersets/registration_contact.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/filtersets/view.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/filtersets/zone_template.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/forms/__init__.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/forms/nameserver.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/forms/registrar.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/forms/registration_contact.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/forms/view.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/forms/zone.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/forms/zone_template.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/graphql/__init__.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/graphql/filters.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/graphql/schema.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/locale/de/LC_MESSAGES/django.mo +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/locale/en/LC_MESSAGES/django.mo +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/management/commands/cleanup_database.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/management/commands/cleanup_rrset_ttl.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/management/commands/rebuild_dnssync.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/management/commands/setup_dnssync.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/management/commands/update_soa.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0001_squashed_netbox_dns_0_15.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0001_squashed_netbox_dns_0_22.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0002_contact_description_registrar_description.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0003_default_view.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0004_create_and_assign_default_view.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0005_alter_zone_view_not_null.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0006_templating.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0007_alter_ordering_options.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0008_view_prefixes.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0009_rename_contact_registrationcontact.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0010_view_ip_address_filter.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0011_rename_related_fields.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0012_natural_ordering.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0020_netbox_3_4.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0021_record_ip_address.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0022_search.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0023_alter_record_value.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0024_tenancy.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0025_ipam_coupling_cf.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0026_domain_registration.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0027_alter_registrar_iana_id.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0028_rfc2317_fields.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0029_record_fqdn.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/__init__.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/mixins/__init__.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/mixins/object_modification.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/models/__init__.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/models/record_template.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/models/registrar.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/models/registration_contact.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/models/zone_template.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/navigation.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/signals/__init__.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/signals/ipam_dnssync.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/tables/__init__.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/tables/ipam_dnssync.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/tables/nameserver.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/tables/record.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/tables/record_template.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/tables/registrar.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/tables/registration_contact.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/tables/view.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/tables/zone.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/tables/zone_template.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/template_content.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/nameserver.html +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/record/managed.html +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/record/related.html +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/record.html +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/recordtemplate.html +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/registrar.html +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/registrationcontact.html +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/view/button.html +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/view/prefix.html +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/view/related.html +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/view.html +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/zone/base.html +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/zone/child.html +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/zone/child_zone.html +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/zone/delegation_record.html +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/zone/managed_record.html +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/zone/record.html +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/zone/registration.html +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/zone/rfc2317_child_zone.html +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/zonetemplate.html +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/urls.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/utilities/__init__.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/utilities/conversions.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/utilities/dns.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/utilities/ipam_dnssync.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/validators/__init__.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/validators/rfc2317.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/views/__init__.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/views/nameserver.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/views/record.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/views/record_template.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/views/registrar.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/views/registration_contact.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/views/view.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/views/zone.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/views/zone_template.py +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_plugin_dns.egg-info/dependency_links.txt +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_plugin_dns.egg-info/requires.txt +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_plugin_dns.egg-info/top_level.txt +0 -0
- {netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: netbox-plugin-dns
|
|
3
|
-
Version: 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
|
|
@@ -8,7 +8,7 @@ Project-URL: Documentation, https://github.com/peteeckel/netbox-plugin-dns/blob/
|
|
|
8
8
|
Project-URL: Repository, https://github.com/peteeckel/netbox-plugin-dns
|
|
9
9
|
Project-URL: Issues, https://github.com/peteeckel/netbox-plugin-dns/issues
|
|
10
10
|
Keywords: netbox,netbox-plugin,dns
|
|
11
|
-
Classifier: Development Status ::
|
|
11
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
12
12
|
Requires-Python: >=3.10
|
|
13
13
|
Description-Content-Type: text/markdown
|
|
14
14
|
License-File: LICENSE
|
|
@@ -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.
|
|
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.
|
|
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.
|
|
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
|
],
|
|
@@ -49,9 +50,11 @@ class DNSConfig(PluginConfig):
|
|
|
49
50
|
"dnssync_minimum_zone_labels": 2,
|
|
50
51
|
"tolerate_characters_in_zone_labels": "",
|
|
51
52
|
"tolerate_underscores_in_labels": False,
|
|
52
|
-
"tolerate_underscores_in_hostnames": False, # Deprecated, will be removed in 1.2.0
|
|
53
53
|
"tolerate_leading_underscore_types": [
|
|
54
|
+
RecordTypeChoices.CNAME,
|
|
55
|
+
RecordTypeChoices.DNAME,
|
|
54
56
|
RecordTypeChoices.SRV,
|
|
57
|
+
RecordTypeChoices.SVCB,
|
|
55
58
|
RecordTypeChoices.TLSA,
|
|
56
59
|
RecordTypeChoices.TXT,
|
|
57
60
|
],
|
|
@@ -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
|
+
]
|
|
@@ -29,20 +29,6 @@ class ZoneFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
|
|
|
29
29
|
to_field_name="name",
|
|
30
30
|
label=_("View"),
|
|
31
31
|
)
|
|
32
|
-
# DEPRECATED: Remove in 1.1
|
|
33
|
-
name_server_id = django_filters.ModelMultipleChoiceFilter(
|
|
34
|
-
queryset=NameServer.objects.all(),
|
|
35
|
-
field_name="nameservers",
|
|
36
|
-
to_field_name="id",
|
|
37
|
-
label=_("Nameserver IDs"),
|
|
38
|
-
)
|
|
39
|
-
# DEPRECATED: Remove in 1.1
|
|
40
|
-
name_server = django_filters.ModelMultipleChoiceFilter(
|
|
41
|
-
queryset=NameServer.objects.all(),
|
|
42
|
-
field_name="nameservers__name",
|
|
43
|
-
to_field_name="name",
|
|
44
|
-
label=_("Nameservers"),
|
|
45
|
-
)
|
|
46
32
|
nameserver_id = django_filters.ModelMultipleChoiceFilter(
|
|
47
33
|
queryset=NameServer.objects.all(),
|
|
48
34
|
field_name="nameservers",
|
|
@@ -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
|
|
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=
|
|
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=
|
|
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(
|
|
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
|
|
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=
|
|
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=
|
|
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(
|
|
195
|
+
choices=add_blank_choice(RecordSelectableTypeChoices),
|
|
191
196
|
required=False,
|
|
192
197
|
label=_("Type"),
|
|
193
198
|
)
|
|
@@ -3,6 +3,7 @@ import netaddr
|
|
|
3
3
|
|
|
4
4
|
import dns
|
|
5
5
|
from dns import name as dns_name
|
|
6
|
+
from dns import rdata
|
|
6
7
|
|
|
7
8
|
from django.core.exceptions import ValidationError
|
|
8
9
|
from django.db import transaction, models
|
|
@@ -22,7 +23,11 @@ from netbox_dns.fields import AddressField
|
|
|
22
23
|
from netbox_dns.utilities import arpa_to_prefix, name_to_unicode, get_query_from_filter
|
|
23
24
|
from netbox_dns.validators import validate_generic_name, validate_record_value
|
|
24
25
|
from netbox_dns.mixins import ObjectModificationMixin
|
|
25
|
-
from netbox_dns.choices import
|
|
26
|
+
from netbox_dns.choices import (
|
|
27
|
+
RecordTypeChoices,
|
|
28
|
+
RecordStatusChoices,
|
|
29
|
+
RecordClassChoices,
|
|
30
|
+
)
|
|
26
31
|
|
|
27
32
|
|
|
28
33
|
__all__ = (
|
|
@@ -222,6 +227,7 @@ class Record(ObjectModificationMixin, ContactsMixin, NetBoxModel):
|
|
|
222
227
|
"ttl",
|
|
223
228
|
"disable_ptr",
|
|
224
229
|
"description",
|
|
230
|
+
"tenant",
|
|
225
231
|
)
|
|
226
232
|
|
|
227
233
|
class Meta:
|
|
@@ -634,6 +640,43 @@ class Record(ObjectModificationMixin, ContactsMixin, NetBoxModel):
|
|
|
634
640
|
}
|
|
635
641
|
)
|
|
636
642
|
|
|
643
|
+
@property
|
|
644
|
+
def absolute_value(self):
|
|
645
|
+
zone = dns_name.from_text(self.zone.name)
|
|
646
|
+
rr = rdata.from_text(RecordClassChoices.IN, self.type, self.value)
|
|
647
|
+
|
|
648
|
+
match self.type:
|
|
649
|
+
case (
|
|
650
|
+
RecordTypeChoices.CNAME
|
|
651
|
+
| RecordTypeChoices.DNAME
|
|
652
|
+
| RecordTypeChoices.NS
|
|
653
|
+
| RecordTypeChoices.HTTPS
|
|
654
|
+
| RecordTypeChoices.SRV
|
|
655
|
+
| RecordTypeChoices.SVCB
|
|
656
|
+
):
|
|
657
|
+
return rr.replace(target=rr.target.derelativize(zone)).to_text()
|
|
658
|
+
|
|
659
|
+
case RecordTypeChoices.MX | RecordTypeChoices.RT | RecordTypeChoices.KX:
|
|
660
|
+
return rr.replace(exchange=rr.exchange.derelativize(zone)).to_text()
|
|
661
|
+
|
|
662
|
+
case RecordTypeChoices.RP:
|
|
663
|
+
return rr.replace(
|
|
664
|
+
mbox=rr.mbox.derelativize(zone), txt=rr.txt.derelativize(zone)
|
|
665
|
+
).to_text()
|
|
666
|
+
|
|
667
|
+
case RecordTypeChoices.NAPTR:
|
|
668
|
+
return rr.replace(
|
|
669
|
+
replacement=rr.replacement.derelativize(zone)
|
|
670
|
+
).to_text()
|
|
671
|
+
|
|
672
|
+
case RecordTypeChoices.PX:
|
|
673
|
+
return rr.replace(
|
|
674
|
+
map822=rr.map822.derelativize(zone),
|
|
675
|
+
mapx400=rr.mapx400.derelativize(zone),
|
|
676
|
+
).to_text()
|
|
677
|
+
|
|
678
|
+
return self.value
|
|
679
|
+
|
|
637
680
|
def handle_conflicting_address_records(self):
|
|
638
681
|
if self.ipam_ip_address is None or not self.is_active:
|
|
639
682
|
return
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/zone.html
RENAMED
|
@@ -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>
|
|
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>
|
|
File without changes
|
|
@@ -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
|
-
)
|
|
31
|
+
)
|
|
32
32
|
|
|
33
33
|
if tolerate_leading_underscores:
|
|
34
34
|
if tolerate_underscores:
|
|
@@ -7,6 +7,8 @@ from dns.exception import SyntaxError
|
|
|
7
7
|
from django.core.exceptions import ValidationError
|
|
8
8
|
from django.utils.translation import gettext as _
|
|
9
9
|
|
|
10
|
+
from netbox.plugins.utils import get_plugin_config
|
|
11
|
+
|
|
10
12
|
from netbox_dns.choices import RecordClassChoices, RecordTypeChoices
|
|
11
13
|
from netbox_dns.validators import (
|
|
12
14
|
validate_fqdn,
|
|
@@ -76,14 +78,19 @@ def validate_record_value(record):
|
|
|
76
78
|
).format(value=record.value, type=record.type, error=exc)
|
|
77
79
|
)
|
|
78
80
|
|
|
81
|
+
skip_name_validation = record.type in get_plugin_config(
|
|
82
|
+
"netbox_dns", "tolerate_non_rfc1035_types", default=[]
|
|
83
|
+
)
|
|
84
|
+
|
|
79
85
|
match record.type:
|
|
80
86
|
case RecordTypeChoices.CNAME:
|
|
81
87
|
_validate_idn(rr.target)
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
88
|
+
if not skip_name_validation:
|
|
89
|
+
validate_domain_name(
|
|
90
|
+
rr.target.to_text(),
|
|
91
|
+
always_tolerant=True,
|
|
92
|
+
allow_empty_label=True,
|
|
93
|
+
)
|
|
87
94
|
|
|
88
95
|
case (
|
|
89
96
|
RecordTypeChoices.NS
|
|
@@ -92,38 +99,46 @@ def validate_record_value(record):
|
|
|
92
99
|
| RecordTypeChoices.SVCB
|
|
93
100
|
):
|
|
94
101
|
_validate_idn(rr.target)
|
|
95
|
-
|
|
102
|
+
if not skip_name_validation:
|
|
103
|
+
validate_domain_name(rr.target.to_text(), always_tolerant=True)
|
|
96
104
|
|
|
97
105
|
case RecordTypeChoices.DNAME:
|
|
98
106
|
_validate_idn(rr.target)
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
107
|
+
if not skip_name_validation:
|
|
108
|
+
validate_domain_name(
|
|
109
|
+
rr.target.to_text(), always_tolerant=True, zone_name=True
|
|
110
|
+
)
|
|
102
111
|
|
|
103
112
|
case RecordTypeChoices.PTR | RecordTypeChoices.NSAP_PTR:
|
|
104
113
|
_validate_idn(rr.target)
|
|
105
|
-
|
|
114
|
+
if not skip_name_validation:
|
|
115
|
+
validate_fqdn(rr.target.to_text(), always_tolerant=True)
|
|
106
116
|
|
|
107
117
|
case RecordTypeChoices.MX | RecordTypeChoices.RT | RecordTypeChoices.KX:
|
|
108
118
|
_validate_idn(rr.exchange)
|
|
109
|
-
|
|
119
|
+
if not skip_name_validation:
|
|
120
|
+
validate_domain_name(rr.exchange.to_text(), always_tolerant=True)
|
|
110
121
|
|
|
111
122
|
case RecordTypeChoices.NSEC:
|
|
112
123
|
_validate_idn(rr.next)
|
|
113
|
-
|
|
124
|
+
if not skip_name_validation:
|
|
125
|
+
validate_domain_name(rr.next.to_text(), always_tolerant=True)
|
|
114
126
|
|
|
115
127
|
case RecordTypeChoices.RP:
|
|
116
128
|
_validate_idn(rr.mbox)
|
|
117
|
-
validate_domain_name(rr.mbox.to_text(), always_tolerant=True)
|
|
118
129
|
_validate_idn(rr.txt)
|
|
119
|
-
|
|
130
|
+
if not skip_name_validation:
|
|
131
|
+
validate_domain_name(rr.mbox.to_text(), always_tolerant=True)
|
|
132
|
+
validate_domain_name(rr.txt.to_text(), always_tolerant=True)
|
|
120
133
|
|
|
121
134
|
case RecordTypeChoices.NAPTR:
|
|
122
135
|
_validate_idn(rr.replacement)
|
|
123
|
-
|
|
136
|
+
if not skip_name_validation:
|
|
137
|
+
validate_generic_name(rr.replacement.to_text(), always_tolerant=True)
|
|
124
138
|
|
|
125
139
|
case RecordTypeChoices.PX:
|
|
126
140
|
_validate_idn(rr.map822)
|
|
127
|
-
validate_domain_name(rr.map822.to_text(), always_tolerant=True)
|
|
128
141
|
_validate_idn(rr.mapx400)
|
|
129
|
-
|
|
142
|
+
if not skip_name_validation:
|
|
143
|
+
validate_domain_name(rr.map822.to_text(), always_tolerant=True)
|
|
144
|
+
validate_domain_name(rr.mapx400.to_text(), always_tolerant=True)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: netbox-plugin-dns
|
|
3
|
-
Version: 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
|
|
@@ -8,7 +8,7 @@ Project-URL: Documentation, https://github.com/peteeckel/netbox-plugin-dns/blob/
|
|
|
8
8
|
Project-URL: Repository, https://github.com/peteeckel/netbox-plugin-dns
|
|
9
9
|
Project-URL: Issues, https://github.com/peteeckel/netbox-plugin-dns/issues
|
|
10
10
|
Keywords: netbox,netbox-plugin,dns
|
|
11
|
-
Classifier: Development Status ::
|
|
11
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
12
12
|
Requires-Python: >=3.10
|
|
13
13
|
Description-Content-Type: text/markdown
|
|
14
14
|
License-File: LICENSE
|
|
@@ -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.
|
|
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.
|
|
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"},
|
|
@@ -9,7 +9,7 @@ license = {file="LICENCE"}
|
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
keywords = ["netbox", "netbox-plugin", "dns"]
|
|
11
11
|
classifiers = [
|
|
12
|
-
"Development Status ::
|
|
12
|
+
"Development Status :: 5 - Production/Stable"
|
|
13
13
|
]
|
|
14
14
|
dependencies = [
|
|
15
15
|
"dnspython",
|
|
@@ -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
|
-
]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/serializers_/nameserver.py
RENAMED
|
File without changes
|
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/serializers_/record_template.py
RENAMED
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/serializers_/registrar.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/api/serializers_/zone_template.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/filtersets/record_template.py
RENAMED
|
File without changes
|
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/filtersets/registration_contact.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/forms/registration_contact.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/locale/de/LC_MESSAGES/django.mo
RENAMED
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/locale/en/LC_MESSAGES/django.mo
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/management/commands/setup_dnssync.py
RENAMED
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/management/commands/update_soa.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0003_default_view.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0006_templating.py
RENAMED
|
File without changes
|
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0008_view_prefixes.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0012_natural_ordering.py
RENAMED
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0020_netbox_3_4.py
RENAMED
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0021_record_ip_address.py
RENAMED
|
File without changes
|
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0023_alter_record_value.py
RENAMED
|
File without changes
|
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0025_ipam_coupling_cf.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0028_rfc2317_fields.py
RENAMED
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/migrations/0029_record_fqdn.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/mixins/object_modification.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/models/registration_contact.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/tables/registration_contact.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/nameserver.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/record.html
RENAMED
|
File without changes
|
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/registrar.html
RENAMED
|
File without changes
|
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/view/button.html
RENAMED
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/view/prefix.html
RENAMED
|
File without changes
|
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/view.html
RENAMED
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/zone/base.html
RENAMED
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/zone/child.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/templates/netbox_dns/zone/record.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_dns/views/registration_contact.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_plugin_dns.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
{netbox_plugin_dns-1.2b1 → netbox_plugin_dns-1.2.2}/netbox_plugin_dns.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|