"""Справочник версий 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 --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)