Source code for netbird.resources.cloud.services

"""
Services (reverse proxy) resource handler for NetBird API.
"""

from typing import Any, Dict, List

from ...models.cloud.service import ServiceCreate, ServiceDomainCreate, ServiceUpdate
from ..base import BaseResource


[docs] class ServicesResource(BaseResource): """Handler for NetBird reverse proxy services API endpoints."""
[docs] def list(self) -> List[Dict[str, Any]]: """List all services.""" data = self.client.get("reverse-proxies/services") return self._parse_list_response(data)
[docs] def create(self, service_data: ServiceCreate) -> Dict[str, Any]: """Create a new service.""" data = self.client.post( "reverse-proxies/services", data=service_data.model_dump(exclude_unset=True), ) return self._parse_response(data)
[docs] def get(self, service_id: str) -> Dict[str, Any]: """Retrieve a specific service.""" data = self.client.get(f"reverse-proxies/services/{service_id}") return self._parse_response(data)
[docs] def update(self, service_id: str, service_data: ServiceUpdate) -> Dict[str, Any]: """Update a service.""" data = self.client.put( f"reverse-proxies/services/{service_id}", data=service_data.model_dump(exclude_unset=True), ) return self._parse_response(data)
[docs] def delete(self, service_id: str) -> None: """Delete a service.""" self.client.delete(f"reverse-proxies/services/{service_id}")
[docs] def list_clusters(self) -> List[Dict[str, Any]]: """List available proxy clusters.""" data = self.client.get("reverse-proxies/clusters") return self._parse_list_response(data)
[docs] def list_domains(self) -> List[Dict[str, Any]]: """List service domains.""" data = self.client.get("reverse-proxies/domains") return self._parse_list_response(data)
[docs] def create_domain(self, domain_data: ServiceDomainCreate) -> Dict[str, Any]: """Create a custom domain.""" data = self.client.post( "reverse-proxies/domains", data=domain_data.model_dump(exclude_unset=True), ) return self._parse_response(data)
[docs] def delete_domain(self, domain_id: str) -> None: """Delete a custom domain.""" self.client.delete(f"reverse-proxies/domains/{domain_id}")
[docs] def validate_domain(self, domain_id: str) -> Dict[str, Any]: """Validate a custom domain.""" data = self.client.get(f"reverse-proxies/domains/{domain_id}/validate") return self._parse_response(data)