diff --git a/backend/app/proxmox_client.py b/backend/app/proxmox_client.py index a5a40fd..cc16519 100644 --- a/backend/app/proxmox_client.py +++ b/backend/app/proxmox_client.py @@ -266,13 +266,18 @@ def guest_action(guest_type: str, vmid: int, action: str, node: str = None) -> N def delete_guest(guest_type: str, vmid: int, node: str = None) -> None: - """Удаляет VM или LXC (синхронно — Proxmox дожидается завершения).""" + """Удаляет VM или LXC, дожидаясь завершения задачи в Proxmox.""" node = node or settings.pve_node px = _client() if guest_type == "vm": - px.nodes(node).qemu(vmid).delete() + upid = px.nodes(node).qemu(vmid).delete() else: - px.nodes(node).lxc(vmid).delete() + upid = px.nodes(node).lxc(vmid).delete() + # Proxmox API возвращает upid для отслеживания статуса задачи. + # Ждём завершения, чтобы инстанс действительно был удалён к моменту + # возврата ответа клиенту. + if upid: + _wait_task(px, node, upid) def get_status(guest_type: str, vmid: int, node: str = None) -> dict: @@ -281,4 +286,4 @@ def get_status(guest_type: str, vmid: int, node: str = None) -> dict: px = _client() if guest_type == "vm": return px.nodes(node).qemu(vmid).status.current.get() - return px.nodes(node).lxc(vmid).status.current.get() \ No newline at end of file + return px.nodes(node).lxc(vmid).status.current.get()