diff --git a/backend/provisioner.py b/backend/provisioner.py index c11fb8a..a25ad9f 100644 --- a/backend/provisioner.py +++ b/backend/provisioner.py @@ -270,9 +270,14 @@ def _process_job(job_id: str, req: JobSubmissionRequest): _update_job(job_id, status=JobStatus.IMPORTING_STORAGE, progress=70, message="Creating VM...") + # Sanitize VM name: Proxmox requires DNS-safe names (a-z, 0-9, hyphens) + safe_name = re.sub(r'[^a-zA-Z0-9-]', '-', req.vm_name).strip('-').lower() + if not safe_name: + safe_name = f"vm-{vmid}" + bios = "ovmf" if req.boot_type.value == "uefi" else "seabios" _run(["qm", "create", str(vmid), - "--name", req.vm_name, + "--name", safe_name, "--bios", bios, "--cores", str(req.cpu_cores), "--memory", str(req.ram_mb), @@ -282,7 +287,7 @@ def _process_job(job_id: str, req: JobSubmissionRequest): # ── Import and attach each disk ──────────────────────────── for idx, disk_path in enumerate(disk_paths): logger.info("Importing disk %d: %s", idx, disk_path) - result = _run(["qm", "importdisk", str(vmid), str(disk_path), + result = _run(["qm", "disk", "import", str(vmid), str(disk_path), req.target_storage]) output = result.stdout + result.stderr