From: David Riley <d.riley@proxmox.com>
To: Daniel Kral <d.kral@proxmox.com>, pve-devel@lists.proxmox.com
Subject: Re: [PATCH pve-manager v2 03/10] fix #7294: ui: pool: add SDN VNets as pool members
Date: Mon, 20 Jul 2026 10:21:36 +0200 [thread overview]
Message-ID: <313264dc-4b8d-4804-a427-91bed338c3b3@proxmox.com> (raw)
In-Reply-To: <DJRJWI71SQE8.39S52J8BTJA43@proxmox.com>
some comments inline.
On 7/6/26 4:17 PM, Daniel Kral wrote:
> On Fri Jun 26, 2026 at 3:10 PM CEST, David Riley wrote:
>> Add user interface to manage SDN VNets inside resource pools.
>> In the dialog window users can select an SDN zone, pick an associated
>> VNet, and optionally specify a VLAN tag.
>>
>> The VNet selector only shows VNets of the selected zone to prevent
>> invalid configurations.
>>
>> Link:https://bugzilla.proxmox.com/show_bug.cgi?id=7294
>> Signed-off-by: David Riley<d.riley@proxmox.com>
>> ---
>> www/css/ext6-pve.css | 15 ++++
>> www/manager6/Utils.js | 1 +
>> www/manager6/grid/PoolMembers.js | 123 +++++++++++++++++++++++++++++++
>> 3 files changed, 139 insertions(+)
>>
>> diff --git a/www/css/ext6-pve.css b/www/css/ext6-pve.css
>> index 5c37dd29..3c383dfa 100644
>> --- a/www/css/ext6-pve.css
>> +++ b/www/css/ext6-pve.css
>> @@ -464,6 +464,21 @@ div.right-aligned {
>> content: " ";
>> }
>>
>> +.x-fa-pool-net:before {
>> + width: 14px;
>> + height: 14px;
>> + position: absolute;
>> + left: 1px;
>> + top: 1px;
>> + opacity: 0.45;
>> +}
>> +
>> +.x-fa-pool-net-grid:before {
>> + left: 14px;
>> + top: 6px;
>> + opacity: 0.65;
>> +}
>> +
> The patch message should contain the information from patch #4, which
> explains why there is an opacity applied here.
Alright. I'll add an explanation.
>> .x-fa-treepanel:before {
>> width: 16px;
>> height: 24px;
>> diff --git a/www/manager6/Utils.js b/www/manager6/Utils.js
>> index 040b5ae0..8f53dfb6 100644
>> --- a/www/manager6/Utils.js
>> +++ b/www/manager6/Utils.js
>> @@ -1322,6 +1322,7 @@ Ext.define('PVE.Utils', {
>> const networkTypeMapping = {
>> fabric: 'fa fa-road',
>> zone: 'fa fa-th',
>> + vnet: 'fa fa-network-wired x-fa-pool-net x-fa-pool-net-grid',
>> };
>>
>> return networkTypeMapping[record['network-type']] ?? '';
>> diff --git a/www/manager6/grid/PoolMembers.js b/www/manager6/grid/PoolMembers.js
>> index 69f50e30..5aaa2b71 100644
>> --- a/www/manager6/grid/PoolMembers.js
>> +++ b/www/manager6/grid/PoolMembers.js
>> @@ -158,6 +158,108 @@ Ext.define('PVE.pool.AddStorage', {
>> },
>> });
>>
>> +Ext.define('PVE.pool.AddVnet', {
>> + extend: 'Proxmox.window.Edit',
>> +
>> + viewModel: {
>> + data: {
>> + zone: '',
>> + },
>> + formulas: {
>> + vnetDisabled: function (get) {
>> + return !get('zone');
>> + },
>> + },
>> + },
>> +
>> + initComponent: function () {
>> + let me = this;
>> +
>> + if (!me.pool) {
>> + throw 'no pool specified';
>> + }
>> +
>> + me.isCreate = true;
>> + me.isAdd = true;
>> + me.url = '/pools/';
>> + me.method = 'PUT';
>> + me.extraRequestParams.poolid = me.pool;
>> +
>> + Ext.apply(me, {
>> + subject: gettext('VNet'),
>> + width: 350,
>> + items: [
>> + {
>> + xtype: 'inputpanel',
>> + onGetValues: function (values) {
>> + let network = `zone=${values.zone},vnet=${values.vnet}`;
>> +
>> + if (values.tag) {
>> + network += `,tag=${values.tag}`;
>> + }
>> +
>> + delete values.zone;
>> + delete values.vnet;
>> + delete values.tag;
>> +
>> + values.network = network;
>> +
>> + return values;
>> + },
>> + items: [
>> + {
>> + xtype: 'pveSDNZoneSelector',
>> + fieldLabel: gettext('Zone'),
>> + name: 'zone',
>> + allowBlank: false,
>> + bind: {
>> + value: '{zone}',
>> + },
>> + listeners: {
>> + change: function (_f, _value) {
>> + let vnetField = me.down('field[name=vnet]');
>> + if (vnetField) {
>> + vnetField.setValue('');
>> + }
> nit: might be nice to use a 'reference' on 'vnet' and then reference it
> here with lookupReference('vnet'), but no hard feelings.
Would make the code a little cleaner. I'll refactored it.
>> + },
>> + },
>> + },
>> + {
>> + xtype: 'pveSDNVnetSelector',
>> + fieldLabel: gettext('VNet'),
>> + name: 'vnet',
>> + allowBlank: false,
>> + bind: {
>> + disabled: '{vnetDisabled}',
>> + },
>> + listeners: {
>> + beforequery: function (_queryPlan) {
>> + let zone = me.getViewModel().get('zone');
>> + let store = this.getStore();
>> + store.clearFilter();
>> + store.filter('zone', zone);
>> + return true;
>> + },
>> + },
>> + },
>> + {
>> + xtype: 'proxmoxintegerfield',
>> + name: 'tag',
>> + fieldLabel: gettext('VLAN Tag'),
>> + minValue: 1,
>> + maxValue: 4094,
>> + allowBlank: true,
>> + emptyText: gettext('All'),
>> + },
>> + ],
>> + },
>> + ],
>> + });
>> +
>> + me.callParent();
>> + },
>> +});
>> +
>> Ext.define('PVE.grid.PoolMembers', {
>> extend: 'Ext.grid.GridPanel',
>> alias: ['widget.pvePoolMembers'],
>> @@ -223,6 +325,18 @@ Ext.define('PVE.grid.PoolMembers', {
>> rec.data.type === 'openvz'
>> ) {
>> params.vms = rec.data.vmid;
>> + } else if (rec.get('type') === 'network') {
>> + if (rec.get('network-type') === 'vnet') {
>> + let [_type, zone, vnet, tag] = rec.data.id.split('/');
>> +
>> + let network = `zone=${zone},vnet=${vnet}`;
>> +
>> + if (tag) {
>> + network += `,tag=${tag}`;
>> + }
>> +
>> + params.network = network;
>> + }
> should maybe console.warn() or something similar if the network type is
> not recognized?
That should never be the case, but adding an else here might at least make it
immediately visible. So I'll consider adding it.
>> } else {
>> throw 'unknown resource type';
>> }
>> @@ -268,6 +382,15 @@ Ext.define('PVE.grid.PoolMembers', {
>> win.show();
>> },
>> },
>> + {
>> + text: gettext('VNet'),
>> + iconCls: 'fa fa-network-wired x-fa-pool-net',
>> + handler: function () {
>> + let win = Ext.create('PVE.pool.AddVnet', { pool: me.pool });
>> + win.on('destroy', reload);
>> + win.show();
>> + },
>> + },
>> ],
>> }),
>> },
>
next prev parent reply other threads:[~2026-07-20 8:21 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-26 13:10 [PATCH access-control/cluster/common/manager/network/proxmox-widget-toolkit/qemu-server v2 00/10] fix #7294: pool: add SDN VNets as pool members David Riley
2026-06-26 13:10 ` [PATCH pve-manager v2 01/10] ui: replace var with let to match style guide for variable declaration David Riley
2026-07-03 13:14 ` Daniel Kral
2026-06-26 13:10 ` [PATCH pve-manager v2 02/10] fix #7294: api: pool: add SDN VNets as pool members David Riley
2026-07-03 13:19 ` Daniel Kral
2026-07-20 8:20 ` David Riley
2026-06-26 13:10 ` [PATCH pve-manager v2 03/10] fix #7294: ui: " David Riley
2026-07-06 14:17 ` Daniel Kral
2026-07-20 8:21 ` David Riley [this message]
2026-06-26 13:10 ` [PATCH proxmox-widget-toolkit v2 04/10] fix #7294: css: theme: add opacity override for pool VNet icon David Riley
2026-07-03 13:30 ` Daniel Kral
2026-07-20 8:22 ` David Riley
2026-06-26 13:10 ` [PATCH pve-access-control v2 05/10] fix #7294: acl: pool: add SDN VNets as pool members David Riley
2026-07-03 14:35 ` Daniel Kral
2026-07-20 8:24 ` David Riley
2026-07-06 11:56 ` Daniel Kral
2026-07-20 8:23 ` David Riley
2026-06-26 13:10 ` [PATCH pve-network v2 06/10] fix #7294: sdn: register api formats for zones and vnets David Riley
2026-07-06 12:21 ` Daniel Kral
2026-07-20 8:24 ` David Riley
2026-06-26 13:10 ` [PATCH pve-network v2 07/10] fix #7294: sdn: vnet: update pool members on vnet migration and deletion David Riley
2026-07-06 12:29 ` Daniel Kral
2026-07-20 8:24 ` David Riley
2026-06-26 13:10 ` [PATCH pve-common v2 08/10] tools: add helpers for version comparison David Riley
2026-07-06 13:02 ` Daniel Kral
2026-06-26 13:10 ` [PATCH pve-cluster v2 09/10] fix #7294: cluster: helpers: add cluster-wide version assertion David Riley
2026-07-06 13:00 ` Daniel Kral
2026-07-20 8:25 ` David Riley
2026-06-26 13:10 ` [PATCH qemu-server v2 10/10] fix #7294: helpers: use cluster-wide version helper David Riley
2026-07-06 13:20 ` Daniel Kral
2026-07-20 8:26 ` David Riley
2026-07-06 14:07 ` [PATCH access-control/cluster/common/manager/network/proxmox-widget-toolkit/qemu-server v2 00/10] fix #7294: pool: add SDN VNets as pool members Daniel Kral
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=313264dc-4b8d-4804-a427-91bed338c3b3@proxmox.com \
--to=d.riley@proxmox.com \
--cc=d.kral@proxmox.com \
--cc=pve-devel@lists.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox