Source code for utils.services.vm_service

"""
Service de gestion des VMs
"""

from typing import Dict, Any, Optional
from utils.api import Api
from utils.api.exceptions import (
    VMCreationError,
    UsersFetchError,
    UserInfoError,
    TokenError,
)
from utils.logging_config import get_logger
from utils.password_utils import get_or_create_token

logger = get_logger(__name__)


[docs] class VMService: """Service pour la gestion des VMs"""
[docs] def __init__(self, api_client: Api): """ Initialise le service VM Args: api_client: Client API unifié """ self.api = api_client
[docs] def authenticate_user( self, email: str = "jean@dupont21.com", password: str = None ) -> "Optional[Dict[str, Any]]": """ Authentifie un utilisateur et retourne ses informations Args: email: Email de l'utilisateur password: Mot de passe de l'utilisateur Returns: Informations de l'utilisateur ou None si l'authentification échoue """ logger.info("Début du processus d'authentification pour création de VM") try: token = get_or_create_token( base_url=self.api.base_url, email=email, password=password, ) # Définir le token dans le client API self.api.set_token(token) logger.info("Token défini dans le client API pour création de VM") # Récupérer les informations utilisateur if self.api.is_authenticated(): logger.info("Récupération des informations utilisateur authentifié") try: user = self.api.get_user_info() if user is None: logger.error("Les informations utilisateur sont nulles") return None logger.info( "Informations utilisateur récupérées pour création VM", user_id=user.get("id"), user_name=user.get("name"), ) return user except UserInfoError as e: logger.error( "Impossible de récupérer les informations utilisateur", error=str(e), ) return None else: logger.error("Aucun token disponible après authentification") return None except Exception as e: logger.error("Erreur d'authentification", error=str(e)) return None
[docs] def create_vm_for_user( self, user: Dict[str, Any], vm_config: Dict[str, Any] ) -> Optional[Dict[str, Any]]: """ Crée une VM pour un utilisateur spécifique Args: user: Informations de l'utilisateur vm_config: Configuration de la VM à créer Returns: Résultat de la création ou None si échec """ if not self.api.is_authenticated(): logger.error("API non authentifiée pour la création de VM") return None logger.info("Début de création de VM", **vm_config) try: vm_result = self.api.users.create_vm(**vm_config) logger.info( "VM créée avec succès", vm_id=vm_result.get("id"), status=vm_config.get("status"), ) return vm_result except VMCreationError as e: logger.error( "Échec de la création de VM", error=str(e), user_id=user.get("id") if user else "N/A", ) return None
[docs] def create_default_vm_for_user( self, user: Dict[str, Any] ) -> Optional[Dict[str, Any]]: """ Crée une VM par défaut pour un utilisateur Args: user: Informations de l'utilisateur Returns: Résultat de la création ou None si échec """ vm_config = { "user_id": user["id"], "name": "VM de Jean", "operating_system": "Ubuntu 22.04", "cpu_cores": 2, "ram_gb": 4, "disk_gb": 50, "status": "stopped", } return self.create_vm_for_user(user, vm_config)