netbox-plugin-dns 1.1.3__tar.gz → 1.1.5__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.1.3 → netbox_plugin_dns-1.1.5}/PKG-INFO +3 -2
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/README.md +2 -1
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/__init__.py +26 -5
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/api/views.py +1 -1
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/choices/zone.py +2 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/fields/address.py +3 -21
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/filtersets/record.py +3 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/filtersets/zone.py +1 -2
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/forms/record.py +29 -13
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/forms/view.py +2 -3
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/forms/zone.py +15 -10
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/forms/zone_template.py +5 -5
- netbox_plugin_dns-1.1.5/netbox_dns/locale/de/LC_MESSAGES/django.mo +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/models/nameserver.py +4 -8
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/models/record.py +26 -41
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/models/record_template.py +5 -5
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/models/view.py +2 -3
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/models/zone.py +96 -39
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/signals/ipam_dnssync.py +1 -1
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/tables/record.py +14 -2
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/tables/zone.py +1 -2
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/template_content.py +16 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/record.html +12 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/view.html +1 -1
- netbox_plugin_dns-1.1.5/netbox_dns/templates/netbox_dns/zone/delegation_record.html +18 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/zone.html +1 -1
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/utilities/__init__.py +1 -0
- netbox_plugin_dns-1.1.5/netbox_dns/utilities/dns.py +12 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/utilities/ipam_dnssync.py +10 -13
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/validators/dns_value.py +47 -6
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/views/nameserver.py +3 -3
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/views/record.py +44 -11
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/views/registrar.py +1 -1
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/views/registration_contact.py +1 -1
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/views/view.py +2 -2
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/views/zone.py +49 -20
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_plugin_dns.egg-info/PKG-INFO +3 -2
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_plugin_dns.egg-info/SOURCES.txt +2 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/pyproject.toml +1 -1
- netbox_plugin_dns-1.1.3/netbox_dns/locale/de/LC_MESSAGES/django.mo +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/LICENSE +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/api/nested_serializers.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/api/serializers.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/api/serializers_/__init__.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/api/serializers_/nameserver.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/api/serializers_/prefix.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/api/serializers_/record.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/api/serializers_/record_template.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/api/serializers_/registrar.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/api/serializers_/registration_contact.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/api/serializers_/view.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/api/serializers_/zone.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/api/serializers_/zone_template.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/api/urls.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/apps.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/choices/__init__.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/choices/record.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/fields/__init__.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/fields/ipam.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/fields/network.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/fields/rfc2317.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/filtersets/__init__.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/filtersets/nameserver.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/filtersets/record_template.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/filtersets/registrar.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/filtersets/registration_contact.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/filtersets/view.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/filtersets/zone_template.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/forms/__init__.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/forms/nameserver.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/forms/record_template.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/forms/registrar.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/forms/registration_contact.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/graphql/__init__.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/graphql/filters.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/graphql/schema.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/graphql/types.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/locale/en/LC_MESSAGES/django.mo +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/management/commands/cleanup_database.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/management/commands/cleanup_rrset_ttl.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/management/commands/rebuild_dnssync.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/management/commands/setup_dnssync.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/management/commands/update_soa.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0001_squashed_netbox_dns_0_15.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0001_squashed_netbox_dns_0_22.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0002_contact_description_registrar_description.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0003_default_view.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0004_create_and_assign_default_view.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0005_alter_zone_view_not_null.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0006_templating.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0007_alter_ordering_options.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0008_view_prefixes.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0009_rename_contact_registrationcontact.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0010_view_ip_address_filter.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0020_netbox_3_4.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0021_record_ip_address.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0022_search.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0023_alter_record_value.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0024_tenancy.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0025_ipam_coupling_cf.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0026_domain_registration.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0027_alter_registrar_iana_id.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0028_rfc2317_fields.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/0029_record_fqdn.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/migrations/__init__.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/mixins/__init__.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/mixins/object_modification.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/models/__init__.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/models/registrar.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/models/registration_contact.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/models/zone_template.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/navigation.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/signals/__init__.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/tables/__init__.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/tables/ipam_dnssync.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/tables/nameserver.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/tables/record_template.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/tables/registrar.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/tables/registration_contact.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/tables/view.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/tables/zone_template.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/nameserver.html +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/record/managed.html +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/record/related.html +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/recordtemplate.html +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/registrar.html +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/registrationcontact.html +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/view/button.html +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/view/prefix.html +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/view/related.html +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/zone/base.html +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/zone/child.html +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/zone/child_zone.html +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/zone/managed_record.html +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/zone/record.html +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/zone/registration.html +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/zone/rfc2317_child_zone.html +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/templates/netbox_dns/zonetemplate.html +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/urls/__init__.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/urls/nameserver.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/urls/record.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/urls/record_template.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/urls/registrar.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/urls/registration_contact.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/urls/view.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/urls/zone.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/urls/zone_template.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/utilities/conversions.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/validators/__init__.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/validators/dns_name.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/validators/rfc2317.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/views/__init__.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/views/record_template.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_dns/views/zone_template.py +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_plugin_dns.egg-info/dependency_links.txt +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_plugin_dns.egg-info/requires.txt +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/netbox_plugin_dns.egg-info/top_level.txt +0 -0
- {netbox_plugin_dns-1.1.3 → netbox_plugin_dns-1.1.5}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: netbox-plugin-dns
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.5
|
|
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
|
|
@@ -25,6 +25,7 @@ The NetBox DNS plugin enables NetBox to manage operational DNS data such as name
|
|
|
25
25
|
<a href="https://github.com/peteeckel/netbox-plugin-dns/pulls"><img src="https://img.shields.io/github/issues-pr/peteeckel/netbox-plugin-dns" alt="Pull Requests Badge"/></a>
|
|
26
26
|
<a href="https://github.com/peteeckel/netbox-plugin-dns/graphs/contributors"><img alt="GitHub contributors" src="https://img.shields.io/github/contributors/peteeckel/netbox-plugin-dns?color=2b9348"></a>
|
|
27
27
|
<a href="https://github.com/peteeckel/netbox-plugin-dns/blob/master/LICENSE"><img src="https://img.shields.io/github/license/peteeckel/netbox-plugin-dns?color=2b9348" alt="License Badge"/></a>
|
|
28
|
+
<a href="https://github.com/psf/black"><img src="https://img.shields.io/badge/code%20style-black-000000.svg" alt="Code Style Black"/></a>
|
|
28
29
|
<a href="https://pepy.tech/project/netbox-plugin-dns"><img alt="Downloads" src="https://static.pepy.tech/badge/netbox-plugin-dns"></a>
|
|
29
30
|
<a href="https://pepy.tech/project/netbox-plugin-dns"><img alt="Downloads/Week" src="https://static.pepy.tech/badge/netbox-plugin-dns/month"></a>
|
|
30
31
|
<a href="https://pepy.tech/project/netbox-plugin-dns"><img alt="Downloads/Month" src="https://static.pepy.tech/badge/netbox-plugin-dns/week"></a>
|
|
@@ -32,7 +33,7 @@ The NetBox DNS plugin enables NetBox to manage operational DNS data such as name
|
|
|
32
33
|
|
|
33
34
|
> [!WARNING]
|
|
34
35
|
> **As a result of some issues with NetBox Branching still under investigation, NetBox DNS is currently not compatible with the new NetBox Branching plugin.**
|
|
35
|
-
> This affects multiple aspects of the branching functionality, and currently
|
|
36
|
+
> This affects multiple aspects of the branching functionality, and currently there is no workaround. Do not try to use NetBox Branching together with NetBox DNS until these issues are resolved.
|
|
36
37
|
> This warning will be updated as soon as the situation is resolved.
|
|
37
38
|
|
|
38
39
|
## Objectives
|
|
@@ -9,6 +9,7 @@ The NetBox DNS plugin enables NetBox to manage operational DNS data such as name
|
|
|
9
9
|
<a href="https://github.com/peteeckel/netbox-plugin-dns/pulls"><img src="https://img.shields.io/github/issues-pr/peteeckel/netbox-plugin-dns" alt="Pull Requests Badge"/></a>
|
|
10
10
|
<a href="https://github.com/peteeckel/netbox-plugin-dns/graphs/contributors"><img alt="GitHub contributors" src="https://img.shields.io/github/contributors/peteeckel/netbox-plugin-dns?color=2b9348"></a>
|
|
11
11
|
<a href="https://github.com/peteeckel/netbox-plugin-dns/blob/master/LICENSE"><img src="https://img.shields.io/github/license/peteeckel/netbox-plugin-dns?color=2b9348" alt="License Badge"/></a>
|
|
12
|
+
<a href="https://github.com/psf/black"><img src="https://img.shields.io/badge/code%20style-black-000000.svg" alt="Code Style Black"/></a>
|
|
12
13
|
<a href="https://pepy.tech/project/netbox-plugin-dns"><img alt="Downloads" src="https://static.pepy.tech/badge/netbox-plugin-dns"></a>
|
|
13
14
|
<a href="https://pepy.tech/project/netbox-plugin-dns"><img alt="Downloads/Week" src="https://static.pepy.tech/badge/netbox-plugin-dns/month"></a>
|
|
14
15
|
<a href="https://pepy.tech/project/netbox-plugin-dns"><img alt="Downloads/Month" src="https://static.pepy.tech/badge/netbox-plugin-dns/week"></a>
|
|
@@ -16,7 +17,7 @@ The NetBox DNS plugin enables NetBox to manage operational DNS data such as name
|
|
|
16
17
|
|
|
17
18
|
> [!WARNING]
|
|
18
19
|
> **As a result of some issues with NetBox Branching still under investigation, NetBox DNS is currently not compatible with the new NetBox Branching plugin.**
|
|
19
|
-
> This affects multiple aspects of the branching functionality, and currently
|
|
20
|
+
> This affects multiple aspects of the branching functionality, and currently there is no workaround. Do not try to use NetBox Branching together with NetBox DNS until these issues are resolved.
|
|
20
21
|
> This warning will be updated as soon as the situation is resolved.
|
|
21
22
|
|
|
22
23
|
## Objectives
|
|
@@ -1,12 +1,18 @@
|
|
|
1
|
-
from django.conf import settings
|
|
2
1
|
from django.utils.translation import gettext_lazy as _
|
|
2
|
+
from django.core.exceptions import ImproperlyConfigured
|
|
3
3
|
|
|
4
4
|
from netbox.plugins import PluginConfig
|
|
5
|
+
from netbox.plugins.utils import get_plugin_config
|
|
5
6
|
from ipam.choices import IPAddressStatusChoices
|
|
6
7
|
|
|
7
|
-
from netbox_dns.choices import RecordTypeChoices
|
|
8
|
+
from netbox_dns.choices import RecordTypeChoices, RecordStatusChoices, ZoneStatusChoices
|
|
8
9
|
|
|
9
|
-
__version__ = "1.1.
|
|
10
|
+
__version__ = "1.1.5"
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _check_list(setting):
|
|
14
|
+
if not isinstance(get_plugin_config("netbox_dns", setting), list):
|
|
15
|
+
raise ImproperlyConfigured(f"{setting} must be a list")
|
|
10
16
|
|
|
11
17
|
|
|
12
18
|
class DNSConfig(PluginConfig):
|
|
@@ -26,6 +32,13 @@ class DNSConfig(PluginConfig):
|
|
|
26
32
|
"zone_soa_retry": 7200,
|
|
27
33
|
"zone_soa_expire": 2419200,
|
|
28
34
|
"zone_soa_minimum": 3600,
|
|
35
|
+
"zone_active_status": [
|
|
36
|
+
ZoneStatusChoices.STATUS_ACTIVE,
|
|
37
|
+
ZoneStatusChoices.STATUS_DYNAMIC,
|
|
38
|
+
],
|
|
39
|
+
"record_active_status": [
|
|
40
|
+
RecordStatusChoices.STATUS_ACTIVE,
|
|
41
|
+
],
|
|
29
42
|
"dnssync_disabled": False,
|
|
30
43
|
"dnssync_ipaddress_active_status": [
|
|
31
44
|
IPAddressStatusChoices.STATUS_ACTIVE,
|
|
@@ -46,7 +59,7 @@ class DNSConfig(PluginConfig):
|
|
|
46
59
|
"enable_root_zones": False,
|
|
47
60
|
"enforce_unique_records": True,
|
|
48
61
|
"enforce_unique_rrset_ttl": True,
|
|
49
|
-
"menu_name": "
|
|
62
|
+
"menu_name": "DNS",
|
|
50
63
|
"top_level_menu": True,
|
|
51
64
|
}
|
|
52
65
|
base_url = "netbox-dns"
|
|
@@ -54,10 +67,18 @@ class DNSConfig(PluginConfig):
|
|
|
54
67
|
def ready(self):
|
|
55
68
|
super().ready()
|
|
56
69
|
|
|
57
|
-
if not
|
|
70
|
+
if not get_plugin_config("netbox_dns", "dnssync_disabled"):
|
|
58
71
|
import netbox_dns.signals.ipam_dnssync # noqa: F401
|
|
59
72
|
import netbox_dns.tables.ipam_dnssync # noqa: F401
|
|
60
73
|
|
|
74
|
+
for setting in (
|
|
75
|
+
"zone_active_status",
|
|
76
|
+
"record_active_status",
|
|
77
|
+
"dnssync_ipaddress_active_status",
|
|
78
|
+
"tolerate_leading_underscore_types",
|
|
79
|
+
):
|
|
80
|
+
_check_list(setting)
|
|
81
|
+
|
|
61
82
|
|
|
62
83
|
#
|
|
63
84
|
# Initialize plugin config
|
|
@@ -71,7 +71,7 @@ class NameServerViewSet(NetBoxModelViewSet):
|
|
|
71
71
|
|
|
72
72
|
|
|
73
73
|
class RecordViewSet(NetBoxModelViewSet):
|
|
74
|
-
queryset = Record.objects.
|
|
74
|
+
queryset = Record.objects.prefetch_related("zone", "zone__view", "tenant")
|
|
75
75
|
serializer_class = RecordSerializer
|
|
76
76
|
filterset_class = RecordFilterSet
|
|
77
77
|
|
|
@@ -13,10 +13,12 @@ class ZoneStatusChoices(ChoiceSet):
|
|
|
13
13
|
STATUS_RESERVED = "reserved"
|
|
14
14
|
STATUS_DEPRECATED = "deprecated"
|
|
15
15
|
STATUS_PARKED = "parked"
|
|
16
|
+
STATUS_DYNAMIC = "dynamic"
|
|
16
17
|
|
|
17
18
|
CHOICES = [
|
|
18
19
|
(STATUS_ACTIVE, _("Active"), "blue"),
|
|
19
20
|
(STATUS_RESERVED, _("Reserved"), "cyan"),
|
|
20
21
|
(STATUS_DEPRECATED, _("Deprecated"), "red"),
|
|
21
22
|
(STATUS_PARKED, _("Parked"), "gray"),
|
|
23
|
+
(STATUS_DYNAMIC, _("Dynamic"), "orange"),
|
|
22
24
|
]
|
|
@@ -1,31 +1,13 @@
|
|
|
1
|
-
from django import forms
|
|
2
1
|
from django.db import models
|
|
3
2
|
from django.core.exceptions import ValidationError
|
|
4
3
|
from django.utils.translation import gettext_lazy as _
|
|
5
4
|
|
|
6
5
|
from netaddr import AddrFormatError, IPAddress
|
|
7
6
|
|
|
7
|
+
from ipam.formfields import IPAddressFormField
|
|
8
8
|
|
|
9
|
-
__all__ = (
|
|
10
|
-
"AddressFormField",
|
|
11
|
-
"AddressField",
|
|
12
|
-
)
|
|
13
9
|
|
|
14
|
-
|
|
15
|
-
class AddressFormField(forms.Field):
|
|
16
|
-
def to_python(self, value):
|
|
17
|
-
if not value:
|
|
18
|
-
return None
|
|
19
|
-
|
|
20
|
-
if isinstance(value, IPAddress):
|
|
21
|
-
return value
|
|
22
|
-
|
|
23
|
-
try:
|
|
24
|
-
ip_address = IPAddress(value)
|
|
25
|
-
except AddrFormatError as exc:
|
|
26
|
-
raise ValidationError(exc)
|
|
27
|
-
|
|
28
|
-
return ip_address
|
|
10
|
+
__all__ = ("AddressField",)
|
|
29
11
|
|
|
30
12
|
|
|
31
13
|
class AddressField(models.Field):
|
|
@@ -58,7 +40,7 @@ class AddressField(models.Field):
|
|
|
58
40
|
return str(self.to_python(value))
|
|
59
41
|
|
|
60
42
|
def form_class(self):
|
|
61
|
-
return
|
|
43
|
+
return IPAddressFormField
|
|
62
44
|
|
|
63
45
|
def formfield(self, **kwargs):
|
|
64
46
|
defaults = {"form_class": self.form_class()}
|
|
@@ -3,7 +3,6 @@ import netaddr
|
|
|
3
3
|
import django_filters
|
|
4
4
|
from django.db.models import Q
|
|
5
5
|
from django.utils.translation import gettext as _
|
|
6
|
-
from django.utils.translation import pgettext as _p
|
|
7
6
|
|
|
8
7
|
from netbox.filtersets import NetBoxModelFilterSet
|
|
9
8
|
from tenancy.filtersets import TenancyFilterSet
|
|
@@ -28,7 +27,7 @@ class ZoneFilterSet(TenancyFilterSet, NetBoxModelFilterSet):
|
|
|
28
27
|
queryset=View.objects.all(),
|
|
29
28
|
field_name="view__name",
|
|
30
29
|
to_field_name="name",
|
|
31
|
-
label=
|
|
30
|
+
label=_("View"),
|
|
32
31
|
)
|
|
33
32
|
# DEPRECATED: Remove in 1.1
|
|
34
33
|
name_server_id = django_filters.ModelMultipleChoiceFilter(
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
from django import forms
|
|
2
2
|
from django.utils.translation import gettext_lazy as _
|
|
3
|
-
from django.utils.translation import pgettext_lazy as _p
|
|
4
3
|
|
|
5
4
|
from netbox.forms import (
|
|
6
5
|
NetBoxModelBulkEditForm,
|
|
@@ -38,12 +37,6 @@ class RecordForm(TenancyForm, NetBoxModelForm):
|
|
|
38
37
|
def __init__(self, *args, **kwargs):
|
|
39
38
|
super().__init__(*args, **kwargs)
|
|
40
39
|
|
|
41
|
-
initial_zone_id = self.initial.get("zone")
|
|
42
|
-
if initial_zone_id is not None:
|
|
43
|
-
self.initial["view"] = Zone.objects.get(pk=initial_zone_id).view
|
|
44
|
-
else:
|
|
45
|
-
self.initial["view"] = View.get_default_view()
|
|
46
|
-
|
|
47
40
|
initial_name = self.initial.get("name")
|
|
48
41
|
if initial_name:
|
|
49
42
|
self.initial["name"] = name_to_unicode(initial_name)
|
|
@@ -51,7 +44,10 @@ class RecordForm(TenancyForm, NetBoxModelForm):
|
|
|
51
44
|
view = DynamicModelChoiceField(
|
|
52
45
|
queryset=View.objects.all(),
|
|
53
46
|
required=False,
|
|
54
|
-
|
|
47
|
+
initial_params={
|
|
48
|
+
"zone": "$zone",
|
|
49
|
+
},
|
|
50
|
+
label=_("View"),
|
|
55
51
|
)
|
|
56
52
|
zone = DynamicModelChoiceField(
|
|
57
53
|
queryset=Zone.objects.all(),
|
|
@@ -111,6 +107,7 @@ class RecordFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
|
|
|
111
107
|
fieldsets = (
|
|
112
108
|
FieldSet("q", "filter_id", "tag"),
|
|
113
109
|
FieldSet(
|
|
110
|
+
"view_id",
|
|
114
111
|
"zone_id",
|
|
115
112
|
"name",
|
|
116
113
|
"fqdn",
|
|
@@ -118,6 +115,7 @@ class RecordFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
|
|
|
118
115
|
"value",
|
|
119
116
|
"disable_ptr",
|
|
120
117
|
"status",
|
|
118
|
+
"active",
|
|
121
119
|
"description",
|
|
122
120
|
name=_("Attributes"),
|
|
123
121
|
),
|
|
@@ -151,10 +149,23 @@ class RecordFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
|
|
|
151
149
|
required=False,
|
|
152
150
|
label=_("Status"),
|
|
153
151
|
)
|
|
152
|
+
view_id = DynamicModelMultipleChoiceField(
|
|
153
|
+
queryset=View.objects.all(),
|
|
154
|
+
required=False,
|
|
155
|
+
label=_("View"),
|
|
156
|
+
)
|
|
154
157
|
zone_id = DynamicModelMultipleChoiceField(
|
|
155
158
|
queryset=Zone.objects.all(),
|
|
156
159
|
required=False,
|
|
157
160
|
label=_("Zone"),
|
|
161
|
+
query_params={
|
|
162
|
+
"view_id": "$view_id",
|
|
163
|
+
},
|
|
164
|
+
)
|
|
165
|
+
active = forms.NullBooleanField(
|
|
166
|
+
required=False,
|
|
167
|
+
widget=forms.Select(choices=BOOLEAN_WITH_BLANK_CHOICES),
|
|
168
|
+
label=_("Active"),
|
|
158
169
|
)
|
|
159
170
|
description = forms.CharField(
|
|
160
171
|
required=False,
|
|
@@ -175,23 +186,28 @@ class RecordImportForm(NetBoxModelImportForm):
|
|
|
175
186
|
pass
|
|
176
187
|
|
|
177
188
|
if view is not None:
|
|
178
|
-
self.fields["zone"].queryset =
|
|
189
|
+
self.fields["zone"].queryset = view.zone_set
|
|
179
190
|
else:
|
|
180
|
-
self.fields["zone"].queryset =
|
|
181
|
-
view=View.get_default_view()
|
|
182
|
-
)
|
|
191
|
+
self.fields["zone"].queryset = View.get_default_view().zone_set
|
|
183
192
|
|
|
184
193
|
zone = CSVModelChoiceField(
|
|
185
194
|
queryset=Zone.objects.all(),
|
|
186
195
|
to_field_name="name",
|
|
187
196
|
required=True,
|
|
188
197
|
label=_("Zone"),
|
|
198
|
+
error_messages={
|
|
199
|
+
"invalid_choice": _("Zone %(value)s not found"),
|
|
200
|
+
},
|
|
189
201
|
)
|
|
190
202
|
view = CSVModelChoiceField(
|
|
191
203
|
queryset=View.objects.all(),
|
|
192
204
|
to_field_name="name",
|
|
193
205
|
required=False,
|
|
194
|
-
label=
|
|
206
|
+
label=_("View"),
|
|
207
|
+
error_messages={
|
|
208
|
+
"invalid_choice": _("View %(value)s not found"),
|
|
209
|
+
},
|
|
210
|
+
help_text=_("This field is required if the zone is not in the default view"),
|
|
195
211
|
)
|
|
196
212
|
type = CSVChoiceField(
|
|
197
213
|
choices=RecordTypeChoices,
|
|
@@ -3,7 +3,6 @@ from django.conf import settings
|
|
|
3
3
|
from django.core.exceptions import ValidationError, FieldError
|
|
4
4
|
from django.db.models import Q, Count
|
|
5
5
|
from django.utils.translation import gettext_lazy as _
|
|
6
|
-
from django.utils.translation import pgettext_lazy as _p
|
|
7
6
|
|
|
8
7
|
from netbox.forms import (
|
|
9
8
|
NetBoxModelBulkEditForm,
|
|
@@ -127,7 +126,7 @@ class ViewForm(ViewPrefixUpdateMixin, TenancyForm, NetBoxModelForm):
|
|
|
127
126
|
)
|
|
128
127
|
|
|
129
128
|
fieldsets = (
|
|
130
|
-
FieldSet("name", "default_view", "description", name=
|
|
129
|
+
FieldSet("name", "default_view", "description", name=_("View")),
|
|
131
130
|
FieldSet("prefixes", "ip_address_filter"),
|
|
132
131
|
FieldSet("tenant_group", "tenant", name=_("Tenancy")),
|
|
133
132
|
FieldSet("tags", name=_("Tags")),
|
|
@@ -302,7 +301,7 @@ class ViewPrefixEditForm(forms.ModelForm):
|
|
|
302
301
|
|
|
303
302
|
if not views.exists():
|
|
304
303
|
if (parent := prefix.get_parents().last()) is not None:
|
|
305
|
-
check_views = parent.netbox_dns_views.
|
|
304
|
+
check_views = parent.netbox_dns_views.difference(old_views)
|
|
306
305
|
|
|
307
306
|
else:
|
|
308
307
|
check_views = views.difference(old_views)
|
|
@@ -4,7 +4,6 @@ from django.conf import settings
|
|
|
4
4
|
from django.core.validators import MinValueValidator, MaxValueValidator
|
|
5
5
|
from django.core.exceptions import ValidationError
|
|
6
6
|
from django.utils.translation import gettext_lazy as _
|
|
7
|
-
from django.utils.translation import pgettext_lazy as _p
|
|
8
7
|
|
|
9
8
|
from netbox.forms import (
|
|
10
9
|
NetBoxModelBulkEditForm,
|
|
@@ -354,6 +353,7 @@ class ZoneFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
|
|
|
354
353
|
"status",
|
|
355
354
|
"name",
|
|
356
355
|
"nameserver_id",
|
|
356
|
+
"active",
|
|
357
357
|
"description",
|
|
358
358
|
name=_("Attributes"),
|
|
359
359
|
),
|
|
@@ -384,7 +384,7 @@ class ZoneFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
|
|
|
384
384
|
view_id = DynamicModelMultipleChoiceField(
|
|
385
385
|
queryset=View.objects.all(),
|
|
386
386
|
required=False,
|
|
387
|
-
label=
|
|
387
|
+
label=_("View"),
|
|
388
388
|
)
|
|
389
389
|
status = forms.MultipleChoiceField(
|
|
390
390
|
choices=ZoneStatusChoices,
|
|
@@ -400,6 +400,11 @@ class ZoneFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm):
|
|
|
400
400
|
required=False,
|
|
401
401
|
label=_("Nameservers"),
|
|
402
402
|
)
|
|
403
|
+
active = forms.NullBooleanField(
|
|
404
|
+
required=False,
|
|
405
|
+
widget=forms.Select(choices=BOOLEAN_WITH_BLANK_CHOICES),
|
|
406
|
+
label=_("Active"),
|
|
407
|
+
)
|
|
403
408
|
description = forms.CharField(
|
|
404
409
|
required=False,
|
|
405
410
|
label=_("Description"),
|
|
@@ -470,7 +475,7 @@ class ZoneImportForm(ZoneTemplateUpdateMixin, NetBoxModelImportForm):
|
|
|
470
475
|
required=False,
|
|
471
476
|
to_field_name="name",
|
|
472
477
|
error_messages={
|
|
473
|
-
"invalid_choice": _("View not found
|
|
478
|
+
"invalid_choice": _("View %(value)s not found"),
|
|
474
479
|
},
|
|
475
480
|
label=_("View"),
|
|
476
481
|
)
|
|
@@ -499,7 +504,7 @@ class ZoneImportForm(ZoneTemplateUpdateMixin, NetBoxModelImportForm):
|
|
|
499
504
|
required=False,
|
|
500
505
|
to_field_name="name",
|
|
501
506
|
error_messages={
|
|
502
|
-
"invalid_choice": _("Nameserver not found
|
|
507
|
+
"invalid_choice": _("Nameserver %(value)s not found"),
|
|
503
508
|
},
|
|
504
509
|
help_text=_("Primary nameserver for the zone"),
|
|
505
510
|
label=_("SOA MName"),
|
|
@@ -554,7 +559,7 @@ class ZoneImportForm(ZoneTemplateUpdateMixin, NetBoxModelImportForm):
|
|
|
554
559
|
required=False,
|
|
555
560
|
to_field_name="name",
|
|
556
561
|
error_messages={
|
|
557
|
-
"invalid_choice": _("Registrar not found
|
|
562
|
+
"invalid_choice": _("Registrar %(value)s not found"),
|
|
558
563
|
},
|
|
559
564
|
label=_("Registrar"),
|
|
560
565
|
)
|
|
@@ -567,7 +572,7 @@ class ZoneImportForm(ZoneTemplateUpdateMixin, NetBoxModelImportForm):
|
|
|
567
572
|
required=False,
|
|
568
573
|
to_field_name="contact_id",
|
|
569
574
|
error_messages={
|
|
570
|
-
"invalid_choice": _("Registrant contact ID not found"),
|
|
575
|
+
"invalid_choice": _("Registrant contact ID %(value)s not found"),
|
|
571
576
|
},
|
|
572
577
|
label=_("Registrant"),
|
|
573
578
|
)
|
|
@@ -576,7 +581,7 @@ class ZoneImportForm(ZoneTemplateUpdateMixin, NetBoxModelImportForm):
|
|
|
576
581
|
required=False,
|
|
577
582
|
to_field_name="contact_id",
|
|
578
583
|
error_messages={
|
|
579
|
-
"invalid_choice": _("Administrative contact ID not found"),
|
|
584
|
+
"invalid_choice": _("Administrative contact ID %(value)s not found"),
|
|
580
585
|
},
|
|
581
586
|
label=_("Administrative Contact"),
|
|
582
587
|
)
|
|
@@ -585,7 +590,7 @@ class ZoneImportForm(ZoneTemplateUpdateMixin, NetBoxModelImportForm):
|
|
|
585
590
|
required=False,
|
|
586
591
|
to_field_name="contact_id",
|
|
587
592
|
error_messages={
|
|
588
|
-
"invalid_choice": _("Technical contact ID not found"),
|
|
593
|
+
"invalid_choice": _("Technical contact ID %(value)s not found"),
|
|
589
594
|
},
|
|
590
595
|
label=_("Technical Contact"),
|
|
591
596
|
)
|
|
@@ -669,7 +674,7 @@ class ZoneBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
669
674
|
view = DynamicModelChoiceField(
|
|
670
675
|
queryset=View.objects.all(),
|
|
671
676
|
required=False,
|
|
672
|
-
label=
|
|
677
|
+
label=_("View"),
|
|
673
678
|
)
|
|
674
679
|
status = forms.ChoiceField(
|
|
675
680
|
choices=add_blank_choice(ZoneStatusChoices),
|
|
@@ -781,7 +786,7 @@ class ZoneBulkEditForm(NetBoxModelBulkEditForm):
|
|
|
781
786
|
tenant_group = DynamicModelChoiceField(
|
|
782
787
|
queryset=TenantGroup.objects.all(),
|
|
783
788
|
required=False,
|
|
784
|
-
label=_("Tenant"),
|
|
789
|
+
label=_("Tenant Group"),
|
|
785
790
|
)
|
|
786
791
|
tenant = DynamicModelChoiceField(
|
|
787
792
|
queryset=Tenant.objects.all(),
|
|
@@ -159,7 +159,7 @@ class ZoneTemplateImportForm(NetBoxModelImportForm):
|
|
|
159
159
|
required=False,
|
|
160
160
|
to_field_name="name",
|
|
161
161
|
error_messages={
|
|
162
|
-
"invalid_choice": _("Registrar not found
|
|
162
|
+
"invalid_choice": _("Registrar %(value)s not found"),
|
|
163
163
|
},
|
|
164
164
|
label=_("Registrar"),
|
|
165
165
|
)
|
|
@@ -168,7 +168,7 @@ class ZoneTemplateImportForm(NetBoxModelImportForm):
|
|
|
168
168
|
required=False,
|
|
169
169
|
to_field_name="contact_id",
|
|
170
170
|
error_messages={
|
|
171
|
-
"invalid_choice": _("Registrant contact ID not found"),
|
|
171
|
+
"invalid_choice": _("Registrant contact ID %(value)s not found"),
|
|
172
172
|
},
|
|
173
173
|
label=_("Registrant"),
|
|
174
174
|
)
|
|
@@ -177,7 +177,7 @@ class ZoneTemplateImportForm(NetBoxModelImportForm):
|
|
|
177
177
|
required=False,
|
|
178
178
|
to_field_name="contact_id",
|
|
179
179
|
error_messages={
|
|
180
|
-
"invalid_choice": _("Administrative contact ID not found"),
|
|
180
|
+
"invalid_choice": _("Administrative contact ID %(value)s not found"),
|
|
181
181
|
},
|
|
182
182
|
label=_("Administrative Contact"),
|
|
183
183
|
)
|
|
@@ -186,7 +186,7 @@ class ZoneTemplateImportForm(NetBoxModelImportForm):
|
|
|
186
186
|
required=False,
|
|
187
187
|
to_field_name="contact_id",
|
|
188
188
|
error_messages={
|
|
189
|
-
"invalid_choice": _("Technical contact ID not found"),
|
|
189
|
+
"invalid_choice": _("Technical contact ID %(value)s not found"),
|
|
190
190
|
},
|
|
191
191
|
label=_("Technical Contact"),
|
|
192
192
|
)
|
|
@@ -195,7 +195,7 @@ class ZoneTemplateImportForm(NetBoxModelImportForm):
|
|
|
195
195
|
required=False,
|
|
196
196
|
to_field_name="contact_id",
|
|
197
197
|
error_messages={
|
|
198
|
-
"invalid_choice": _("Billing contact ID not found"),
|
|
198
|
+
"invalid_choice": _("Billing contact ID %(value)s not found"),
|
|
199
199
|
},
|
|
200
200
|
label=_("Billing Contact"),
|
|
201
201
|
)
|
|
Binary file
|
|
@@ -19,8 +19,6 @@ from netbox_dns.choices import RecordTypeChoices
|
|
|
19
19
|
from netbox_dns.validators import validate_fqdn
|
|
20
20
|
from netbox_dns.mixins import ObjectModificationMixin
|
|
21
21
|
|
|
22
|
-
from .record import Record
|
|
23
|
-
|
|
24
22
|
|
|
25
23
|
__all__ = (
|
|
26
24
|
"NameServer",
|
|
@@ -80,7 +78,7 @@ class NameServer(ObjectModificationMixin, ContactsMixin, NetBoxModel):
|
|
|
80
78
|
{
|
|
81
79
|
"name": str(exc),
|
|
82
80
|
}
|
|
83
|
-
)
|
|
81
|
+
)
|
|
84
82
|
|
|
85
83
|
try:
|
|
86
84
|
validate_fqdn(self.name)
|
|
@@ -89,7 +87,7 @@ class NameServer(ObjectModificationMixin, ContactsMixin, NetBoxModel):
|
|
|
89
87
|
{
|
|
90
88
|
"name": exc,
|
|
91
89
|
}
|
|
92
|
-
)
|
|
90
|
+
)
|
|
93
91
|
|
|
94
92
|
super().clean(*args, **kwargs)
|
|
95
93
|
|
|
@@ -112,10 +110,8 @@ class NameServer(ObjectModificationMixin, ContactsMixin, NetBoxModel):
|
|
|
112
110
|
|
|
113
111
|
def delete(self, *args, **kwargs):
|
|
114
112
|
with transaction.atomic():
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
Record.objects.filter(
|
|
118
|
-
Q(zone=zone),
|
|
113
|
+
for zone in self.zones.all():
|
|
114
|
+
zone.record_set.filter(
|
|
119
115
|
Q(managed=True),
|
|
120
116
|
Q(value=f"{self.name}."),
|
|
121
117
|
Q(type=RecordTypeChoices.NS),
|