instance($run); $node = (string) $run->context('node'); $vmid = (int) $run->context('vmid'); $pve = $this->pve->forHost($instance->host); // Idempotent: already running. if (($pve->vmStatus($node, $vmid)['status'] ?? '') === 'running') { return StepResult::advance(); } $upid = $run->context('start_upid'); if ($upid === null) { $upid = $pve->startVm($node, $vmid); $run->mergeContext(['start_upid' => $upid]); } $task = $pve->taskStatus($node, $upid); if (($task['status'] ?? '') === 'running') { return StepResult::poll(5, 'starting VM'); } if (($task['exitstatus'] ?? 'OK') !== 'OK') { return StepResult::fail('start_failed: '.($task['exitstatus'] ?? 'unknown')); } return StepResult::advance(); } }