From: "Daniel Kral" <d.kral@proxmox.com>
To: "David Riley" <d.riley@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, 06 Jul 2026 16:17:07 +0200 [thread overview]
Message-ID: <DJRJWI71SQE8.39S52J8BTJA43@proxmox.com> (raw)
In-Reply-To: <20260626131035.112374-4-d.riley@proxmox.com>
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.
> .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.
> + },
> + },
> + },
> + {
> + 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?
> } 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-06 14:17 UTC|newest]
Thread overview: 23+ 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-06-26 13:10 ` [PATCH pve-manager v2 03/10] fix #7294: ui: " David Riley
2026-07-06 14:17 ` Daniel Kral [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-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-06 11:56 ` Daniel Kral
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-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-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-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-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=DJRJWI71SQE8.39S52J8BTJA43@proxmox.com \
--to=d.kral@proxmox.com \
--cc=d.riley@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