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é"}