Веб-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
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
"""Отдача сырого README.md для клиентского рендера Markdown (marked в static).
|
||||
|
||||
Автор: Сергей Антропов
|
||||
Сайт: https://devops.org.ru
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import asyncio
|
||||
import logging
|
||||
|
||||
from fastapi import APIRouter, HTTPException
|
||||
from fastapi.responses import PlainTextResponse
|
||||
|
||||
from core.readme_doc import read_readme_text
|
||||
|
||||
logger = logging.getLogger("kind_k8s.api.docs_readme")
|
||||
|
||||
router = APIRouter(tags=["documentation"])
|
||||
|
||||
|
||||
@router.get(
|
||||
"/docs/readme",
|
||||
response_class=PlainTextResponse,
|
||||
summary="README.md как текст (Markdown)",
|
||||
responses={404: {"description": "Файл не найден"}},
|
||||
)
|
||||
async def get_readme_markdown() -> PlainTextResponse:
|
||||
"""
|
||||
Тело ответа — содержимое README в кодировке UTF-8.
|
||||
|
||||
Разбор Markdown выполняется в браузере скриптами из ``/static/js/vendor/`` (marked + DOMPurify).
|
||||
"""
|
||||
try:
|
||||
|
||||
def _read() -> str:
|
||||
return read_readme_text()
|
||||
|
||||
text = await asyncio.to_thread(_read)
|
||||
except FileNotFoundError:
|
||||
logger.info("GET /docs/readme: файл README не найден")
|
||||
raise HTTPException(
|
||||
status_code=404,
|
||||
detail=(
|
||||
"README.md не найден. Укажите KIND_K8S_README_PATH, смонтируйте в compose "
|
||||
"./README.md:/opt/kind-k8s/README.md:ro или пересоберите образ (COPY README.md)."
|
||||
),
|
||||
) from None
|
||||
logger.debug("GET /docs/readme: отдано %s символов", len(text))
|
||||
return PlainTextResponse(
|
||||
content=text,
|
||||
media_type="text/markdown; charset=utf-8",
|
||||
)
|
||||
Reference in New Issue
Block a user