From: Dominik Csapak <d.csapak@proxmox.com>
To: Proxmox Datacenter Manager development discussion
<pdm-devel@lists.proxmox.com>,
Stefan Hanreich <s.hanreich@proxmox.com>
Subject: Re: [pdm-devel] [RFC network/proxmox{, -backup, -api-types, -yew-comp, -datacenter-manager} v2 00/32] Add initial SDN / EVPN integration
Date: Tue, 26 Aug 2025 16:12:27 +0200 [thread overview]
Message-ID: <62b73a6d-3672-425b-b12f-2a475765aa64@proxmox.com> (raw)
In-Reply-To: <2a7408e0-9343-47b3-979b-d3bd959ed6c1@proxmox.com>
On 8/26/25 4:07 PM, Stefan Hanreich wrote:
> On 8/26/25 2:21 PM, Gabriel Goller wrote:
>> 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:
>
> will rebase in a v3
>
>> 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.
>
> Not sure how I can prevent that, since I rebuild the tree after every
> request so it will 'reset' to the collapsed state. Maybe @Dominik has an
> idea?
>
for the root node of a tree, there are
`extract_expanded_state()` and `apply_expanded_state()` so
the idea here is you extract the state, refresh, and then apply the old
state again. assuming the keys did not change, this should keep the
expansion state
>> * When clicking on "Add" the VNet icon is missing (The zone icon is
>> there).
>
> Weird, the icon should be included in the patch series and showed
> correctly on my machine. I'll check it out!
>
>> * 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?
>
> shouldn't be too hard to add in a future patch series, but I had to make
> a scope cut somewhere for now since I was already running quite late
> with the series.
>
>> * 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?
>
> In the future we could certainly implement that, but currently we are
> only using the running configuration as source for the PDM tree.
>
> If we want to render things correctly on PDM side after adding Zones /
> VNets, we'd have to read the pending configuration and then special case
> new / changed / deleted entities and respect that state while merging -
> which is more complex than this current approach so I've left it out for
> now. Certainly something for the future though.
>
>
> Thanks for the review, I'll incorporate your suggestions in a v3!
>
>
>
> _______________________________________________
> pdm-devel mailing list
> pdm-devel@lists.proxmox.com
> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel
_______________________________________________
pdm-devel mailing list
pdm-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pdm-devel
next prev parent reply other threads:[~2025-08-26 14:13 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-22 13:49 Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH proxmox v2 1/2] schema: use i64 for minimum / maximum / default integer values Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH proxmox v2 2/2] pbs-api-types: fix values for integer schemas Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH proxmox-backup v2 1/1] api: change integer schema parameters to i64 Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH pve-network v2 1/6] sdn: api: return null for rollback / lock endpoints Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH pve-network v2 2/6] controllers: fix maximum value for ASN Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH pve-network v2 3/6] api: add state standard option Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH pve-network v2 4/6] api: controllers: update schema of endpoints Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH pve-network v2 5/6] api: vnets: " Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH pve-network v2 6/6] api: zones: " Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH proxmox-api-types v2 1/7] add QemuMigratePreconditionsNotAllowedNodesBlockingHaResources struct Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH proxmox-api-types v2 2/7] sdn: add list/create zone endpoints Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH proxmox-api-types v2 3/7] sdn: add list/create vnet endpoints Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH proxmox-api-types v2 4/7] sdn: add list/create controller endpoints Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH proxmox-api-types v2 5/7] sdn: add sdn configuration locking endpoints Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH proxmox-api-types v2 6/7] tasks: add helper for querying successfully finished tasks Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH proxmox-api-types v2 7/7] sdn: add helpers for pending values Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH proxmox-yew-comp v2 1/1] sdn: add descriptions for sdn tasks Stefan Hanreich
2025-08-26 13:22 ` Dominik Csapak
2025-08-26 14:06 ` Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH proxmox-datacenter-manager v2 01/15] server: add locked sdn client helpers Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH proxmox-datacenter-manager v2 02/15] api: sdn: add list_zones endpoint Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH proxmox-datacenter-manager v2 03/15] api: sdn: add create_zone endpoint Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH proxmox-datacenter-manager v2 04/15] api: sdn: add list_vnets endpoint Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH proxmox-datacenter-manager v2 05/15] api: sdn: add create_vnet endpoint Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH proxmox-datacenter-manager v2 06/15] api: sdn: add list_controllers endpoint Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH proxmox-datacenter-manager v2 07/15] ui: sdn: add EvpnRouteTarget type Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH proxmox-datacenter-manager v2 08/15] ui: sdn: add vnet icon Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH proxmox-datacenter-manager v2 09/15] ui: sdn: add remote tree component Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH proxmox-datacenter-manager v2 10/15] ui: add view for showing ip vrfs Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH proxmox-datacenter-manager v2 11/15] ui: sdn: add AddVnetWindow component Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH proxmox-datacenter-manager v2 12/15] ui: sdn: add AddZoneWindow component Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH proxmox-datacenter-manager v2 13/15] ui: sdn: add EvpnPanel Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH proxmox-datacenter-manager v2 14/15] ui: sdn: add EvpnPanel to main menu Stefan Hanreich
2025-08-22 13:49 ` [pdm-devel] [PATCH proxmox-datacenter-manager v2 15/15] pve: sdn: add descriptions for sdn tasks Stefan Hanreich
2025-08-26 12:22 ` [pdm-devel] [RFC network/proxmox{, -backup, -api-types, -yew-comp, -datacenter-manager} v2 00/32] Add initial SDN / EVPN integration Gabriel Goller
2025-08-26 14:06 ` Stefan Hanreich
2025-08-26 14:12 ` Dominik Csapak [this message]
2025-08-26 14:13 ` Stefan Hanreich
2025-08-26 14:24 ` Dominik Csapak
2025-08-26 14:25 ` Stefan Hanreich
2025-08-27 11:35 ` [pdm-devel] superseded: " Stefan Hanreich
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=62b73a6d-3672-425b-b12f-2a475765aa64@proxmox.com \
--to=d.csapak@proxmox.com \
--cc=pdm-devel@lists.proxmox.com \
--cc=s.hanreich@proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.