17f6233fd7
- job_journal: collect_recent_journal_entries_page_sync(limit, offset) - GET /api/v1/journal/recent: limit по умолчанию 30, offset, total, page, total_pages - journal.html/js: навигация Первая/Назад/номера/Вперёд/Последняя, стили - app/docs/api_routes.md: описание query и пример ответа - Прочие изменения UI/API (аддоны, helm, job_journal в кластерах) в том же коммите
45 lines
1.7 KiB
Python
45 lines
1.7 KiB
Python
"""Справочник версий Helm-чартов для страницы аддонов (``helm search repo … --versions``).
|
|
|
|
Автор: Сергей Антропов
|
|
Сайт: https://devops.org.ru
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import asyncio
|
|
import logging
|
|
|
|
from fastapi import APIRouter, HTTPException
|
|
|
|
from core.helm_addons import HelmAddonError, helm_addon_chart_versions_all, require_helm_binary
|
|
from models.schemas import HelmAddonChartVersionsResponse
|
|
|
|
logger = logging.getLogger("kind_k8s.api.helm_charts")
|
|
|
|
router = APIRouter(tags=["helm-charts"])
|
|
|
|
|
|
@router.get(
|
|
"/helm/chart-versions",
|
|
response_model=HelmAddonChartVersionsResponse,
|
|
summary="Версии чартов аддонов (для выпадающих списков)",
|
|
)
|
|
async def get_helm_addon_chart_versions() -> HelmAddonChartVersionsResponse:
|
|
"""
|
|
Выполняет ``helm repo update`` и для каждого аддона — ``helm search repo <chart> --versions``.
|
|
|
|
Результат кэшируется на ``KIND_K8S_HELM_VERSIONS_CACHE_SEC`` (по чарту).
|
|
Пустой список — если helm недоступен или репозиторий не ответил.
|
|
"""
|
|
try:
|
|
require_helm_binary()
|
|
except HelmAddonError as e:
|
|
logger.warning("helm недоступен для списка версий: %s", e)
|
|
raise HTTPException(status_code=503, detail=str(e)) from e
|
|
try:
|
|
data = await asyncio.to_thread(helm_addon_chart_versions_all)
|
|
except HelmAddonError as e:
|
|
logger.exception("Ошибка получения версий чартов")
|
|
raise HTTPException(status_code=500, detail=str(e)) from e
|
|
return HelmAddonChartVersionsResponse(**data)
|