"""Models for the Proxmox compute façade.""" from __future__ import annotations from pydantic import ConfigDict, Field from .common import ConduitModel class _AllowExtra(ConduitModel): """Mixin that allows unknown fields to be forwarded to the API.""" model_config = ConfigDict( populate_by_name=True, str_strip_whitespace=True, extra="allow", ) class ComputeTicketRequest(ConduitModel): """Body for POST /compute/auth/ticket.""" username: str password: str class ComputeTicketResponse(ConduitModel): """Response from POST /compute/auth/ticket.""" ticket: str csrfpreventiontoken: str = Field(..., alias="CSRFPreventionToken") username: str class TaskResponse(ConduitModel): """Response from async compute actions.""" task: str class CreateVmRequest(_AllowExtra): """Body for POST /compute/vms.""" node: str vmid: int | None = None class CreateContainerRequest(_AllowExtra): """Body for POST /compute/containers.""" node: str ostemplate: str vmid: int | None = None class CloneVmRequest(ConduitModel): """Body for POST /compute/vms/{vmid}/clone.""" newid: int name: str | None = None full: bool | None = None target: str | None = None class MigrateVmRequest(ConduitModel): """Body for POST /compute/vms/{vmid}/migrate.""" target: str online: bool | None = None class CreateSnapshotRequest(ConduitModel): """Body for POST /compute/vms/{vmid}/snapshots.""" snapname: str vmstate: bool | None = None description: str | None = None class UploadStorageRequest(ConduitModel): """Body for POST /compute/storage/{storage}/upload.""" content: str filename: str class NodeTasksQuery(ConduitModel): """Query parameters for GET /compute/nodes/{node}/tasks.""" limit: int | None = None class StorageQuery(ConduitModel): """Query parameters for storage listing endpoints.""" node: str | None = None