feat: add PBS datastore management and harden macOS keychain storage

Add Proxmox Backup Server datastore management: overview, datastore detail, download/prune/verify/GC dialogs, usePbs hook, backend commands, and tests.

Fix macOS keychain re-writes failing with 'item already exists': replace keyring 3 with keyring-core plus per-platform stores (macOS Keychain, Windows Credential Manager, Linux keyutils), recover by deleting the stale item and retrying once, and surface actionable messages for locked keychains.
This commit is contained in:
Matt
2026-08-13 01:02:33 +00:00
parent 5960102489
commit 039ac6f9d3
43 changed files with 4934 additions and 430 deletions
+5 -1
View File
@@ -25,7 +25,7 @@ use std::time::Duration;
use clustri::{
api_request, derive_node_url, AuthContext, AuthMode, ConnectionConfig, ConnectionManager,
EndpointConfig,
EndpointConfig, ServerType,
};
use reqwest::Method;
@@ -136,6 +136,7 @@ async fn manager_with_session(
username: Some(user.to_string()),
nodes: vec![],
cluster_id: None,
server_type: "pve".to_string(),
};
manager
.add_connection(config, &path)
@@ -155,6 +156,7 @@ fn ticket_auth(ticket: &str) -> AuthContext {
token: None,
ticket: Some(ticket.to_string()),
csrf_token: None,
server_type: ServerType::Pve,
}
}
@@ -909,6 +911,7 @@ async fn live_failover_to_fallback() {
username: Some(user.to_string()),
nodes: vec![],
cluster_id: None,
server_type: "pve".to_string(),
};
manager
.add_connection(config, &path)
@@ -993,6 +996,7 @@ async fn live_cluster_identity_consistent_across_nodes() {
username: Some(user.to_string()),
nodes: vec![],
cluster_id: None,
server_type: "pve".to_string(),
};
manager
.add_connection(config, &path)