Files
KindClustersDashboard/app/models/schemas.py
T
inecs 2662619e40 Веб-UI: логи kind create, старт/стоп кластеров, документация README
- Потоковые логи в job_store и UI; kind create через Popen с построчным выводом
- POST /clusters/{name}/start|stop; create по сохранённому kind-config.yaml
- Страница /documentation: GET /api/v1/docs/readme, marked+DOMPurify из static/vendor
- Иконки действий, плавающие подсказки, модалка подтверждения вместо confirm
- Makefile: make docker|podman rebuild; compose: монтирование README.md
- Dockerfile: COPY README.md; readme_doc: несколько путей к README

Автор: Сергей Антропов — https://devops.org.ru
2026-04-04 06:21:00 +03:00

80 lines
2.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Модели запросов/ответов REST API веб-интерфейса.
Автор: Сергей Антропов
Сайт: https://devops.org.ru
"""
from __future__ import annotations
from typing import Any, Literal
from pydantic import BaseModel, Field
class ClusterCreateRequest(BaseModel):
"""Тело POST /api/v1/clusters — создание кластера."""
name: str = Field(..., min_length=1, max_length=63, description="DNS-имя кластера (a-z0-9-)")
kubernetes_version: str = Field(
...,
min_length=1,
description="Версия Kubernetes / тег kindest/node, например 1.29.4 или v1.29.4",
)
workers: int = Field(2, ge=0, le=20, description="Число worker-нод (020)")
class ClusterCreateAccepted(BaseModel):
"""Ответ 202 — задание поставлено в очередь."""
job_id: str
status: Literal["queued"] = "queued"
message: str = "Создание кластера выполняется в фоне; опросите GET /api/v1/jobs/{job_id}"
class JobView(BaseModel):
"""Статус фонового задания."""
job_id: str
kind: str
status: Literal["queued", "running", "success", "failed", "cancelled"]
cluster_name: str | None
created_at_utc: str
message: str | None = None
result: dict[str, Any] | None = None
progress_stage: str | None = Field(default=None, description="Текущий этап создания (пока задание активно)")
progress_percent: int | None = Field(default=None, description="Прогресс 0–100 для индикатора в UI")
progress_log: list[str] = Field(
default_factory=list,
description="Хвост лога (kind create, этапы); обновляется при опросе GET /jobs/{id}",
)
class ClusterSummary(BaseModel):
"""Элемент списка кластеров."""
name: str
registered_in_kind: bool
has_local_kubeconfig: bool
meta: dict[str, Any] = Field(default_factory=dict)
class StatsResponse(BaseModel):
"""Краткая статистика для дашборда."""
kind_clusters_count: int
local_cluster_dirs_count: int
total_workers_from_meta: int | None
jobs_total: int
jobs_recent_failed: int
class ClusterWorkloadsResponse(BaseModel):
"""Вывод kubectl по кластеру (узлы и поды)."""
cluster_name: str
nodes_rc: int | None = None
nodes_output: str | None = None
pods_rc: int | None = None
pods_output: str | None = None
error: str | None = None