- Добавлена колонка 'Тип' во все таблицы истории сборок - Для push операций отображается registry вместо платформ - Сохранение пользователя при создании push лога - Исправлена ошибка с logger в push_docker_image endpoint - Улучшено отображение истории сборок с визуальными индикаторами
83 lines
2.8 KiB
Python
83 lines
2.8 KiB
Python
"""
|
|
API endpoints для импорта ролей
|
|
Автор: Сергей Антропов
|
|
Сайт: https://devops.org.ru
|
|
"""
|
|
|
|
from fastapi import APIRouter, Request, HTTPException, Form
|
|
from fastapi.responses import HTMLResponse, JSONResponse
|
|
from fastapi.templating import Jinja2Templates
|
|
from pathlib import Path
|
|
from typing import Optional
|
|
from app.core.config import settings
|
|
from app.services.import_service import ImportService
|
|
|
|
router = APIRouter()
|
|
templates_path = Path(__file__).parent.parent.parent.parent / "templates"
|
|
templates = Jinja2Templates(directory=str(templates_path))
|
|
import_service = ImportService()
|
|
|
|
|
|
@router.get("/roles/import", response_class=HTMLResponse)
|
|
async def import_role_page(request: Request):
|
|
"""Страница импорта роли"""
|
|
return templates.TemplateResponse(
|
|
"pages/roles/import.html",
|
|
{"request": request}
|
|
)
|
|
|
|
|
|
@router.post("/api/v1/roles/import/git")
|
|
async def import_from_git_api(
|
|
repo_url: str = Form(...),
|
|
role_name: Optional[str] = Form(None),
|
|
branch: str = Form("main"),
|
|
subdirectory: Optional[str] = Form(None)
|
|
):
|
|
"""API endpoint для импорта роли из Git репозитория"""
|
|
try:
|
|
result = await import_service.import_from_git(
|
|
repo_url=repo_url,
|
|
role_name=role_name,
|
|
branch=branch,
|
|
subdirectory=subdirectory
|
|
)
|
|
return JSONResponse(content=result, status_code=201)
|
|
except ValueError as e:
|
|
raise HTTPException(status_code=400, detail=str(e))
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500, detail=f"Ошибка при импорте роли: {str(e)}")
|
|
|
|
|
|
@router.post("/api/v1/roles/import/galaxy")
|
|
async def import_from_galaxy_api(
|
|
role_name: str = Form(...),
|
|
version: Optional[str] = Form(None),
|
|
namespace: Optional[str] = Form(None)
|
|
):
|
|
"""API endpoint для импорта роли из Ansible Galaxy"""
|
|
try:
|
|
result = await import_service.import_from_galaxy(
|
|
role_name=role_name,
|
|
version=version,
|
|
namespace=namespace
|
|
)
|
|
return JSONResponse(content=result, status_code=201)
|
|
except ValueError as e:
|
|
raise HTTPException(status_code=400, detail=str(e))
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500, detail=f"Ошибка при импорте роли: {str(e)}")
|
|
|
|
|
|
@router.post("/api/v1/roles/import/validate")
|
|
async def validate_repo_api(
|
|
repo_url: str = Form(...),
|
|
branch: str = Form("main")
|
|
):
|
|
"""Проверка доступности репозитория"""
|
|
try:
|
|
result = await import_service.validate_repo(repo_url, branch)
|
|
return JSONResponse(content=result)
|
|
except Exception as e:
|
|
raise HTTPException(status_code=500, detail=str(e))
|