[pdm-devel] [RFC network/proxmox{, -backup, -api-types, -yew-comp, -datacenter-manager} v2 00/32] Add initial SDN / EVPN integration

Gabriel Goller g.goller at proxmox.com
Tue Aug 26 14:22:00 CEST 2025


Don't have much experience with PDM, so I haven't looked at the code.

The patches don't apply cleanly anymore, but after a bit of manual
tinkering it works. As we found out together filtering vnets doesn't
work so we need to filter in the frontend for vnets which have a evpn
zone. The following patch fixes it:

diff --git a/ui/src/sdn/evpn/remote_tree.rs b/ui/src/sdn/evpn/remote_tree.rs
index e4b0fe46a121..4077693d29df 100644
--- a/ui/src/sdn/evpn/remote_tree.rs
+++ b/ui/src/sdn/evpn/remote_tree.rs
@@ -207,13 +207,12 @@ fn zones_to_vrf_view(
      for vnet in vnets {
          let vnet_data = &vnet.vnet;

-        let zone = zones
-            .iter()
-            .find(|zone| {
-                zone.remote == vnet.remote
-                    && vnet_data.zone.as_ref().expect("vnet has zone") == &zone.zone.zone
-            })
-            .expect("vnet has zone");
+        let Some(zone) = zones.iter().find(|zone| {
+            zone.remote == vnet.remote
+                && vnet_data.zone.as_ref().expect("vnet has zone") == &zone.zone.zone
+        }) else {
+            continue;
+        };

          let controller = controllers
              .iter()
diff --git a/ui/src/sdn/evpn/vrf_tree.rs b/ui/src/sdn/evpn/vrf_tree.rs
index 8b01b00eba26..2980d2379b0a 100644
--- a/ui/src/sdn/evpn/vrf_tree.rs
+++ b/ui/src/sdn/evpn/vrf_tree.rs
@@ -155,13 +155,12 @@ fn zones_to_vrf_view(
      for vnet in vnets {
          let vnet_data = &vnet.vnet;

-        let zone = zones
-            .iter()
-            .find(|zone| {
-                zone.remote == vnet.remote
-                    && vnet_data.zone.as_ref().expect("vnet has zone") == &zone.zone.zone
-            })
-            .expect("zone of vnet exists");
+        let Some(zone) = zones.iter().find(|zone| {
+            zone.remote == vnet.remote
+                && vnet_data.zone.as_ref().expect("vnet has zone") == &zone.zone.zone
+        }) else {
+            continue;
+        };

          let controller = controllers
              .iter()


A few small UI nits:
  * In the "Remotes" view, widen the "Name" column a bit, it's too narrow
  * In the "IP-VRFs" view, when fully expanding all the VNets, the "VNet"
    level text is indented more than the last child. So the "VNet" text
    is more to the left than the actual VNet name below. (I think this is
    the VNet icon missing.)
  * Clicking the refresh button should IMO not collapse the tree.

  * When clicking on "Add" the VNet icon is missing (The zone icon is
    there).
  * What about deleting zones and vnets? Would that be complex? If a
    remote fails to delete a vnet/zone, we could roll-back all the other
    ones using the lock thingy-right?
  * I think there is a min-character limit missing on the vnet name, I
    get:
      2025-08-26T14:16:38+02:00: failed to execute transaction on remote andiknowbangers: api error (status = 400: Parameter verification failed.
      vnet: invalid format - vnet ID 't' contains illegal characters
    when creating a vnet named "t".
  * IDK about the EVPN icon being a key :) Maybe we should already create a SDN
    "folder" and then an EVPN entry (like in PVE) so that we are ready
    adding more stuff afterwards.
  * Do we really want to auto-apply everything immediately? Should we
    maybe introduce a SDN "apply" thingy in PDM as well?




More information about the pdm-devel mailing list