# Solución de Problemas de Creación de VM - Resumen ## Problema Original El error "undefined" aparecía al intentar crear una VM, y el disco virtual se creaba pero no se agregaba a la configuración de la VM en libvirt. ## Causas Identificadas 1. **Falta de permisos para crear discos**: El usuario no tenía permisos para escribir en `/var/lib/libvirt/images/` 2. **Manejo de errores insuficiente**: Los errores no se propagaban correctamente al frontend 3. **Falta de logging**: No había suficiente información de debug para identificar el problema 4. **Ruta de script incorrecta**: La ruta relativa del script helper no funcionaba correctamente ## Soluciones Implementadas ### 1. Script Helper para Crear Discos **Archivo:** `create_disk.sh` - Script que se ejecuta con `sudo` para manejar correctamente los permisos - Crea el disco QCOW2 con los permisos correctos para `libvirt-qemu:kvm` - Proporciona feedback claro sobre errores ### 2. Configuración de Sudoers **Archivo:** `/etc/sudoers.d/virtmanager` - Permite ejecutar el script sin contraseña - Configuración única (no requiere re-ejecutar para cada usuario) ``` creylopez ALL=(ALL) NOPASSWD: /home/creylopez/virtmanager/create_disk.sh ``` ### 3. Backend Mejorado **Archivo:** `app/main.py` - función `create_vm()` **Cambios:** - Usa el script helper en lugar de `qemu-img` directo - Calcula la ruta del script de forma dinámica y robusta - Agrega logging extensivo con prefijo `[CREATE_VM]` - Verifica que el disco existe antes de crear la VM - Maneja errores específicos de libvirt - Limpia el disco si la definición de la VM falla - Timeout de 60 segundos para operaciones largas ### 4. Frontend Mejorado **Archivo:** `static/app.js` **Cambios:** - Validación de que se seleccione una ISO - Mejor manejo de errores JSON - Mensajes más descriptivos en lugar de "undefined" - Logging en consola para debugging ### 5. Documentación **Archivos nuevos:** - `RUNNING.md` - Instrucciones para ejecutar el servidor y probar - `TROUBLESHOOTING.md` - Guía de resolución de problemas - `README.md` - Actualizado con configuración de permisos ## Validación Se realizó un test end-to-end que verifica: 1. ✓ Creación de disco con permisos correctos 2. ✓ Definición de VM en libvirt 3. ✓ Verificación de existencia de la VM 4. ✓ Limpieza correcta de recursos **Resultado:** ✅ TEST EXITOSO ## Instrucciones de Ejecución ### Configuración (una sola vez) ```bash cd /home/creylopez/virtmanager chmod +x create_disk.sh echo "creylopez ALL=(ALL) NOPASSWD: /home/creylopez/virtmanager/create_disk.sh" | sudo tee /etc/sudoers.d/virtmanager sudo visudo -c -f /etc/sudoers.d/virtmanager ``` ### Ejecutar el servidor ```bash cd /home/creylopez/virtmanager source venv/bin/activate sudo -E venv/bin/uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 ``` Accede a `http://localhost:8000` ## Flujo de Creación de VM ``` Usuario → Frontend (/vms) ↓ Backend (create_vm) ↓ [1] Crear disco (script helper + sudo) ↓ [2] Verificar que disco existe ↓ [3] Generar MAC aleatoria ↓ [4] Generar XML de configuración ↓ [5] Definir VM en libvirt (defineXML) ↓ [6] Iniciar VM (create) ↓ Respuesta al usuario ``` ## Logs Importantes Cuando creas una VM, verás logs como: ``` [CREATE_VM] Starting VM creation: name=mivm, memory=2048, disk_size=20, cpus=2 [CREATE_VM] Using ISO path: /var/lib/libvirt/images/isos/ubuntu-22.04.iso [CREATE_VM] Script path: /home/creylopez/virtmanager/create_disk.sh [CREATE_VM] Disk creation return code: 0 [CREATE_VM] Disk created successfully: /var/lib/libvirt/images/mivm.qcow2 [CREATE_VM] Generated MAC: 52:54:00:ab:cd:ef [CREATE_VM] XML template prepared for VM definition [CREATE_VM] Defining VM with libvirt... [CREATE_VM] VM defined successfully. Starting VM... [CREATE_VM] VM started successfully! ``` Si hay un error, verás: ``` [CREATE_VM] ERROR: [descripción del error] ``` ## Archivos Modificados 1. `app/main.py` - Función `create_vm()` mejorada con logging y mejor manejo de errores 2. `static/app.js` - Frontend con mejor validación y manejo de errores 3. `README.md` - Documentación actualizada 4. `create_disk.sh` - Script helper para crear discos 5. `/etc/sudoers.d/virtmanager` - Configuración de permisos ## Archivos Nuevos 1. `RUNNING.md` - Instrucciones de ejecución 2. `TROUBLESHOOTING.md` - Guía de troubleshooting 3. `SOLUTION.md` - Este archivo (documentación de la solución) ## Próximos Pasos (Opcional) 1. Agregar validación de espacio en disco antes de crear 2. Agregar limite de tamaño máximo para VMs 3. Agregar compresión opcional de discos 4. Implementar progreso en tiempo real para creación de VMs 5. Agregar soporte para múltiples rutas de almacenamiento