Archived
Добавлена схема действий управления инстансом
This commit is contained in:
+9
-14
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user