fix: disk resize now opt-in — pre-filled with current size, disabled by default, checkbox to enable
- Backend: None = keep current size (no auto-shrink); only resize when value explicitly provided - Frontend: Target Disk Size field shows detected size, disabled (not submitted) - Checkbox 'Enable disk resize' unlocks the field for editing
This commit is contained in:
parent
75f90f16bb
commit
ae53d2fbd8
3 changed files with 22 additions and 16 deletions
|
|
@ -300,16 +300,8 @@ def _process_job(job_id: str, req: JobSubmissionRequest):
|
||||||
|
|
||||||
target_gb = req.target_disk_size_gb
|
target_gb = req.target_disk_size_gb
|
||||||
if target_gb is None:
|
if target_gb is None:
|
||||||
# Auto-shrink: 10% of virtual size, minimum 20 GB
|
logger.info("Disk size not specified — keeping current (%.1f GiB)", current_gb)
|
||||||
auto_target = max(int(current_gb * 0.1), 20)
|
elif target_gb < current_gb:
|
||||||
if current_gb > auto_target:
|
|
||||||
target_gb = auto_target
|
|
||||||
logger.info("Auto-shrink: %.1f GiB → %d GiB (10%% rule)", current_gb, target_gb)
|
|
||||||
else:
|
|
||||||
target_gb = int(round(current_gb)) + 1
|
|
||||||
logger.info("Disk already <= target, no shrink needed")
|
|
||||||
|
|
||||||
if target_gb < current_gb:
|
|
||||||
_update_job(job_id, progress=60,
|
_update_job(job_id, progress=60,
|
||||||
message=f"Shrinking disk to {target_gb} GiB...")
|
message=f"Shrinking disk to {target_gb} GiB...")
|
||||||
logger.info("Shrinking disk: %.1f GiB → %d GiB via virt-resize", current_gb, target_gb)
|
logger.info("Shrinking disk: %.1f GiB → %d GiB via virt-resize", current_gb, target_gb)
|
||||||
|
|
|
||||||
|
|
@ -66,13 +66,15 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="pve-form-group">
|
<div class="pve-form-group">
|
||||||
<label>Target Disk Size (GB)</label>
|
<label>Target Disk Size (GB)</label>
|
||||||
<input type="number" name="target_disk_size_gb" class="pve-input"
|
<input type="number" name="target_disk_size_gb" id="target-disk-size" class="pve-input"
|
||||||
value="{{ analysis.disk_size_gb }}"
|
value="{{ analysis.disk_size_gb }}" disabled>
|
||||||
placeholder="Leave blank for auto-shrink">
|
<label style="margin-top:0.3rem;font-size:0.72rem;display:flex;align-items:center;gap:0.3rem;cursor:pointer;">
|
||||||
<span class="pve-hint">
|
<input type="checkbox" id="enable-resize" onchange="toggleDiskResize()">
|
||||||
{{ analysis.disk_size_gb }} GB detected. Auto-shrink to {{ (analysis.disk_size_gb * 0.1)|round(0)|int if (analysis.disk_size_gb * 0.1) > 20 else 20 }} GB if left blank.<br>
|
Enable disk resize (shrink or expand)
|
||||||
|
</label>
|
||||||
|
<span class="pve-hint" id="resize-hint">
|
||||||
|
Default: {{ analysis.disk_size_gb }} GB (no resize). Check the box above to change.
|
||||||
<strong>Warning:</strong> shrinking can break complex layouts (LVM, encryption).
|
<strong>Warning:</strong> shrinking can break complex layouts (LVM, encryption).
|
||||||
If unsure, enter the full size ({{ analysis.disk_size_gb }} GB) to skip.
|
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -166,6 +166,18 @@ function showError(msg) {
|
||||||
if (el) el.innerHTML += '<div class="pve-alert pve-alert-error" style="margin-top:0.5rem;">' + msg + '</div>';
|
if (el) el.innerHTML += '<div class="pve-alert pve-alert-error" style="margin-top:0.5rem;">' + msg + '</div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function toggleDiskResize() {
|
||||||
|
var cb = document.getElementById('enable-resize');
|
||||||
|
var inp = document.getElementById('target-disk-size');
|
||||||
|
if (!cb || !inp) return;
|
||||||
|
if (cb.checked) {
|
||||||
|
inp.removeAttribute('disabled');
|
||||||
|
inp.focus();
|
||||||
|
} else {
|
||||||
|
inp.setAttribute('disabled', '');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); }
|
function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); }
|
||||||
|
|
||||||
async function startSession(e) {
|
async function startSession(e) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue