vm-bench/frontend/templates/polling.html
Claus Lohmar 9eb0f15261 feat: Clone (qm clone) + Copy (re-convert) buttons on completion
After conversion completes, the user sees a form with VM Name and ID
prefilled, and three buttons:

- Clone (instant): qm clone --full via backend, takes seconds
- Copy (re-convert): shows CPU/RAM/Disk fields, re-runs full pipeline
- Clean Up & Finish: deletes staging, returns to start page

Backend: new /api/v1/clone endpoint → provisioner.clone_vm()
Frontend: new /session/clone proxy, api_client.clone_vm()
2026-07-23 09:02:57 +00:00

73 lines
2.9 KiB
HTML

<div class="container" id="polling-container"
data-job-id="{{ job_id }}" data-vmid="{{ vmid }}"
data-source-filename="{{ source_filename }}" data-vm-name="{{ vm_name }}">
<div class="panel poll-panel">
<h2>Converting VM {{ vmid }}</h2>
<p class="dim">Job: <code>{{ job_id }}</code> &nbsp;|&nbsp; {{ vm_name }}</p>
<div id="status-badge" class="badge badge-queued">
<span class="spinner"></span> Queued
</div>
<div class="progress-bar">
<div class="progress-fill" id="conversion-fill" style="width:0%">0%</div>
</div>
<p id="status-message" class="dim">Waiting for backend...</p>
<p id="elapsed" class="dim">Elapsed: 0s</p>
<div id="error-block" class="error hidden"></div>
</div>
<!-- Reuse section -->
<div id="reuse-section" class="panel hidden">
<h2>Conversion Complete — VM {{ vmid }} Ready</h2>
<p style="margin-bottom:1rem;">Create another VM from this disk?</p>
<div class="row">
<div class="form-group">
<label>VM Name *</label>
<input type="text" id="reuse-vmname" name="vm_name" required
placeholder="e.g. second-vm">
</div>
<div class="form-group">
<label>VM ID *</label>
<input type="number" id="reuse-vmid" name="vmid" required
min="21000" max="21100" placeholder="21051">
</div>
</div>
<div class="btn-row" style="flex-wrap:wrap;">
<button id="btn-clone" class="btn" style="background:var(--green);">Clone (instant)</button>
<button id="btn-copy" class="btn">Copy (re-convert)</button>
<button id="btn-cleanup" class="btn btn-secondary">Clean Up &amp; Finish</button>
</div>
<div id="reuse-submit-status" class="hidden" style="margin-top:0.5rem;"></div>
<!-- Copy options (hidden until Copy clicked) -->
<div id="copy-options" class="hidden" style="margin-top:1rem; padding-top:1rem; border-top:1px solid var(--border);">
<p class="dim" style="margin-bottom:0.75rem;">Copy re-runs the conversion with new specs:</p>
<div class="row">
<div class="form-group">
<label>CPU Cores</label>
<input type="number" id="copy-cores" value="2" min="1">
</div>
<div class="form-group">
<label>RAM (MB)</label>
<input type="number" id="copy-ram" value="4096" min="512">
</div>
</div>
<div class="form-group">
<label>Target Disk Size (GB)</label>
<input type="number" id="copy-disk" value="30" placeholder="Leave blank for auto-shrink">
<span class="hint">Blank = auto-shrink to 30 GB.</span>
</div>
<div class="form-group">
<label>Storage Pool</label>
<input type="text" id="copy-storage" value="local-lvm">
</div>
<button id="btn-copy-start" class="btn" style="margin-top:0.5rem;">Start Re-Conversion</button>
<div id="copy-status" class="hidden" style="margin-top:0.5rem;"></div>
</div>
</div>
</div>