Files
nest/uvm/api_models.py
T
2026-09-04 20:56:18 +00:00

77 lines
1.5 KiB
Python

"""Pydantic request and response models for the UVM HTTP API."""
from __future__ import annotations
from ipaddress import IPv4Address
from pydantic import BaseModel, Field, SecretStr
from .domain import VmRecord
class HealthResponse(BaseModel):
status: str = "ok"
class InstallRequest(BaseModel):
force: bool = False
class Config:
extra = "forbid"
class InstallResponse(BaseModel):
firecracker: str
kernel: str
rootfs: str
class VmCreateRequest(BaseModel):
cpu: float = Field(default=1, gt=0)
ram: str | int | float = "512"
guest_ip: IPv4Address | None = None
username: str = "root"
password: SecretStr = SecretStr("root")
class Config:
extra = "forbid"
class VmResponse(BaseModel):
id: str
cpu: float
ram_mib: int
guest_ip: str
gateway: str
mac: str
username: str
status: str
observed_status: str
pid: int | None
created_at: int
updated_at: int
last_error: str | None
class DestroyResponse(BaseModel):
id: str
status: str = "terminated"
def vm_response(vm: VmRecord, *, observed_status: str | None = None) -> VmResponse:
return VmResponse(
id=vm.id,
cpu=vm.cpu,
ram_mib=vm.ram_mib,
guest_ip=vm.guest_ip,
gateway=vm.gateway,
mac=vm.mac,
username=vm.username,
status=vm.status,
observed_status=observed_status or vm.status,
pid=vm.pid,
created_at=vm.created_at,
updated_at=vm.updated_at,
last_error=vm.last_error,
)