Source code for netbird.resources.dns

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

from typing import Any, Dict, List

from .base import BaseResource


[docs] class DNSResource(BaseResource): """Handler for NetBird DNS API endpoints. Provides methods to manage NetBird DNS settings including nameserver groups and DNS configuration. """ # Nameserver Groups
[docs] def list_nameserver_groups(self) -> List[Dict[str, Any]]: """List all nameserver groups. Returns: List of DNS nameserver group dictionaries Example: >>> nameservers = client.dns.list_nameserver_groups() >>> for ns in nameservers: ... print(f"Nameserver Group: {ns['name']}") """ data = self.client.get("dns/nameservers") return self._parse_list_response(data)
[docs] def create_nameserver_group( self, nameserver_data: Dict[str, Any] ) -> Dict[str, Any]: """Create a new nameserver group. Args: nameserver_data: Nameserver group creation data Returns: Created DNS nameserver group dictionary Example: >>> nameserver_data = { ... "name": "Corporate DNS", ... "description": "Internal corporate nameservers", ... "nameservers": ["10.0.0.10", "10.0.0.11"], ... "enabled": True ... } >>> ns_group = client.dns.create_nameserver_group(nameserver_data) """ data = self.client.post("dns/nameservers", data=nameserver_data) return self._parse_response(data)
[docs] def get_nameserver_group(self, group_id: str) -> Dict[str, Any]: """Retrieve a specific nameserver group. Args: group_id: Unique nameserver group identifier Returns: DNS nameserver group dictionary Example: >>> ns_group = client.dns.get_nameserver_group("ns-group-123") >>> print(f"Nameservers: {ns_group['nameservers']}") """ data = self.client.get(f"dns/nameservers/{group_id}") return self._parse_response(data)
[docs] def update_nameserver_group( self, group_id: str, nameserver_data: Dict[str, Any] ) -> Dict[str, Any]: """Update a nameserver group. Args: group_id: Unique nameserver group identifier nameserver_data: Nameserver group update data Returns: Updated DNS nameserver group dictionary Example: >>> nameserver_data = { ... "enabled": False, ... "description": "Disabled for maintenance" ... } >>> ns_group = client.dns.update_nameserver_group( ... "ns-group-123", nameserver_data ... ) """ data = self.client.put(f"dns/nameservers/{group_id}", data=nameserver_data) return self._parse_response(data)
[docs] def delete_nameserver_group(self, group_id: str) -> None: """Delete a nameserver group. Args: group_id: Unique nameserver group identifier Example: >>> client.dns.delete_nameserver_group("ns-group-123") """ self.client.delete(f"dns/nameservers/{group_id}")
# DNS Settings
[docs] def get_settings(self) -> Dict[str, Any]: """Retrieve DNS settings. Returns: DNS settings dictionary Example: >>> settings = client.dns.get_settings() >>> print(f"Disabled groups: {settings['disabled_management_groups']}") """ data = self.client.get("dns/settings") return self._parse_response(data)
[docs] def update_settings(self, settings_data: Dict[str, Any]) -> Dict[str, Any]: """Update DNS settings. Args: settings_data: DNS settings update data Returns: Updated DNS settings dictionary Example: >>> settings_data = { ... "disabled_management_groups": ["group-123"] ... } >>> settings = client.dns.update_settings(settings_data) """ data = self.client.put("dns/settings", data=settings_data) return self._parse_response(data)