Commit Graph

5 Commits

Author SHA1 Message Date
CanbiZ (MickLesk)
9deba93bcf fix(vm): clean up temp files on retry + fix misleading skip message
- vm-core.func: add rm -f WORK_FILE in all recovery paths (RETRY,
  SKIP_CUSTOMIZE, RETRY_SETTINGS, NEW_VMID) to prevent multi-GB temp
  file leaks in /tmp on failed retry
- debian-13-vm.sh: same WORK_FILE cleanup in inline recovery path
- debian-13-vm.sh: fix misleading 'will configure on first boot' msg
  when skipping virt-customize (no first-boot mechanism exists)
2026-02-16 19:21:02 +01:00
CanbiZ (MickLesk)
6b249d9533 feat(vm): add smart recovery for VM creation failures (Phase 1-3)
Adds error classification, recovery menu, and retry mechanism for VM
creation failures in docker-vm.sh.

vm-core.func:
- vm_classify_error(): classifies errors into 7 categories
  (download, disk_import, virt_customize, vmid_conflict,
   storage_full, network, unknown)
- is_vm_download_error(), is_vm_disk_import_error(),
  is_vm_virt_customize_error(), is_vm_vmid_conflict(),
  is_vm_storage_full(), is_vm_network_error(): detection helpers
- vm_show_recovery_menu(): dynamic whiptail menu with options
  based on error category (retry, retry w/ settings, skip
  virt-customize, new VMID, keep VM, abort)
- vm_handle_recovery(): orchestrates classification, menu, and
  chosen action (cleanup + retry / keep / abort)
- vm_log_cmd(): stderr capture wrapper for VM_ERROR_LOG
- VM_MAX_RETRIES=2 (bounded recursion depth)

docker-vm.sh:
- Wrapped VM creation in create_vm() function for retry
- error_handler(): during VM_CREATION_PHASE, delegates to
  vm_handle_recovery; on retry, temporarily disables ERR trap,
  re-invokes create_vm recursively (bounded by VM_MAX_RETRIES)
- SKIP_VIRT_CUSTOMIZE flag: virt-customize failure recovery
  can skip it and use first-boot Docker install fallback
- Critical commands (qm create, disk import) now capture
  stderr to VM_ERROR_LOG for error classification
2026-02-16 18:49:53 +01:00
CanbiZ (MickLesk)
896714e06f core/vm's: ensure script state is sent on script exit (#11991)
* Ensure API update is sent on script exit

Add exit-time telemetry handling across scripts to avoid orphaned "installing" records. Introduce local exit_code capture in api_exit_script and cleanup handlers and, when POST_TO_API_DONE is true but POST_UPDATE_DONE is not, post a final status (marking failures on non-zero exit codes, or marking done/failed in VM cleanups based on exit code). Changes touch misc/build.func, misc/vm-core.func and various vm/*-vm.sh cleanup functions to reliably send post_update_to_api on normal or early exits.

* Update api.func

* fix(telemetry): add missing exit codes to explain_exit_code()

- Add curl error codes: 4, 5, 8, 23, 25, 30, 56, 78
- Add code 10: Docker/privileged mode required (used in ~15 scripts)
- Add code 75: Temporary failure (retry later)
- Add BSD sysexits.h codes: 64-77
- Sync error_handler.func fallback with canonical api.func
2026-02-16 17:14:00 +01:00
CanbiZ (MickLesk)
cecadf5681 core: improve error reporting with structured error strings and better categorization + output formatting (#11907)
* fix(telemetry): improve error reporting with structured error strings and better categorization

- Add build_error_string() that creates structured format:
  'exit_code=N | description\n---\n<last 20 log lines>'
- Fix categorize_error() to map ALL known exit codes:
  - Added: shell(1,2), proxmox(200-231), service(150-154),
    database(170-193), runtime(243-249), signal(139,141,143)
  - Split timeout from network (28 was in both)
  - Added DPKG(255) to dependency category
- Update all API functions to use build_error_string():
  post_update_to_api, post_update_to_api_extended,
  post_tool_to_api, post_addon_to_api
- Add ensure_log_on_host() calls to on_exit, on_interrupt,
  on_terminate handlers to prevent race condition where
  telemetry reports before container log is pulled to host

* fix(ui): improve error output formatting and remove redundant log paths

- error_handler: Use msg_info/msg_ok/msg_warn for container cleanup
  instead of raw echo with manual ANSI codes
- error_handler: Add  icon before 'Remove broken container?' prompt
- error_handler: Indent log output with TAB for visual consistency
- build.func: Use msg_custom for installation log path display
- build.func: Use msg_info → msg_ok for container removal flow
- build.func: Use msg_warn for 'kept for debugging' message
- core.func/vm-core.func: Remove redundant container-internal log
  path display (📋 View full log) since combined log on host is
  the canonical location shown after failure
2026-02-14 15:28:30 +01:00
CanbiZ (MickLesk)
fa86809863 core: create vm-core.func from dev (#11528) 2026-02-04 11:16:06 +01:00