Source code for netbird.resources.cloud.msp

"""
MSP resource handler for NetBird API.
"""

from typing import Any, Dict, List

from ...models.cloud.msp import MSPTenantCreate, MSPTenantUpdate
from ..base import BaseResource


[docs] class MSPResource(BaseResource): """Handler for NetBird MSP API endpoints."""
[docs] def list_tenants(self) -> List[Dict[str, Any]]: """List all MSP tenants.""" data = self.client.get("integrations/msp/tenants") return self._parse_list_response(data)
[docs] def create_tenant(self, tenant_data: MSPTenantCreate) -> Dict[str, Any]: """Create an MSP tenant.""" data = self.client.post( "integrations/msp/tenants", data=tenant_data.model_dump(exclude_unset=True), ) return self._parse_response(data)
[docs] def get_tenant(self, tenant_id: str) -> Dict[str, Any]: """Retrieve a specific MSP tenant.""" data = self.client.get(f"integrations/msp/tenants/{tenant_id}") return self._parse_response(data)
[docs] def update_tenant( self, tenant_id: str, tenant_data: MSPTenantUpdate ) -> Dict[str, Any]: """Update an MSP tenant.""" data = self.client.put( f"integrations/msp/tenants/{tenant_id}", data=tenant_data.model_dump(exclude_unset=True), ) return self._parse_response(data)
[docs] def verify_domain(self, tenant_id: str) -> Dict[str, Any]: """Verify domain DNS challenge for a tenant.""" data = self.client.post(f"integrations/msp/tenants/{tenant_id}/dns") return self._parse_response(data)
[docs] def create_subscription(self, tenant_id: str, price_id: str) -> Dict[str, Any]: """Create a subscription for a tenant.""" data = self.client.post( f"integrations/msp/tenants/{tenant_id}/subscription", data={"priceID": price_id}, ) return self._parse_response(data)
[docs] def invite_tenant(self, tenant_id: str) -> Dict[str, Any]: """Invite an existing account as tenant.""" data = self.client.post(f"integrations/msp/tenants/{tenant_id}/invite") return self._parse_response(data)
[docs] def respond_to_invite(self, tenant_id: str, value: str) -> Dict[str, Any]: """Respond to a tenant invitation (accept/decline).""" data = self.client.put( f"integrations/msp/tenants/{tenant_id}/invite", data={"value": value}, ) return self._parse_response(data)