#!/usr/bin/env python3
"""
Gestionnaire de VMs pour demo_api
"""
from typing import Optional
import typer
from utils.api import Api
from utils.services import VMService
from utils.logging_config import get_logger
from utils.config import config
logger = get_logger(__name__)
[docs]
def create_vm(
name: Optional[str] = None,
email: str = "jean@dupont21.com",
password: str = "password123",
os: str = "Ubuntu 22.04",
cores: int = 2,
ram: int = 4,
disk: int = 50,
status: str = "stopped",
verbose: bool = False,
) -> None:
"""
🖥️ Créer une VM pour un utilisateur existant
Authentifie un utilisateur existant et crée une VM pour lui.
Exemples:
.. code-block:: shell
python vm_manager.py create
python vm_manager.py create --name "Ma VM" --email "alice@example.com" --password "motdepasse"
python vm_manager.py create -n "VM Test" --ram 8 --disk 100 --verbose
"""
# Configurer le nom par défaut si non fourni
vm_name = name or "VM de Jean"
if verbose:
typer.echo("🔧 Configuration VM:")
typer.echo(f" Nom: {vm_name}")
typer.echo(f" OS: {os}")
typer.echo(f" CPU: {cores} cores")
typer.echo(f" RAM: {ram} GB")
typer.echo(f" Disque: {disk} GB")
typer.echo(f" Statut: {status}")
typer.echo(f" Email: {email}")
typer.echo()
logger.info("Début du processus de création de VM", email=email, vm_name=vm_name)
# Initialisation du client API et du service
api = Api(config.DEMO_API_BASE_URL)
vm_service = VMService(api)
# Authentification de l'utilisateur
typer.echo("🔐 Authentification de l'utilisateur...")
user = vm_service.authenticate_user(email=email, password=password)
if not user:
typer.echo("❌ Échec de l'authentification")
raise typer.Exit(1)
typer.echo(f"✅ Utilisateur authentifié: {user.get('name', email)}")
# Configuration de la VM
vm_config = {
"user_id": user["id"],
"name": vm_name,
"operating_system": os,
"cpu_cores": cores,
"ram_gb": ram,
"disk_gb": disk,
"status": status,
}
if verbose:
typer.echo("🚀 Création de la VM...")
# Création de la VM
logger.info("Création de la VM", **vm_config)
vm_result = vm_service.create_vm_for_user(user, vm_config)
typer.echo()
if vm_result:
typer.echo("🎉 VM créée avec succès!")
typer.echo(f" 🆔 ID: {vm_result.get('id')}")
typer.echo(f" 📝 Nom: {vm_result.get('name')}")
typer.echo(f" 💻 OS: {vm_result.get('operating_system')}")
typer.echo(f" 🔧 CPU: {vm_result.get('cpu_cores')} cores")
typer.echo(f" 💾 RAM: {vm_result.get('ram_gb')} GB")
typer.echo(f" 💿 Disque: {vm_result.get('disk_gb')} GB")
typer.echo(f" ⚡ Statut: {vm_result.get('status')}")
typer.echo()
typer.echo("✨ Terminé!")
else:
typer.echo("❌ Échec de la création de la VM")
raise typer.Exit(1)
[docs]
def create_vm_cli(
name: Optional[str] = typer.Option(None, "--name", "-n", help="Nom de la VM"),
email: str = typer.Option(
"jean@dupont21.com", "--email", "-e", help="Email de l'utilisateur existant"
),
password: str = typer.Option(
"password123", "--password", "-p", help="Mot de passe de l'utilisateur"
),
os: str = typer.Option("Ubuntu 22.04", "--os", "-o", help="Système d'exploitation"),
cores: int = typer.Option(
2, "--cores", "-c", help="Nombre de cœurs CPU", min=1, max=16
),
ram: int = typer.Option(4, "--ram", "-r", help="RAM en GB", min=1, max=128),
disk: int = typer.Option(50, "--disk", "-d", help="Disque en GB", min=10, max=2048),
status: str = typer.Option(
"stopped", "--status", "-s", help="Statut initial de la VM"
),
verbose: bool = typer.Option(False, "--verbose", "-v", help="Mode verbeux"),
) -> None:
"""
🖥️ Créer une VM pour un utilisateur existant
Authentifie un utilisateur existant et crée une VM pour lui.
Exemples:
.. code-block:: shell
python vm_manager.py create
python vm_manager.py create --name "Ma VM" --email "alice@example.com" --password "motdepasse"
python vm_manager.py create -n "VM Test" --ram 8 --disk 100 --verbose
"""
create_vm(name, email, password, os, cores, ram, disk, status, verbose)
if __name__ == "__main__":
app = typer.Typer(help="Créer des VMs pour l'API demo")
app.command()(create_vm_cli)
app()