Source code for netbird.resources.dns_zones

"""
DNS zones resource handler for NetBird API.
"""

from typing import Any, Dict, List

from ..models.dns_zone import (
    DNSRecordCreate,
    DNSRecordUpdate,
    DNSZoneCreate,
    DNSZoneUpdate,
)
from .base import BaseResource


[docs] class DNSZonesResource(BaseResource): """Handler for NetBird DNS zones API endpoints. This resource manages DNS zones and records. It is separate from the DNSResource which manages nameserver groups and DNS settings. """ # Zone CRUD
[docs] def list(self) -> List[Dict[str, Any]]: """List all DNS zones. Returns: List of DNS zone dictionaries """ data = self.client.get("dns/zones") return self._parse_list_response(data)
[docs] def create(self, zone_data: DNSZoneCreate) -> Dict[str, Any]: """Create a new DNS zone. Args: zone_data: DNS zone creation data Returns: Created DNS zone dictionary """ data = self.client.post( "dns/zones", data=zone_data.model_dump(exclude_unset=True) ) return self._parse_response(data)
[docs] def get(self, zone_id: str) -> Dict[str, Any]: """Retrieve a specific DNS zone. Args: zone_id: Unique zone identifier Returns: DNS zone dictionary """ data = self.client.get(f"dns/zones/{zone_id}") return self._parse_response(data)
[docs] def update(self, zone_id: str, zone_data: DNSZoneUpdate) -> Dict[str, Any]: """Update a DNS zone. Args: zone_id: Unique zone identifier zone_data: DNS zone update data Returns: Updated DNS zone dictionary """ data = self.client.put( f"dns/zones/{zone_id}", data=zone_data.model_dump(exclude_unset=True) ) return self._parse_response(data)
[docs] def delete(self, zone_id: str) -> None: """Delete a DNS zone. Args: zone_id: Unique zone identifier """ self.client.delete(f"dns/zones/{zone_id}")
# Record CRUD
[docs] def list_records(self, zone_id: str) -> List[Dict[str, Any]]: """List all records in a DNS zone. Args: zone_id: Unique zone identifier Returns: List of DNS record dictionaries """ data = self.client.get(f"dns/zones/{zone_id}/records") return self._parse_list_response(data)
[docs] def create_record( self, zone_id: str, record_data: DNSRecordCreate ) -> Dict[str, Any]: """Create a DNS record in a zone. Args: zone_id: Unique zone identifier record_data: DNS record creation data Returns: Created DNS record dictionary """ data = self.client.post( f"dns/zones/{zone_id}/records", data=record_data.model_dump(exclude_unset=True), ) return self._parse_response(data)
[docs] def get_record(self, zone_id: str, record_id: str) -> Dict[str, Any]: """Retrieve a specific DNS record. Args: zone_id: Unique zone identifier record_id: Unique record identifier Returns: DNS record dictionary """ data = self.client.get(f"dns/zones/{zone_id}/records/{record_id}") return self._parse_response(data)
[docs] def update_record( self, zone_id: str, record_id: str, record_data: DNSRecordUpdate ) -> Dict[str, Any]: """Update a DNS record. Args: zone_id: Unique zone identifier record_id: Unique record identifier record_data: DNS record update data Returns: Updated DNS record dictionary """ data = self.client.put( f"dns/zones/{zone_id}/records/{record_id}", data=record_data.model_dump(exclude_unset=True), ) return self._parse_response(data)
[docs] def delete_record(self, zone_id: str, record_id: str) -> None: """Delete a DNS record. Args: zone_id: Unique zone identifier record_id: Unique record identifier """ self.client.delete(f"dns/zones/{zone_id}/records/{record_id}")