Source code for netbird.resources.policies
"""
Policies resource handler for NetBird API.
"""
from typing import Any, Dict, List
from ..models import PolicyCreate, PolicyUpdate
from .base import BaseResource
[docs]
class PoliciesResource(BaseResource):
"""Handler for NetBird policies API endpoints.
Provides methods to manage NetBird access control policies including
listing, creating, retrieving, updating, and deleting policies.
"""
[docs]
def list(self) -> List[Dict[str, Any]]:
"""List all policies.
Returns:
List of policy dictionaries
Example:
>>> policies = client.policies.list()
>>> for policy in policies:
... print(f"Policy: {policy['name']} (Enabled: {policy['enabled']})")
"""
data = self.client.get("policies")
return self._parse_list_response(data)
[docs]
def create(self, policy_data: PolicyCreate) -> Dict[str, Any]:
"""Create a new policy.
Args:
policy_data: Policy creation data
Returns:
Created policy dictionary
Example:
>>> from netbird.models import PolicyRule, PolicyCreate
>>> rule = PolicyRule(
... name="Allow SSH",
... action="accept",
... protocol="tcp",
... ports=["22"],
... sources=["group-dev"],
... destinations=["group-servers"]
... )
>>> policy_data = PolicyCreate(
... name="Development Access",
... description="Allow developers to access servers",
... rules=[rule]
... )
>>> policy = client.policies.create(policy_data)
"""
data = self.client.post(
"policies", data=policy_data.model_dump(exclude_unset=True)
)
return self._parse_response(data)
[docs]
def get(self, policy_id: str) -> Dict[str, Any]:
"""Retrieve a specific policy.
Args:
policy_id: Unique policy identifier
Returns:
Policy dictionary
Example:
>>> policy = client.policies.get("policy-123")
>>> print(f"Policy: {policy['name']}")
"""
data = self.client.get(f"policies/{policy_id}")
return self._parse_response(data)
[docs]
def update(self, policy_id: str, policy_data: PolicyUpdate) -> Dict[str, Any]:
"""Update a policy.
Args:
policy_id: Unique policy identifier
policy_data: Policy update data
Returns:
Updated policy dictionary
Example:
>>> policy_data = PolicyUpdate(
... enabled=False,
... description="Disabled for maintenance"
... )
>>> policy = client.policies.update("policy-123", policy_data)
"""
data = self.client.put(
f"policies/{policy_id}",
data=policy_data.model_dump(exclude_unset=True),
)
return self._parse_response(data)
[docs]
def delete(self, policy_id: str) -> None:
"""Delete a policy.
Args:
policy_id: Unique policy identifier
Example:
>>> client.policies.delete("policy-123")
"""
self.client.delete(f"policies/{policy_id}")