63 lines
1.5 KiB
Python
63 lines
1.5 KiB
Python
"""Typed read models for Agent Management."""
|
|
|
|
from datetime import datetime
|
|
from typing import Literal
|
|
from uuid import UUID
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
CredentialState = Literal["legacy", "active", "revoked", "retired"]
|
|
RoutingState = Literal["assigned", "unassigned", "disabled"]
|
|
|
|
|
|
class AgentRegistrySite(BaseModel):
|
|
id: UUID
|
|
name: str
|
|
|
|
|
|
class AgentRegistryZone(BaseModel):
|
|
id: UUID
|
|
site_id: UUID
|
|
site_name: str
|
|
name: str
|
|
description: str | None = None
|
|
is_enabled: bool
|
|
assigned_agent_id: str | None = None
|
|
networks: list[str] = Field(default_factory=list)
|
|
|
|
|
|
class AgentRegistryAgent(BaseModel):
|
|
agent_id: str
|
|
display_name: str | None = None
|
|
|
|
site_id: UUID | None = None
|
|
site_name: str
|
|
|
|
agent_zone_id: UUID | None = None
|
|
agent_zone_name: str | None = None
|
|
agent_zone_enabled: bool | None = None
|
|
|
|
hostname: str | None = None
|
|
version: str | None = None
|
|
ip_address: str | None = None
|
|
last_checkin_at: datetime
|
|
|
|
credential_state: CredentialState
|
|
credential_created_at: datetime | None = None
|
|
credential_revoked_at: datetime | None = None
|
|
|
|
routing_state: RoutingState
|
|
|
|
|
|
class AgentRegistryData(BaseModel):
|
|
agents: list[AgentRegistryAgent] = Field(default_factory=list)
|
|
sites: list[AgentRegistrySite] = Field(default_factory=list)
|
|
zones: list[AgentRegistryZone] = Field(default_factory=list)
|
|
|
|
|
|
class AgentRegistryResponse(BaseModel):
|
|
data: AgentRegistryData
|
|
meta: dict[str, object] = Field(default_factory=dict)
|
|
error: None = None
|