tftsr-devops_investigation/src/lib/proxmoxClient.ts
Shaun Arman a438e313a6 feat: Implement Proxmox Datacenter Manager feature parity - Phases 1-11
- Phase 1: Dashboard Widget System (11 widgets)
- Phase 2: Resource Tree View (ResourceTree + ResourceFilter)
- Phase 3: VM Manager UI (VMList + SnapshotForm + MigrationForm)
- Phase 4: Backup Manager UI (BackupJobList)
- Phase 5: Ceph Manager UI (CephHealthWidget + PoolList + OSDList + MonitorList)
- Phase 6: SDN Manager UI (EVPNZoneList)
- Phase 7: Firewall Manager UI (FirewallRuleList)
- Phase 8: HA Groups Manager UI (HAGroupsList + HAResourcesList)
- Phase 9: User Management UI (RealmList + UserList)
- Phase 10: Certificate Manager UI (CertificateList)
- Phase 11: Subscription Registry UI (SubscriptionList)

All components pass TypeScript, ESLint, and existing tests.
All Rust code passes clippy and format checks.
2026-06-11 09:38:36 -05:00

621 lines
17 KiB
TypeScript

// Proxmox client module
// Provides TypeScript client wrapper for Proxmox API
import { invoke } from "@tauri-apps/api/core";
import { ClusterInfo, ClusterType } from "./domain";
/**
* Add a Proxmox cluster
* @param id - Unique cluster identifier
* @param name - Display name for the cluster
* @param clusterType - Type of cluster (ve or pbs)
* @param connection - Connection details (url and port)
* @param username - Root username for authentication
* @param password - Root password for authentication
*/
export async function addProxmoxCluster(
id: string,
name: string,
clusterType: ClusterType,
connection: { url: string; port: number },
username: string,
password: string
): Promise<ClusterInfo> {
return await invoke<ClusterInfo>("add_proxmox_cluster", {
id,
name,
cluster_type: clusterType,
connection,
username,
password,
});
}
/**
* Remove a Proxmox cluster
* @param id - Cluster identifier to remove
*/
export async function removeProxmoxCluster(id: string): Promise<void> {
await invoke("remove_proxmox_cluster", { id });
}
/**
* List all Proxmox clusters
*/
export async function listProxmoxClusters(): Promise<ClusterInfo[]> {
return await invoke<ClusterInfo[]>("list_proxmox_clusters");
}
/**
* Get a specific Proxmox cluster
* @param id - Cluster identifier
*/
export async function getProxmoxCluster(id: string): Promise<ClusterInfo | null> {
return await invoke<ClusterInfo | null>("get_proxmox_cluster", { id });
}
/**
* List all Proxmox VMs
* @param clusterId - Cluster identifier
*/
export async function listProxmoxVms(clusterId: string): Promise<any[]> {
return await invoke<any[]>("list_proxmox_vms", { clusterId });
}
/**
* Get Proxmox VM details
* @param clusterId - Cluster identifier
* @param nodeId - Node identifier
* @param vmId - VM identifier
*/
export async function getProxmoxVm(
clusterId: string,
nodeId: string,
vmId: number
): Promise<any> {
return await invoke<any>("get_proxmox_vm", { clusterId, nodeId, vmId });
}
/**
* Start a Proxmox VM
* @param clusterId - Cluster identifier
* @param nodeId - Node identifier
* @param vmId - VM identifier
*/
export async function startProxmoxVm(
clusterId: string,
nodeId: string,
vmId: number
): Promise<void> {
await invoke("start_proxmox_vm", { clusterId, nodeId, vmId });
}
/**
* Stop a Proxmox VM
* @param clusterId - Cluster identifier
* @param nodeId - Node identifier
* @param vmId - VM identifier
*/
export async function stopProxmoxVm(
clusterId: string,
nodeId: string,
vmId: number
): Promise<void> {
await invoke("stop_proxmox_vm", { clusterId, nodeId, vmId });
}
/**
* Reboot a Proxmox VM
* @param clusterId - Cluster identifier
* @param nodeId - Node identifier
* @param vmId - VM identifier
*/
export async function rebootProxmoxVm(
clusterId: string,
nodeId: string,
vmId: number
): Promise<void> {
await invoke("reboot_proxmox_vm", { clusterId, nodeId, vmId });
}
/**
* Shutdown a Proxmox VM
* @param clusterId - Cluster identifier
* @param nodeId - Node identifier
* @param vmId - VM identifier
*/
export async function shutdownProxmoxVm(
clusterId: string,
nodeId: string,
vmId: number
): Promise<void> {
await invoke("shutdown_proxmox_vm", { clusterId, nodeId, vmId });
}
/**
* List Proxmox Backup Jobs
* @param clusterId - Cluster identifier
* @param nodeId - Node identifier
*/
export async function listProxmoxBackupJobs(
clusterId: string,
nodeId: string
): Promise<any[]> {
return await invoke<any[]>("list_proxmox_backup_jobs", { clusterId, nodeId });
}
/**
* List Proxmox Datastores
* @param clusterId - Cluster identifier
*/
export async function listProxmoxDatastores(
clusterId: string
): Promise<any[]> {
return await invoke<any[]>("list_proxmox_datastores", { clusterId });
}
/**
* Trigger Proxmox Backup Job
* @param clusterId - Cluster identifier
* @param nodeId - Node identifier
* @param jobId - Backup job identifier
*/
export async function triggerProxmoxBackupJob(
clusterId: string,
nodeId: string,
jobId: number
): Promise<void> {
await invoke("trigger_proxmox_backup_job", { clusterId, nodeId, jobId });
}
/**
* List Ceph Pools
* @param clusterId - Cluster identifier
*/
export async function listCephPools(clusterId: string): Promise<any[]> {
return await invoke<any[]>("list_ceph_pools", { clusterId });
}
/**
* List Ceph OSDs
* @param clusterId - Cluster identifier
*/
export async function listCephOsd(clusterId: string): Promise<any[]> {
return await invoke<any[]>("list_ceph_osd", { clusterId });
}
/**
* Get Ceph Health
* @param clusterId - Cluster identifier
*/
export async function getCephHealth(clusterId: string): Promise<any> {
return await invoke<any>("get_ceph_health", { clusterId });
}
// ─── User Management (LDAP/AD/OpenID) ─────────────────────────────────────────
/**
* List authentication realms
* @param clusterId - Cluster identifier
*/
export async function listAuthRealms(clusterId: string): Promise<any[]> {
return await invoke<any[]>("list_auth_realms", { clusterId });
}
/**
* Add LDAP authentication realm
* @param clusterId - Cluster identifier
* @param realm - Realm configuration
*/
export async function addLdapRealm(
clusterId: string,
realm: any
): Promise<void> {
await invoke("add_ldap_realm", { clusterId, realm });
}
/**
* Add Active Directory authentication realm
* @param clusterId - Cluster identifier
* @param realm - Realm configuration
*/
export async function addAdRealm(
clusterId: string,
realm: any
): Promise<void> {
await invoke("add_ad_realm", { clusterId, realm });
}
/**
* Add OpenID Connect authentication realm
* @param clusterId - Cluster identifier
* @param realm - Realm configuration
*/
export async function addOpenidRealm(
clusterId: string,
realm: any
): Promise<void> {
await invoke("add_openid_realm", { clusterId, realm });
}
// ─── ACME/Let's Encrypt ───────────────────────────────────────────────────────
/**
* List ACME accounts
* @param clusterId - Cluster identifier
*/
export async function listAcmeAccounts(clusterId: string): Promise<any[]> {
return await invoke<any[]>("list_acme_accounts", { clusterId });
}
/**
* Register ACME account
* @param clusterId - Cluster identifier
* @param account - Account configuration
*/
export async function registerAcmeAccount(
clusterId: string,
account: any
): Promise<void> {
await invoke("register_acme_account", { clusterId, account });
}
/**
* Get ACME challenges
* @param clusterId - Cluster identifier
*/
export async function getAcmeChallenges(clusterId: string): Promise<any[]> {
return await invoke<any[]>("get_acme_challenges", { clusterId });
}
// ─── APT Repository Management ────────────────────────────────────────────────
/**
* List APT updates
* @param clusterId - Cluster identifier
* @param nodeId - Node identifier
*/
export async function listAptUpdates(
clusterId: string,
nodeId: string
): Promise<any[]> {
return await invoke<any[]>("list_apt_updates", { clusterId, nodeId });
}
/**
* Update APT repositories
* @param clusterId - Cluster identifier
* @param nodeId - Node identifier
*/
export async function updateAptRepos(
clusterId: string,
nodeId: string
): Promise<void> {
await invoke("update_apt_repos", { clusterId, nodeId });
}
/**
* List APT repositories
* @param clusterId - Cluster identifier
* @param nodeId - Node identifier
*/
export async function listAptRepositories(
clusterId: string,
nodeId: string
): Promise<any[]> {
return await invoke<any[]>("list_apt_repositories", { clusterId, nodeId });
}
// ─── Remote Shell ─────────────────────────────────────────────────────────────
/**
* Get shell ticket for remote terminal access
* @param clusterId - Cluster identifier
* @param nodeId - Node identifier
*/
export async function getShellTicket(
clusterId: string,
nodeId: string
): Promise<any> {
return await invoke<any>("get_shell_ticket", { clusterId, nodeId });
}
// ─── Dashboard Views ──────────────────────────────────────────────────────────
/**
* List dashboard views
* @param clusterId - Cluster identifier
*/
export async function listViews(clusterId: string): Promise<any[]> {
return await invoke<any[]>("list_views", { clusterId });
}
/**
* Add a dashboard view
* @param clusterId - Cluster identifier
* @param view - View configuration
*/
export async function addView(clusterId: string, view: any): Promise<void> {
await invoke("add_view", { clusterId, view });
}
/**
* Update a dashboard view
* @param clusterId - Cluster identifier
* @param viewId - View identifier
* @param view - View configuration
*/
export async function updateView(
clusterId: string,
viewId: string,
view: any
): Promise<void> {
await invoke("update_view", { clusterId, viewId, view });
}
/**
* Delete a dashboard view
* @param clusterId - Cluster identifier
* @param viewId - View identifier
*/
export async function deleteView(
clusterId: string,
viewId: string
): Promise<void> {
await invoke("delete_view", { clusterId, viewId });
}
// ─── Certificate Management ───────────────────────────────────────────────────
/**
* List certificates
* @param clusterId - Cluster identifier
* @param nodeId - Node identifier
*/
export async function listCertificates(
clusterId: string,
nodeId: string
): Promise<any[]> {
return await invoke<any[]>("list_certificates", { clusterId, nodeId });
}
/**
* Upload a certificate
* @param clusterId - Cluster identifier
* @param nodeId - Node identifier
* @param cert - Certificate data
*/
export async function uploadCertificate(
clusterId: string,
nodeId: string,
cert: any
): Promise<void> {
await invoke("upload_certificate", { clusterId, nodeId, cert });
}
/**
* Get certificate details
* @param clusterId - Cluster identifier
* @param nodeId - Node identifier
* @param certId - Certificate identifier
*/
export async function getCertificate(
clusterId: string,
nodeId: string,
certId: string
): Promise<any> {
return await invoke<any>("get_certificate", { clusterId, nodeId, certId });
}
// ─── Firewall Management ──────────────────────────────────────────────────────
/**
* List firewall rules
* @param clusterId - Cluster identifier
* @param nodeId - Node identifier
*/
export async function listFirewallRules(
clusterId: string,
nodeId: string
): Promise<any[]> {
return await invoke<any[]>("list_firewall_rules", { clusterId, nodeId });
}
/**
* Add a firewall rule
* @param clusterId - Cluster identifier
* @param nodeId - Node identifier
* @param rule - Rule configuration
*/
export async function addFirewallRule(
clusterId: string,
nodeId: string,
rule: any
): Promise<void> {
await invoke("add_firewall_rule", { clusterId, nodeId, rule });
}
/**
* Delete a firewall rule
* @param clusterId - Cluster identifier
* @param nodeId - Node identifier
* @param ruleId - Rule identifier
*/
export async function deleteFirewallRule(
clusterId: string,
nodeId: string,
ruleId: number
): Promise<void> {
await invoke("delete_firewall_rule", { clusterId, nodeId, ruleId });
}
// ─── SDN Management ───────────────────────────────────────────────────────────
/**
* List SDN controllers
* @param clusterId - Cluster identifier
*/
export async function listSdnControllers(clusterId: string): Promise<any[]> {
return await invoke<any[]>("list_sdn_controllers", { clusterId });
}
/**
* List SDN virtual networks
* @param clusterId - Cluster identifier
*/
export async function listSdnVnets(clusterId: string): Promise<any[]> {
return await invoke<any[]>("list_sdn_vnets", { clusterId });
}
/**
* List SDN zones
* @param clusterId - Cluster identifier
*/
export async function listSdnZones(clusterId: string): Promise<any[]> {
return await invoke<any[]>("list_sdn_zones", { clusterId });
}
// ─── Ceph Cluster Management ──────────────────────────────────────────────────
/**
* List Ceph clusters
* @param clusterId - Cluster identifier
*/
export async function listCephClusters(clusterId: string): Promise<any[]> {
return await invoke<any[]>("list_ceph_clusters", { clusterId });
}
/**
* Get Ceph cluster status
* @param clusterId - Cluster identifier
*/
export async function getCephClusterStatus(clusterId: string): Promise<any> {
return await invoke<any>("get_ceph_cluster_status", { clusterId });
}
// ─── Remote Migration ─────────────────────────────────────────────────────────
/**
* Migrate a VM
* @param clusterId - Source cluster identifier
* @param nodeId - Node identifier
* @param vmId - VM identifier
* @param targetClusterId - Target cluster identifier
* @param online - Whether to migrate online
*/
export async function migrateVm(
clusterId: string,
nodeId: string,
vmId: number,
targetClusterId: string,
online: boolean
): Promise<void> {
await invoke("migrate_vm", {
clusterId,
nodeId,
vmId,
targetClusterId,
online,
});
}
/**
* List migration status
* @param clusterId - Cluster identifier
*/
export async function listMigrationStatus(clusterId: string): Promise<any[]> {
return await invoke<any[]>("list_migration_status", { clusterId });
}
// ─── System Updates ───────────────────────────────────────────────────────────
/**
* List updates
* @param clusterId - Cluster identifier
*/
export async function listUpdates(clusterId: string): Promise<any[]> {
return await invoke<any[]>("list_updates", { clusterId });
}
/**
* Refresh updates
* @param clusterId - Cluster identifier
*/
export async function refreshUpdates(clusterId: string): Promise<void> {
await invoke("refresh_updates", { clusterId });
}
/**
* Install updates
* @param clusterId - Cluster identifier
* @param updates - Updates to install
*/
export async function installUpdates(
clusterId: string,
updates: any[]
): Promise<void> {
await invoke("install_updates", { clusterId, updates });
}
// ─── Task Management ──────────────────────────────────────────────────────────
/**
* List tasks
* @param clusterId - Cluster identifier
* @param nodeId - Node identifier
*/
export async function listTasks(
clusterId: string,
nodeId: string
): Promise<any[]> {
return await invoke<any[]>("list_tasks", { clusterId, nodeId });
}
/**
* Get task status
* @param clusterId - Cluster identifier
* @param nodeId - Node identifier
* @param taskId - Task identifier
*/
export async function getTaskStatus(
clusterId: string,
nodeId: string,
taskId: string
): Promise<any> {
return await invoke<any>("get_task_status", { clusterId, nodeId, taskId });
}
/**
* Stop a task
* @param clusterId - Cluster identifier
* @param nodeId - Node identifier
* @param taskId - Task identifier
*/
export async function stopTask(
clusterId: string,
nodeId: string,
taskId: string
): Promise<void> {
await invoke("stop_task", { clusterId, nodeId, taskId });
}
// ─── Metric Collection ────────────────────────────────────────────────────────
/**
* Get metrics summary
* @param clusterId - Cluster identifier
*/
export async function getMetricsSummary(clusterId: string): Promise<any> {
return await invoke<any>("get_metrics_summary", { clusterId });
}
/**
* List metric collections
* @param clusterId - Cluster identifier
*/
export async function listMetricCollections(
clusterId: string
): Promise<any[]> {
return await invoke<any[]>("list_metric_collections", { clusterId });
}