From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id D3A4762D54 for ; Tue, 24 Nov 2020 14:52:33 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id B9F4FD644 for ; Tue, 24 Nov 2020 14:52:32 +0100 (CET) Received: from kvmformation1.odiso.net (globalOdiso.M6Lille.odiso.net [89.248.211.242]) by firstgate.proxmox.com (Proxmox) with ESMTP id 39855D462 for ; Tue, 24 Nov 2020 14:52:24 +0100 (CET) Received: by kvmformation1.odiso.net (Postfix, from userid 0) id E7CBF1132B11; Tue, 24 Nov 2020 14:52:23 +0100 (CET) From: Alexandre Derumier To: pve-devel@lists.proxmox.com Date: Tue, 24 Nov 2020 14:52:15 +0100 Message-Id: <20201124135221.2856467-10-aderumier@odiso.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20201124135221.2856467-1-aderumier@odiso.com> References: <20201124135221.2856467-1-aderumier@odiso.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 1 AWL -0.242 Adjusted score from AWL reputation of From: address HEADER_FROM_DIFFERENT_DOMAINS 0.249 From and EnvelopeFrom 2nd level mail domains are different KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment KAM_LAZY_DOMAIN_SECURITY 1 Sending domain does not have any anti-forgery methods KHOP_HELO_FCRDNS 0.399 Relay HELO differs from its IP's reverse DNS NO_DNS_FOR_FROM 0.379 Envelope sender has no MX or A DNS records SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_NONE 0.001 SPF: sender does not publish an SPF Record Subject: [pve-devel] [PATCH v7 pve-manager 09/15] add vnet panel with vnet + subnets split view X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 24 Nov 2020 13:52:33 -0000 Signed-off-by: Alexandre Derumier --- www/manager6/Makefile | 5 +-- www/manager6/dc/Config.js | 10 +----- www/manager6/sdn/SubnetEdit.js | 13 +++---- www/manager6/sdn/SubnetView.js | 62 ++++++++++++++++++++++------------ www/manager6/sdn/VnetPanel.js | 39 +++++++++++++++++++++ www/manager6/sdn/VnetView.js | 14 ++++++-- 6 files changed, 100 insertions(+), 43 deletions(-) create mode 100644 www/manager6/sdn/VnetPanel.js diff --git a/www/manager6/Makefile b/www/manager6/Makefile index 5bd062b0..d30b6529 100644 --- a/www/manager6/Makefile +++ b/www/manager6/Makefile @@ -228,8 +228,9 @@ JSSRC= \ sdn/StatusView.js \ sdn/VnetEdit.js \ sdn/VnetView.js \ - sdn/SubnetEdit.js \ - sdn/SubnetView.js \ + sdn/VnetPanel.js \ + sdn/SubnetEdit.js \ + sdn/SubnetView.js \ sdn/ZoneContentView.js \ sdn/ZoneView.js \ sdn/controllers/Base.js \ diff --git a/www/manager6/dc/Config.js b/www/manager6/dc/Config.js index b48eac3c..48238a4e 100644 --- a/www/manager6/dc/Config.js +++ b/www/manager6/dc/Config.js @@ -170,21 +170,13 @@ Ext.define('PVE.dc.Config', { itemId: 'sdnzone' }, { - xtype: 'pveSDNVnetView', + xtype: 'pveSDNVnet', groups: ['sdn'], title: gettext('Vnets'), hidden: true, iconCls: 'fa fa-network-wired', itemId: 'sdnvnet' }, - { - xtype: 'pveSDNSubnetView', - groups: ['sdn'], - title: gettext('Subnets'), - hidden: true, - iconCls: 'fa fa-network-wired', - itemId: 'sdnsubnet' - }, { xtype: 'pveSDNIpamView', groups: ['sdn'], diff --git a/www/manager6/sdn/SubnetEdit.js b/www/manager6/sdn/SubnetEdit.js index 8badc34a..d8c61dd6 100644 --- a/www/manager6/sdn/SubnetEdit.js +++ b/www/manager6/sdn/SubnetEdit.js @@ -32,13 +32,6 @@ Ext.define('PVE.sdn.SubnetInputPanel', { allowBlank: false, fieldLabel: gettext('Subnet'), }, - { - xtype: 'pveSDNVnetSelector', - fieldLabel: gettext('Vnet'), - name: 'vnet', - value: '', - allowBlank: true, - }, { xtype: 'textfield', name: 'gateway', @@ -107,16 +100,18 @@ Ext.define('PVE.sdn.SubnetEdit', { width: 350, + base_url: undefined, + initComponent: function() { var me = this; me.isCreate = me.subnet === undefined; if (me.isCreate) { - me.url = '/api2/extjs/cluster/sdn/subnets'; + me.url = me.base_url; me.method = 'POST'; } else { - me.url = '/api2/extjs/cluster/sdn/subnets/' + me.subnet; + me.url = me.base_url + '/' + me.subnet; me.method = 'PUT'; } diff --git a/www/manager6/sdn/SubnetView.js b/www/manager6/sdn/SubnetView.js index 012d127b..96240617 100644 --- a/www/manager6/sdn/SubnetView.js +++ b/www/manager6/sdn/SubnetView.js @@ -5,21 +5,38 @@ Ext.define('PVE.sdn.SubnetView', { stateful: true, stateId: 'grid-sdn-subnet', + base_url: undefined, + + remove_btn: undefined, + + setBaseUrl: function(url) { + var me = this; + + me.base_url = url; + + if (url === undefined) { + me.store.removeAll(); + } else { + me.remove_btn.baseurl = url + '/'; + me.store.setProxy({ + type: 'proxmox', + url: '/api2/json/' + url + }); + + me.store.load(); + } + }, + initComponent : function() { let me = this; - let store = new Ext.data.Store({ - model: 'pve-sdn-subnet', - proxy: { - type: 'proxmox', - url: "/api2/json/cluster/sdn/subnets" - }, - sorters: { - property: 'subnet', - order: 'DESC' - } - }); - let reload = () => store.load(); + var store = new Ext.data.Store({ + model: 'pve-sdn-subnet' + }); + + var reload = function() { + store.load(); + }; let sm = Ext.create('Ext.selection.RowModel', {}); @@ -29,6 +46,7 @@ Ext.define('PVE.sdn.SubnetView', { let win = Ext.create('PVE.sdn.SubnetEdit',{ autoShow: true, subnet: rec.data.subnet, + base_url: me.base_url, }); win.on('destroy', reload); }; @@ -40,10 +58,12 @@ Ext.define('PVE.sdn.SubnetView', { handler: run_editor, }); - let remove_btn = Ext.create('Proxmox.button.StdRemoveButton', { + me.remove_btn = Ext.create('Proxmox.button.StdRemoveButton', { selModel: sm, - baseurl: '/cluster/sdn/subnets/', - callback: reload + baseurl: me.base_url + '/', + callback: function() { + reload(); + }, }); Ext.apply(me, { @@ -59,12 +79,13 @@ Ext.define('PVE.sdn.SubnetView', { handler: function() { let win = Ext.create('PVE.sdn.SubnetEdit', { autoShow: true, + base_url: me.base_url, type: 'subnet', }); win.on('destroy', reload); } }, - remove_btn, + me.remove_btn, edit_btn, ], columns: [ @@ -73,11 +94,6 @@ Ext.define('PVE.sdn.SubnetView', { flex: 2, dataIndex: 'cidr' }, - { - header: gettext('Vnet'), - flex: 1, - dataIndex: 'vnet', - }, { header: gettext('Gateway'), flex: 1, @@ -101,6 +117,10 @@ Ext.define('PVE.sdn.SubnetView', { }); me.callParent(); + + if (me.base_url) { + me.setBaseUrl(me.base_url); // load + } } }, function() { diff --git a/www/manager6/sdn/VnetPanel.js b/www/manager6/sdn/VnetPanel.js new file mode 100644 index 00000000..4b1cbc6e --- /dev/null +++ b/www/manager6/sdn/VnetPanel.js @@ -0,0 +1,39 @@ +Ext.define('PVE.sdn.Vnet', { + extend: 'Ext.panel.Panel', + alias: 'widget.pveSDNVnet', + + title: 'Vnet', + + onlineHelp: 'pvesdn_config_vnet', + + initComponent: function() { + var me = this; + + var subnetview_panel = Ext.createWidget('pveSDNSubnetView', { + title: gettext('Subnets'), + region: 'center', + border: false + }); + + var vnetview_panel = Ext.createWidget('pveSDNVnetView', { + title: 'Vnets', + region: 'west', + subnetview_panel: subnetview_panel, + width: '50%', + border: false, + split: true + }); + + Ext.apply(me, { + layout: 'border', + items: [ vnetview_panel, subnetview_panel ], + listeners: { + show: function() { + subnetview_panel.fireEvent('show', subnetview_panel); + } + } + }); + + me.callParent(); + } +}); diff --git a/www/manager6/sdn/VnetView.js b/www/manager6/sdn/VnetView.js index eefb6e42..e3d86c9a 100644 --- a/www/manager6/sdn/VnetView.js +++ b/www/manager6/sdn/VnetView.js @@ -7,6 +7,8 @@ Ext.define('PVE.sdn.VnetView', { stateful: true, stateId: 'grid-sdn-vnet', + subnetview_panel: undefined, + initComponent : function() { let me = this; @@ -100,10 +102,18 @@ Ext.define('PVE.sdn.VnetView', { ], listeners: { activate: reload, - itemdblclick: run_editor + itemdblclick: run_editor, + show: reload, + select: function(sm, rec) { + var url = '/cluster/sdn/vnets/' + rec.data.vnet + '/subnets'; + me.subnetview_panel.setBaseUrl(url); + }, + deselect: function() { + me.subnetview_panel.setBaseUrl(undefined); + }, } }); - + store.load(); me.callParent(); } }); -- 2.20.1