Files
innotexBoard/backend/app/api/endpoints/docker.py
2026-01-16 18:40:39 +01:00

120 lines
3.8 KiB
Python

from fastapi import APIRouter, Depends, HTTPException, status
from typing import List
from app.core.security import get_current_user, User
from app.services.docker_service import DockerService, ContainerInfo
router = APIRouter()
docker_service = DockerService()
@router.get("/status")
async def get_docker_status(current_user: User = Depends(get_current_user)):
"""Vérifie le statut de la connexion Docker"""
return {
"connected": docker_service.is_connected(),
"message": "Docker est accessible" if docker_service.is_connected() else "Docker n'est pas accessible"
}
@router.get("/containers", response_model=List[ContainerInfo])
async def list_containers(
all: bool = True,
current_user: User = Depends(get_current_user)
):
"""Liste tous les conteneurs Docker"""
if not docker_service.is_connected():
raise HTTPException(
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
detail="Docker n'est pas accessible"
)
return docker_service.get_containers(all=all)
@router.post("/containers/{container_id}/start")
async def start_container(
container_id: str,
current_user: User = Depends(get_current_user)
):
"""Démarre un conteneur"""
if not docker_service.is_connected():
raise HTTPException(
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
detail="Docker n'est pas accessible"
)
success = docker_service.start_container(container_id)
if not success:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="Impossible de démarrer le conteneur"
)
return {"status": "success", "message": f"Conteneur {container_id} démarré"}
@router.post("/containers/{container_id}/stop")
async def stop_container(
container_id: str,
current_user: User = Depends(get_current_user)
):
"""Arrête un conteneur"""
if not docker_service.is_connected():
raise HTTPException(
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
detail="Docker n'est pas accessible"
)
success = docker_service.stop_container(container_id)
if not success:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="Impossible d'arrêter le conteneur"
)
return {"status": "success", "message": f"Conteneur {container_id} arrêté"}
@router.post("/containers/{container_id}/restart")
async def restart_container(
container_id: str,
current_user: User = Depends(get_current_user)
):
"""Redémarre un conteneur"""
if not docker_service.is_connected():
raise HTTPException(
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
detail="Docker n'est pas accessible"
)
success = docker_service.restart_container(container_id)
if not success:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="Impossible de redémarrer le conteneur"
)
return {"status": "success", "message": f"Conteneur {container_id} redémarré"}
@router.delete("/containers/{container_id}")
async def delete_container(
container_id: str,
force: bool = False,
current_user: User = Depends(get_current_user)
):
"""Supprime un conteneur"""
if not docker_service.is_connected():
raise HTTPException(
status_code=status.HTTP_503_SERVICE_UNAVAILABLE,
detail="Docker n'est pas accessible"
)
success = docker_service.remove_container(container_id, force=force)
if not success:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail="Impossible de supprimer le conteneur"
)
return {"status": "success", "message": f"Conteneur {container_id} supprimé"}