feat: добавлена пометка типа операции (Build/Push) в истории сборок Dockerfile
- Добавлена колонка 'Тип' во все таблицы истории сборок - Для push операций отображается registry вместо платформ - Сохранение пользователя при создании push лога - Исправлена ошибка с logger в push_docker_image endpoint - Улучшено отображение истории сборок с визуальными индикаторами
This commit is contained in:
82
app/api/v1/endpoints/import.py
Normal file
82
app/api/v1/endpoints/import.py
Normal file
@@ -0,0 +1,82 @@
|
||||
"""
|
||||
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))
|
||||
Reference in New Issue
Block a user