tftsr-devops_investigation/src/components/Proxmox/index.ts
Shaun Arman a9a063f786
Some checks failed
Test / frontend-tests (pull_request) Successful in 1m37s
Test / frontend-typecheck (pull_request) Successful in 1m49s
PR Review Automation / review (pull_request) Successful in 10m13s
Test / rust-fmt-check (pull_request) Failing after 12m20s
Test / rust-clippy (pull_request) Successful in 13m53s
Test / rust-tests (pull_request) Has been cancelled
fix(proxmox): fix VM actions, remove Disk column, add Create VM
Issue 1 — VM actions silently doing nothing:
The root cause was a missing <Toaster> mount in App.tsx. All
toast.success/error calls were no-ops because the sonner Toaster
component was never rendered. Added it at the App root.

Also added dialog:allow-confirm capability (was missing, caused VM
delete confirmation to throw silently).

Issue 2 — Remove Disk column:
PVE cluster/resources returns only static disk allocation, not actual
usage, making the column misleading. Removed from VMList header, row,
and the diskPercent calculation.

Issue 3 — Add VM creation:
- New list_proxmox_nodes Tauri command (GET /nodes) for real node list
- New create_proxmox_vm Tauri command with server-side input validation:
  vmid range, numeric bounds, node/storage/bridge path-safety check,
  ISO volume-ID format check to prevent comma-property injection
- CreateVmDialog component with node/storage discovery on open
- "Add VM" button wired into VMsPage

MigrationDialog now fetches real cluster nodes via list_proxmox_nodes
instead of inferring them from the VMs already in the list.

Added suspendProxmoxVm, resumeProxmoxVm, listProxmoxNodes,
createProxmoxVm client wrappers to proxmoxClient.ts.

Tests: 446 Rust + 405 frontend, all pass. 19 new VMList tests (TDD),
7 new Rust tests for security validation logic.
2026-06-21 18:01:37 -05:00

39 lines
1.8 KiB
TypeScript

export { ResourceTree } from './ResourceTree';
export { ResourceFilter } from './ResourceFilter';
export { VMList } from './VMList';
export { SnapshotForm } from './VMSnapshotForm';
export { MigrationForm } from './VMMigrationForm';
export { BackupJobList } from './BackupJobList';
export { PoolList } from './PoolList';
export { OSDList } from './OSDList';
export { CephHealthWidget } from './CephHealthWidget';
export { MonitorList } from './MonitorList';
export { FirewallRuleList } from './FirewallRuleList';
export { HAGroupsList } from './HAGroupsList';
export { HAResourcesList } from './HAResourcesList';
export { RealmList } from './RealmList';
export { UserList } from './UserList';
export { CertificateList } from './CertificateList';
export { SubscriptionList } from './SubscriptionList';
export { NoteList } from './NoteList';
export { SearchResults } from './SearchResults';
export { ClusterSelector } from './ClusterSelectorAdvanced';
export { SearchBar } from './SearchBar';
export { ClusterOperationsList } from './ClusterOperationsList';
export { ConnectionList } from './ConnectionList';
export { CLICommandsList } from './CLICommandsList';
export { RemotesList } from './RemotesList';
export { UpdatesList } from './UpdatesList';
export { StorageList } from './StorageList';
export { CephFSList } from './CephFSList';
export { CephManagersList } from './CephManagersList';
export { AddRemoteForm } from './AddRemoteForm';
export { EditRemoteForm } from './EditRemoteForm';
export { RemoveRemoteDialog } from './RemoveRemoteDialog';
export { VMOverview } from './VMOverview';
export { ContainerOverview } from './ContainerOverview';
export { AclList } from './AclList';
export { VMConsole } from './VMConsole';
export { ContainerConsole } from './ContainerConsole';
export { CreateVmDialog } from './CreateVmDialog';