From: David Riley <d.riley@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [PATCH pve-manager 3/9] fix #7294: ui: pool: add SDN VNets as pool members
Date: Thu, 11 Jun 2026 16:59:29 +0200 [thread overview]
Message-ID: <20260611145935.147788-4-d.riley@proxmox.com> (raw)
In-Reply-To: <20260611145935.147788-1-d.riley@proxmox.com>
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 | 13 ++++
www/manager6/Utils.js | 1 +
www/manager6/grid/PoolMembers.js | 102 +++++++++++++++++++++++++++++++
3 files changed, 116 insertions(+)
diff --git a/www/css/ext6-pve.css b/www/css/ext6-pve.css
index 27742a74..9ec2a3af 100644
--- a/www/css/ext6-pve.css
+++ b/www/css/ext6-pve.css
@@ -470,6 +470,19 @@ div.right-aligned {
content: " ";
}
+.x-fa-pool-net:before {
+ width: 14px;
+ height: 14px;
+ position: absolute;
+ left: 1px;
+ top: 1px;
+}
+
+.x-fa-pool-net-grid:before {
+ left: 14px;
+ top: 6px;
+}
+
.x-fa-treepanel:before {
width: 16px;
height: 24px;
diff --git a/www/manager6/Utils.js b/www/manager6/Utils.js
index bbf59d8f..80331933 100644
--- a/www/manager6/Utils.js
+++ b/www/manager6/Utils.js
@@ -1320,6 +1320,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..3c902b67 100644
--- a/www/manager6/grid/PoolMembers.js
+++ b/www/manager6/grid/PoolMembers.js
@@ -158,6 +158,88 @@ 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 () {
+ var 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: 'pveSDNZoneSelector',
+ fieldLabel: gettext('Zone'),
+ name: 'zone',
+ allowBlank: false,
+ bind: {
+ value: '{zone}',
+ },
+ listeners: {
+ change: function (_f, _value) {
+ var vnetField = me.down('field[name=vnet]');
+ if (vnetField) {
+ vnetField.setValue('');
+ }
+ },
+ },
+ },
+ {
+ xtype: 'pveSDNVnetSelector',
+ fieldLabel: gettext('VNet'),
+ name: 'vnet',
+ allowBlank: false,
+ bind: {
+ disabled: '{vnetDisabled}',
+ },
+ listeners: {
+ beforequery: function (_queryPlan) {
+ var zone = me.getViewModel().get('zone');
+ var 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 +305,17 @@ Ext.define('PVE.grid.PoolMembers', {
rec.data.type === 'openvz'
) {
params.vms = rec.data.vmid;
+ } else if (rec.data.type === 'network') {
+ if (rec.get('network-type') === 'vnet') {
+ let [_type, zone, vnet, tag] = rec.data.id.split('/');
+
+ params.zone = zone;
+ params.vnet = vnet;
+
+ if (tag) {
+ params.tag = tag;
+ }
+ }
} else {
throw 'unknown resource type';
}
@@ -268,6 +361,15 @@ Ext.define('PVE.grid.PoolMembers', {
win.show();
},
},
+ {
+ text: gettext('VNet'),
+ iconCls: 'fa fa-network-wired x-fa-pool-net',
+ handler: function () {
+ var win = Ext.create('PVE.pool.AddVnet', { pool: me.pool });
+ win.on('destroy', reload);
+ win.show();
+ },
+ },
],
}),
},
--
2.47.3
next prev parent reply other threads:[~2026-06-11 15:00 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-11 14:59 [PATCH access-control/cluster/manager/network/qemu-server 0/9] fix #7294: pool: add SDN VNets as pool members David Riley
2026-06-11 14:59 ` [PATCH pve-manager 1/9] ui: replace var with let to match style guide for variable declaration David Riley
2026-06-11 14:59 ` [PATCH pve-manager 2/9] fix #7294: api: pool: add SDN VNets as pool members David Riley
2026-06-11 14:59 ` David Riley [this message]
2026-06-11 14:59 ` [PATCH pve-access-control 4/9] fix #7294: acl: " David Riley
2026-06-11 14:59 ` [PATCH pve-network 5/9] fix #7294: sdn: register api formats for zones and vnets David Riley
2026-06-12 12:18 ` Gabriel Goller
2026-06-12 12:51 ` David Riley
2026-06-12 13:46 ` Gabriel Goller
2026-06-12 14:17 ` David Riley
2026-06-11 14:59 ` [PATCH pve-network 6/9] fix #7294: sdn: vnet: update pool members on vnet migration and deletion David Riley
2026-06-11 16:21 ` Gabriel Goller
2026-06-12 6:37 ` David Riley
2026-06-12 8:41 ` Gabriel Goller
2026-06-11 14:59 ` [PATCH pve-cluster 7/9] cluster: add helpers module with version comparison functions David Riley
2026-06-11 14:59 ` [PATCH pve-cluster 8/9] fix #7294: cluster: helpers: add cluster-wide version assertion David Riley
2026-06-11 14:59 ` [PATCH qemu-server 9/9] fix #7294: helpers: use cluster-wide version helper David Riley
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=20260611145935.147788-4-d.riley@proxmox.com \
--to=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