Initial commit
This commit is contained in:
119
backend/app/api/endpoints/docker.py
Normal file
119
backend/app/api/endpoints/docker.py
Normal file
@@ -0,0 +1,119 @@
|
||||
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é"}
|
||||
Reference in New Issue
Block a user