diff --git a/apps/dashboard/src/lib/server/backends/proxmox/index.ts b/apps/dashboard/src/lib/server/backends/proxmox/index.ts index 88e769d..ec25844 100644 --- a/apps/dashboard/src/lib/server/backends/proxmox/index.ts +++ b/apps/dashboard/src/lib/server/backends/proxmox/index.ts @@ -926,13 +926,7 @@ export class ProxmoxBackend implements VmBackend { const status = await this.client.getQemuVm(node, vmid); if (status.status === 'stopped') return; - let stopUpid: string; - try { - stopUpid = await this.client.stopVm(node, vmid, { overruleShutdown: true }); - } catch (err) { - if (!(err instanceof HTTPError) || err.response.status !== 400) throw err; - stopUpid = await this.client.stopVm(node, vmid); - } + const stopUpid = await this.forceStopVm(node, vmid); try { await this.client.waitForTask(node, stopUpid); } catch (err) { @@ -949,6 +943,15 @@ export class ProxmoxBackend implements VmBackend { throw new Error(`VM ${vmid} on node ${node} did not reach stopped state within 60s`); } + private async forceStopVm(node: string, vmid: number): Promise { + try { + return await this.client.stopVm(node, vmid, { overruleShutdown: true }); + } catch (err) { + if (!(err instanceof HTTPError) || err.response.status !== 400) throw err; + return await this.client.stopVm(node, vmid); + } + } + private async destroyVm(node: string, vmid: number): Promise { for (let attempt = 1; ; attempt++) { try { @@ -982,7 +985,7 @@ export class ProxmoxBackend implements VmBackend { async killVm(id: string, proxmoxId?: number): Promise { clearProxmoxReadCaches(); const { node, vmid } = await this.resolveForMutation(id, proxmoxId); - const upid = await this.client.stopVm(node, vmid); + const upid = await this.forceStopVm(node, vmid); await this.client.waitForTask(node, upid); }