Files
DevOpsLab/app/api/v1/endpoints/import_role.py
Сергей Антропов 1fbf9185a2 feat: добавлена пометка типа операции (Build/Push) в истории сборок Dockerfile
- Добавлена колонка 'Тип' во все таблицы истории сборок
- Для push операций отображается registry вместо платформ
- Сохранение пользователя при создании push лога
- Исправлена ошибка с logger в push_docker_image endpoint
- Улучшено отображение истории сборок с визуальными индикаторами
2026-02-15 22:59:02 +03:00

84 lines
2.9 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):
"""Страница импорта роли"""
# Этот роут должен быть зарегистрирован ПЕРЕД /roles/{role_name}
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))