Добавлена схема действий управления инстансом

This commit is contained in:
2026-08-09 16:27:29 +03:00
parent fa04a4092d
commit 160cb7a52e
+9 -14
View File
@@ -1,4 +1,5 @@
from datetime import datetime from datetime import datetime
from typing import Literal
from pydantic import BaseModel, ConfigDict, EmailStr, Field, model_validator from pydantic import BaseModel, ConfigDict, EmailStr, Field, model_validator
@@ -7,16 +8,13 @@ from .models import GuestType, InstanceStatus, UserRole
class UserCreate(BaseModel): class UserCreate(BaseModel):
"""Данные для регистрации пользователя.""" """Данные для регистрации пользователя."""
email: EmailStr email: EmailStr
password: str = Field(min_length=12, max_length=128) password: str = Field(min_length=12, max_length=128)
class UserOut(BaseModel): class UserOut(BaseModel):
"""Публичное представление пользователя без пароля.""" """Публичное представление пользователя без пароля."""
model_config = ConfigDict(from_attributes=True) model_config = ConfigDict(from_attributes=True)
id: int id: int
email: EmailStr email: EmailStr
role: UserRole role: UserRole
@@ -26,14 +24,12 @@ class UserOut(BaseModel):
class TokenOut(BaseModel): class TokenOut(BaseModel):
"""Ответ с access token.""" """Ответ с access token."""
access_token: str access_token: str
token_type: str = "bearer" token_type: str = "bearer"
class TemplateCreate(BaseModel): class TemplateCreate(BaseModel):
"""Данные для создания шаблона администратором.""" """Данные для создания шаблона администратором."""
name: str = Field(min_length=1, max_length=64, pattern=r"^[a-zA-Z0-9][a-zA-Z0-9-]*$") name: str = Field(min_length=1, max_length=64, pattern=r"^[a-zA-Z0-9][a-zA-Z0-9-]*$")
description: str = Field(default="", max_length=2000) description: str = Field(default="", max_length=2000)
guest_type: GuestType guest_type: GuestType
@@ -55,9 +51,7 @@ class TemplateCreate(BaseModel):
class TemplateOut(BaseModel): class TemplateOut(BaseModel):
"""Публичное представление активного шаблона.""" """Публичное представление активного шаблона."""
model_config = ConfigDict(from_attributes=True) model_config = ConfigDict(from_attributes=True)
id: int id: int
name: str name: str
description: str description: str
@@ -69,19 +63,21 @@ class TemplateOut(BaseModel):
class InstanceCreate(BaseModel): class InstanceCreate(BaseModel):
"""Запрос на синхронное создание VM или LXC из шаблона.""" """Запрос на создание VM или LXC."""
name: str = Field(min_length=1, max_length=63, pattern=r"^[a-zA-Z0-9][a-zA-Z0-9-]*$") name: str = Field(min_length=1, max_length=63, pattern=r"^[a-zA-Z0-9][a-zA-Z0-9-]*$")
template_id: int = Field(gt=0) template_id: int = Field(gt=0)
username: str = Field(default="paneluser", min_length=1, max_length=32, pattern=r"^[a-z_][a-z0-9_-]*$") username: str = Field(default="paneluser", min_length=1, max_length=32, pattern=r"^[a-z_][a-z0-9_-]*$")
password: str = Field(min_length=12, max_length=128) password: str = Field(min_length=12, max_length=128)
class InstanceAction(BaseModel):
"""Разрешённое действие управления гостем."""
action: Literal["start", "stop", "shutdown", "reboot"]
class InstanceOut(BaseModel): class InstanceOut(BaseModel):
"""Инстанс без credentials и внутренних секретов.""" """Инстанс без credentials."""
model_config = ConfigDict(from_attributes=True) model_config = ConfigDict(from_attributes=True)
id: int id: int
name: str name: str
vmid: int | None vmid: int | None
@@ -94,6 +90,5 @@ class InstanceOut(BaseModel):
class InstanceCreateOut(InstanceOut): class InstanceCreateOut(InstanceOut):
"""Ответ создания с паролем, который показывается только один раз.""" """Ответ создания с одноразовым паролем."""
initial_password: str initial_password: str