Нет описания

Celestino Rey 4d2d5f6fb3 Opción para subir imágenes iso 10 месяцев назад
.github 23108c30f6 Primer commit 10 месяцев назад
app 4d2d5f6fb3 Opción para subir imágenes iso 10 месяцев назад
static 4d2d5f6fb3 Opción para subir imágenes iso 10 месяцев назад
.gitignore 23108c30f6 Primer commit 10 месяцев назад
README.md 4d2d5f6fb3 Opción para subir imágenes iso 10 месяцев назад
pyproject.toml 23108c30f6 Primer commit 10 месяцев назад
requirements.txt 4d2d5f6fb3 Opción para subir imágenes iso 10 месяцев назад

README.md

VirtManager

Una API REST y interfaz web para gestionar máquinas virtuales en Ubuntu usando FastAPI, libvirt y noVNC para consola web.

Características

  • Gestión completa de VMs: Crear, listar, iniciar, detener y eliminar máquinas virtuales.
  • Configuración de arranque: Cambiar el orden de arranque de las VMs (disco duro, CD-ROM, etc.).
  • Subida de ISOs: Sube imágenes ISO directamente desde la interfaz web para usar en la creación de VMs.

Instalación

Prerrequisitos del Sistema

Asegúrate de que libvirt esté instalado y configurado:

sudo apt update
sudo apt install -y libvirt-daemon-system libvirt-dev pkg-config python3-libvirt python3-gi novnc websockify

Crea el directorio para ISOs (opcional, se crea automáticamente):

sudo mkdir -p /var/lib/libvirt/images/isos

Instalación del Proyecto

  1. Clona o descarga el proyecto en /home/creylopez/virtmanager (o ajusta las rutas según corresponda).

  2. Crea y activa un entorno virtual:

    python3 -m venv venv
    source venv/bin/activate
    
  3. Instala las dependencias de Python:

    pip install -e .
    
  4. Configura permisos para libvirt (opcional, si no usas sudo):

    sudo usermod -a -G libvirt $USER
    # Reinicia la sesión para aplicar cambios
    

Configuración del Servicio Systemd (Auto-inicio)

Para que VirtManager se inicie automáticamente con el sistema:

  1. Crea el archivo de servicio:

    sudo tee /etc/systemd/system/virtmanager.service > /dev/null <<EOF
    [Unit]
    Description=VirtManager API
    After=network.target libvirtd.service
    
    [Service]
    Type=simple
    User=root
    WorkingDirectory=/home/creylopez/virtmanager
    ExecStart=/home/creylopez/virtmanager/venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8000
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    EOF
    
  2. Recarga systemd y habilita el servicio:

    sudo systemctl daemon-reload
    sudo systemctl enable virtmanager
    sudo systemctl start virtmanager
    
  3. Verifica el estado:

    sudo systemctl status virtmanager
    

La aplicación estará disponible en http://localhost:8000 o http://tu-ip:8000.

Uso

Ejecución Manual (sin servicio)

Si prefieres ejecutar manualmente:

source venv/bin/activate
sudo uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

Nota: Se requiere sudo porque libvirt necesita permisos de root.

Variables de Entorno

  • LIBVIRT_IMAGES_PATH: Ruta para almacenar imágenes de disco (por defecto /var/lib/libvirt/images).

    export LIBVIRT_IMAGES_PATH=/ruta/a/imagenes
    

Endpoints de la API

VMs

  • GET /: Página de inicio (interfaz web).
  • GET /vms: Lista todas las VMs con estado, ID, nombre y puerto VNC si aplica.
  • POST /vms?name={name}&memory={memory}&disk_size={disk_size}&iso={iso}: Crea una nueva VM.
    • name: Nombre de la VM.
    • memory: Memoria en MiB.
    • disk_size: Tamaño del disco en GB.
    • iso: Ruta al archivo ISO para instalación.
  • GET /vms/{vm_name}/start: Inicia una VM por nombre.
  • GET /vms/{vm_name}/stop: Detiene una VM por nombre.
  • DELETE /vms/{vm_name}: Elimina una VM por nombre.
  • PUT /vms/{vm_name}/boot-order: Cambia el orden de arranque.
    • Body JSON: {"order": ["hd", "cdrom"]} (ejemplo).

Discos

  • POST /disks?name={name}&size={size}: Crea una imagen de disco.
    • name: Nombre del archivo (sin extensión).
    • size: Tamaño en GB.

ISOs

  • GET /isos: Lista todas las ISOs subidas.
  • POST /upload-iso: Sube un archivo ISO.
    • Body: Archivo multipart (file).

Consola

  • GET /console/{vm_name}: Obtiene la URL para la consola web noVNC de la VM.

Interfaz Web

Accede a http://localhost:8000 en tu navegador.

  • Lista de VMs: Tabla con estado (badges coloreados), acciones (iniciar/detener/eliminar/consola).
  • Crear VM: Formulario para especificar nombre, memoria, disco e ISO (seleccionar de ISOs subidas).
  • Set Boot Order: Selecciona una VM y define el orden de arranque (ej. "hd,cdrom").
  • Upload ISO: Sube archivos ISO para usar en la creación de VMs.
  • Consola: Botón para abrir la consola web en una nueva pestaña (solo para VMs corriendo).

Documentación de la API

Accede a http://localhost:8000/docs para la documentación interactiva de Swagger UI.

Notas

  • Las operaciones de VMs requieren que libvirt esté corriendo (sudo systemctl start libvirtd).
  • Para crear VMs, asegúrate de que el usuario tenga permisos en /var/lib/libvirt/images o ajusta LIBVIRT_IMAGES_PATH.
  • La consola web usa websockify para proxy VNC a WebSocket.
  • El servicio systemd ejecuta como root para acceso completo a libvirt.

Contribución

Siéntete libre de contribuir con mejoras o reportar issues.

Licencia

Este proyecto es de código abierto. Ajusta según tus necesidades.