> */ public function listNodes(): array; /** @return array */ public function nodeStatus(string $node): array; /** @return array> */ public function nodeStorage(string $node): array; // --- VM lifecycle (Subsystem B) --- public function nextVmid(): int; /** Clone a template to a new VM; returns the task UPID. */ public function cloneVm(string $node, int $templateVmid, int $newVmid, string $name): string; /** @param array $params */ public function setCloudInit(string $node, int $vmid, array $params): void; public function resizeDisk(string $node, int $vmid, string $disk, string $size): void; /** Start a VM; returns the task UPID. */ public function startVm(string $node, int $vmid): string; /** @return array ['status' => 'running'|'stopped', …] */ public function vmStatus(string $node, int $vmid): array; /** Whether a VM with this id already exists on the node. */ public function vmExists(string $node, int $vmid): bool; public function guestAgentPing(string $node, int $vmid): bool; /** @return array{exitcode: int, out-data: string} */ public function guestExec(string $node, int $vmid, string $command): array; /** @return array{status: string, exitstatus?: string} */ public function taskStatus(string $node, string $upid): array; /** @param array> $rules */ public function applyFirewall(string $node, int $vmid, array $rules): void; }