key(); } public function maxDuration(): int { return 300; } protected function order(ProvisioningRun $run): Order { /** @var Order $order */ $order = $run->subject; return $order; } protected function instance(ProvisioningRun $run): ?Instance { $id = $run->context('instance_id'); return $id ? Instance::query()->find($id) : null; } /** @return array */ protected function plan(ProvisioningRun $run): array { return config('provisioning.plans.'.$this->order($run)->plan, []); } /** * Run a command inside the guest via qemu-guest-agent. Throws on a non-zero * exit code so the runner turns it into a retry. */ protected function guest(ProxmoxClient $pve, ProvisioningRun $run, string $command): string { $node = (string) $run->context('node'); $vmid = (int) $run->context('vmid'); $result = $pve->guestExec($node, $vmid, $command); if ((int) ($result['exitcode'] ?? 1) !== 0) { throw new RuntimeException("guest exec failed (exit {$result['exitcode']}): {$command}"); } return (string) ($result['out-data'] ?? ''); } }