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