Fix paths after restructuring renamed: netbox_dns_bridge/management/commands/export-dns-zone.py -> netbox_dns_bridge/management/commands/dns-export-zone.py renamed: netbox_dns_bridge/management/commands/export-all-dns-zones.py -> netbox_dns_bridge/management/commands/dns-export-zones.py Unify command naming scheme new file: netbox_dns_bridge/migrations/0001_initial.py Adds the missing migration. Since the plugin was renamed this is also an opportunity to merge all changes into a single migration. renamed: netbox_dns_bridge/service/transfer/catalog_zone_manager.py -> netbox_dns_bridge/catalog_zone_manager.py renamed: netbox_dns_bridge/service/transfer/dns_server.py -> netbox_dns_bridge/dns_server.py new file: netbox_dns_bridge/management/commands/dns-settings.py modified: netbox_dns_bridge/management/commands/dns-transfer-endpoint.py renamed: netbox_dns_bridge/service/transfer/request_handler.py -> netbox_dns_bridge/request_handler.py deleted: netbox_dns_bridge/service/transfer/__init__.py Another restructure to simplify code re-use. New command dns-settings added to allow setting of catalog zone serial. This will be needed to migrate from previous versions.
57 lines
1.7 KiB
Python
57 lines
1.7 KiB
Python
import os
|
|
import dns.zone
|
|
import dns.rdatatype
|
|
import dns.rdataclass
|
|
import dns.exception
|
|
import netbox_dns.models
|
|
from netbox_dns_bridge.utils import export_bind_zone_file
|
|
from django.core.management.base import BaseCommand, CommandError
|
|
|
|
class Command(BaseCommand):
|
|
|
|
def add_arguments(self, parser):
|
|
parser.add_argument(
|
|
"--view", type=str, help="The name of the view the Zone to be exported is in"
|
|
)
|
|
parser.add_argument(
|
|
"--zone", type=str, help="The FQDN of the Zone to be exported"
|
|
)
|
|
parser.add_argument(
|
|
"--file", type=str, help="Path of the zone file to be written"
|
|
)
|
|
|
|
|
|
def handle(self, *args, **options):
|
|
#if len(options) < 2:
|
|
# print("export-zone <zone name> <file path>")
|
|
# sys.exit(1)
|
|
|
|
# Load parameters
|
|
view_name = options['view']
|
|
zone_name = options['zone']
|
|
file_path = options['file']
|
|
|
|
if not view_name:
|
|
raise CommandError("No --view parameter given")
|
|
elif not zone_name:
|
|
raise CommandError("No --zone parameter given")
|
|
elif not file_path:
|
|
raise CommandError("No --file parameter given")
|
|
|
|
try:
|
|
# Load the zone from NetBox DNS
|
|
nb_zone = netbox_dns.models.Zone.objects.get(view__name=view_name, name=zone_name)
|
|
|
|
if nb_zone:
|
|
export_bind_zone_file(nb_zone, file_path=file_path)
|
|
else:
|
|
print("Zone not found in Netbox. Aborting")
|
|
sys.exit(1)
|
|
|
|
except Exception as e:
|
|
raise CommandError(f"Failed to export zone: {e}")
|
|
|
|
self.stdout.write(self.style.SUCCESS(f"Zone '{zone_name}' exported to '{file_path}'"))
|
|
|
|
|