120 lines
3.8 KiB
Python
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é"}
|