[pdm-devel] [PATCH datacenter-manager v4 15/23] ui: pve wizard: info: detect hostname and fingerprint

Dominik Csapak d.csapak at proxmox.com
Fri Aug 22 10:32:33 CEST 2025


Instead of always inserting the initial host into the nodelist
(which will always be duplicate since it will be also contained in
the node list), try to match the hostname and or fingerprint with
any of the given node, so we can deduplicate that.

Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
 ui/src/remotes/wizard_page_info.rs | 37 ++++++++++++++++++++++++------
 1 file changed, 30 insertions(+), 7 deletions(-)

diff --git a/ui/src/remotes/wizard_page_info.rs b/ui/src/remotes/wizard_page_info.rs
index e2a4a3d..943a08f 100644
--- a/ui/src/remotes/wizard_page_info.rs
+++ b/ui/src/remotes/wizard_page_info.rs
@@ -104,13 +104,36 @@ async fn scan(connection_params: ConnectParams, form_ctx: FormContext) -> Result
     let mut result = crate::pdm_client()
         .pve_scan_remote(&hostname, fingerprint.as_deref(), &authid, &token)
         .await?;
-    result.nodes.insert(
-        0,
-        PropertyString::new(NodeUrl {
-            hostname,
-            fingerprint,
-        }),
-    );
+
+    // try to deduplicate the entered info from the first page with the nodelist here
+    // either via the hostname or the fingerprint. if none matches the entered info will
+    // be an extra entry in the first position
+    let mut found_matching_host = false;
+    for node in result.nodes.iter_mut() {
+        if node.hostname == hostname {
+            if fingerprint.is_none() {
+                node.fingerprint = None;
+            }
+            found_matching_host = true;
+            continue;
+        }
+        if node.fingerprint.as_ref().map(|fp| fp.to_uppercase())
+            == fingerprint.as_ref().map(|fp| fp.to_uppercase())
+        {
+            found_matching_host = true;
+            node.hostname = hostname.clone();
+            continue;
+        }
+    }
+    if !found_matching_host {
+        result.nodes.insert(
+            0,
+            PropertyString::new(NodeUrl {
+                hostname,
+                fingerprint: fingerprint.map(|fp| fp.to_uppercase()),
+            }),
+        );
+    }
     result.nodes.sort_by(|a, b| a.hostname.cmp(&b.hostname));
     Ok(result)
 }
-- 
2.47.2





More information about the pdm-devel mailing list