public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH V2 manager 0/3] add iscsi, lvm, lvmthin & zfs storage on all cluster nodes
@ 2022-06-22 14:39 Stefan Hrdlicka
  2022-06-22 14:39 ` [pve-devel] [PATCH V2 manager 1/3] fix #2822: add iscsi, lvm, lvmthin & zfs storage for " Stefan Hrdlicka
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Stefan Hrdlicka @ 2022-06-22 14:39 UTC (permalink / raw)
  To: pve-devel

The changes look huge only because the third commit changes all var
statements to let. The relevant files for this change are:


---
 www/manager6/storage/Base.js        | 42 ++++++++++++++++++++++
 www/manager6/storage/IScsiEdit.js   | 54 ++++++++++++++++++++++-------
 www/manager6/storage/LVMEdit.js     | 21 +++++++++--
 www/manager6/storage/LvmThinEdit.js | 35 ++++++++++++++-----
 www/manager6/storage/ZFSPoolEdit.js | 24 ++++++++++---
 5 files changed, 147 insertions(+), 29 deletions(-)


V1 -> V2:
# pve-storage
* removed because patch is not needed

# pve-manager (1/3)
* remove storage controller from V1
* added custom ComboBox with API URL & setNodeName function
* added scan node selection for iSCSI 
* scan node selection field no longer send to server

## (optional) pve-manager (2/3): cleanup related files
* var to let statement change
* some indentation

## ((very) optional) pve-manager (3/3): cleanup all var statements
* replaces all var with let statements


Stefan Hrdlicka (3):
  fix #2822: add iscsi, lvm, lvmthin & zfs storage for all cluster nodes
  cleanup: "var" to "let", fix some indentation in related files
  cleanup: "var" to "let" in all javascript files

 www/manager6/Parser.js                        |   8 +-
 www/manager6/StateProvider.js                 |   2 +-
 www/manager6/Utils.js                         | 139 +++++++++---------
 www/manager6/VNCConsole.js                    |  10 +-
 www/manager6/Workspace.js                     |  12 +-
 www/manager6/button/ConsoleButton.js          |   4 +-
 www/manager6/button/Split.js                  |  10 +-
 www/manager6/ceph/CephInstallWizard.js        |  36 ++---
 www/manager6/ceph/Config.js                   |  16 +-
 www/manager6/ceph/Crush.js                    |   6 +-
 www/manager6/ceph/FS.js                       |   6 +-
 www/manager6/ceph/Log.js                      |   6 +-
 www/manager6/ceph/Pool.js                     |  10 +-
 www/manager6/ceph/Services.js                 |  12 +-
 www/manager6/ceph/Status.js                   |  16 +-
 www/manager6/ceph/StatusDetail.js             |   4 +-
 www/manager6/controller/StorageEdit.js        |   4 +-
 www/manager6/data/PermPathStore.js            |   2 +-
 www/manager6/data/ResourceStore.js            |   4 +-
 www/manager6/dc/ACLView.js                    |   6 +-
 www/manager6/dc/ACMEPluginEdit.js             |   2 +-
 www/manager6/dc/AuthEditBase.js               |   4 +-
 www/manager6/dc/AuthView.js                   |   2 +-
 www/manager6/dc/Backup.js                     |  14 +-
 www/manager6/dc/BackupJobDetail.js            |  10 +-
 www/manager6/dc/ClusterEdit.js                |   6 +-
 www/manager6/dc/Config.js                     |   4 +-
 www/manager6/dc/GroupEdit.js                  |   6 +-
 www/manager6/dc/GroupView.js                  |  22 +--
 www/manager6/dc/MetricServerView.js           |   2 +-
 www/manager6/dc/NodeView.js                   |   2 +-
 www/manager6/dc/OptionView.js                 |  10 +-
 www/manager6/dc/PoolView.js                   |  22 +--
 www/manager6/dc/RoleEdit.js                   |  10 +-
 www/manager6/dc/SecurityGroups.js             |  10 +-
 www/manager6/dc/Summary.js                    |  20 +--
 www/manager6/dc/Support.js                    |  16 +-
 www/manager6/dc/Tasks.js                      |   6 +-
 www/manager6/dc/UserEdit.js                   |   4 +-
 www/manager6/dc/UserView.js                   |  10 +-
 www/manager6/form/AgentFeatureSelector.js     |   2 +-
 www/manager6/form/BridgeSelector.js           |   6 +-
 www/manager6/form/BusTypeSelector.js          |   2 +-
 www/manager6/form/CephFSSelector.js           |   4 +-
 www/manager6/form/CephPoolSelector.js         |   4 +-
 www/manager6/form/ContentTypeSelector.js      |   2 +-
 www/manager6/form/ControllerSelector.js       |   2 +-
 www/manager6/form/DayOfWeekSelector.js        |   2 +-
 www/manager6/form/DiskStorageSelector.js      |  24 +--
 www/manager6/form/FileSelector.js             |   8 +-
 www/manager6/form/GlobalSearchField.js        |  14 +-
 www/manager6/form/GroupSelector.js            |   4 +-
 www/manager6/form/GuestIDSelector.js          |  12 +-
 www/manager6/form/HotplugFeatureSelector.js   |   6 +-
 www/manager6/form/IPRefSelector.js            |  10 +-
 www/manager6/form/MDevSelector.js             |   8 +-
 www/manager6/form/MemoryField.js              |  32 ++--
 www/manager6/form/NodeSelector.js             |   2 +-
 www/manager6/form/PCISelector.js              |   6 +-
 www/manager6/form/PoolSelector.js             |   4 +-
 www/manager6/form/QemuBiosSelector.js         |   2 +-
 www/manager6/form/SDNControllerSelector.js    |   4 +-
 www/manager6/form/SDNDnsSelector.js           |   4 +-
 www/manager6/form/SDNIpamSelector.js          |   4 +-
 www/manager6/form/SDNVnetSelector.js          |   4 +-
 www/manager6/form/SDNZoneSelector.js          |   4 +-
 www/manager6/form/SecurityGroupSelector.js    |   4 +-
 www/manager6/form/SnapshotSelector.js         |   6 +-
 www/manager6/form/SpiceEnhancementSelector.js |   8 +-
 www/manager6/form/StorageSelector.js          |   8 +-
 www/manager6/form/USBSelector.js              |   6 +-
 www/manager6/form/VLanField.js                |   4 +-
 www/manager6/form/VMCPUFlagSelector.js        |  30 ++--
 www/manager6/form/VMSelector.js               |  12 +-
 www/manager6/grid/BackupView.js               |  36 ++---
 www/manager6/grid/FirewallAliases.js          |   4 +-
 www/manager6/grid/FirewallOptions.js          |  18 +--
 www/manager6/grid/FirewallRules.js            |  64 ++++----
 www/manager6/grid/PoolMembers.js              |  32 ++--
 www/manager6/grid/Replication.js              |  20 +--
 www/manager6/grid/ResourceGrid.js             |   4 +-
 www/manager6/ha/Fencing.js                    |   4 +-
 www/manager6/ha/GroupEdit.js                  |  12 +-
 www/manager6/ha/GroupSelector.js              |   2 +-
 www/manager6/ha/Groups.js                     |  10 +-
 www/manager6/ha/ResourceEdit.js               |  28 ++--
 www/manager6/ha/Status.js                     |   2 +-
 www/manager6/ha/StatusView.js                 |   8 +-
 www/manager6/lxc/Config.js                    |  42 +++---
 www/manager6/lxc/CreateWizard.js              |   2 +-
 www/manager6/lxc/DNS.js                       |  50 +++----
 www/manager6/lxc/FeaturesEdit.js              |  10 +-
 www/manager6/lxc/MPEdit.js                    |   8 +-
 www/manager6/lxc/MPResize.js                  |  18 +--
 www/manager6/lxc/Options.js                   |  28 ++--
 www/manager6/lxc/ResourceEdit.js              |  14 +-
 www/manager6/lxc/Resources.js                 |  42 +++---
 www/manager6/node/ACME.js                     |  16 +-
 www/manager6/node/Certificates.js             |   4 +-
 www/manager6/node/Config.js                   |  20 +--
 www/manager6/node/Directory.js                |   2 +-
 www/manager6/node/LVMThin.js                  |   2 +-
 www/manager6/node/StatusView.js               |   4 +-
 www/manager6/node/Subscription.js             |  34 ++---
 www/manager6/node/Summary.js                  |  18 +--
 www/manager6/node/ZFS.js                      |   4 +-
 www/manager6/panel/ConfigPanel.js             |  58 ++++----
 www/manager6/panel/GuestStatusView.js         |  16 +-
 www/manager6/panel/GuestSummary.js            |  16 +-
 www/manager6/panel/HealthWidget.js            |   4 +-
 www/manager6/panel/IPSet.js                   |  62 ++++----
 www/manager6/panel/RunningChart.js            |   4 +-
 www/manager6/panel/StatusPanel.js             |  14 +-
 www/manager6/panel/TemplateStatusView.js      |   4 +-
 www/manager6/pool/Config.js                   |   4 +-
 www/manager6/pool/StatusView.js               |   6 +-
 www/manager6/pool/Summary.js                  |   8 +-
 www/manager6/qemu/AgentIPView.js              |  40 ++---
 www/manager6/qemu/AudioEdit.js                |   6 +-
 www/manager6/qemu/CDEdit.js                   |  32 ++--
 www/manager6/qemu/CIDriveEdit.js              |  16 +-
 www/manager6/qemu/CloudInit.js                |  68 ++++-----
 www/manager6/qemu/Config.js                   |  52 +++----
 www/manager6/qemu/CreateWizard.js             |  14 +-
 www/manager6/qemu/HDEdit.js                   |  38 ++---
 www/manager6/qemu/HDEfi.js                    |  12 +-
 www/manager6/qemu/HDResize.js                 |  14 +-
 www/manager6/qemu/HDTPM.js                    |  14 +-
 www/manager6/qemu/HardwareView.js             |  58 ++++----
 www/manager6/qemu/IPConfigEdit.js             |  24 +--
 www/manager6/qemu/KeyboardEdit.js             |   2 +-
 www/manager6/qemu/MemoryEdit.js               |  32 ++--
 www/manager6/qemu/Monitor.js                  |  39 ++---
 www/manager6/qemu/NetworkEdit.js              |  24 +--
 www/manager6/qemu/OSDefaults.js               |   2 +-
 www/manager6/qemu/OSTypeEdit.js               |  20 +--
 www/manager6/qemu/Options.js                  |  36 ++---
 www/manager6/qemu/PCIEdit.js                  |   8 +-
 www/manager6/qemu/ProcessorEdit.js            |  18 +--
 www/manager6/qemu/RNGEdit.js                  |   6 +-
 www/manager6/qemu/SSHKey.js                   |  12 +-
 www/manager6/qemu/ScsiHwEdit.js               |   2 +-
 www/manager6/qemu/SerialEdit.js               |  12 +-
 www/manager6/qemu/Smbios1Edit.js              |  14 +-
 www/manager6/qemu/SystemEdit.js               |   4 +-
 www/manager6/qemu/USBEdit.js                  |  20 +--
 www/manager6/sdn/Browser.js                   |   8 +-
 www/manager6/sdn/ControllerView.js            |   6 +-
 www/manager6/sdn/Status.js                    |   2 +-
 www/manager6/sdn/StatusView.js                |   8 +-
 www/manager6/sdn/SubnetEdit.js                |   2 +-
 www/manager6/sdn/SubnetView.js                |   2 +-
 www/manager6/sdn/VnetEdit.js                  |   2 +-
 www/manager6/sdn/VnetPanel.js                 |   6 +-
 www/manager6/sdn/VnetView.js                  |   2 +-
 www/manager6/sdn/ZoneContentView.js           |  14 +-
 www/manager6/sdn/ZoneView.js                  |   2 +-
 www/manager6/sdn/controllers/Base.js          |  10 +-
 www/manager6/sdn/controllers/BgpEdit.js       |   4 +-
 www/manager6/sdn/controllers/EvpnEdit.js      |   2 +-
 www/manager6/sdn/dns/Base.js                  |  12 +-
 www/manager6/sdn/dns/PowerdnsEdit.js          |   4 +-
 www/manager6/sdn/ipams/Base.js                |  12 +-
 www/manager6/sdn/ipams/NetboxEdit.js          |   4 +-
 www/manager6/sdn/ipams/PVEIpamEdit.js         |   4 +-
 www/manager6/sdn/ipams/PhpIpamEdit.js         |   4 +-
 www/manager6/sdn/zones/Base.js                |  12 +-
 www/manager6/sdn/zones/EvpnEdit.js            |   4 +-
 www/manager6/sdn/zones/SimpleEdit.js          |   4 +-
 www/manager6/sdn/zones/VlanEdit.js            |   4 +-
 www/manager6/sdn/zones/VxlanEdit.js           |   4 +-
 www/manager6/storage/BackupView.js            |  16 +-
 www/manager6/storage/Base.js                  |  54 ++++++-
 www/manager6/storage/Browser.js               |   8 +-
 www/manager6/storage/CIFSEdit.js              |  12 +-
 www/manager6/storage/CephFSEdit.js            |   2 +-
 www/manager6/storage/ContentView.js           |   4 +-
 www/manager6/storage/DirEdit.js               |   2 +-
 www/manager6/storage/GlusterFsEdit.js         |  12 +-
 www/manager6/storage/IScsiEdit.js             |  60 ++++++--
 www/manager6/storage/ImageView.js             |  22 +--
 www/manager6/storage/LVMEdit.js               |  35 +++--
 www/manager6/storage/LvmThinEdit.js           |  53 ++++---
 www/manager6/storage/NFSEdit.js               |  24 +--
 www/manager6/storage/PBSEdit.js               |   2 +-
 www/manager6/storage/RBDEdit.js               |  12 +-
 www/manager6/storage/Summary.js               |  10 +-
 www/manager6/storage/TemplateView.js          |  36 ++---
 www/manager6/storage/ZFSEdit.js               |   6 +-
 www/manager6/storage/ZFSPoolEdit.js           |  47 +++---
 www/manager6/tree/SnapshotTree.js             |  12 +-
 www/manager6/window/Backup.js                 |  18 +--
 www/manager6/window/BackupConfig.js           |   4 +-
 www/manager6/window/BulkAction.js             |  16 +-
 www/manager6/window/Clone.js                  |  38 ++---
 www/manager6/window/DownloadUrlToStorage.js   |   4 +-
 www/manager6/window/FirewallEnableEdit.js     |   2 +-
 www/manager6/window/FirewallLograteEdit.js    |   2 +-
 www/manager6/window/LoginWindow.js            |  62 ++++----
 www/manager6/window/Migrate.js                |  16 +-
 www/manager6/window/Prune.js                  |   6 +-
 www/manager6/window/Settings.js               |  26 ++--
 www/manager6/window/Snapshot.js               |   4 +-
 www/manager6/window/StartupEdit.js            |  10 +-
 www/manager6/window/Wizard.js                 |   4 +-
 205 files changed, 1522 insertions(+), 1403 deletions(-)

-- 
2.30.2





^ permalink raw reply	[flat|nested] 8+ messages in thread

* [pve-devel] [PATCH V2 manager 1/3] fix #2822: add iscsi, lvm, lvmthin & zfs storage for all cluster nodes
  2022-06-22 14:39 [pve-devel] [PATCH V2 manager 0/3] add iscsi, lvm, lvmthin & zfs storage on all cluster nodes Stefan Hrdlicka
@ 2022-06-22 14:39 ` Stefan Hrdlicka
  2022-06-28 10:33   ` Fabian Ebner
  2022-06-22 14:39 ` [pve-devel] [PATCH V2 manager 2/3] cleanup: "var" to "let", fix some indentation in related files Stefan Hrdlicka
  2022-06-22 14:39 ` [pve-devel] [PATCH V2 manager 3/3] cleanup: "var" to "let" in all javascript files Stefan Hrdlicka
  2 siblings, 1 reply; 8+ messages in thread
From: Stefan Hrdlicka @ 2022-06-22 14:39 UTC (permalink / raw)
  To: pve-devel

This adds a dropdown box for iSCSI, LVM, LVMThin & ZFS storage options where a
cluster node needs to be chosen. As default the current node is
selected. It restricts the the storage to be only availabe on the
selected node.

Signed-off-by: Stefan Hrdlicka <s.hrdlicka@proxmox.com>
---
 www/manager6/storage/Base.js        | 44 ++++++++++++++++++++++-
 www/manager6/storage/IScsiEdit.js   | 54 ++++++++++++++++++++++-------
 www/manager6/storage/LVMEdit.js     | 21 +++++++++--
 www/manager6/storage/LvmThinEdit.js | 35 ++++++++++++++-----
 www/manager6/storage/ZFSPoolEdit.js | 24 ++++++++++---
 5 files changed, 148 insertions(+), 30 deletions(-)

diff --git a/www/manager6/storage/Base.js b/www/manager6/storage/Base.js
index 7f6d7a09..bb497a5f 100644
--- a/www/manager6/storage/Base.js
+++ b/www/manager6/storage/Base.js
@@ -34,8 +34,9 @@ Ext.define('PVE.panel.StorageBase', {
 	me.column2 = me.column2 || [];
 	me.column2.unshift(
 	    {
-		xtype: 'pveNodeSelector',
+		xtype: 'pveScanNodeSelector',
 		name: 'nodes',
+		reference: 'storageNodeRestriction',
 		disabled: me.storageId === 'local',
 		fieldLabel: gettext('Nodes'),
 		emptyText: gettext('All') + ' (' + gettext('No restrictions') +')',
@@ -74,6 +75,47 @@ Ext.define('PVE.panel.StorageBase', {
 
 	me.callParent();
     },
+    getPveScanNodeSelector: function() {
+	return {
+	    xtype: 'pveScanNodeSelector',
+	    name: 'node',
+	    itemId: 'pveScanNodeSelector',
+	    fieldLabel: gettext('Scan node'),
+	    allowBlank: false,
+	    disallowedNodes: undefined,
+	    onlineValidator: true,
+	    preferredValue: Proxmox.NodeName,
+	    submitValue: false,
+	    autoEl: {
+		tag: 'div',
+		'data-qtip': gettext('Look for availabe storage options from selected node.'),
+	    },
+	};
+    },
+});
+
+Ext.define('PVE.storage.ComboBoxSetStoreNode', {
+    extend: 'Ext.form.field.ComboBox',
+    config: {
+	apiBaseUrl: '/api2/json/nodes/',
+	apiStoragePath: '',
+    },
+
+    setNodeName: function(value, storeLoad = true) {
+	let me = this;
+	if (value === null || value === '') {
+	    value = Proxmox.NodeName;
+	}
+
+	let store = me.getStore();
+	let proxy = store.getProxy();
+	proxy.setUrl(me.apiBaseUrl + value + me.apiStoragePath);
+	this.clearValue();
+	if (storeLoad) {
+	    store.load();
+	}
+    },
+
 });
 
 Ext.define('PVE.storage.BaseEdit', {
diff --git a/www/manager6/storage/IScsiEdit.js b/www/manager6/storage/IScsiEdit.js
index 2f35f882..c121273b 100644
--- a/www/manager6/storage/IScsiEdit.js
+++ b/www/manager6/storage/IScsiEdit.js
@@ -1,5 +1,5 @@
 Ext.define('PVE.storage.IScsiScan', {
-    extend: 'Ext.form.field.ComboBox',
+    extend: 'PVE.storage.ComboBoxSetStoreNode',
     alias: 'widget.pveIScsiScan',
 
     queryParam: 'portal',
@@ -10,6 +10,9 @@ Ext.define('PVE.storage.IScsiScan', {
 	loadingText: gettext('Scanning...'),
 	width: 350,
     },
+    config: {
+	apiStoragePath: '/scan/iscsi',
+    },
     doRawQuery: function() {
 	// do nothing
     },
@@ -42,7 +45,7 @@ Ext.define('PVE.storage.IScsiScan', {
 	    fields: ['target', 'portal'],
 	    proxy: {
 		type: 'proxmox',
-		url: `/api2/json/nodes/${me.nodename}/scan/iscsi`,
+		url: me.apiBaseUrl + me.nodename + me.apiStoragePath,
 	    },
 	});
 	store.sort('target', 'ASC');
@@ -77,8 +80,40 @@ Ext.define('PVE.storage.IScsiInputPanel', {
     initComponent: function() {
 	var me = this;
 
-	me.column1 = [
-	    {
+	me.column1 = [];
+	let target = null;
+	if (me.isCreate) {
+	    target = Ext.createWidget('pveIScsiScan', {
+		readOnly: !me.isCreate,
+		name: 'target',
+		value: '',
+		fieldLabel: 'Target',
+		allowBlank: false,
+	    });
+
+	    let pveScanNodeSelector = me.getPveScanNodeSelector();
+	    pveScanNodeSelector.listeners = {
+		change: {
+		    fn: function(field, value) {
+			target.setNodeName(value, false);
+			me.lookupReference('storageNodeRestriction').setValue(value);
+		    },
+		},
+	    };
+	    pveScanNodeSelector.preferredValue = '';
+	    pveScanNodeSelector.allowBlank = true;
+	    pveScanNodeSelector.autoSelect = false;
+
+	    me.column1.push(pveScanNodeSelector);
+	} else {
+	    target = Ext.createWidget('displayfield', {
+		name: 'target',
+		value: '',
+		fieldLabel: gettext('Target'),
+		allowBlank: false,
+	    });
+	}
+	me.column1.push({
 		xtype: me.isCreate ? 'textfield' : 'displayfield',
 		name: 'portal',
 		value: '',
@@ -94,15 +129,8 @@ Ext.define('PVE.storage.IScsiInputPanel', {
 		    },
 		},
 	    },
-	    {
-		readOnly: !me.isCreate,
-		xtype: me.isCreate ? 'pveIScsiScan' : 'displayfield',
-		name: 'target',
-		value: '',
-		fieldLabel: 'Target',
-		allowBlank: false,
-	    },
-	];
+	);
+	me.column1.push(target);
 
 	me.column2 = [
 	    {
diff --git a/www/manager6/storage/LVMEdit.js b/www/manager6/storage/LVMEdit.js
index 2a9cd283..a58982e9 100644
--- a/www/manager6/storage/LVMEdit.js
+++ b/www/manager6/storage/LVMEdit.js
@@ -1,10 +1,13 @@
 Ext.define('PVE.storage.VgSelector', {
-    extend: 'Ext.form.field.ComboBox',
+    extend: 'PVE.storage.ComboBoxSetStoreNode',
     alias: 'widget.pveVgSelector',
     valueField: 'vg',
     displayField: 'vg',
     queryMode: 'local',
     editable: false,
+    config: {
+	apiStoragePath: '/scan/lvm',
+    },
     initComponent: function() {
 	var me = this;
 
@@ -17,7 +20,7 @@ Ext.define('PVE.storage.VgSelector', {
 	    fields: ['vg', 'size', 'free'],
 	    proxy: {
 		type: 'proxmox',
-		url: '/api2/json/nodes/' + me.nodename + '/scan/lvm',
+		url: me.apiBaseUrl + me.nodename + me.apiStoragePath,
 	    },
 	});
 
@@ -103,11 +106,23 @@ Ext.define('PVE.storage.LVMInputPanel', {
 	});
 
 	if (me.isCreate) {
-	    var vgField = Ext.create('PVE.storage.VgSelector', {
+	    let vgField = Ext.create('PVE.storage.VgSelector', {
 		name: 'vgname',
+		reference: 'pveLVMVGSelector',
 		fieldLabel: gettext('Volume group'),
 		allowBlank: false,
 	    });
+	    let pveScanNodeSelector = me.getPveScanNodeSelector();
+	    pveScanNodeSelector.listeners = {
+		change: {
+		    fn: function(field, value) {
+			vgField.setNodeName(value);
+			me.lookupReference('storageNodeRestriction').setValue(value);
+		    },
+		},
+	    };
+
+	    me.column1.push(pveScanNodeSelector);
 
 	    var baseField = Ext.createWidget('pveFileSelector', {
 		name: 'base',
diff --git a/www/manager6/storage/LvmThinEdit.js b/www/manager6/storage/LvmThinEdit.js
index 4eab7740..da72dac7 100644
--- a/www/manager6/storage/LvmThinEdit.js
+++ b/www/manager6/storage/LvmThinEdit.js
@@ -1,5 +1,5 @@
 Ext.define('PVE.storage.TPoolSelector', {
-    extend: 'Ext.form.field.ComboBox',
+    extend: 'PVE.storage.ComboBoxSetStoreNode',
     alias: 'widget.pveTPSelector',
 
     queryParam: 'vg',
@@ -7,6 +7,10 @@ Ext.define('PVE.storage.TPoolSelector', {
     displayField: 'lv',
     editable: false,
 
+    config: {
+	apiStoragePath: '/scan/lvmthin',
+    },
+
     doRawQuery: function() {
 	// nothing
     },
@@ -40,7 +44,7 @@ Ext.define('PVE.storage.TPoolSelector', {
 	    fields: ['lv'],
 	    proxy: {
 		type: 'proxmox',
-		url: '/api2/json/nodes/' + me.nodename + '/scan/lvmthin',
+		url: me.apiBaseUrl + me.nodename + me.apiStoragePath,
 	    },
 	});
 
@@ -58,13 +62,16 @@ Ext.define('PVE.storage.TPoolSelector', {
 });
 
 Ext.define('PVE.storage.BaseVGSelector', {
-    extend: 'Ext.form.field.ComboBox',
+    extend: 'PVE.storage.ComboBoxSetStoreNode',
     alias: 'widget.pveBaseVGSelector',
 
     valueField: 'vg',
     displayField: 'vg',
     queryMode: 'local',
     editable: false,
+    config: {
+	apiStoragePath: '/scan/lvm',
+    },
     initComponent: function() {
 	var me = this;
 
@@ -77,7 +84,7 @@ Ext.define('PVE.storage.BaseVGSelector', {
 	    fields: ['vg', 'size', 'free'],
 	    proxy: {
 		type: 'proxmox',
-		url: '/api2/json/nodes/' + me.nodename + '/scan/lvm',
+		url: me.apiBaseUrl + me.nodename + me.apiStoragePath,
 	    },
 	});
 
@@ -121,14 +128,12 @@ Ext.define('PVE.storage.LvmThinInputPanel', {
 	});
 
 	if (me.isCreate) {
-	    var vgField = Ext.create('PVE.storage.TPoolSelector', {
+	    let vgField = Ext.create('PVE.storage.TPoolSelector', {
 		name: 'thinpool',
 		fieldLabel: gettext('Thin Pool'),
 		allowBlank: false,
 	    });
-
-	    me.column1.push({
-		xtype: 'pveBaseVGSelector',
+	    let vgSelector = Ext.create('PVE.storage.BaseVGSelector', {
 		name: 'vgname',
 		fieldLabel: gettext('Volume group'),
 		listeners: {
@@ -140,6 +145,20 @@ Ext.define('PVE.storage.LvmThinInputPanel', {
 		    },
 		},
 	    });
+	    let pveScanNodeSelector = me.getPveScanNodeSelector();
+	    pveScanNodeSelector.listeners = {
+	        change: {
+		    fn: function(field, value) {
+			// don't reload the store, it requires a VG selected
+			vgField.setNodeName(value, false);
+			vgSelector.setNodeName(value);
+			me.lookupReference('storageNodeRestriction').setValue(value);
+		    },
+	        },
+	    };
+	    me.column1.push(pveScanNodeSelector);
+
+	    me.column1.push(vgSelector);
 
 	    me.column1.push(vgField);
 	}
diff --git a/www/manager6/storage/ZFSPoolEdit.js b/www/manager6/storage/ZFSPoolEdit.js
index 8e689f0c..c274d84a 100644
--- a/www/manager6/storage/ZFSPoolEdit.js
+++ b/www/manager6/storage/ZFSPoolEdit.js
@@ -1,5 +1,5 @@
 Ext.define('PVE.storage.ZFSPoolSelector', {
-    extend: 'Ext.form.field.ComboBox',
+    extend: 'PVE.storage.ComboBoxSetStoreNode',
     alias: 'widget.pveZFSPoolSelector',
     valueField: 'pool',
     displayField: 'pool',
@@ -8,6 +8,9 @@ Ext.define('PVE.storage.ZFSPoolSelector', {
     listConfig: {
 	loadingText: gettext('Scanning...'),
     },
+    config: {
+	apiStoragePath: '/scan/zfs',
+    },
     initComponent: function() {
 	var me = this;
 
@@ -20,10 +23,9 @@ Ext.define('PVE.storage.ZFSPoolSelector', {
 	    fields: ['pool', 'size', 'free'],
 	    proxy: {
 		type: 'proxmox',
-		url: '/api2/json/nodes/' + me.nodename + '/scan/zfs',
+		url: me.apiBaseUrl + me.nodename + me.apiStoragePath,
 	    },
 	});
-
 	store.sort('pool', 'ASC');
 
 	Ext.apply(me, {
@@ -45,11 +47,23 @@ Ext.define('PVE.storage.ZFSPoolInputPanel', {
 	me.column1 = [];
 
 	if (me.isCreate) {
-	    me.column1.push(Ext.create('PVE.storage.ZFSPoolSelector', {
+	    let zfsPoolSelector = Ext.create('PVE.storage.ZFSPoolSelector', {
 		name: 'pool',
 		fieldLabel: gettext('ZFS Pool'),
 		allowBlank: false,
-	    }));
+	    });
+	    let pveScanNodeSelector = me.getPveScanNodeSelector();
+	    pveScanNodeSelector.listeners = {
+	        change: {
+		    fn: function(field, value) {
+			zfsPoolSelector.setNodeName(value);
+			me.lookupReference('storageNodeRestriction').setValue(value);
+		    },
+	        },
+	    };
+
+	    me.column1.push(pveScanNodeSelector);
+	    me.column1.push(zfsPoolSelector);
 	} else {
 	    me.column1.push(Ext.createWidget('displayfield', {
 		name: 'pool',
-- 
2.30.2





^ permalink raw reply	[flat|nested] 8+ messages in thread

* [pve-devel] [PATCH V2 manager 2/3] cleanup: "var" to "let", fix some indentation in related files
  2022-06-22 14:39 [pve-devel] [PATCH V2 manager 0/3] add iscsi, lvm, lvmthin & zfs storage on all cluster nodes Stefan Hrdlicka
  2022-06-22 14:39 ` [pve-devel] [PATCH V2 manager 1/3] fix #2822: add iscsi, lvm, lvmthin & zfs storage for " Stefan Hrdlicka
@ 2022-06-22 14:39 ` Stefan Hrdlicka
  2022-06-28 10:54   ` Fabian Ebner
  2022-06-22 14:39 ` [pve-devel] [PATCH V2 manager 3/3] cleanup: "var" to "let" in all javascript files Stefan Hrdlicka
  2 siblings, 1 reply; 8+ messages in thread
From: Stefan Hrdlicka @ 2022-06-22 14:39 UTC (permalink / raw)
  To: pve-devel

replace all "var" with "let" in files related to patch for ticket 2822

Signed-off-by: Stefan Hrdlicka <s.hrdlicka@proxmox.com>
---
 www/manager6/storage/Base.js        | 10 +++++-----
 www/manager6/storage/IScsiEdit.js   |  6 +++---
 www/manager6/storage/LVMEdit.js     | 14 +++++++-------
 www/manager6/storage/LvmThinEdit.js | 18 +++++++++---------
 www/manager6/storage/ZFSPoolEdit.js | 23 +++++++++++------------
 5 files changed, 35 insertions(+), 36 deletions(-)

diff --git a/www/manager6/storage/Base.js b/www/manager6/storage/Base.js
index bb497a5f..d55bbbc6 100644
--- a/www/manager6/storage/Base.js
+++ b/www/manager6/storage/Base.js
@@ -5,7 +5,7 @@ Ext.define('PVE.panel.StorageBase', {
     type: '',
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
 	if (me.isCreate) {
 	    values.type = me.type;
@@ -20,7 +20,7 @@ Ext.define('PVE.panel.StorageBase', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.column1.unshift({
 	    xtype: me.isCreate ? 'textfield' : 'displayfield',
@@ -129,7 +129,7 @@ Ext.define('PVE.storage.BaseEdit', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.isCreate = !me.storageId;
 
@@ -189,8 +189,8 @@ Ext.define('PVE.storage.BaseEdit', {
 	if (!me.isCreate) {
 	    me.load({
 		success: function(response, options) {
-		    var values = response.result.data;
-		    var ctypes = values.content || '';
+		    let values = response.result.data;
+		    let ctypes = values.content || '';
 
 		    values.content = ctypes.split(',');
 
diff --git a/www/manager6/storage/IScsiEdit.js b/www/manager6/storage/IScsiEdit.js
index c121273b..4b34bb9a 100644
--- a/www/manager6/storage/IScsiEdit.js
+++ b/www/manager6/storage/IScsiEdit.js
@@ -64,7 +64,7 @@ Ext.define('PVE.storage.IScsiInputPanel', {
     onlineHelp: 'storage_open_iscsi',
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
 	values.content = values.luns ? 'images' : 'none';
 	delete values.luns;
@@ -78,7 +78,7 @@ Ext.define('PVE.storage.IScsiInputPanel', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.column1 = [];
 	let target = null;
@@ -122,7 +122,7 @@ Ext.define('PVE.storage.IScsiInputPanel', {
 		listeners: {
 		    change: function(f, value) {
 			if (me.isCreate) {
-			    var exportField = me.down('field[name=target]');
+			    let exportField = me.down('field[name=target]');
 			    exportField.setPortal(value);
 			    exportField.setValue('');
 			}
diff --git a/www/manager6/storage/LVMEdit.js b/www/manager6/storage/LVMEdit.js
index a58982e9..c5765ff0 100644
--- a/www/manager6/storage/LVMEdit.js
+++ b/www/manager6/storage/LVMEdit.js
@@ -9,13 +9,13 @@ Ext.define('PVE.storage.VgSelector', {
 	apiStoragePath: '/scan/lvm',
     },
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.nodename) {
 	    me.nodename = 'localhost';
 	}
 
-	var store = Ext.create('Ext.data.Store', {
+	let store = Ext.create('Ext.data.Store', {
 	    autoLoad: {}, // true,
 	    fields: ['vg', 'size', 'free'],
 	    proxy: {
@@ -48,9 +48,9 @@ Ext.define('PVE.storage.BaseStorageSelector', {
     valueField: 'storage',
     displayField: 'text',
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var store = Ext.create('Ext.data.Store', {
+	let store = Ext.create('Ext.data.Store', {
 	    autoLoad: {
 		addRecords: true,
 		params: {
@@ -92,11 +92,11 @@ Ext.define('PVE.storage.LVMInputPanel', {
     onlineHelp: 'storage_lvm',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.column1 = [];
 
-	var vgnameField = Ext.createWidget(me.isCreate ? 'textfield' : 'displayfield', {
+	let vgnameField = Ext.createWidget(me.isCreate ? 'textfield' : 'displayfield', {
 	    name: 'vgname',
 	    hidden: !!me.isCreate,
 	    disabled: !!me.isCreate,
@@ -124,7 +124,7 @@ Ext.define('PVE.storage.LVMInputPanel', {
 
 	    me.column1.push(pveScanNodeSelector);
 
-	    var baseField = Ext.createWidget('pveFileSelector', {
+	    let baseField = Ext.createWidget('pveFileSelector', {
 		name: 'base',
 		hidden: true,
 		disabled: true,
diff --git a/www/manager6/storage/LvmThinEdit.js b/www/manager6/storage/LvmThinEdit.js
index da72dac7..28ff26d8 100644
--- a/www/manager6/storage/LvmThinEdit.js
+++ b/www/manager6/storage/LvmThinEdit.js
@@ -16,7 +16,7 @@ Ext.define('PVE.storage.TPoolSelector', {
     },
 
     onTriggerClick: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.queryCaching || me.lastQuery !== me.vg) {
 	    me.store.removeAll();
@@ -28,19 +28,19 @@ Ext.define('PVE.storage.TPoolSelector', {
     },
 
     setVG: function(myvg) {
-	var me = this;
+	let me = this;
 
 	me.vg = myvg;
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.nodename) {
 	    me.nodename = 'localhost';
 	}
 
-	var store = Ext.create('Ext.data.Store', {
+	let store = Ext.create('Ext.data.Store', {
 	    fields: ['lv'],
 	    proxy: {
 		type: 'proxmox',
@@ -73,13 +73,13 @@ Ext.define('PVE.storage.BaseVGSelector', {
 	apiStoragePath: '/scan/lvm',
     },
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.nodename) {
 	    me.nodename = 'localhost';
 	}
 
-	var store = Ext.create('Ext.data.Store', {
+	let store = Ext.create('Ext.data.Store', {
 	    autoLoad: {},
 	    fields: ['vg', 'size', 'free'],
 	    proxy: {
@@ -105,11 +105,11 @@ Ext.define('PVE.storage.LvmThinInputPanel', {
     onlineHelp: 'storage_lvmthin',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.column1 = [];
 
-	var vgnameField = Ext.createWidget(me.isCreate ? 'textfield' : 'displayfield', {
+	let vgnameField = Ext.createWidget(me.isCreate ? 'textfield' : 'displayfield', {
 	    name: 'vgname',
 	    hidden: !!me.isCreate,
 	    disabled: !!me.isCreate,
@@ -118,7 +118,7 @@ Ext.define('PVE.storage.LvmThinInputPanel', {
 	    allowBlank: false,
 	});
 
-	var thinpoolField = Ext.createWidget(me.isCreate ? 'textfield' : 'displayfield', {
+	let thinpoolField = Ext.createWidget(me.isCreate ? 'textfield' : 'displayfield', {
 	    name: 'thinpool',
 	    hidden: !!me.isCreate,
 	    disabled: !!me.isCreate,
diff --git a/www/manager6/storage/ZFSPoolEdit.js b/www/manager6/storage/ZFSPoolEdit.js
index c274d84a..1037d752 100644
--- a/www/manager6/storage/ZFSPoolEdit.js
+++ b/www/manager6/storage/ZFSPoolEdit.js
@@ -12,13 +12,13 @@ Ext.define('PVE.storage.ZFSPoolSelector', {
 	apiStoragePath: '/scan/zfs',
     },
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.nodename) {
 	    me.nodename = 'localhost';
 	}
 
-	var store = Ext.create('Ext.data.Store', {
+	let store = Ext.create('Ext.data.Store', {
 	    autoLoad: {}, // true,
 	    fields: ['pool', 'size', 'free'],
 	    proxy: {
@@ -42,7 +42,7 @@ Ext.define('PVE.storage.ZFSPoolInputPanel', {
     onlineHelp: 'storage_zfspool',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.column1 = [];
 
@@ -75,15 +75,14 @@ Ext.define('PVE.storage.ZFSPoolInputPanel', {
 
 	// value is an array,
 	// while before it was a string
-	me.column1.push(
-	    {
-xtype: 'pveContentTypeSelector',
-	     cts: ['images', 'rootdir'],
-	     fieldLabel: gettext('Content'),
-	     name: 'content',
-	     value: ['images', 'rootdir'],
-	     multiSelect: true,
-	     allowBlank: false,
+	me.column1.push({
+	    xtype: 'pveContentTypeSelector',
+	    cts: ['images', 'rootdir'],
+	    fieldLabel: gettext('Content'),
+	    name: 'content',
+	    value: ['images', 'rootdir'],
+	    multiSelect: true,
+	    allowBlank: false,
 	});
 	me.column2 = [
 	    {
-- 
2.30.2





^ permalink raw reply	[flat|nested] 8+ messages in thread

* [pve-devel] [PATCH V2 manager 3/3] cleanup: "var" to "let" in all javascript files
  2022-06-22 14:39 [pve-devel] [PATCH V2 manager 0/3] add iscsi, lvm, lvmthin & zfs storage on all cluster nodes Stefan Hrdlicka
  2022-06-22 14:39 ` [pve-devel] [PATCH V2 manager 1/3] fix #2822: add iscsi, lvm, lvmthin & zfs storage for " Stefan Hrdlicka
  2022-06-22 14:39 ` [pve-devel] [PATCH V2 manager 2/3] cleanup: "var" to "let", fix some indentation in related files Stefan Hrdlicka
@ 2022-06-22 14:39 ` Stefan Hrdlicka
  2 siblings, 0 replies; 8+ messages in thread
From: Stefan Hrdlicka @ 2022-06-22 14:39 UTC (permalink / raw)
  To: pve-devel

this adds curly braces around "case:" statements so variable scope is limited

Signed-off-by: Stefan Hrdlicka <s.hrdlicka@proxmox.com>
---
 www/manager6/Parser.js                        |   8 +-
 www/manager6/StateProvider.js                 |   2 +-
 www/manager6/Utils.js                         | 139 +++++++++---------
 www/manager6/VNCConsole.js                    |  10 +-
 www/manager6/Workspace.js                     |  12 +-
 www/manager6/button/ConsoleButton.js          |   4 +-
 www/manager6/button/Split.js                  |  10 +-
 www/manager6/ceph/CephInstallWizard.js        |  36 ++---
 www/manager6/ceph/Config.js                   |  16 +-
 www/manager6/ceph/Crush.js                    |   6 +-
 www/manager6/ceph/FS.js                       |   6 +-
 www/manager6/ceph/Log.js                      |   6 +-
 www/manager6/ceph/Pool.js                     |  10 +-
 www/manager6/ceph/Services.js                 |  12 +-
 www/manager6/ceph/Status.js                   |  16 +-
 www/manager6/ceph/StatusDetail.js             |   4 +-
 www/manager6/controller/StorageEdit.js        |   4 +-
 www/manager6/data/PermPathStore.js            |   2 +-
 www/manager6/data/ResourceStore.js            |   4 +-
 www/manager6/dc/ACLView.js                    |   6 +-
 www/manager6/dc/ACMEPluginEdit.js             |   2 +-
 www/manager6/dc/AuthEditBase.js               |   4 +-
 www/manager6/dc/AuthView.js                   |   2 +-
 www/manager6/dc/Backup.js                     |  14 +-
 www/manager6/dc/BackupJobDetail.js            |  10 +-
 www/manager6/dc/ClusterEdit.js                |   6 +-
 www/manager6/dc/Config.js                     |   4 +-
 www/manager6/dc/GroupEdit.js                  |   6 +-
 www/manager6/dc/GroupView.js                  |  22 +--
 www/manager6/dc/MetricServerView.js           |   2 +-
 www/manager6/dc/NodeView.js                   |   2 +-
 www/manager6/dc/OptionView.js                 |  10 +-
 www/manager6/dc/PoolView.js                   |  22 +--
 www/manager6/dc/RoleEdit.js                   |  10 +-
 www/manager6/dc/SecurityGroups.js             |  10 +-
 www/manager6/dc/Summary.js                    |  20 +--
 www/manager6/dc/Support.js                    |  16 +-
 www/manager6/dc/Tasks.js                      |   6 +-
 www/manager6/dc/UserEdit.js                   |   4 +-
 www/manager6/dc/UserView.js                   |  10 +-
 www/manager6/form/AgentFeatureSelector.js     |   2 +-
 www/manager6/form/BridgeSelector.js           |   6 +-
 www/manager6/form/BusTypeSelector.js          |   2 +-
 www/manager6/form/CephFSSelector.js           |   4 +-
 www/manager6/form/CephPoolSelector.js         |   4 +-
 www/manager6/form/ContentTypeSelector.js      |   2 +-
 www/manager6/form/ControllerSelector.js       |   2 +-
 www/manager6/form/DayOfWeekSelector.js        |   2 +-
 www/manager6/form/DiskStorageSelector.js      |  24 +--
 www/manager6/form/FileSelector.js             |   8 +-
 www/manager6/form/GlobalSearchField.js        |  14 +-
 www/manager6/form/GroupSelector.js            |   4 +-
 www/manager6/form/GuestIDSelector.js          |  12 +-
 www/manager6/form/HotplugFeatureSelector.js   |   6 +-
 www/manager6/form/IPRefSelector.js            |  10 +-
 www/manager6/form/MDevSelector.js             |   8 +-
 www/manager6/form/MemoryField.js              |  32 ++--
 www/manager6/form/NodeSelector.js             |   2 +-
 www/manager6/form/PCISelector.js              |   6 +-
 www/manager6/form/PoolSelector.js             |   4 +-
 www/manager6/form/QemuBiosSelector.js         |   2 +-
 www/manager6/form/SDNControllerSelector.js    |   4 +-
 www/manager6/form/SDNDnsSelector.js           |   4 +-
 www/manager6/form/SDNIpamSelector.js          |   4 +-
 www/manager6/form/SDNVnetSelector.js          |   4 +-
 www/manager6/form/SDNZoneSelector.js          |   4 +-
 www/manager6/form/SecurityGroupSelector.js    |   4 +-
 www/manager6/form/SnapshotSelector.js         |   6 +-
 www/manager6/form/SpiceEnhancementSelector.js |   8 +-
 www/manager6/form/StorageSelector.js          |   8 +-
 www/manager6/form/USBSelector.js              |   6 +-
 www/manager6/form/VLanField.js                |   4 +-
 www/manager6/form/VMCPUFlagSelector.js        |  30 ++--
 www/manager6/form/VMSelector.js               |  12 +-
 www/manager6/grid/BackupView.js               |  36 ++---
 www/manager6/grid/FirewallAliases.js          |   4 +-
 www/manager6/grid/FirewallOptions.js          |  18 +--
 www/manager6/grid/FirewallRules.js            |  64 ++++----
 www/manager6/grid/PoolMembers.js              |  32 ++--
 www/manager6/grid/Replication.js              |  20 +--
 www/manager6/grid/ResourceGrid.js             |   4 +-
 www/manager6/ha/Fencing.js                    |   4 +-
 www/manager6/ha/GroupEdit.js                  |  12 +-
 www/manager6/ha/GroupSelector.js              |   2 +-
 www/manager6/ha/Groups.js                     |  10 +-
 www/manager6/ha/ResourceEdit.js               |  28 ++--
 www/manager6/ha/Status.js                     |   2 +-
 www/manager6/ha/StatusView.js                 |   8 +-
 www/manager6/lxc/Config.js                    |  42 +++---
 www/manager6/lxc/CreateWizard.js              |   2 +-
 www/manager6/lxc/DNS.js                       |  50 +++----
 www/manager6/lxc/FeaturesEdit.js              |  10 +-
 www/manager6/lxc/MPEdit.js                    |   8 +-
 www/manager6/lxc/MPResize.js                  |  18 +--
 www/manager6/lxc/Options.js                   |  28 ++--
 www/manager6/lxc/ResourceEdit.js              |  14 +-
 www/manager6/lxc/Resources.js                 |  42 +++---
 www/manager6/node/ACME.js                     |  16 +-
 www/manager6/node/Certificates.js             |   4 +-
 www/manager6/node/Config.js                   |  20 +--
 www/manager6/node/Directory.js                |   2 +-
 www/manager6/node/LVMThin.js                  |   2 +-
 www/manager6/node/StatusView.js               |   4 +-
 www/manager6/node/Subscription.js             |  34 ++---
 www/manager6/node/Summary.js                  |  18 +--
 www/manager6/node/ZFS.js                      |   4 +-
 www/manager6/panel/ConfigPanel.js             |  58 ++++----
 www/manager6/panel/GuestStatusView.js         |  16 +-
 www/manager6/panel/GuestSummary.js            |  16 +-
 www/manager6/panel/HealthWidget.js            |   4 +-
 www/manager6/panel/IPSet.js                   |  62 ++++----
 www/manager6/panel/RunningChart.js            |   4 +-
 www/manager6/panel/StatusPanel.js             |  14 +-
 www/manager6/panel/TemplateStatusView.js      |   4 +-
 www/manager6/pool/Config.js                   |   4 +-
 www/manager6/pool/StatusView.js               |   6 +-
 www/manager6/pool/Summary.js                  |   8 +-
 www/manager6/qemu/AgentIPView.js              |  40 ++---
 www/manager6/qemu/AudioEdit.js                |   6 +-
 www/manager6/qemu/CDEdit.js                   |  32 ++--
 www/manager6/qemu/CIDriveEdit.js              |  16 +-
 www/manager6/qemu/CloudInit.js                |  68 ++++-----
 www/manager6/qemu/Config.js                   |  52 +++----
 www/manager6/qemu/CreateWizard.js             |  14 +-
 www/manager6/qemu/HDEdit.js                   |  38 ++---
 www/manager6/qemu/HDEfi.js                    |  12 +-
 www/manager6/qemu/HDResize.js                 |  14 +-
 www/manager6/qemu/HDTPM.js                    |  14 +-
 www/manager6/qemu/HardwareView.js             |  58 ++++----
 www/manager6/qemu/IPConfigEdit.js             |  24 +--
 www/manager6/qemu/KeyboardEdit.js             |   2 +-
 www/manager6/qemu/MemoryEdit.js               |  32 ++--
 www/manager6/qemu/Monitor.js                  |  39 ++---
 www/manager6/qemu/NetworkEdit.js              |  24 +--
 www/manager6/qemu/OSDefaults.js               |   2 +-
 www/manager6/qemu/OSTypeEdit.js               |  20 +--
 www/manager6/qemu/Options.js                  |  36 ++---
 www/manager6/qemu/PCIEdit.js                  |   8 +-
 www/manager6/qemu/ProcessorEdit.js            |  18 +--
 www/manager6/qemu/RNGEdit.js                  |   6 +-
 www/manager6/qemu/SSHKey.js                   |  12 +-
 www/manager6/qemu/ScsiHwEdit.js               |   2 +-
 www/manager6/qemu/SerialEdit.js               |  12 +-
 www/manager6/qemu/Smbios1Edit.js              |  14 +-
 www/manager6/qemu/SystemEdit.js               |   4 +-
 www/manager6/qemu/USBEdit.js                  |  20 +--
 www/manager6/sdn/Browser.js                   |   8 +-
 www/manager6/sdn/ControllerView.js            |   6 +-
 www/manager6/sdn/Status.js                    |   2 +-
 www/manager6/sdn/StatusView.js                |   8 +-
 www/manager6/sdn/SubnetEdit.js                |   2 +-
 www/manager6/sdn/SubnetView.js                |   2 +-
 www/manager6/sdn/VnetEdit.js                  |   2 +-
 www/manager6/sdn/VnetPanel.js                 |   6 +-
 www/manager6/sdn/VnetView.js                  |   2 +-
 www/manager6/sdn/ZoneContentView.js           |  14 +-
 www/manager6/sdn/ZoneView.js                  |   2 +-
 www/manager6/sdn/controllers/Base.js          |  10 +-
 www/manager6/sdn/controllers/BgpEdit.js       |   4 +-
 www/manager6/sdn/controllers/EvpnEdit.js      |   2 +-
 www/manager6/sdn/dns/Base.js                  |  12 +-
 www/manager6/sdn/dns/PowerdnsEdit.js          |   4 +-
 www/manager6/sdn/ipams/Base.js                |  12 +-
 www/manager6/sdn/ipams/NetboxEdit.js          |   4 +-
 www/manager6/sdn/ipams/PVEIpamEdit.js         |   4 +-
 www/manager6/sdn/ipams/PhpIpamEdit.js         |   4 +-
 www/manager6/sdn/zones/Base.js                |  12 +-
 www/manager6/sdn/zones/EvpnEdit.js            |   4 +-
 www/manager6/sdn/zones/SimpleEdit.js          |   4 +-
 www/manager6/sdn/zones/VlanEdit.js            |   4 +-
 www/manager6/sdn/zones/VxlanEdit.js           |   4 +-
 www/manager6/storage/BackupView.js            |  16 +-
 www/manager6/storage/Browser.js               |   8 +-
 www/manager6/storage/CIFSEdit.js              |  12 +-
 www/manager6/storage/CephFSEdit.js            |   2 +-
 www/manager6/storage/ContentView.js           |   4 +-
 www/manager6/storage/DirEdit.js               |   2 +-
 www/manager6/storage/GlusterFsEdit.js         |  12 +-
 www/manager6/storage/ImageView.js             |  22 +--
 www/manager6/storage/NFSEdit.js               |  24 +--
 www/manager6/storage/PBSEdit.js               |   2 +-
 www/manager6/storage/RBDEdit.js               |  12 +-
 www/manager6/storage/Summary.js               |  10 +-
 www/manager6/storage/TemplateView.js          |  36 ++---
 www/manager6/storage/ZFSEdit.js               |   6 +-
 www/manager6/tree/SnapshotTree.js             |  12 +-
 www/manager6/window/Backup.js                 |  18 +--
 www/manager6/window/BackupConfig.js           |   4 +-
 www/manager6/window/BulkAction.js             |  16 +-
 www/manager6/window/Clone.js                  |  38 ++---
 www/manager6/window/DownloadUrlToStorage.js   |   4 +-
 www/manager6/window/FirewallEnableEdit.js     |   2 +-
 www/manager6/window/FirewallLograteEdit.js    |   2 +-
 www/manager6/window/LoginWindow.js            |  62 ++++----
 www/manager6/window/Migrate.js                |  16 +-
 www/manager6/window/Prune.js                  |   6 +-
 www/manager6/window/Settings.js               |  26 ++--
 www/manager6/window/Snapshot.js               |   4 +-
 www/manager6/window/StartupEdit.js            |  10 +-
 www/manager6/window/Wizard.js                 |   4 +-
 200 files changed, 1339 insertions(+), 1337 deletions(-)

diff --git a/www/manager6/Parser.js b/www/manager6/Parser.js
index 9f7b2c84..044e4be7 100644
--- a/www/manager6/Parser.js
+++ b/www/manager6/Parser.js
@@ -79,7 +79,7 @@ Ext.define('PVE.Parser', {
     },
 
     printPropertyString: function(data, defaultKey) {
-	var stringparts = [],
+	let stringparts = [],
 	    gotDefaultKeyVal = false,
 	    defaultKeyVal;
 
@@ -150,7 +150,7 @@ Ext.define('PVE.Parser', {
     },
 
     printQemuNetwork: function(net) {
-	var netstr = net.model;
+	let netstr = net.model;
 	if (net.macaddr) {
 	    netstr += "=" + net.macaddr;
 	}
@@ -195,7 +195,7 @@ Ext.define('PVE.Parser', {
 	    index,
 	};
 
-	var errors = false;
+	let errors = false;
 	Ext.Array.each(value.split(','), function(p) {
 	    if (!p || p.match(/^\s*$/)) {
 		return undefined; // continue
@@ -236,7 +236,7 @@ Ext.define('PVE.Parser', {
     },
 
     printQemuDrive: function(drive) {
-	var drivestr = drive.file;
+	let drivestr = drive.file;
 
 	Ext.Object.each(drive, function(key, value) {
 	    if (!Ext.isDefined(value) || key === 'file' ||
diff --git a/www/manager6/StateProvider.js b/www/manager6/StateProvider.js
index fafbb112..bd4c1160 100644
--- a/www/manager6/StateProvider.js
+++ b/www/manager6/StateProvider.js
@@ -228,7 +228,7 @@ Ext.define('PVE.StateProvider', {
         let me = this;
 
 	if (typeof me.UIState[name] !== "undefined") {
-	    var newvalue = value ? value.value : null;
+	    let newvalue = value ? value.value : null;
 	    if (me.setHV(name, newvalue, fireevent)) {
 		let htext = me.encodeHToken(me.UIState);
 		Ext.History.add(htext);
diff --git a/www/manager6/Utils.js b/www/manager6/Utils.js
index 7ca6a271..bc43ac43 100644
--- a/www/manager6/Utils.js
+++ b/www/manager6/Utils.js
@@ -77,7 +77,7 @@ Ext.define('PVE.Utils', {
 	    state = 'uknown';
 	}
 
-	var icon = 'faded fa-question';
+	let icon = 'faded fa-question';
 	switch (state) {
 	    case 'good':
 		icon = 'good fa-check';
@@ -110,7 +110,7 @@ Ext.define('PVE.Utils', {
 	}
 
 	if (service.ceph_version) {
-	    var match = service.ceph_version.match(/version (\d+(\.\d+)*)/);
+	    let match = service.ceph_version.match(/version (\d+(\.\d+)*)/);
 	    if (match) {
 		return match[1];
 	    }
@@ -158,8 +158,8 @@ Ext.define('PVE.Utils', {
     },
 
     get_ceph_icon_html: function(health, fw) {
-	var state = PVE.Utils.map_ceph_health[health];
-	var cls = PVE.Utils.get_health_icon(state);
+	let state = PVE.Utils.map_ceph_health[health];
+	let cls = PVE.Utils.get_health_icon(state);
 	if (fw) {
 	    cls += ' fa-fw';
 	}
@@ -219,7 +219,7 @@ Ext.define('PVE.Utils', {
     },
 
     render_ceph_health: function(healthObj) {
-	var state = {
+	let state = {
 	    iconCls: PVE.Utils.get_health_icon(),
 	    text: '',
 	};
@@ -228,7 +228,7 @@ Ext.define('PVE.Utils', {
 	    return state;
 	}
 
-	var health = PVE.Utils.map_ceph_health[healthObj.status];
+	let health = PVE.Utils.map_ceph_health[healthObj.status];
 
 	state.iconCls = PVE.Utils.get_health_icon(health, true);
 	state.text = healthObj.status;
@@ -240,7 +240,7 @@ Ext.define('PVE.Utils', {
 	if (typeof value === 'undefined') {
 	    return "";
 	}
-	var iconCls = 'question-circle';
+	let iconCls = 'question-circle';
 	switch (value) {
 	    case 'AVAIL':
 	    case 'ONLINE':
@@ -325,12 +325,12 @@ Ext.define('PVE.Utils', {
     },
 
     render_backup_days_of_week: function(val) {
-	var dows = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];
-	var selected = [];
-	var cur = -1;
+	let dows = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];
+	let selected = [];
+	let cur = -1;
 	val.split(',').forEach(function(day) {
 	    cur++;
-	    var dow = (dows.indexOf(day)+6)%7;
+	    let dow = (dows.indexOf(day)+6)%7;
 	    if (cur === dow) {
 		if (selected.length === 0 || selected[selected.length-1] === 0) {
 		    selected.push(1);
@@ -347,7 +347,7 @@ Ext.define('PVE.Utils', {
 	});
 
 	cur = -1;
-	var days = [];
+	let days = [];
 	selected.forEach(function(item) {
 	    cur++;
 	    if (item > 2) {
@@ -394,7 +394,7 @@ Ext.define('PVE.Utils', {
     },
 
     get_kvm_osinfo: function(value) {
-	var info = { base: 'Other' }; // default
+	let info = { base: 'Other' }; // default
 	if (value) {
 	    Ext.each(Object.keys(PVE.Utils.kvm_ostypes), function(k) {
 		Ext.each(PVE.Utils.kvm_ostypes[k], function(e) {
@@ -408,7 +408,7 @@ Ext.define('PVE.Utils', {
     },
 
     render_kvm_ostype: function(value) {
-	var osinfo = PVE.Utils.get_kvm_osinfo(value);
+	let osinfo = PVE.Utils.get_kvm_osinfo(value);
 	if (osinfo.desc && osinfo.desc !== '-') {
 	    return osinfo.base + ' ' + osinfo.desc;
 	} else {
@@ -417,7 +417,7 @@ Ext.define('PVE.Utils', {
     },
 
     render_hotplug_features: function(value) {
-	var fa = [];
+	let fa = [];
 
 	if (!value || value === '0') {
 	    return gettext('Disabled');
@@ -632,9 +632,9 @@ Ext.define('PVE.Utils', {
     },
 
     render_kvm_startup: function(value) {
-	var startup = PVE.Parser.parseStartup(value);
+	let startup = PVE.Parser.parseStartup(value);
 
-	var res = 'order=';
+	let res = 'order=';
 	if (startup.order === undefined) {
 	    res += 'any';
 	} else {
@@ -651,18 +651,19 @@ Ext.define('PVE.Utils', {
     },
 
     extractFormActionError: function(action) {
-	var msg;
+	let msg;
 	switch (action.failureType) {
 	case Ext.form.action.Action.CLIENT_INVALID:
 	    msg = gettext('Form fields may not be submitted with invalid values');
 	    break;
-	case Ext.form.action.Action.CONNECT_FAILURE:
+	case Ext.form.action.Action.CONNECT_FAILURE: {
 	    msg = gettext('Connection error');
-	    var resp = action.response;
+	    let resp = action.response;
 	    if (resp.status && resp.statusText) {
 		msg += " " + resp.status + ": " + resp.statusText;
 	    }
 	    break;
+	}
 	case Ext.form.action.Action.LOAD_FAILURE:
 	case Ext.form.action.Action.SERVER_INVALID:
 	    msg = Proxmox.Utils.extractRequestError(action.result, true);
@@ -921,7 +922,7 @@ Ext.define('PVE.Utils', {
     },
 
     format_sdnvnet_type: function(value, md, record) {
-	var schema = PVE.Utils.sdnvnetSchema[value];
+	let schema = PVE.Utils.sdnvnetSchema[value];
 	if (schema) {
 	    return schema.name;
 	}
@@ -929,7 +930,7 @@ Ext.define('PVE.Utils', {
     },
 
     format_sdnzone_type: function(value, md, record) {
-	var schema = PVE.Utils.sdnzoneSchema[value];
+	let schema = PVE.Utils.sdnzoneSchema[value];
 	if (schema) {
 	    return schema.name;
 	}
@@ -937,7 +938,7 @@ Ext.define('PVE.Utils', {
     },
 
     format_sdncontroller_type: function(value, md, record) {
-	var schema = PVE.Utils.sdncontrollerSchema[value];
+	let schema = PVE.Utils.sdncontrollerSchema[value];
 	if (schema) {
 	    return schema.name;
 	}
@@ -945,7 +946,7 @@ Ext.define('PVE.Utils', {
     },
 
     format_sdnipam_type: function(value, md, record) {
-	var schema = PVE.Utils.sdnipamSchema[value];
+	let schema = PVE.Utils.sdnipamSchema[value];
 	if (schema) {
 	    return schema.name;
 	}
@@ -953,7 +954,7 @@ Ext.define('PVE.Utils', {
     },
 
     format_sdndns_type: function(value, md, record) {
-	var schema = PVE.Utils.sdndnsSchema[value];
+	let schema = PVE.Utils.sdndnsSchema[value];
 	if (schema) {
 	    return schema.name;
 	}
@@ -972,7 +973,7 @@ Ext.define('PVE.Utils', {
     },
 
     format_ha: function(value) {
-	var text = Proxmox.Utils.noneText;
+	let text = Proxmox.Utils.noneText;
 
 	if (value.managed) {
 	    text = value.state || Proxmox.Utils.noneText;
@@ -991,7 +992,7 @@ Ext.define('PVE.Utils', {
     },
 
     render_storage_content: function(value, metaData, record) {
-	var data = record.data;
+	let data = record.data;
 	if (Ext.isNumber(data.channel) &&
 	    Ext.isNumber(data.id) &&
 	    Ext.isNumber(data.lun)) {
@@ -1015,12 +1016,12 @@ Ext.define('PVE.Utils', {
 	    return -1;
 	}
 
-	var index = PVE.data.ResourceStore.findExact('id', 'node/' + data.node);
-	var node = PVE.data.ResourceStore.getAt(index);
+	let index = PVE.data.ResourceStore.findExact('id', 'node/' + data.node);
+	let node = PVE.data.ResourceStore.getAt(index);
 	if (!Ext.isDefined(node) || node === null) {
 	    return -1;
 	}
-	var maxcpu = node.data.maxcpu || 1;
+	let maxcpu = node.data.maxcpu || 1;
 
 	if (!Ext.isNumeric(maxcpu) && (maxcpu >= 1)) {
 	    return -1;
@@ -1038,18 +1039,18 @@ Ext.define('PVE.Utils', {
 	    return '';
 	}
 
-	var index = PVE.data.ResourceStore.findExact('id', 'node/' + record.data.node);
-	var node = PVE.data.ResourceStore.getAt(index);
+	let index = PVE.data.ResourceStore.findExact('id', 'node/' + record.data.node);
+	let node = PVE.data.ResourceStore.getAt(index);
 	if (!Ext.isDefined(node) || node === null) {
 	    return '';
 	}
-	var maxcpu = node.data.maxcpu || 1;
+	let maxcpu = node.data.maxcpu || 1;
 
 	if (!Ext.isNumeric(maxcpu) && (maxcpu >= 1)) {
 	    return '';
 	}
 
-	var per = (record.data.cpu/maxcpu) * record.data.maxcpu * 100;
+	let per = (record.data.cpu/maxcpu) * record.data.maxcpu * 100;
 
 	return per.toFixed(1) + '% of ' + maxcpu.toString() + (maxcpu > 1 ? 'CPUs' : 'CPU');
     },
@@ -1093,13 +1094,13 @@ Ext.define('PVE.Utils', {
 	    return -1;
 	}
 
-        var index = PVE.data.ResourceStore.findExact('id', 'node/' + data.node);
-	var node = PVE.data.ResourceStore.getAt(index);
+	let index = PVE.data.ResourceStore.findExact('id', 'node/' + data.node);
+	let node = PVE.data.ResourceStore.getAt(index);
 
         if (!Ext.isDefined(node) || node === null) {
 	    return -1;
         }
-	var maxmem = node.data.maxmem || 0;
+	let maxmem = node.data.maxmem || 0;
 
 	if (!Ext.isNumeric(data.mem) ||
 	    maxmem === 0 ||
@@ -1116,8 +1117,8 @@ Ext.define('PVE.Utils', {
 	}
 	if (value > 1) {
 	    // we got no percentage but bytes
-	    var mem = value;
-	    var maxmem = record.data.maxmem;
+	    let mem = value;
+	    let maxmem = record.data.maxmem;
 	    if (!record.data.uptime ||
 		maxmem === 0 ||
 		!Ext.isNumeric(mem)) {
@@ -1138,13 +1139,13 @@ Ext.define('PVE.Utils', {
 	    return '';
 	}
 
-	var index = PVE.data.ResourceStore.findExact('id', 'node/' + record.data.node);
-	var node = PVE.data.ResourceStore.getAt(index);
-	var maxmem = node.data.maxmem || 0;
+	let index = PVE.data.ResourceStore.findExact('id', 'node/' + record.data.node);
+	let node = PVE.data.ResourceStore.getAt(index);
+	let maxmem = node.data.maxmem || 0;
 
 	if (record.data.mem > 1) {
 	    // we got no percentage but bytes
-	    var mem = record.data.mem;
+	    let mem = record.data.mem;
 	    if (!record.data.uptime ||
 		maxmem === 0 ||
 		!Ext.isNumeric(mem)) {
@@ -1157,8 +1158,8 @@ Ext.define('PVE.Utils', {
     },
 
     render_mem_usage: function(value, metaData, record, rowIndex, colIndex, store) {
-	var mem = value;
-	var maxmem = record.data.maxmem;
+	let mem = value;
+	let maxmem = record.data.maxmem;
 
 	if (!record.data.uptime) {
 	    return '';
@@ -1191,9 +1192,9 @@ Ext.define('PVE.Utils', {
     },
 
     render_disk_usage: function(value, metaData, record, rowIndex, colIndex, store) {
-	var disk = value;
-	var maxdisk = record.data.maxdisk;
-	var type = record.data.type;
+	let disk = value;
+	let maxdisk = record.data.maxdisk;
+	let type = record.data.type;
 
 	if (!Ext.isNumeric(disk) ||
 	    maxdisk === 0 ||
@@ -1206,8 +1207,8 @@ Ext.define('PVE.Utils', {
     },
 
     get_object_icon_class: function(type, record) {
-	var status = '';
-	var objType = type;
+	let status = '';
+	let objType = type;
 
 	if (type === 'type') {
 	    // for folder view
@@ -1225,9 +1226,9 @@ Ext.define('PVE.Utils', {
 	    status += ' locked lock-' + record.lock;
 	}
 
-	var defaults = PVE.tree.ResourceTree.typeDefaults[objType];
+	let defaults = PVE.tree.ResourceTree.typeDefaults[objType];
 	if (defaults && defaults.iconCls) {
-	    var retVal = defaults.iconCls + ' ' + status;
+	    let retVal = defaults.iconCls + ' ' + status;
 	    return retVal;
 	}
 
@@ -1235,9 +1236,9 @@ Ext.define('PVE.Utils', {
     },
 
     render_resource_type: function(value, metaData, record, rowIndex, colIndex, store) {
-	var cls = PVE.Utils.get_object_icon_class(value, record.data);
+	let cls = PVE.Utils.get_object_icon_class(value, record.data);
 
-	var fa = '<i class="fa-fw x-grid-icon-custom ' + cls + '"></i> ';
+	let fa = '<i class="fa-fw x-grid-icon-custom ' + cls + '"></i> ';
 	return fa + value;
     },
 
@@ -1246,8 +1247,8 @@ Ext.define('PVE.Utils', {
     },
 
     render_upid: function(value, metaData, record) {
-	var type = record.data.type;
-	var id = record.data.id;
+	let type = record.data.type;
+	let id = record.data.id;
 
 	return Proxmox.Utils.format_task_description(type, id);
     },
@@ -1260,7 +1261,7 @@ Ext.define('PVE.Utils', {
     },
 
     render_san: function(value) {
-	var names = [];
+	let names = [];
 	if (Ext.isArray(value)) {
 	    value.forEach(function(val) {
 		if (!Ext.isNumber(val)) {
@@ -1273,8 +1274,8 @@ Ext.define('PVE.Utils', {
     },
 
     render_full_name: function(firstname, metaData, record) {
-	var first = firstname || '';
-	var last = record.data.lastname || '';
+	let first = firstname || '';
+	let last = record.data.lastname || '';
 	return Ext.htmlEncode(first + " " + last);
     },
 
@@ -1284,7 +1285,7 @@ Ext.define('PVE.Utils', {
     },
 
     openDefaultConsoleWindow: function(consoles, consoleType, vmid, nodename, vmname, cmd) {
-	var dv = PVE.Utils.defaultViewer(consoles, consoleType);
+	let dv = PVE.Utils.defaultViewer(consoles, consoleType);
 	PVE.Utils.openConsoleWindow(dv, consoleType, vmid, nodename, vmname, cmd);
     },
 
@@ -1323,7 +1324,7 @@ Ext.define('PVE.Utils', {
     },
 
     defaultViewer: function(consoles, type) {
-	var allowSpice, allowXtermjs;
+	let allowSpice, allowXtermjs;
 
 	if (consoles === true) {
 	    allowSpice = true;
@@ -1345,10 +1346,10 @@ Ext.define('PVE.Utils', {
     openVNCViewer: function(vmtype, vmid, nodename, vmname, cmd) {
 	let scaling = 'off';
 	if (Proxmox.Utils.toolkit !== 'touch') {
-	    var sp = Ext.state.Manager.getProvider();
+	    let sp = Ext.state.Manager.getProvider();
 	    scaling = sp.get('novnc-scaling', 'off');
 	}
-	var url = Ext.Object.toQueryString({
+	let url = Ext.Object.toQueryString({
 	    console: vmtype, // kvm, lxc, upgrade or shell
 	    novnc: 1,
 	    vmid: vmid,
@@ -1357,15 +1358,15 @@ Ext.define('PVE.Utils', {
 	    resize: scaling,
 	    cmd: cmd,
 	});
-	var nw = window.open("?" + url, '_blank', "innerWidth=745,innerheight=427");
+	let nw = window.open("?" + url, '_blank', "innerWidth=745,innerheight=427");
 	if (nw) {
 	    nw.focus();
 	}
     },
 
     openSpiceViewer: function(url, params) {
-	var downloadWithName = function(uri, name) {
-	    var link = Ext.DomHelper.append(document.body, {
+	let downloadWithName = function(uri, name) {
+	    let link = Ext.DomHelper.append(document.body, {
 		tag: 'a',
 		href: uri,
 		css: 'display:none;visibility:hidden;height:0px;',
@@ -1626,8 +1627,8 @@ Ext.define('PVE.Utils', {
 	    if (Proxmox.UserName === 'root@pam') {
 		container.el.mask();
 		if (!container.down('pveCephInstallWindow')) {
-		    var isInstalled = !!msg.match(/not initialized/i);
-		    var win = Ext.create('PVE.ceph.Install', {
+		    let isInstalled = !!msg.match(/not initialized/i);
+		    let win = Ext.create('PVE.ceph.Install', {
 			nodename: nodename,
 		    });
 		    win.getViewModel().set('isInstalled', isInstalled);
@@ -1807,7 +1808,7 @@ Ext.define('PVE.Utils', {
 
     singleton: true,
     constructor: function() {
-	var me = this;
+	let me = this;
 	Ext.apply(me, me.utilities);
 
 	Proxmox.Utils.override_task_descriptions({
diff --git a/www/manager6/VNCConsole.js b/www/manager6/VNCConsole.js
index 9057e447..1f4c0e96 100644
--- a/www/manager6/VNCConsole.js
+++ b/www/manager6/VNCConsole.js
@@ -13,7 +13,7 @@ Ext.define('PVE.noVncConsole', {
     border: false,
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.nodename) {
 	    throw "no node name specified";
@@ -29,9 +29,9 @@ Ext.define('PVE.noVncConsole', {
 
 	// always use same iframe, to avoid running several noVnc clients
 	// at same time (to avoid performance problems)
-	var box = Ext.create('Ext.ux.IFrame', { itemid: "vncconsole" });
+	let box = Ext.create('Ext.ux.IFrame', { itemid: "vncconsole" });
 
-	var type = me.xtermjs ? 'xtermjs' : 'novnc';
+	let type = me.xtermjs ? 'xtermjs' : 'novnc';
 	Ext.apply(me, {
 	    items: box,
 	    listeners: {
@@ -50,7 +50,7 @@ Ext.define('PVE.noVncConsole', {
 		    };
 		    queryDict[type] = 1;
 		    PVE.Utils.cleanEmptyObjectKeys(queryDict);
-		    var url = '/?' + Ext.Object.toQueryString(queryDict);
+		    let url = '/?' + Ext.Object.toQueryString(queryDict);
 		    box.load(url);
 		},
 	    },
@@ -65,7 +65,7 @@ Ext.define('PVE.noVncConsole', {
 
     reload: function() {
 	// reload IFrame content to forcibly reconnect VNC/xterm.js to VM
-	var box = this.down('[itemid=vncconsole]');
+	let box = this.down('[itemid=vncconsole]');
 	box.getWin().location.reload();
     },
 });
diff --git a/www/manager6/Workspace.js b/www/manager6/Workspace.js
index 37d772b8..9831571a 100644
--- a/www/manager6/Workspace.js
+++ b/www/manager6/Workspace.js
@@ -366,7 +366,7 @@ Ext.define('PVE.StdWorkspace', {
 				    iconCls: 'fa fa-gear',
 				    text: gettext('My Settings'),
 				    handler: function() {
-					var win = Ext.create('PVE.window.Settings');
+					let win = Ext.create('PVE.window.Settings');
 					win.show();
 				    },
 				},
@@ -375,7 +375,7 @@ Ext.define('PVE.StdWorkspace', {
 				    itemId: 'passworditem',
 				    iconCls: 'fa fa-fw fa-key',
 				    handler: function() {
-					var win = Ext.create('Proxmox.window.PasswordEdit', {
+					let win = Ext.create('Proxmox.window.PasswordEdit', {
 					    userid: Proxmox.UserName,
 					});
 					win.show();
@@ -406,12 +406,12 @@ Ext.define('PVE.StdWorkspace', {
 					PVE.data.ResourceStore.loadData([], false);
 					me.showLogin();
 					me.setContent(null);
-					var rt = me.down('pveResourceTree');
+					let rt = me.down('pveResourceTree');
 					rt.setDatacenterText(undefined);
 					rt.clearTree();
 
 					// empty the stores of the StatusPanel child items
-					var statusPanels = Ext.ComponentQuery.query('pveStatusPanel grid');
+					let statusPanels = Ext.ComponentQuery.query('pveStatusPanel grid');
 					Ext.Array.forEach(statusPanels, function(comp) {
 					    if (comp.getStore()) {
 						comp.getStore().loadData([], false);
@@ -450,7 +450,7 @@ Ext.define('PVE.StdWorkspace', {
 		    items: [selview, rtree],
 		    listeners: {
 			resize: function(panel, width, height) {
-			    var viewWidth = me.getSize().width;
+			    let viewWidth = me.getSize().width;
 			    if (width > viewWidth - 100) {
 				panel.setWidth(viewWidth - 100);
 			    }
@@ -471,7 +471,7 @@ Ext.define('PVE.StdWorkspace', {
 		    split: true,
 		    listeners: {
 			resize: function(panel, width, height) {
-			    var viewHeight = me.getSize().height;
+			    let viewHeight = me.getSize().height;
 			    if (height > viewHeight - 150) {
 				panel.setHeight(viewHeight - 150);
 			    }
diff --git a/www/manager6/button/ConsoleButton.js b/www/manager6/button/ConsoleButton.js
index 62928e47..edae7425 100644
--- a/www/manager6/button/ConsoleButton.js
+++ b/www/manager6/button/ConsoleButton.js
@@ -20,14 +20,14 @@ Ext.define('PVE.button.ConsoleButton', {
     text: gettext('Console'),
 
     setEnableSpice: function(enable) {
-	var me = this;
+	let me = this;
 
 	me.enableSpice = enable;
 	me.down('#spicemenu').setDisabled(!enable);
     },
 
     setEnableXtermJS: function(enable) {
-	var me = this;
+	let me = this;
 
 	me.enableXtermjs = enable;
 	me.down('#xtermjs').setDisabled(!enable);
diff --git a/www/manager6/button/Split.js b/www/manager6/button/Split.js
index 090571de..c558ba21 100644
--- a/www/manager6/button/Split.js
+++ b/www/manager6/button/Split.js
@@ -23,8 +23,8 @@ Ext.define('PVE.button.Split', {
     dangerous: false,
 
     handlerWrapper: function(button, event) {
-	var me = this;
-	var rec, msg;
+	let me = this;
+	let rec, msg;
 	if (me.selModel) {
 	    rec = me.selModel.getSelection()[0];
 	    if (!rec || me.enableFn(rec) === false) {
@@ -57,7 +57,7 @@ Ext.define('PVE.button.Split', {
     },
 
     initComponent: function() {
-        var me = this;
+        let me = this;
 
 	if (me.handler) {
 	    me.realHandler = me.handler;
@@ -73,7 +73,7 @@ Ext.define('PVE.button.Split', {
 
 		if (item.selModel) {
 		    me.mon(item.selModel, "selectionchange", function() {
-			var rec = item.selModel.getSelection()[0];
+			let rec = item.selModel.getSelection()[0];
 			if (!rec || item.enableFn(rec) === false) {
 			    item.setDisabled(true);
 			} else {
@@ -88,7 +88,7 @@ Ext.define('PVE.button.Split', {
 
 	if (me.selModel) {
 	    me.mon(me.selModel, "selectionchange", function() {
-		var rec = me.selModel.getSelection()[0];
+		let rec = me.selModel.getSelection()[0];
 		if (!rec || me.enableFn(rec) === false) {
 		    me.setDisabled(true);
 		} else {
diff --git a/www/manager6/ceph/CephInstallWizard.js b/www/manager6/ceph/CephInstallWizard.js
index 79b0f4e4..145b6537 100644
--- a/www/manager6/ceph/CephInstallWizard.js
+++ b/www/manager6/ceph/CephInstallWizard.js
@@ -154,25 +154,25 @@ Ext.define('PVE.ceph.CephInstallWizard', {
 
     title: gettext('Setup'),
     navigateNext: function() {
-	var tp = this.down('#wizcontent');
-	var atab = tp.getActiveTab();
+	let tp = this.down('#wizcontent');
+	let atab = tp.getActiveTab();
 
-	var next = tp.items.indexOf(atab) + 1;
-	var ntab = tp.items.getAt(next);
+	let next = tp.items.indexOf(atab) + 1;
+	let ntab = tp.items.getAt(next);
 	if (ntab) {
 	    ntab.enable();
 	    tp.setActiveTab(ntab);
 	}
     },
     setInitialTab: function(index) {
-	var tp = this.down('#wizcontent');
-	var initialTab = tp.items.getAt(index);
+	let tp = this.down('#wizcontent');
+	let initialTab = tp.items.getAt(index);
 	initialTab.enable();
 	tp.setActiveTab(initialTab);
     },
     onShow: function() {
 	    this.callParent(arguments);
-	    var isInstalled = this.getViewModel().get('isInstalled');
+	    let isInstalled = this.getViewModel().get('isInstalled');
 	    if (isInstalled) {
 		this.getViewModel().set('configuration', false);
 		this.setInitialTab(2);
@@ -263,7 +263,7 @@ Ext.define('PVE.ceph.CephInstallWizard', {
 	    viewModel: {}, // needed to inherit parent viewModel data
 	    listeners: {
 		afterrender: function() {
-		    var me = this;
+		    let me = this;
 		    if (this.getViewModel().get('isInstalled')) {
 			this.mask("Ceph is already installed, click next to create your configuration.", ['pve-static-mask']);
 		    } else {
@@ -302,7 +302,7 @@ Ext.define('PVE.ceph.CephInstallWizard', {
 		    me.updateStore.startUpdate();
 		},
 		destroy: function() {
-		    var me = this;
+		    let me = this;
 		    if (me.updateStore) {
 			me.updateStore.stopUpdate();
 		    }
@@ -456,14 +456,14 @@ Ext.define('PVE.ceph.CephInstallWizard', {
 		return values;
 	    },
 	    onSubmit: function() {
-		var me = this;
+		let me = this;
 		if (!this.up('pveCephInstallWizard').getViewModel().get('configuration')) {
-		    var wizard = me.up('window');
-		    var kv = wizard.getValues();
+		    let wizard = me.up('window');
+		    let kv = wizard.getValues();
 		    delete kv.delete;
-		    var monNode = kv['mon-node'];
+		    let monNode = kv['mon-node'];
 		    delete kv['mon-node'];
-		    var nodename = me.nodename;
+		    let nodename = me.nodename;
 		    delete kv.nodename;
 		    Proxmox.Utils.API2Request({
 			url: `/nodes/${nodename}/ceph/init`,
@@ -512,10 +512,10 @@ Ext.define('PVE.ceph.CephInstallWizard', {
 			Ext.GlobalEvents.fireEvent('proxmoxShowHelp', this.onlineHelp);
 		    }
 
-		    var tp = this.up('#wizcontent');
-		    var idx = tp.items.indexOf(this)-1;
+		    let tp = this.up('#wizcontent');
+		    let idx = tp.items.indexOf(this)-1;
 		    for (;idx >= 0; idx--) {
-			var nc = tp.items.getAt(idx);
+			let nc = tp.items.getAt(idx);
 			if (nc) {
 			    nc.disable();
 			}
@@ -528,7 +528,7 @@ Ext.define('PVE.ceph.CephInstallWizard', {
 		},
 	    },
 	    onSubmit: function() {
-		var wizard = this.up('pveCephInstallWizard');
+		let wizard = this.up('pveCephInstallWizard');
 		wizard.close();
 	    },
 	},
diff --git a/www/manager6/ceph/Config.js b/www/manager6/ceph/Config.js
index 7f07f15f..ec22f99b 100644
--- a/www/manager6/ceph/Config.js
+++ b/www/manager6/ceph/Config.js
@@ -46,9 +46,9 @@ Ext.define('PVE.node.CephConfigDb', {
     ],
 
     initComponent: function() {
-        var me = this;
+        let me = this;
 
-	var nodename = me.pveSelNode.data.node;
+	let nodename = me.pveSelNode.data.node;
 	if (!nodename) {
 	    throw "no node name specified";
 	}
@@ -70,14 +70,14 @@ Ext.define('PVE.node.CephConfig', {
     border: false,
     scrollable: true,
     load: function() {
-	var me = this;
+	let me = this;
 
 	Proxmox.Utils.API2Request({
 	    url: me.url,
 	    waitMsgTarget: me,
 	    failure: function(response, opts) {
 		me.update(gettext('Error') + " " + response.htmlStatus);
-		var msg = response.htmlStatus;
+		let msg = response.htmlStatus;
 		PVE.Utils.showCephInstallOrMask(me.ownerCt, msg, me.pveSelNode.data.node,
 		    function(win) {
 			me.mon(win, 'cephInstallWindowClosed', function() {
@@ -87,16 +87,16 @@ Ext.define('PVE.node.CephConfig', {
 		);
 	    },
 	    success: function(response, opts) {
-		var data = response.result.data;
+		let data = response.result.data;
 		me.update(Ext.htmlEncode(data));
 	    },
 	});
     },
 
     initComponent: function() {
-        var me = this;
+        let me = this;
 
-	var nodename = me.pveSelNode.data.node;
+	let nodename = me.pveSelNode.data.node;
 	if (!nodename) {
 	    throw "no node name specified";
 	}
@@ -145,7 +145,7 @@ Ext.define('PVE.node.CephConfigCrush', {
     }],
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 	me.defaults = {
 	    pveSelNode: me.pveSelNode,
 	};
diff --git a/www/manager6/ceph/Crush.js b/www/manager6/ceph/Crush.js
index c0bdfa27..8269d148 100644
--- a/www/manager6/ceph/Crush.js
+++ b/www/manager6/ceph/Crush.js
@@ -8,14 +8,14 @@ Ext.define('PVE.node.CephCrushMap', {
     stateId: 'layout-ceph-crush',
     scrollable: true,
     load: function() {
-	var me = this;
+	let me = this;
 
 	Proxmox.Utils.API2Request({
 	    url: me.url,
 	    waitMsgTarget: me,
 	    failure: function(response, opts) {
 		me.update(gettext('Error') + " " + response.htmlStatus);
-		var msg = response.htmlStatus;
+		let msg = response.htmlStatus;
 		PVE.Utils.showCephInstallOrMask(
 		    me.ownerCt,
 		    msg,
@@ -24,7 +24,7 @@ Ext.define('PVE.node.CephCrushMap', {
 		);
 	    },
 	    success: function(response, opts) {
-		var data = response.result.data;
+		let data = response.result.data;
 		me.update(Ext.htmlEncode(data));
 	    },
 	});
diff --git a/www/manager6/ceph/FS.js b/www/manager6/ceph/FS.js
index e9815355..0c79899e 100644
--- a/www/manager6/ceph/FS.js
+++ b/www/manager6/ceph/FS.js
@@ -10,7 +10,7 @@ Ext.define('PVE.CephCreateFS', {
     method: 'POST',
 
     setFSName: function(fsName) {
-	var me = this;
+	let me = this;
 
 	if (fsName === '' || fsName === undefined) {
 	    fsName = 'cephfs';
@@ -56,7 +56,7 @@ Ext.define('PVE.CephCreateFS', {
     ],
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.nodename) {
 	    throw "no node name specified";
@@ -176,7 +176,7 @@ Ext.define('PVE.NodeCephFSPanel', {
 	    stateId: 'grid-ceph-mds',
 	    type: 'mds',
 	    storeLoadCallback: function(store, records, success) {
-		var vm = this.getViewModel();
+		let vm = this.getViewModel();
 		if (!success || !records) {
 		    vm.set('mdsCount', 0);
 		    return;
diff --git a/www/manager6/ceph/Log.js b/www/manager6/ceph/Log.js
index 4fda3209..6b9c1c93 100644
--- a/www/manager6/ceph/Log.js
+++ b/www/manager6/ceph/Log.js
@@ -5,9 +5,9 @@ Ext.define('PVE.ceph.Log', {
     nodename: undefined,
 
     failCallback: function(response) {
-	var me = this;
-	var msg = response.htmlStatus;
-	var windowShow = PVE.Utils.showCephInstallOrMask(me, msg, me.nodename,
+	let me = this;
+	let msg = response.htmlStatus;
+	let windowShow = PVE.Utils.showCephInstallOrMask(me, msg, me.nodename,
 	    function(win) {
 		me.mon(win, 'cephInstallWindowClosed', function() {
 		    me.loadTask.delay(200);
diff --git a/www/manager6/ceph/Pool.js b/www/manager6/ceph/Pool.js
index a1f008d1..feeddf55 100644
--- a/www/manager6/ceph/Pool.js
+++ b/www/manager6/ceph/Pool.js
@@ -341,16 +341,16 @@ Ext.define('PVE.node.Ceph.PoolList', {
 	},
     ],
     initComponent: function() {
-        var me = this;
+        let me = this;
 
-	var nodename = me.pveSelNode.data.node;
+	let nodename = me.pveSelNode.data.node;
 	if (!nodename) {
 	    throw "no node name specified";
 	}
 
-	var sm = Ext.create('Ext.selection.RowModel', {});
+	let sm = Ext.create('Ext.selection.RowModel', {});
 
-	var rstore = Ext.create('Proxmox.data.UpdateStore', {
+	let rstore = Ext.create('Proxmox.data.UpdateStore', {
 	    interval: 3000,
 	    storeid: 'ceph-pool-list' + nodename,
 	    model: 'ceph-pool-list',
@@ -364,7 +364,7 @@ Ext.define('PVE.node.Ceph.PoolList', {
 	// manages the "install ceph?" overlay
 	PVE.Utils.monitor_ceph_installed(me, rstore, nodename);
 
-	var run_editor = function() {
+	let run_editor = function() {
 	    let rec = sm.getSelection()[0];
 	    if (!rec || !rec.data.pool_name) {
 		return;
diff --git a/www/manager6/ceph/Services.js b/www/manager6/ceph/Services.js
index b9fc52c8..e6a1d793 100644
--- a/www/manager6/ceph/Services.js
+++ b/www/manager6/ceph/Services.js
@@ -37,7 +37,7 @@ Ext.define('PVE.ceph.Services', {
     ],
 
     updateAll: function(metadata, status) {
-	var me = this;
+	let me = this;
 
 	const healthstates = {
 	    'HEALTH_UNKNOWN': 0,
@@ -55,7 +55,7 @@ Ext.define('PVE.ceph.Services', {
 		maxversion = node?.version?.parts;
 	    }
 	});
-	var quorummap = status && status.quorum_names ? status.quorum_names : [];
+	let quorummap = status && status.quorum_names ? status.quorum_names : [];
 	let monmessages = {}, mgrmessages = {}, mdsmessages = {};
 	if (status) {
 	    if (status.health) {
@@ -141,7 +141,7 @@ Ext.define('PVE.ceph.Services', {
 	};
 
 	for (let type of ['mon', 'mgr', 'mds']) {
-	    var ids = Object.keys(metadata[type] || {});
+	    let ids = Object.keys(metadata[type] || {});
 	    me[type] = {};
 
 	    for (let id of ids) {
@@ -245,7 +245,7 @@ Ext.define('PVE.ceph.ServiceList', {
     ],
 
     updateAll: function(list) {
-	var me = this;
+	let me = this;
 	me.suspendLayout = true;
 
 	list.sort((a, b) => a.id > b.id ? 1 : a.id < b.id ? -1 : 0);
@@ -276,7 +276,7 @@ Ext.define('PVE.ceph.ServiceList', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 	me.callParent();
 	me.getComponent('title').update({
 	    title: me.title,
@@ -302,7 +302,7 @@ Ext.define('PVE.ceph.ServiceWidget', {
     ],
 
     updateService: function(title, text, health) {
-	var me = this;
+	let me = this;
 
 	me.update(Ext.apply(me.data, {
 	    health: health,
diff --git a/www/manager6/ceph/Status.js b/www/manager6/ceph/Status.js
index bdcf3f1b..2691e8a0 100644
--- a/www/manager6/ceph/Status.js
+++ b/www/manager6/ceph/Status.js
@@ -109,7 +109,7 @@ Ext.define('PVE.node.CephStatus', {
 				{
 				    iconCls: 'x-fa fa-info-circle',
 				    handler: function(grid, rowindex, colindex, item, e, record) {
-					var win = Ext.create('Ext.window.Window', {
+					let win = Ext.create('Ext.window.Window', {
 					    title: gettext('Detail'),
 					    resizable: true,
 					    modal: true,
@@ -256,7 +256,7 @@ Ext.define('PVE.node.CephStatus', {
     ],
 
     generateCheckData: function(health) {
-	var result = [];
+	let result = [];
 	let checks = health.checks || {};
 
 	Object.keys(checks).sort().forEach(key => {
@@ -276,8 +276,8 @@ Ext.define('PVE.node.CephStatus', {
 	    return;
 	}
 
-	var me = this;
-	var rec = records[0];
+	let me = this;
+	let rec = records[0];
 	me.status = rec.data;
 
 	// add health panel
@@ -296,7 +296,7 @@ Ext.define('PVE.node.CephStatus', {
 	let used = pgmap.bytes_used;
 	let total = pgmap.bytes_total;
 
-	var text = Ext.String.format(gettext('{0} of {1}'),
+	let text = Ext.String.format(gettext('{0} of {1}'),
 	    Proxmox.Utils.render_size(used),
 	    Proxmox.Utils.render_size(total),
 	);
@@ -348,12 +348,12 @@ Ext.define('PVE.node.CephStatus', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var nodename = me.pveSelNode.data.node;
+	let nodename = me.pveSelNode.data.node;
 
 	me.callParent();
-	var baseurl = '/api2/json' + (nodename ? '/nodes/' + nodename : '/cluster') + '/ceph';
+	let baseurl = '/api2/json' + (nodename ? '/nodes/' + nodename : '/cluster') + '/ceph';
 	me.store = Ext.create('Proxmox.data.UpdateStore', {
 	    storeid: 'ceph-status-' + (nodename || 'cluster'),
 	    interval: 5000,
diff --git a/www/manager6/ceph/StatusDetail.js b/www/manager6/ceph/StatusDetail.js
index 88b1775c..f4db8829 100644
--- a/www/manager6/ceph/StatusDetail.js
+++ b/www/manager6/ceph/StatusDetail.js
@@ -106,7 +106,7 @@ Ext.define('PVE.ceph.StatusDetail', {
 		tooltip: {
 		    trackMouse: true,
 		    renderer: function(tooltip, record, ctx) {
-			var html = record.get('text');
+			let html = record.get('text');
 			html += '<br>';
 			record.get('states').forEach(function(state) {
 			    html += '<br>' +
@@ -265,7 +265,7 @@ Ext.define('PVE.ceph.StatusDetail', {
 	const downinregex = /(\d+) osds down/;
 	let downin_osds = 0;
 	Ext.Object.each(health.checks, function(key, value, obj) {
-	    var found = null;
+	    let found = null;
 	    if (key === 'OSD_DOWN') {
 		found = value.summary.message.match(downinregex);
 		if (found !== null) {
diff --git a/www/manager6/controller/StorageEdit.js b/www/manager6/controller/StorageEdit.js
index cb73b776..ea4a8ff1 100644
--- a/www/manager6/controller/StorageEdit.js
+++ b/www/manager6/controller/StorageEdit.js
@@ -10,8 +10,8 @@ Ext.define('PVE.controller.StorageEdit', {
 		    prealloc.setDisabled(!hasImages);
 		}
 
-		var hasBackups = Ext.Array.contains(value, 'backup');
-		var maxfiles = this.lookupReference('maxfiles');
+		let hasBackups = Ext.Array.contains(value, 'backup');
+		let maxfiles = this.lookupReference('maxfiles');
 		if (!maxfiles) {
 		    return;
 		}
diff --git a/www/manager6/data/PermPathStore.js b/www/manager6/data/PermPathStore.js
index cf702c03..3668a2a0 100644
--- a/www/manager6/data/PermPathStore.js
+++ b/www/manager6/data/PermPathStore.js
@@ -16,7 +16,7 @@ Ext.define('PVE.data.PermPathStore', {
     ],
 
     constructor: function(config) {
-	var me = this;
+	let me = this;
 
 	config = config || {};
 
diff --git a/www/manager6/data/ResourceStore.js b/www/manager6/data/ResourceStore.js
index c7b72306..ed601f48 100644
--- a/www/manager6/data/ResourceStore.js
+++ b/www/manager6/data/ResourceStore.js
@@ -80,7 +80,7 @@ Ext.define('PVE.data.ResourceStore', {
 		renderer: Proxmox.Utils.format_boolean,
 		hidden: true,
 		convert: function(value, record) {
-		    var info = record.data;
+		    let info = record.data;
 		    return Ext.isNumeric(info.uptime) && info.uptime > 0;
 		},
 	    },
@@ -298,7 +298,7 @@ Ext.define('PVE.data.ResourceStore', {
 	let fields = [];
 	let fieldNames = [];
 	Ext.Object.each(field_defaults, function(key, value) {
-	    var field = { name: key, type: value.type };
+	    let field = { name: key, type: value.type };
 	    if (Ext.isDefined(value.convert)) {
 		field.convert = value.convert;
 	    }
diff --git a/www/manager6/dc/ACLView.js b/www/manager6/dc/ACLView.js
index 79f900cd..522f5082 100644
--- a/www/manager6/dc/ACLView.js
+++ b/www/manager6/dc/ACLView.js
@@ -158,7 +158,7 @@ Ext.define('PVE.dc.ACLView', {
 	    selModel: sm,
 	    confirmMsg: gettext('Are you sure you want to remove this entry'),
 	    handler: function(btn, event, rec) {
-		var params = {
+		let params = {
 		    'delete': 1,
 		    path: rec.data.path,
 		    roles: rec.data.roleid,
@@ -199,7 +199,7 @@ Ext.define('PVE.dc.ACLView', {
 				text: gettext('Group Permission'),
 				iconCls: 'fa fa-fw fa-group',
 				handler: function() {
-				    var win = Ext.create('PVE.dc.ACLAdd', {
+				    let win = Ext.create('PVE.dc.ACLAdd', {
 					aclType: 'group',
 					path: me.path,
 				    });
@@ -211,7 +211,7 @@ Ext.define('PVE.dc.ACLView', {
 				text: gettext('User Permission'),
 				iconCls: 'fa fa-fw fa-user',
 				handler: function() {
-				    var win = Ext.create('PVE.dc.ACLAdd', {
+				    let win = Ext.create('PVE.dc.ACLAdd', {
 					aclType: 'user',
 					path: me.path,
 				    });
diff --git a/www/manager6/dc/ACMEPluginEdit.js b/www/manager6/dc/ACMEPluginEdit.js
index 570b4dd2..f81ced55 100644
--- a/www/manager6/dc/ACMEPluginEdit.js
+++ b/www/manager6/dc/ACMEPluginEdit.js
@@ -206,7 +206,7 @@ Ext.define('PVE.dc.ACMEPluginEditor', {
     ],
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.callParent();
 
diff --git a/www/manager6/dc/AuthEditBase.js b/www/manager6/dc/AuthEditBase.js
index e18fbc3b..f41d5a75 100644
--- a/www/manager6/dc/AuthEditBase.js
+++ b/www/manager6/dc/AuthEditBase.js
@@ -77,7 +77,7 @@ Ext.define('PVE.dc.AuthEditBase', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.isCreate = !me.realm;
 
@@ -143,7 +143,7 @@ Ext.define('PVE.dc.AuthEditBase', {
 	if (!me.isCreate) {
 	    me.load({
 		success: function(response, options) {
-		    var data = response.result.data || {};
+		    let data = response.result.data || {};
 		    // just to be sure (should not happen)
 		    if (data.type !== me.authType) {
 			me.close();
diff --git a/www/manager6/dc/AuthView.js b/www/manager6/dc/AuthView.js
index 60332c3f..f355cd9e 100644
--- a/www/manager6/dc/AuthView.js
+++ b/www/manager6/dc/AuthView.js
@@ -88,7 +88,7 @@ Ext.define('PVE.dc.AuthView', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	let items = [];
 	for (const [authType, config] of Object.entries(PVE.Utils.authSchema)) {
diff --git a/www/manager6/dc/Backup.js b/www/manager6/dc/Backup.js
index e9d74fb6..70157baa 100644
--- a/www/manager6/dc/Backup.js
+++ b/www/manager6/dc/Backup.js
@@ -287,7 +287,7 @@ Ext.define('PVE.dc.BackupEdit', {
 		sm.deselectAll(true);
 		if (list) {
 		    Ext.Array.each(list.split(','), function(vmid) {
-			var rec = store.findRecord('vmid', vmid, 0, false, true, true);
+			let rec = store.findRecord('vmid', vmid, 0, false, true, true);
 			if (rec) {
 			    sm.select(rec, true);
 			}
@@ -674,19 +674,19 @@ Ext.define('PVE.dc.BackupView', {
 	    }).show();
 	};
 
-	var edit_btn = new Proxmox.button.Button({
+	let edit_btn = new Proxmox.button.Button({
 	    text: gettext('Edit'),
 	    disabled: true,
 	    selModel: sm,
 	    handler: run_editor,
 	});
 
-	var run_btn = new Proxmox.button.Button({
+	let run_btn = new Proxmox.button.Button({
 	    text: gettext('Run now'),
 	    disabled: true,
 	    selModel: sm,
 	    handler: function() {
-		var rec = sm.getSelection()[0];
+		let rec = sm.getSelection()[0];
 		if (!rec) {
 		    return;
 		}
@@ -706,7 +706,7 @@ Ext.define('PVE.dc.BackupView', {
 	    },
 	});
 
-	var remove_btn = Ext.create('Proxmox.button.StdRemoveButton', {
+	let remove_btn = Ext.create('Proxmox.button.StdRemoveButton', {
 	    selModel: sm,
 	    baseurl: '/cluster/backup',
 	    callback: function() {
@@ -714,7 +714,7 @@ Ext.define('PVE.dc.BackupView', {
 	    },
 	});
 
-	var detail_btn = new Proxmox.button.Button({
+	let detail_btn = new Proxmox.button.Button({
 	    text: gettext('Job Detail'),
 	    disabled: true,
 	    tooltip: gettext('Show job details and which guests and volumes are affected by the backup job'),
@@ -747,7 +747,7 @@ Ext.define('PVE.dc.BackupView', {
 		{
 		    text: gettext('Add'),
 		    handler: function() {
-			var win = Ext.create('PVE.dc.BackupEdit', {});
+			let win = Ext.create('PVE.dc.BackupEdit', {});
 			win.on('destroy', reload);
 			win.show();
 		    },
diff --git a/www/manager6/dc/BackupJobDetail.js b/www/manager6/dc/BackupJobDetail.js
index f1b7a089..658a8789 100644
--- a/www/manager6/dc/BackupJobDetail.js
+++ b/www/manager6/dc/BackupJobDetail.js
@@ -76,13 +76,13 @@ Ext.define('PVE.dc.BackupDiskTree', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.jobid) {
 	    throw "no job id specified";
 	}
 
-	var sm = Ext.create('Ext.selection.TreeModel', {});
+	let sm = Ext.create('Ext.selection.TreeModel', {});
 
 	Ext.apply(me, {
 	    selModel: sm,
@@ -91,7 +91,7 @@ Ext.define('PVE.dc.BackupDiskTree', {
 		    type: 'string',
 		    name: 'iconCls',
 		    calculate: function(data) {
-			var txt = 'fa x-fa-tree fa-';
+			let txt = 'fa x-fa-tree fa-';
 			if (data.leaf && !data.type) {
 			    return txt + 'hdd-o';
 			} else if (data.type === 'qemu') {
@@ -346,7 +346,7 @@ Ext.define('PVE.dc.BackupInfo', {
     ],
 
     setValues: function(values) {
-	var me = this;
+	let me = this;
 	let vm = me.getViewModel();
 
         Ext.iterate(values, function(fieldId, val) {
@@ -401,7 +401,7 @@ Ext.define('PVE.dc.BackupInfo', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.record) {
 	    throw "no data provided";
diff --git a/www/manager6/dc/ClusterEdit.js b/www/manager6/dc/ClusterEdit.js
index 32964fbf..a16707f9 100644
--- a/www/manager6/dc/ClusterEdit.js
+++ b/www/manager6/dc/ClusterEdit.js
@@ -96,8 +96,8 @@ Ext.define('PVE.ClusterInfoWindow', {
 			    if (!field.joinInfo) {
 				return;
 			    }
-			    var jsons = Ext.JSON.encode(field.joinInfo);
-			    var base64s = Ext.util.Base64.encode(jsons);
+			    let jsons = Ext.JSON.encode(field.joinInfo);
+			    let base64s = Ext.util.Base64.encode(jsons);
 			    field.setValue(base64s);
 			},
 		    },
@@ -111,7 +111,7 @@ Ext.define('PVE.ClusterInfoWindow', {
 	items: [{
 	    xtype: 'button',
 	    handler: function(b) {
-		var el = document.getElementById('pveSerializedClusterInfo');
+		let el = document.getElementById('pveSerializedClusterInfo');
 		el.select();
 		document.execCommand("copy");
 	    },
diff --git a/www/manager6/dc/Config.js b/www/manager6/dc/Config.js
index 13ded12e..26e0440f 100644
--- a/www/manager6/dc/Config.js
+++ b/www/manager6/dc/Config.js
@@ -9,9 +9,9 @@ Ext.define('PVE.dc.Config', {
     onlineHelp: 'pve_admin_guide',
 
     initComponent: function() {
-        var me = this;
+        let me = this;
 
-	var caps = Ext.state.Manager.get('GuiCap');
+	let caps = Ext.state.Manager.get('GuiCap');
 
 	me.items = [];
 
diff --git a/www/manager6/dc/GroupEdit.js b/www/manager6/dc/GroupEdit.js
index d01f7b01..690eab57 100644
--- a/www/manager6/dc/GroupEdit.js
+++ b/www/manager6/dc/GroupEdit.js
@@ -3,12 +3,12 @@ Ext.define('PVE.dc.GroupEdit', {
     alias: ['widget.pveDcGroupEdit'],
 
     initComponent: function() {
-        var me = this;
+        let me = this;
 
         me.isCreate = !me.groupid;
 
-        var url;
-        var method;
+        let url;
+        let method;
 
         if (me.isCreate) {
             url = '/api2/extjs/access/groups';
diff --git a/www/manager6/dc/GroupView.js b/www/manager6/dc/GroupView.js
index 388edbe3..155b44e7 100644
--- a/www/manager6/dc/GroupView.js
+++ b/www/manager6/dc/GroupView.js
@@ -9,9 +9,9 @@ Ext.define('PVE.dc.GroupView', {
     stateId: 'grid-groups',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var store = new Ext.data.Store({
+	let store = new Ext.data.Store({
 	    model: 'pve-groups',
 	    sorters: {
 		property: 'groupid',
@@ -19,13 +19,13 @@ Ext.define('PVE.dc.GroupView', {
 	    },
 	});
 
-        var reload = function() {
+        let reload = function() {
             store.load();
         };
 
-	var sm = Ext.create('Ext.selection.RowModel', {});
+	let sm = Ext.create('Ext.selection.RowModel', {});
 
-	var remove_btn = Ext.create('Proxmox.button.StdRemoveButton', {
+	let remove_btn = Ext.create('Proxmox.button.StdRemoveButton', {
 	    selModel: sm,
 	    callback: function() {
 		reload();
@@ -33,31 +33,31 @@ Ext.define('PVE.dc.GroupView', {
 	    baseurl: '/access/groups/',
 	});
 
-	var run_editor = function() {
-	    var rec = sm.getSelection()[0];
+	let run_editor = function() {
+	    let rec = sm.getSelection()[0];
 	    if (!rec) {
 		return;
 	    }
 
-            var win = Ext.create('PVE.dc.GroupEdit', {
+            let win = Ext.create('PVE.dc.GroupEdit', {
                 groupid: rec.data.groupid,
             });
             win.on('destroy', reload);
             win.show();
 	};
 
-	var edit_btn = new Proxmox.button.Button({
+	let edit_btn = new Proxmox.button.Button({
 	    text: gettext('Edit'),
 	    disabled: true,
 	    selModel: sm,
 	    handler: run_editor,
 	});
 
-	var tbar = [
+	let tbar = [
             {
 		text: gettext('Create'),
 		handler: function() {
-		    var win = Ext.create('PVE.dc.GroupEdit', {});
+		    let win = Ext.create('PVE.dc.GroupEdit', {});
 		    win.on('destroy', reload);
 		    win.show();
 		},
diff --git a/www/manager6/dc/MetricServerView.js b/www/manager6/dc/MetricServerView.js
index c599886f..59113a25 100644
--- a/www/manager6/dc/MetricServerView.js
+++ b/www/manager6/dc/MetricServerView.js
@@ -123,7 +123,7 @@ Ext.define('PVE.dc.MetricServerView', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.callParent();
 
diff --git a/www/manager6/dc/NodeView.js b/www/manager6/dc/NodeView.js
index ff674233..ed8cc9cb 100644
--- a/www/manager6/dc/NodeView.js
+++ b/www/manager6/dc/NodeView.js
@@ -25,7 +25,7 @@ Ext.define('PVE.dc.NodeView', {
 	    sortable: true,
 	    dataIndex: 'online',
 	    renderer: function(value) {
-		var cls = value?'good':'critical';
+		let cls = value?'good':'critical';
 		return '<i class="fa ' + PVE.Utils.get_health_icon(cls) + '"><i/>';
 	    },
 	},
diff --git a/www/manager6/dc/OptionView.js b/www/manager6/dc/OptionView.js
index 51696982..74cdf2e4 100644
--- a/www/manager6/dc/OptionView.js
+++ b/www/manager6/dc/OptionView.js
@@ -7,7 +7,7 @@ Ext.define('PVE.dc.OptionView', {
     monStoreErrors: true,
 
     add_inputpanel_row: function(name, text, opts) {
-	var me = this;
+	let me = this;
 
 	opts = opts || {};
 	me.rows = me.rows || {};
@@ -27,7 +27,7 @@ Ext.define('PVE.dc.OptionView', {
 		    labelWidth: opts.labelWidth || 100,
 		},
 		setValues: function(values) {
-		    var edit_value = values[name];
+		    let edit_value = values[name];
 
 		    if (opts.parseBeforeSet) {
 			edit_value = PVE.Parser.parsePropertyString(edit_value);
@@ -44,7 +44,7 @@ Ext.define('PVE.dc.OptionView', {
 			if (values === undefined || Object.keys(values).length === 0) {
 			    return { 'delete': name };
 			}
-			var ret_val = {};
+			let ret_val = {};
 			ret_val[name] = PVE.Parser.printPropertyString(values);
 			return ret_val;
 		    },
@@ -66,7 +66,7 @@ Ext.define('PVE.dc.OptionView', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.add_combobox_row('keyboard', gettext('Keyboard Layout'), {
 	    renderer: PVE.Utils.render_kvm_language,
@@ -335,7 +335,7 @@ Ext.define('PVE.dc.OptionView', {
 		return;
 	    }
 
-	    var rec = store.getById('console');
+	    let rec = store.getById('console');
 	    PVE.VersionInfo.console = rec.data.value;
 	    if (rec.data.value === '__default__') {
 		delete PVE.VersionInfo.console;
diff --git a/www/manager6/dc/PoolView.js b/www/manager6/dc/PoolView.js
index db97cbe7..677636d6 100644
--- a/www/manager6/dc/PoolView.js
+++ b/www/manager6/dc/PoolView.js
@@ -9,9 +9,9 @@ Ext.define('PVE.dc.PoolView', {
     stateId: 'grid-pools',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var store = new Ext.data.Store({
+	let store = new Ext.data.Store({
 	    model: 'pve-pools',
 	    sorters: {
 		property: 'poolid',
@@ -19,13 +19,13 @@ Ext.define('PVE.dc.PoolView', {
 	    },
 	});
 
-        var reload = function() {
+        let reload = function() {
             store.load();
         };
 
-	var sm = Ext.create('Ext.selection.RowModel', {});
+	let sm = Ext.create('Ext.selection.RowModel', {});
 
-	var remove_btn = Ext.create('Proxmox.button.StdRemoveButton', {
+	let remove_btn = Ext.create('Proxmox.button.StdRemoveButton', {
 	    selModel: sm,
 	    baseurl: '/pools/',
 	    callback: function() {
@@ -33,31 +33,31 @@ Ext.define('PVE.dc.PoolView', {
 	    },
 	});
 
-	var run_editor = function() {
-	    var rec = sm.getSelection()[0];
+	let run_editor = function() {
+	    let rec = sm.getSelection()[0];
 	    if (!rec) {
 		return;
 	    }
 
-            var win = Ext.create('PVE.dc.PoolEdit', {
+            let win = Ext.create('PVE.dc.PoolEdit', {
                 poolid: rec.data.poolid,
             });
             win.on('destroy', reload);
             win.show();
 	};
 
-	var edit_btn = new Proxmox.button.Button({
+	let edit_btn = new Proxmox.button.Button({
 	    text: gettext('Edit'),
 	    disabled: true,
 	    selModel: sm,
 	    handler: run_editor,
 	});
 
-	var tbar = [
+	let tbar = [
             {
 		text: gettext('Create'),
 		handler: function() {
-		    var win = Ext.create('PVE.dc.PoolEdit', {});
+		    let win = Ext.create('PVE.dc.PoolEdit', {});
 		    win.on('destroy', reload);
 		    win.show();
 		},
diff --git a/www/manager6/dc/RoleEdit.js b/www/manager6/dc/RoleEdit.js
index c8658647..560b95a7 100644
--- a/www/manager6/dc/RoleEdit.js
+++ b/www/manager6/dc/RoleEdit.js
@@ -5,12 +5,12 @@ Ext.define('PVE.dc.RoleEdit', {
     width: 400,
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.isCreate = !me.roleid;
 
-	var url;
-	var method;
+	let url;
+	let method;
 
 	if (me.isCreate) {
 	    url = '/api2/extjs/access/roles';
@@ -47,8 +47,8 @@ Ext.define('PVE.dc.RoleEdit', {
 	if (!me.isCreate) {
 	    me.load({
 		success: function(response) {
-		    var data = response.result.data;
-		    var keys = Ext.Object.getKeys(data);
+		    let data = response.result.data;
+		    let keys = Ext.Object.getKeys(data);
 
 		    me.setValues({
 			privs: keys,
diff --git a/www/manager6/dc/SecurityGroups.js b/www/manager6/dc/SecurityGroups.js
index 5fb6860d..22b98c5f 100644
--- a/www/manager6/dc/SecurityGroups.js
+++ b/www/manager6/dc/SecurityGroups.js
@@ -13,16 +13,16 @@ Ext.define('PVE.SecurityGroupEdit', {
     allow_iface: false,
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.isCreate = me.group_name === undefined;
 
-	var subject;
+	let subject;
 
         me.url = '/api2/extjs' + me.base_url;
         me.method = 'POST';
 
-	var items = [
+	let items = [
 	    {
 		xtype: 'textfield',
 		name: 'group',
@@ -49,7 +49,7 @@ Ext.define('PVE.SecurityGroupEdit', {
 	    });
         }
 
-	var ipanel = Ext.create('Proxmox.panel.InputPanel', {
+	let ipanel = Ext.create('Proxmox.panel.InputPanel', {
 	// InputPanel does not have a 'create' property, does it need a 'isCreate'
 	    isCreate: me.isCreate,
 	    items: items,
@@ -138,7 +138,7 @@ Ext.define('PVE.SecurityGroupList', {
 	    text: gettext('Create'),
 	    handler: function() {
 		sm.deselectAll();
-		var win = Ext.create('PVE.SecurityGroupEdit', {});
+		let win = Ext.create('PVE.SecurityGroupEdit', {});
 		win.show();
 		win.on('destroy', reload);
 	    },
diff --git a/www/manager6/dc/Summary.js b/www/manager6/dc/Summary.js
index 8ea60267..65f69d70 100644
--- a/www/manager6/dc/Summary.js
+++ b/www/manager6/dc/Summary.js
@@ -80,9 +80,9 @@ Ext.define('PVE.dc.Summary', {
     },
 
     initComponent: function() {
-        var me = this;
+        let me = this;
 
-	var rstore = Ext.create('Proxmox.data.UpdateStore', {
+	let rstore = Ext.create('Proxmox.data.UpdateStore', {
 	    interval: 3000,
 	    storeid: 'pve-cluster-status',
 	    model: 'pve-dc-nodes',
@@ -92,7 +92,7 @@ Ext.define('PVE.dc.Summary', {
 	    },
 	});
 
-	var gridstore = Ext.create('Proxmox.data.DiffStore', {
+	let gridstore = Ext.create('Proxmox.data.DiffStore', {
 	    rstore: rstore,
 	    filters: {
 		property: 'type',
@@ -108,12 +108,12 @@ Ext.define('PVE.dc.Summary', {
 
 	me.getComponent('nodeview').setStore(gridstore);
 
-	var gueststatus = me.getComponent('dcGuests');
+	let gueststatus = me.getComponent('dcGuests');
 
-	var cpustat = me.down('#cpu');
-	var memorystat = me.down('#memory');
-	var storagestat = me.down('#storage');
-	var sp = Ext.state.Manager.getProvider();
+	let cpustat = me.down('#cpu');
+	let memorystat = me.down('#memory');
+	let storagestat = me.down('#storage');
+	let sp = Ext.state.Manager.getProvider();
 
 	me.mon(PVE.data.ResourceStore, 'load', function(curstore, results) {
 	    me.suspendLayout = true;
@@ -211,8 +211,8 @@ Ext.define('PVE.dc.Summary', {
 
 	let subs = me.down('#subscriptions');
 	me.mon(rstore, 'load', function(store, records, success) {
-	    var level;
-	    var mixed = false;
+	    let level;
+	    let mixed = false;
 	    for (let i = 0; i < records.length; i++) {
 		let node = records[i];
 		if (node.get('type') !== 'node' || node.get('status') === 'offline') {
diff --git a/www/manager6/dc/Support.js b/www/manager6/dc/Support.js
index 1b51e5ba..c371b823 100644
--- a/www/manager6/dc/Support.js
+++ b/www/manager6/dc/Support.js
@@ -13,9 +13,9 @@ Ext.define('PVE.dc.Support', {
     bugzillaHtml: '<h1>Bug Tracking</h1>Our bug tracking system is available <a target="_blank" href="https://bugzilla.proxmox.com">here</a>.',
 
     docuHtml: function() {
-	var me = this;
-	var guideUrl = window.location.origin + me.pveGuidePath;
-	var text = Ext.String.format('<h1>Documentation</h1>'
+	let me = this;
+	let guideUrl = window.location.origin + me.pveGuidePath;
+	let text = Ext.String.format('<h1>Documentation</h1>'
 	+ 'The official Proxmox VE Administration Guide'
 	+ ' is included with this installation and can be browsed at '
 	+ '<a target="_blank" href="{0}">{0}</a>', guideUrl);
@@ -23,9 +23,9 @@ Ext.define('PVE.dc.Support', {
     },
 
     updateActive: function(data) {
-	var me = this;
+	let me = this;
 
-	var html = '<h1>' + data.productname + '</h1>' + me.activeHtml;
+	let html = '<h1>' + data.productname + '</h1>' + me.activeHtml;
 	html += '<br><br>' + me.docuHtml();
 	html += '<br><br>' + me.bugzillaHtml;
 
@@ -33,9 +33,9 @@ Ext.define('PVE.dc.Support', {
     },
 
     updateCommunity: function(data) {
-	var me = this;
+	let me = this;
 
-	var html = '<h1>' + data.productname + '</h1>' + me.communityHtml;
+	let html = '<h1>' + data.productname + '</h1>' + me.communityHtml;
 	html += '<br><br>' + me.docuHtml();
 	html += '<br><br>' + me.bugzillaHtml;
 
@@ -43,7 +43,7 @@ Ext.define('PVE.dc.Support', {
     },
 
     updateInactive: function(data) {
-	var me = this;
+	let me = this;
 	me.update(me.invalidHtml);
     },
 
diff --git a/www/manager6/dc/Tasks.js b/www/manager6/dc/Tasks.js
index 5344ede4..258b690d 100644
--- a/www/manager6/dc/Tasks.js
+++ b/www/manager6/dc/Tasks.js
@@ -36,13 +36,13 @@ Ext.define('PVE.dc.Tasks', {
 	});
 
 	let run_task_viewer = function() {
-	    var sm = me.getSelectionModel();
-	    var rec = sm.getSelection()[0];
+	    let sm = me.getSelectionModel();
+	    let rec = sm.getSelection()[0];
 	    if (!rec) {
 		return;
 	    }
 
-	    var win = Ext.create('Proxmox.window.TaskViewer', {
+	    let win = Ext.create('Proxmox.window.TaskViewer', {
 		upid: rec.data.upid,
 		endtime: rec.data.endtime,
 	    });
diff --git a/www/manager6/dc/UserEdit.js b/www/manager6/dc/UserEdit.js
index b637cd53..4f04d028 100644
--- a/www/manager6/dc/UserEdit.js
+++ b/www/manager6/dc/UserEdit.js
@@ -116,7 +116,7 @@ Ext.define('PVE.dc.UserEdit', {
 	    });
 	}
 
-	var ipanel = Ext.create('Proxmox.panel.InputPanel', {
+	let ipanel = Ext.create('Proxmox.panel.InputPanel', {
 	    column1: column1,
 	    column2: column2,
 	    columnB: [
@@ -159,7 +159,7 @@ Ext.define('PVE.dc.UserEdit', {
 	if (!me.isCreate) {
 	    me.load({
 		success: function(response, options) {
-		    var data = response.result.data;
+		    let data = response.result.data;
 		    me.setValues(data);
 		    if (data.keys) {
 			if (data.keys === 'x!oath' || data.keys === 'x!u2f') {
diff --git a/www/manager6/dc/UserView.js b/www/manager6/dc/UserView.js
index bbfc4f7c..e7920bac 100644
--- a/www/manager6/dc/UserView.js
+++ b/www/manager6/dc/UserView.js
@@ -9,11 +9,11 @@ Ext.define('PVE.dc.UserView', {
     stateId: 'grid-users',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var caps = Ext.state.Manager.get('GuiCap');
+	let caps = Ext.state.Manager.get('GuiCap');
 
-	var store = new Ext.data.Store({
+	let store = new Ext.data.Store({
             id: "users",
 	    model: 'pmx-users',
 	    sorters: {
@@ -33,7 +33,7 @@ Ext.define('PVE.dc.UserView', {
 	    callback: () => reload(),
 	});
 	let run_editor = function() {
-	    var rec = sm.getSelection()[0];
+	    let rec = sm.getSelection()[0];
 	    if (!rec || !caps.access['User.Modify']) {
 		return;
 	    }
@@ -78,7 +78,7 @@ Ext.define('PVE.dc.UserView', {
 	    },
 	});
 
-	var perm_btn = new Proxmox.button.Button({
+	let perm_btn = new Proxmox.button.Button({
 	    text: gettext('Permissions'),
 	    disabled: true,
 	    selModel: sm,
diff --git a/www/manager6/form/AgentFeatureSelector.js b/www/manager6/form/AgentFeatureSelector.js
index 0dcc6ecb..f91497a3 100644
--- a/www/manager6/form/AgentFeatureSelector.js
+++ b/www/manager6/form/AgentFeatureSelector.js
@@ -47,7 +47,7 @@ Ext.define('PVE.form.AgentFeatureSelector', {
     ],
 
     onGetValues: function(values) {
-	var agentstr = PVE.Parser.printPropertyString(values, 'enabled');
+	let agentstr = PVE.Parser.printPropertyString(values, 'enabled');
 	return { agent: agentstr };
     },
 
diff --git a/www/manager6/form/BridgeSelector.js b/www/manager6/form/BridgeSelector.js
index 350588cd..e7dd3d7e 100644
--- a/www/manager6/form/BridgeSelector.js
+++ b/www/manager6/form/BridgeSelector.js
@@ -40,7 +40,7 @@ Ext.define('PVE.form.BridgeSelector', {
     },
 
     setNodename: function(nodename) {
-	var me = this;
+	let me = this;
 
 	if (!nodename || me.nodename === nodename) {
 	    return;
@@ -58,9 +58,9 @@ Ext.define('PVE.form.BridgeSelector', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var nodename = me.nodename;
+	let nodename = me.nodename;
 	me.nodename = undefined;
 
         me.callParent();
diff --git a/www/manager6/form/BusTypeSelector.js b/www/manager6/form/BusTypeSelector.js
index 0f040229..c585b121 100644
--- a/www/manager6/form/BusTypeSelector.js
+++ b/www/manager6/form/BusTypeSelector.js
@@ -6,7 +6,7 @@ Ext.define('PVE.form.BusTypeSelector', {
     withUnused: false,
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.comboItems = [['ide', 'IDE'], ['sata', 'SATA']];
 
diff --git a/www/manager6/form/CephFSSelector.js b/www/manager6/form/CephFSSelector.js
index 3c86e3cf..46798edb 100644
--- a/www/manager6/form/CephFSSelector.js
+++ b/www/manager6/form/CephFSSelector.js
@@ -9,13 +9,13 @@ Ext.define('PVE.form.CephFSSelector', {
     queryMode: 'local',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.nodename) {
 	    throw "no nodename given";
 	}
 
-	var store = Ext.create('Ext.data.Store', {
+	let store = Ext.create('Ext.data.Store', {
 	    fields: ['name'],
 	    sorters: 'name',
 	    proxy: {
diff --git a/www/manager6/form/CephPoolSelector.js b/www/manager6/form/CephPoolSelector.js
index 5b96398d..6e7460cf 100644
--- a/www/manager6/form/CephPoolSelector.js
+++ b/www/manager6/form/CephPoolSelector.js
@@ -9,13 +9,13 @@ Ext.define('PVE.form.CephPoolSelector', {
     queryMode: 'local',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.nodename) {
 	    throw "no nodename given";
 	}
 
-	var store = Ext.create('Ext.data.Store', {
+	let store = Ext.create('Ext.data.Store', {
 	    fields: ['name'],
 	    sorters: 'name',
 	    proxy: {
diff --git a/www/manager6/form/ContentTypeSelector.js b/www/manager6/form/ContentTypeSelector.js
index d0fa0b08..b8984314 100644
--- a/www/manager6/form/ContentTypeSelector.js
+++ b/www/manager6/form/ContentTypeSelector.js
@@ -5,7 +5,7 @@ Ext.define('PVE.form.ContentTypeSelector', {
     cts: undefined,
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.comboItems = [];
 
diff --git a/www/manager6/form/ControllerSelector.js b/www/manager6/form/ControllerSelector.js
index d84c49d6..64d80e18 100644
--- a/www/manager6/form/ControllerSelector.js
+++ b/www/manager6/form/ControllerSelector.js
@@ -59,7 +59,7 @@ Ext.define('PVE.form.ControllerSelector', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	Ext.apply(me, {
 	    fieldLabel: gettext('Bus/Device'),
diff --git a/www/manager6/form/DayOfWeekSelector.js b/www/manager6/form/DayOfWeekSelector.js
index a8d46246..80369935 100644
--- a/www/manager6/form/DayOfWeekSelector.js
+++ b/www/manager6/form/DayOfWeekSelector.js
@@ -3,7 +3,7 @@ Ext.define('PVE.form.DayOfWeekSelector', {
     alias: ['widget.pveDayOfWeekSelector'],
     comboItems: [],
     initComponent: function() {
-	var me = this;
+	let me = this;
 	me.comboItems = [
 	    ['mon', Ext.util.Format.htmlDecode(Ext.Date.dayNames[1])],
 	    ['tue', Ext.util.Format.htmlDecode(Ext.Date.dayNames[2])],
diff --git a/www/manager6/form/DiskStorageSelector.js b/www/manager6/form/DiskStorageSelector.js
index abd46deb..cb05c328 100644
--- a/www/manager6/form/DiskStorageSelector.js
+++ b/www/manager6/form/DiskStorageSelector.js
@@ -36,10 +36,10 @@ Ext.define('PVE.form.DiskStorageSelector', {
     defaultSize: '32',
 
     changeStorage: function(f, value) {
-	var me = this;
-	var formatsel = me.getComponent('diskformat');
-	var hdfilesel = me.getComponent('hdimage');
-	var hdsizesel = me.getComponent('disksize');
+	let me = this;
+	let formatsel = me.getComponent('diskformat');
+	let hdfilesel = me.getComponent('hdimage');
+	let hdsizesel = me.getComponent('disksize');
 
 	// initial store load, and reset/deletion of the storage
 	if (!value) {
@@ -50,7 +50,7 @@ Ext.define('PVE.form.DiskStorageSelector', {
 	    return;
 	}
 
-	var rec = f.store.getById(value);
+	let rec = f.store.getById(value);
 	// if the storage is not defined, or valid,
 	// we cannot know what to enable/disable
 	if (!rec) {
@@ -71,7 +71,7 @@ Ext.define('PVE.form.DiskStorageSelector', {
 	    }
 	}
 
-	var select = !!rec.data.select_existing && !me.hideSelection;
+	let select = !!rec.data.select_existing && !me.hideSelection;
 
 	formatsel.setDisabled(me.hideFormat || Ext.Object.getSize(validFormats) <= 1);
 	formatsel.setValue(selectFormat);
@@ -87,17 +87,17 @@ Ext.define('PVE.form.DiskStorageSelector', {
     },
 
     setNodename: function(nodename) {
-	var me = this;
-	var hdstorage = me.getComponent('hdstorage');
-	var hdfilesel = me.getComponent('hdimage');
+	let me = this;
+	let hdstorage = me.getComponent('hdstorage');
+	let hdfilesel = me.getComponent('hdimage');
 
 	hdstorage.setNodename(nodename);
 	hdfilesel.setNodename(nodename);
     },
 
     setDisabled: function(value) {
-	var me = this;
-	var hdstorage = me.getComponent('hdstorage');
+	let me = this;
+	let hdstorage = me.getComponent('hdstorage');
 
 	// reset on disable
 	if (value) {
@@ -111,7 +111,7 @@ Ext.define('PVE.form.DiskStorageSelector', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.items = [
 	    {
diff --git a/www/manager6/form/FileSelector.js b/www/manager6/form/FileSelector.js
index ef2bedf9..35173978 100644
--- a/www/manager6/form/FileSelector.js
+++ b/www/manager6/form/FileSelector.js
@@ -8,7 +8,7 @@ Ext.define('PVE.form.FileSelector', {
 
     listeners: {
 	afterrender: function() {
-	    var me = this;
+	    let me = this;
 	    if (!me.disabled) {
 		me.setStorage(me.storage, me.nodename);
 	    }
@@ -16,9 +16,9 @@ Ext.define('PVE.form.FileSelector', {
     },
 
     setStorage: function(storage, nodename) {
-	var me = this;
+	let me = this;
 
-	var change = false;
+	let change = false;
 	if (storage && me.storage !== storage) {
 	    me.storage = storage;
 	    change = true;
@@ -33,7 +33,7 @@ Ext.define('PVE.form.FileSelector', {
 	    return;
 	}
 
-	var url = '/api2/json/nodes/' + me.nodename + '/storage/' + me.storage + '/content';
+	let url = '/api2/json/nodes/' + me.nodename + '/storage/' + me.storage + '/content';
 	if (me.storageContent) {
 	    url += '?content=' + me.storageContent;
 	}
diff --git a/www/manager6/form/GlobalSearchField.js b/www/manager6/form/GlobalSearchField.js
index 267a480d..abd4a8a3 100644
--- a/www/manager6/form/GlobalSearchField.js
+++ b/www/manager6/form/GlobalSearchField.js
@@ -39,7 +39,7 @@ Ext.define('PVE.form.GlobalSearchField', {
 	},
 
 	hideMe: function() {
-	    var me = this;
+	    let me = this;
 	    if (typeof me.ctxMenu !== 'undefined' && me.ctxMenu.isVisible()) {
 		return;
 	    }
@@ -50,17 +50,17 @@ Ext.define('PVE.form.GlobalSearchField', {
 	},
 
 	setFocus: function() {
-	    var me = this;
+	    let me = this;
 	    me.hasFocus = true;
 	},
 
 	listeners: {
 	    rowclick: function(grid, record) {
-		var me = this;
+		let me = this;
 		me.textfield.selectAndHide(record.id);
 	    },
 	    itemcontextmenu: function(v, record, item, index, event) {
-		var me = this;
+		let me = this;
 		me.ctxMenu = PVE.Utils.createCmdMenu(v, record, item, index, event);
 	    },
 	    focusleave: 'hideMe',
@@ -139,7 +139,7 @@ Ext.define('PVE.form.GlobalSearchField', {
     },
 
     selectAndHide: function(id) {
-	var me = this;
+	let me = this;
 	me.tree.selectById(id);
 	me.grid.hide();
 	me.setValue('');
@@ -147,8 +147,8 @@ Ext.define('PVE.form.GlobalSearchField', {
     },
 
     onKey: function(field, e) {
-	var me = this;
-	var key = e.getKey();
+	let me = this;
+	let key = e.getKey();
 
 	switch (key) {
 	    case Ext.event.Event.ENTER:
diff --git a/www/manager6/form/GroupSelector.js b/www/manager6/form/GroupSelector.js
index 90fa1827..ac5c34d8 100644
--- a/www/manager6/form/GroupSelector.js
+++ b/www/manager6/form/GroupSelector.js
@@ -42,9 +42,9 @@ Ext.define('PVE.form.GroupSelector', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var store = new Ext.data.Store({
+	let store = new Ext.data.Store({
 	    model: 'pve-groups',
 	    sorters: [{
 		property: 'groupid',
diff --git a/www/manager6/form/GuestIDSelector.js b/www/manager6/form/GuestIDSelector.js
index e24c01c9..13d9ac55 100644
--- a/www/manager6/form/GuestIDSelector.js
+++ b/www/manager6/form/GuestIDSelector.js
@@ -15,7 +15,7 @@ Ext.define('PVE.form.GuestIDSelector', {
     guestType: undefined,
 
     validator: function(value) {
-	var me = this;
+	let me = this;
 
 	if (!Ext.isNumeric(value) ||
 	    value < me.minValue ||
@@ -36,11 +36,11 @@ Ext.define('PVE.form.GuestIDSelector', {
     },
 
     initComponent: function() {
-	var me = this;
-	var label = '{0} ID';
-	var unknownID = gettext('This {0} ID does not exist');
-	var inUseID = gettext('This {0} ID is already in use');
-	var type = 'CT/VM';
+	let me = this;
+	let label = '{0} ID';
+	let unknownID = gettext('This {0} ID does not exist');
+	let inUseID = gettext('This {0} ID is already in use');
+	let type = 'CT/VM';
 
 	if (me.guestType === 'lxc') {
 	    type = 'CT';
diff --git a/www/manager6/form/HotplugFeatureSelector.js b/www/manager6/form/HotplugFeatureSelector.js
index cb9fc552..9736faa9 100644
--- a/www/manager6/form/HotplugFeatureSelector.js
+++ b/www/manager6/form/HotplugFeatureSelector.js
@@ -36,8 +36,8 @@ Ext.define('PVE.form.HotplugFeatureSelector', {
     ],
 
     setValue: function(value) {
-	var me = this;
-	var newVal = [];
+	let me = this;
+	let newVal = [];
 	if (value === '1') {
 	    newVal = ['disk', 'network', 'usb'];
 	} else if (value !== '0') {
@@ -49,7 +49,7 @@ Ext.define('PVE.form.HotplugFeatureSelector', {
     // override framework function to
     // assemble the hotplug value
     getSubmitData: function() {
-	var me = this,
+	let me = this,
 	boxes = me.getBoxes(),
 	data = [];
 	Ext.Array.forEach(boxes, function(box) {
diff --git a/www/manager6/form/IPRefSelector.js b/www/manager6/form/IPRefSelector.js
index 9ccc2fe1..b4788900 100644
--- a/www/manager6/form/IPRefSelector.js
+++ b/www/manager6/form/IPRefSelector.js
@@ -13,18 +13,18 @@ Ext.define('PVE.form.IPRefSelector', {
     notFoundIsValid: true,
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.base_url) {
 	    throw "no base_url specified";
 	}
 
-	var url = "/api2/json" + me.base_url;
+	let url = "/api2/json" + me.base_url;
 	if (me.ref_type) {
 	    url += "?type=" + me.ref_type;
 	}
 
-	var store = Ext.create('Ext.data.Store', {
+	let store = Ext.create('Ext.data.Store', {
 	    autoLoad: true,
 	    fields: ['type', 'name', 'ref', 'comment'],
 	    idProperty: 'ref',
@@ -38,7 +38,7 @@ Ext.define('PVE.form.IPRefSelector', {
 	    },
 	});
 
-	var disable_query_for_ips = function(f, value) {
+	let disable_query_for_ips = function(f, value) {
 	    if (value === null ||
 		value.match(/^\d/)) { // IP address starts with \d
 		f.queryDelay = 9999999999; // hack: disable with long delay
@@ -47,7 +47,7 @@ Ext.define('PVE.form.IPRefSelector', {
 	    }
 	};
 
-	var columns = [];
+	let columns = [];
 
 	if (!me.ref_type) {
 	    columns.push({
diff --git a/www/manager6/form/MDevSelector.js b/www/manager6/form/MDevSelector.js
index 8ee73c0c..b25c2b12 100644
--- a/www/manager6/form/MDevSelector.js
+++ b/www/manager6/form/MDevSelector.js
@@ -43,7 +43,7 @@ Ext.define('PVE.form.MDevSelector', {
     },
 
     setPciID: function(pciid, force) {
-	var me = this;
+	let me = this;
 
 	if (!force && (!pciid || me.pciid === pciid)) {
 	    return;
@@ -55,7 +55,7 @@ Ext.define('PVE.form.MDevSelector', {
 
 
     setNodename: function(nodename) {
-	var me = this;
+	let me = this;
 
 	if (!nodename || me.nodename === nodename) {
 	    return;
@@ -66,7 +66,7 @@ Ext.define('PVE.form.MDevSelector', {
     },
 
     updateProxy: function() {
-	var me = this;
+	let me = this;
 	me.store.setProxy({
 	    type: 'proxmox',
 	    url: '/api2/json/nodes/' + me.nodename + '/hardware/pci/' + me.pciid + '/mdev',
@@ -75,7 +75,7 @@ Ext.define('PVE.form.MDevSelector', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.nodename) {
 	    throw 'no node name specified';
diff --git a/www/manager6/form/MemoryField.js b/www/manager6/form/MemoryField.js
index 10b7ff36..203c92b5 100644
--- a/www/manager6/form/MemoryField.js
+++ b/www/manager6/form/MemoryField.js
@@ -19,21 +19,21 @@ Ext.define('PVE.form.MemoryField', {
     allowExponential: false,
 
     computeUpDown: function(value) {
-	var me = this;
+	let me = this;
 
 	if (!me.hotplug) {
 	    return { up: value + me.step, down: value - me.step };
 	}
 
-	var dimm_size = 512;
-	var prev_dimm_size = 0;
-	var min_size = 1024;
-	var current_size = min_size;
-	var value_up = min_size;
-	var value_down = min_size;
-	var value_start = min_size;
+	let dimm_size = 512;
+	let prev_dimm_size = 0;
+	let min_size = 1024;
+	let current_size = min_size;
+	let value_up = min_size;
+	let value_down = min_size;
+	let value_start = min_size;
 
-	var i, j;
+	let i, j;
 	for (j = 0; j < 9; j++) {
 	    for (i = 0; i < 32; i++) {
 		if (value >= current_size && value < current_size + dimm_size) {
@@ -51,30 +51,30 @@ Ext.define('PVE.form.MemoryField', {
     },
 
     onSpinUp: function() {
-	var me = this;
+	let me = this;
 	if (!me.readOnly) {
-	    var res = me.computeUpDown(me.getValue());
+	    let res = me.computeUpDown(me.getValue());
 	    me.setValue(Ext.Number.constrain(res.up, me.minValue, me.maxValue));
 	}
     },
 
     onSpinDown: function() {
-	var me = this;
+	let me = this;
 	if (!me.readOnly) {
-	    var res = me.computeUpDown(me.getValue());
+	    let res = me.computeUpDown(me.getValue());
 	    me.setValue(Ext.Number.constrain(res.down, me.minValue, me.maxValue));
 	}
     },
 
     initComponent: function() {
-        var me = this;
+        let me = this;
 
 	if (me.hotplug) {
 	    me.minValue = 1024;
 
 	    me.on('blur', function(field) {
-		var value = me.getValue();
-		var res = me.computeUpDown(value);
+		let value = me.getValue();
+		let res = me.computeUpDown(value);
 		if (value === res.start || value === res.up || value === res.down) {
 		    return;
 		}
diff --git a/www/manager6/form/NodeSelector.js b/www/manager6/form/NodeSelector.js
index c3e3da31..7897576c 100644
--- a/www/manager6/form/NodeSelector.js
+++ b/www/manager6/form/NodeSelector.js
@@ -88,7 +88,7 @@ Ext.define('PVE.form.NodeSelector', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (me.selectCurNode && PVE.curSelectedNode && PVE.curSelectedNode.data.node) {
 	    me.preferredValue = PVE.curSelectedNode.data.node;
diff --git a/www/manager6/form/PCISelector.js b/www/manager6/form/PCISelector.js
index 4e0a778f..a30049fb 100644
--- a/www/manager6/form/PCISelector.js
+++ b/www/manager6/form/PCISelector.js
@@ -57,7 +57,7 @@ Ext.define('PVE.form.PCISelector', {
     },
 
     setNodename: function(nodename) {
-	var me = this;
+	let me = this;
 
 	if (!nodename || me.nodename === nodename) {
 	    return;
@@ -74,9 +74,9 @@ Ext.define('PVE.form.PCISelector', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var nodename = me.nodename;
+	let nodename = me.nodename;
 	me.nodename = undefined;
 
         me.callParent();
diff --git a/www/manager6/form/PoolSelector.js b/www/manager6/form/PoolSelector.js
index 3c464891..554cbe67 100644
--- a/www/manager6/form/PoolSelector.js
+++ b/www/manager6/form/PoolSelector.js
@@ -7,9 +7,9 @@ Ext.define('PVE.form.PoolSelector', {
     displayField: 'poolid',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var store = new Ext.data.Store({
+	let store = new Ext.data.Store({
 	    model: 'pve-pools',
 	    sorters: 'poolid',
 	});
diff --git a/www/manager6/form/QemuBiosSelector.js b/www/manager6/form/QemuBiosSelector.js
index f9d047c0..afb0bbff 100644
--- a/www/manager6/form/QemuBiosSelector.js
+++ b/www/manager6/form/QemuBiosSelector.js
@@ -3,7 +3,7 @@ Ext.define('PVE.form.QemuBiosSelector', {
     alias: ['widget.pveQemuBiosSelector'],
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
         me.comboItems = [
 	    ['__default__', PVE.Utils.render_qemu_bios('')],
diff --git a/www/manager6/form/SDNControllerSelector.js b/www/manager6/form/SDNControllerSelector.js
index 639d7b50..a89d1c30 100644
--- a/www/manager6/form/SDNControllerSelector.js
+++ b/www/manager6/form/SDNControllerSelector.js
@@ -7,9 +7,9 @@ Ext.define('PVE.form.SDNControllerSelector', {
     displayField: 'controller',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var store = new Ext.data.Store({
+	let store = new Ext.data.Store({
 	    model: 'pve-sdn-controller',
             sorters: {
                 property: 'controller',
diff --git a/www/manager6/form/SDNDnsSelector.js b/www/manager6/form/SDNDnsSelector.js
index c97a342f..4cf26aac 100644
--- a/www/manager6/form/SDNDnsSelector.js
+++ b/www/manager6/form/SDNDnsSelector.js
@@ -7,9 +7,9 @@ Ext.define('PVE.form.SDNDnsSelector', {
     displayField: 'dns',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var store = new Ext.data.Store({
+	let store = new Ext.data.Store({
 	    model: 'pve-sdn-dns',
             sorters: {
                 property: 'dns',
diff --git a/www/manager6/form/SDNIpamSelector.js b/www/manager6/form/SDNIpamSelector.js
index b60e75d6..1726512d 100644
--- a/www/manager6/form/SDNIpamSelector.js
+++ b/www/manager6/form/SDNIpamSelector.js
@@ -7,9 +7,9 @@ Ext.define('PVE.form.SDNIpamSelector', {
     displayField: 'ipam',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var store = new Ext.data.Store({
+	let store = new Ext.data.Store({
 	    model: 'pve-sdn-ipam',
             sorters: {
                 property: 'ipam',
diff --git a/www/manager6/form/SDNVnetSelector.js b/www/manager6/form/SDNVnetSelector.js
index b6da85be..248be3f7 100644
--- a/www/manager6/form/SDNVnetSelector.js
+++ b/www/manager6/form/SDNVnetSelector.js
@@ -7,9 +7,9 @@ Ext.define('PVE.form.SDNVnetSelector', {
     displayField: 'vnet',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var store = new Ext.data.Store({
+	let store = new Ext.data.Store({
 	    model: 'pve-sdn-vnet',
             sorters: {
                 property: 'vnet',
diff --git a/www/manager6/form/SDNZoneSelector.js b/www/manager6/form/SDNZoneSelector.js
index 28c3457d..95e3faef 100644
--- a/www/manager6/form/SDNZoneSelector.js
+++ b/www/manager6/form/SDNZoneSelector.js
@@ -7,9 +7,9 @@ Ext.define('PVE.form.SDNZoneSelector', {
     displayField: 'zone',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var store = new Ext.data.Store({
+	let store = new Ext.data.Store({
 	    model: 'pve-sdn-zone',
             sorters: {
                 property: 'zone',
diff --git a/www/manager6/form/SecurityGroupSelector.js b/www/manager6/form/SecurityGroupSelector.js
index 64db7542..2519bcba 100644
--- a/www/manager6/form/SecurityGroupSelector.js
+++ b/www/manager6/form/SecurityGroupSelector.js
@@ -5,9 +5,9 @@ Ext.define('PVE.form.SecurityGroupsSelector', {
     valueField: 'group',
     displayField: 'group',
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var store = Ext.create('Ext.data.Store', {
+	let store = Ext.create('Ext.data.Store', {
 	    autoLoad: true,
 	    fields: ['group', 'comment'],
 	    idProperty: 'group',
diff --git a/www/manager6/form/SnapshotSelector.js b/www/manager6/form/SnapshotSelector.js
index 4155269b..c4378ea4 100644
--- a/www/manager6/form/SnapshotSelector.js
+++ b/www/manager6/form/SnapshotSelector.js
@@ -6,7 +6,7 @@ Ext.define('PVE.form.SnapshotSelector', {
     displayField: 'name',
 
     loadStore: function(nodename, vmid) {
-	var me = this;
+	let me = this;
 
 	if (!nodename) {
 	    return;
@@ -29,7 +29,7 @@ Ext.define('PVE.form.SnapshotSelector', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
         if (!me.nodename) {
             throw "no node name specified";
@@ -43,7 +43,7 @@ Ext.define('PVE.form.SnapshotSelector', {
 	    throw "no guest type specified";
 	}
 
-	var store = Ext.create('Ext.data.Store', {
+	let store = Ext.create('Ext.data.Store', {
 	    fields: ['name'],
 	    filterOnLoad: true,
 	});
diff --git a/www/manager6/form/SpiceEnhancementSelector.js b/www/manager6/form/SpiceEnhancementSelector.js
index 525479e2..5c39d8c6 100644
--- a/www/manager6/form/SpiceEnhancementSelector.js
+++ b/www/manager6/form/SpiceEnhancementSelector.js
@@ -44,7 +44,7 @@ Ext.define('PVE.form.SpiceEnhancementSelector', {
     ],
 
     onGetValues: function(values) {
-	var ret = {};
+	let ret = {};
 
 	if (values.videostreaming !== "off") {
 	    ret.videostreaming = values.videostreaming;
@@ -55,17 +55,17 @@ Ext.define('PVE.form.SpiceEnhancementSelector', {
 	if (Ext.Object.isEmpty(ret)) {
 	    return { 'delete': 'spice_enhancements' };
 	}
-	var enhancements = PVE.Parser.printPropertyString(ret);
+	let enhancements = PVE.Parser.printPropertyString(ret);
 	return { spice_enhancements: enhancements };
     },
 
     setValues: function(values) {
-	var vga = PVE.Parser.parsePropertyString(values.vga, 'type');
+	let vga = PVE.Parser.parsePropertyString(values.vga, 'type');
 	if (!/^qxl\d?$/.test(vga.type)) {
 	    this.down('#spicehint').setVisible(true);
 	}
 	if (values.spice_enhancements) {
-	    var enhancements = PVE.Parser.parsePropertyString(values.spice_enhancements);
+	    let enhancements = PVE.Parser.parsePropertyString(values.spice_enhancements);
 	    enhancements.foldersharing = PVE.Parser.parseBoolean(enhancements.foldersharing, 0);
 	    this.callParent([enhancements]);
 	}
diff --git a/www/manager6/form/StorageSelector.js b/www/manager6/form/StorageSelector.js
index 872bc1ab..981d5182 100644
--- a/www/manager6/form/StorageSelector.js
+++ b/www/manager6/form/StorageSelector.js
@@ -118,7 +118,7 @@ Ext.define('PVE.form.StorageSelector', {
     },
 
     setTargetNode: function(targetNode) {
-	var me = this;
+	let me = this;
 
 	if (!targetNode || me.targetNode === targetNode) {
 	    return;
@@ -134,7 +134,7 @@ Ext.define('PVE.form.StorageSelector', {
     },
 
     setNodename: function(nodename) {
-	var me = this;
+	let me = this;
 
 	nodename = nodename || '';
 
@@ -148,12 +148,12 @@ Ext.define('PVE.form.StorageSelector', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	let nodename = me.nodename;
 	me.nodename = undefined;
 
-	var store = Ext.create('Ext.data.Store', {
+	let store = Ext.create('Ext.data.Store', {
 	    model: 'pve-storage-status',
 	    sorters: {
 		property: 'storage',
diff --git a/www/manager6/form/USBSelector.js b/www/manager6/form/USBSelector.js
index 0d511699..c3fe3802 100644
--- a/www/manager6/form/USBSelector.js
+++ b/www/manager6/form/USBSelector.js
@@ -10,7 +10,7 @@ Ext.define('PVE.form.USBSelector', {
     editable: true,
 
     validator: function(value) {
-	var me = this;
+	let me = this;
 	if (!value) {
 	    return true; // handled later by allowEmpty in the getErrors call chain
 	}
@@ -24,9 +24,9 @@ Ext.define('PVE.form.USBSelector', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var nodename = me.pveSelNode.data.node;
+	let nodename = me.pveSelNode.data.node;
 
 	if (!nodename) {
 	    throw "no nodename specified";
diff --git a/www/manager6/form/VLanField.js b/www/manager6/form/VLanField.js
index 7379789a..b38196e4 100644
--- a/www/manager6/form/VLanField.js
+++ b/www/manager6/form/VLanField.js
@@ -11,7 +11,7 @@ Ext.define('PVE.form.VlanField', {
     allowBlank: true,
 
     getSubmitData: function() {
-        var me = this,
+        let me = this,
             data = null,
             val;
         if (!me.disabled && me.submitValue) {
@@ -28,7 +28,7 @@ Ext.define('PVE.form.VlanField', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	Ext.apply(me, {
 	    minValue: 1,
diff --git a/www/manager6/form/VMCPUFlagSelector.js b/www/manager6/form/VMCPUFlagSelector.js
index ace3c531..7901732f 100644
--- a/www/manager6/form/VMCPUFlagSelector.js
+++ b/www/manager6/form/VMCPUFlagSelector.js
@@ -42,15 +42,15 @@ Ext.define('PVE.form.VMCPUFlagSelector', {
     },
 
     getValue: function() {
-	var me = this;
-	var store = me.getStore();
-	var flags = '';
+	let me = this;
+	let store = me.getStore();
+	let flags = '';
 
 	// ExtJS does not has a nice getAllRecords interface for stores :/
 	store.queryBy(Ext.returnTrue).each(function(rec) {
-	    var s = rec.get('state');
+	    let s = rec.get('state');
 	    if (s && s !== '=') {
-		var f = rec.get('flag');
+		let f = rec.get('flag');
 		if (flags === '') {
 		    flags = s + f;
 		} else {
@@ -65,8 +65,8 @@ Ext.define('PVE.form.VMCPUFlagSelector', {
     },
 
     setValue: function(value) {
-	var me = this;
-	var store = me.getStore();
+	let me = this;
+	let store = me.getStore();
 
 	me.value = value || '';
 
@@ -76,12 +76,12 @@ Ext.define('PVE.form.VMCPUFlagSelector', {
 	    rec.set('state', '=');
 	});
 
-	var flags = value ? value.split(';') : [];
+	let flags = value ? value.split(';') : [];
 	flags.forEach(function(flag) {
-	    var sign = flag.substr(0, 1);
+	    let sign = flag.substr(0, 1);
 	    flag = flag.substr(1);
 
-	    var rec = store.findRecord('flag', flag, 0, false, true, true);
+	    let rec = store.findRecord('flag', flag, 0, false, true, true);
 	    if (rec !== null) {
 		rec.set('state', sign);
 	    } else {
@@ -90,7 +90,7 @@ Ext.define('PVE.form.VMCPUFlagSelector', {
 	});
 	store.reload();
 
-	var res = me.mixins.field.setValue.call(me, value);
+	let res = me.mixins.field.setValue.call(me, value);
 
 	return res;
     },
@@ -112,7 +112,7 @@ Ext.define('PVE.form.VMCPUFlagSelector', {
 	    dataIndex: 'state',
 	    width: 95,
 	    onWidgetAttach: function(column, widget, record) {
-		var val = record.get('state') || '=';
+		let val = record.get('state') || '=';
 		widget.down('[inputValue=' + val + ']').setValue(true);
 		// TODO: disable if selected CPU model and flag are incompatible
 	    },
@@ -124,10 +124,10 @@ Ext.define('PVE.form.VMCPUFlagSelector', {
 		value: '=',
 		listeners: {
 		    change: function(f, value) {
-			var v = Object.values(value)[0];
+			let v = Object.values(value)[0];
 			f.getWidgetRecord().set('state', v);
 
-			var view = this.up('grid');
+			let view = this.up('grid');
 			view.dirty = view.getValue() !== view.originalValue;
 			view.checkDirty();
 			//view.checkChange();
@@ -165,7 +165,7 @@ Ext.define('PVE.form.VMCPUFlagSelector', {
     ],
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	// static class store, thus gets not recreated, so ensure defaults are set!
 	me.getStore().data.forEach(function(v) {
diff --git a/www/manager6/form/VMSelector.js b/www/manager6/form/VMSelector.js
index 78cd9013..e003f94e 100644
--- a/www/manager6/form/VMSelector.js
+++ b/www/manager6/form/VMSelector.js
@@ -112,11 +112,11 @@ Ext.define('PVE.form.VMSelector', {
     },
 
     getValue: function() {
-	var me = this;
-	var sm = me.getSelectionModel();
-	var selection = sm.getSelection();
-	var values = [];
-	var store = me.getStore();
+	let me = this;
+	let sm = me.getSelectionModel();
+	let selection = sm.getSelection();
+	let values = [];
+	let store = me.getStore();
 	selection.forEach(function(item) {
 	    // only add if not filtered
 	    if (store.findExact('vmid', item.data.vmid) !== -1) {
@@ -167,7 +167,7 @@ Ext.define('PVE.form.VMSelector', {
 
 	// only show the relevant guests by default
 	if (me.action) {
-	    var statusfilter = '';
+	    let statusfilter = '';
 	    switch (me.action) {
 		case 'startall':
 		    statusfilter = 'stopped';
diff --git a/www/manager6/grid/BackupView.js b/www/manager6/grid/BackupView.js
index 7f7e1b62..801727bb 100644
--- a/www/manager6/grid/BackupView.js
+++ b/www/manager6/grid/BackupView.js
@@ -9,24 +9,24 @@ Ext.define('PVE.grid.BackupView', {
     stateId: 'grid-guest-backup',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var nodename = me.pveSelNode.data.node;
+	let nodename = me.pveSelNode.data.node;
 	if (!nodename) {
 	    throw "no node name specified";
 	}
 
-	var vmid = me.pveSelNode.data.vmid;
+	let vmid = me.pveSelNode.data.vmid;
 	if (!vmid) {
 	    throw "no VM ID specified";
 	}
 
-	var vmtype = me.pveSelNode.data.type;
+	let vmtype = me.pveSelNode.data.type;
 	if (!vmtype) {
 	    throw "no VM type specified";
 	}
 
-	var vmtypeFilter;
+	let vmtypeFilter;
 	if (vmtype === 'lxc' || vmtype === 'openvz') {
 	    vmtypeFilter = function(item) {
 		return PVE.Utils.volume_is_lxc_backup(item.data.volid, item.data.format);
@@ -39,14 +39,14 @@ Ext.define('PVE.grid.BackupView', {
 	    throw "unsupported VM type '" + vmtype + "'";
 	}
 
-	var searchFilter = {
+	let searchFilter = {
 	    property: 'volid',
 	    value: '',
 	    anyMatch: true,
 	    caseSensitive: false,
 	};
 
-	var vmidFilter = {
+	let vmidFilter = {
 	    property: 'vmid',
 	    value: vmid,
 	    exactMatch: true,
@@ -79,15 +79,15 @@ Ext.define('PVE.grid.BackupView', {
 	    ]);
 	};
 
-	var reload = Ext.Function.createBuffered(function() {
+	let reload = Ext.Function.createBuffered(function() {
 	    if (me.store) {
 		me.store.load();
 	    }
 	}, 100);
 
 	let isPBS = false;
-	var setStorage = function(storage) {
-	    var url = '/api2/json/nodes/' + nodename + '/storage/' + storage + '/content';
+	let setStorage = function(storage) {
+	    let url = '/api2/json/nodes/' + nodename + '/storage/' + storage + '/content';
 	    url += '?content=backup';
 
 	    me.store.setProxy({
@@ -102,7 +102,7 @@ Ext.define('PVE.grid.BackupView', {
 
 	let file_restore_btn;
 
-	var storagesel = Ext.create('PVE.form.StorageSelector', {
+	let storagesel = Ext.create('PVE.form.StorageSelector', {
 	    nodename: nodename,
 	    fieldLabel: gettext('Storage'),
 	    labelAlign: 'right',
@@ -130,7 +130,7 @@ Ext.define('PVE.grid.BackupView', {
 	    },
 	});
 
-	var storagefilter = Ext.create('Ext.form.field.Text', {
+	let storagefilter = Ext.create('Ext.form.field.Text', {
 	    fieldLabel: gettext('Search'),
 	    labelWidth: 50,
 	    labelAlign: 'right',
@@ -146,7 +146,7 @@ Ext.define('PVE.grid.BackupView', {
 	    },
 	});
 
-	var vmidfilterCB = Ext.create('Ext.form.field.Checkbox', {
+	let vmidfilterCB = Ext.create('Ext.form.field.Checkbox', {
 	    boxLabel: gettext('Filter VMID'),
 	    value: '1',
 	    listeners: {
@@ -158,12 +158,12 @@ Ext.define('PVE.grid.BackupView', {
 	    },
 	});
 
-	var sm = Ext.create('Ext.selection.RowModel', {});
+	let sm = Ext.create('Ext.selection.RowModel', {});
 
-	var backup_btn = Ext.create('Ext.button.Button', {
+	let backup_btn = Ext.create('Ext.button.Button', {
 	    text: gettext('Backup now'),
 	    handler: function() {
-		var win = Ext.create('PVE.window.Backup', {
+		let win = Ext.create('PVE.window.Backup', {
 		    nodename: nodename,
 		    vmid: vmid,
 		    vmtype: vmtype,
@@ -178,7 +178,7 @@ Ext.define('PVE.grid.BackupView', {
 	    },
 	});
 
-	var restore_btn = Ext.create('Proxmox.button.Button', {
+	let restore_btn = Ext.create('Proxmox.button.Button', {
 	    text: gettext('Restore'),
 	    disabled: true,
 	    selModel: sm,
@@ -270,7 +270,7 @@ Ext.define('PVE.grid.BackupView', {
 			disabled: true,
 			handler: function() {
 			    let volid = sm.getSelection()[0].data.volid;
-			    var storage = storagesel.getValue();
+			    let storage = storagesel.getValue();
 			    Ext.create('Proxmox.window.Edit', {
 				autoLoad: true,
 				width: 600,
diff --git a/www/manager6/grid/FirewallAliases.js b/www/manager6/grid/FirewallAliases.js
index 00d0d74b..055f9431 100644
--- a/www/manager6/grid/FirewallAliases.js
+++ b/www/manager6/grid/FirewallAliases.js
@@ -108,7 +108,7 @@ Ext.define('PVE.FirewallAliases', {
 	    let oldrec = sm.getSelection()[0];
 	    store.load(function(records, operation, success) {
 		if (oldrec) {
-		    var rec = store.findRecord('name', oldrec.data.name, 0, false, true, true);
+		    let rec = store.findRecord('name', oldrec.data.name, 0, false, true, true);
 		    if (rec) {
 			sm.select(rec);
 		    }
@@ -139,7 +139,7 @@ Ext.define('PVE.FirewallAliases', {
 	me.addBtn = Ext.create('Ext.Button', {
 	    text: gettext('Add'),
 	    handler: function() {
-		var win = Ext.create('PVE.FirewallAliasEdit', {
+		let win = Ext.create('PVE.FirewallAliasEdit', {
 		    base_url: me.base_url,
 		});
 		win.on('destroy', reload);
diff --git a/www/manager6/grid/FirewallOptions.js b/www/manager6/grid/FirewallOptions.js
index 4123bd9f..e0c4a499 100644
--- a/www/manager6/grid/FirewallOptions.js
+++ b/www/manager6/grid/FirewallOptions.js
@@ -7,7 +7,7 @@ Ext.define('PVE.FirewallOptions', {
     base_url: undefined,
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.base_url) {
 	    throw "missing base_url configuration";
@@ -23,10 +23,10 @@ Ext.define('PVE.FirewallOptions', {
 
 	me.rows = {};
 
-	var add_boolean_row = function(name, text, defaultValue) {
+	let add_boolean_row = function(name, text, defaultValue) {
 	    me.add_boolean_row(name, text, { defaultValue: defaultValue });
 	};
-	var add_integer_row = function(name, text, minValue, labelWidth) {
+	let add_integer_row = function(name, text, minValue, labelWidth) {
 	    me.add_integer_row(name, text, {
 		minValue: minValue,
 		deleteEmpty: true,
@@ -41,7 +41,7 @@ Ext.define('PVE.FirewallOptions', {
 	    });
 	};
 
-	var add_log_row = function(name, labelWidth) {
+	let add_log_row = function(name, labelWidth) {
 	    me.rows[name] = {
 		header: name,
 		required: true,
@@ -146,21 +146,21 @@ Ext.define('PVE.FirewallOptions', {
 	    };
 	}
 
-	var edit_btn = new Ext.Button({
+	let edit_btn = new Ext.Button({
 	    text: gettext('Edit'),
 	    disabled: true,
 	    handler: function() { me.run_editor(); },
 	});
 
-	var set_button_status = function() {
-	    var sm = me.getSelectionModel();
-	    var rec = sm.getSelection()[0];
+	let set_button_status = function() {
+	    let sm = me.getSelectionModel();
+	    let rec = sm.getSelection()[0];
 
 	    if (!rec) {
 		edit_btn.disable();
 		return;
 	    }
-	    var rowdef = me.rows[rec.data.key];
+	    let rowdef = me.rows[rec.data.key];
 	    edit_btn.setDisabled(!rowdef.editor);
 	};
 
diff --git a/www/manager6/grid/FirewallRules.js b/www/manager6/grid/FirewallRules.js
index 5777c7f4..9f828cf4 100644
--- a/www/manager6/grid/FirewallRules.js
+++ b/www/manager6/grid/FirewallRules.js
@@ -22,9 +22,9 @@ Ext.define('PVE.form.FWMacroSelector', {
 	],
     },
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var store = Ext.create('Ext.data.Store', {
+	let store = Ext.create('Ext.data.Store', {
 	    autoLoad: true,
 	    fields: ['macro', 'descr'],
 	    idProperty: 'macro',
@@ -155,7 +155,7 @@ Ext.define('PVE.FirewallRulePanel', {
     list_refs_url: undefined,
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
 	// hack: editable ComboGrid returns nothing when empty, so we need to set ''
 	// Also, disabled text fields return nothing, so we need to set ''
@@ -172,7 +172,7 @@ Ext.define('PVE.FirewallRulePanel', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.list_refs_url) {
 	    throw "no list_refs_url specified";
@@ -390,7 +390,7 @@ Ext.define('PVE.FirewallRuleEdit', {
     allow_iface: false,
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.base_url) {
 	    throw "no base_url specified";
@@ -409,7 +409,7 @@ Ext.define('PVE.FirewallRuleEdit', {
             me.method = 'PUT';
         }
 
-	var ipanel = Ext.create('PVE.FirewallRulePanel', {
+	let ipanel = Ext.create('PVE.FirewallRulePanel', {
 	    isCreate: me.isCreate,
 	    list_refs_url: me.list_refs_url,
 	    allow_iface: me.allow_iface,
@@ -427,17 +427,17 @@ Ext.define('PVE.FirewallRuleEdit', {
 	if (!me.isCreate) {
 	    me.load({
 		success: function(response, options) {
-		    var values = response.result.data;
+		    let values = response.result.data;
 		    ipanel.setValues(values);
 		    // set icmp-type again after protocol has been set
 		    if (values["icmp-type"] !== undefined) {
 			ipanel.setValues({ "icmp-type": values["icmp-type"] });
 		    }
 		    if (values.errors) {
-			var field = me.query('[isFormField][name=modified_marker]')[0];
+			let field = me.query('[isFormField][name=modified_marker]')[0];
 			field.setValue(1);
 			Ext.Function.defer(function() {
-			    var form = ipanel.up('form').getForm();
+			    let form = ipanel.up('form').getForm();
 			    form.markInvalid(values.errors);
 			}, 100);
 		    }
@@ -457,7 +457,7 @@ Ext.define('PVE.FirewallGroupRuleEdit', {
     allow_iface: false,
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.isCreate = me.rule_pos === undefined;
 
@@ -469,7 +469,7 @@ Ext.define('PVE.FirewallGroupRuleEdit', {
             me.method = 'PUT';
         }
 
-	var column1 = [
+	let column1 = [
 	    {
 		xtype: 'hiddenfield',
 		name: 'type',
@@ -494,7 +494,7 @@ Ext.define('PVE.FirewallGroupRuleEdit', {
 	    });
 	}
 
-	var ipanel = Ext.create('Proxmox.panel.InputPanel', {
+	let ipanel = Ext.create('Proxmox.panel.InputPanel', {
 	    isCreate: me.isCreate,
 	    column1: column1,
 	    column2: [
@@ -527,7 +527,7 @@ Ext.define('PVE.FirewallGroupRuleEdit', {
 	if (!me.isCreate) {
 	    me.load({
 		success: function(response, options) {
-		    var values = response.result.data;
+		    let values = response.result.data;
 		    ipanel.setValues(values);
 		},
 	    });
@@ -558,7 +558,7 @@ Ext.define('PVE.FirewallRules', {
     allow_iface: false,
 
     setBaseUrl: function(url) {
-        var me = this;
+        let me = this;
 
 	me.base_url = url;
 
@@ -584,7 +584,7 @@ Ext.define('PVE.FirewallRules', {
     },
 
     moveRule: function(from, to) {
-        var me = this;
+        let me = this;
 
 	if (!me.base_url) {
 	    return;
@@ -605,7 +605,7 @@ Ext.define('PVE.FirewallRules', {
     },
 
     updateRule: function(rule) {
-        var me = this;
+        let me = this;
 
 	if (!me.base_url) {
 	    return;
@@ -613,7 +613,7 @@ Ext.define('PVE.FirewallRules', {
 
 	rule.enable = rule.enable ? 1 : 0;
 
-	var pos = rule.pos;
+	let pos = rule.pos;
 	delete rule.pos;
 	delete rule.errors;
 
@@ -633,30 +633,30 @@ Ext.define('PVE.FirewallRules', {
 
 
     initComponent: function() {
-        var me = this;
+        let me = this;
 
 	if (!me.list_refs_url) {
 	    throw "no list_refs_url specified";
 	}
 
-	var store = Ext.create('Ext.data.Store', {
+	let store = Ext.create('Ext.data.Store', {
 	    model: 'pve-fw-rule',
 	});
 
-	var reload = function() {
+	let reload = function() {
 	    store.load();
 	};
 
-	var sm = Ext.create('Ext.selection.RowModel', {});
+	let sm = Ext.create('Ext.selection.RowModel', {});
 
-	var run_editor = function() {
-	    var rec = sm.getSelection()[0];
+	let run_editor = function() {
+	    let rec = sm.getSelection()[0];
 	    if (!rec) {
 		return;
 	    }
-	    var type = rec.data.type;
+	    let type = rec.data.type;
 
-	    var editor;
+	    let editor;
 	    if (type === 'in' || type === 'out') {
 		editor = 'PVE.FirewallRuleEdit';
 	    } else if (type === 'group') {
@@ -665,7 +665,7 @@ Ext.define('PVE.FirewallRules', {
 		return;
 	    }
 
-	    var win = Ext.create(editor, {
+	    let win = Ext.create(editor, {
 		digest: rec.data.digest,
 		allow_iface: me.allow_iface,
 		base_url: me.base_url,
@@ -688,7 +688,7 @@ Ext.define('PVE.FirewallRules', {
 	    text: gettext('Add'),
 	    disabled: true,
 	    handler: function() {
-		var win = Ext.create('PVE.FirewallRuleEdit', {
+		let win = Ext.create('PVE.FirewallRuleEdit', {
 		    allow_iface: me.allow_iface,
 		    base_url: me.base_url,
 		    list_refs_url: me.list_refs_url,
@@ -698,7 +698,7 @@ Ext.define('PVE.FirewallRules', {
 	    },
 	});
 
-	var run_copy_editor = function() {
+	let run_copy_editor = function() {
 	    let rec = sm.getSelection()[0];
 	    if (!rec) {
 		return;
@@ -732,7 +732,7 @@ Ext.define('PVE.FirewallRules', {
 		    gettext('Security Group'),
 		disabled: true,
 		handler: function() {
-		    var win = Ext.create('PVE.FirewallGroupRuleEdit', {
+		    let win = Ext.create('PVE.FirewallGroupRuleEdit', {
 			allow_iface: me.allow_iface,
 			base_url: me.base_url,
 		    });
@@ -747,7 +747,7 @@ Ext.define('PVE.FirewallRules', {
 	    baseurl: me.base_url + '/',
 	    confirmMsg: false,
 	    getRecordName: function(rec) {
-		var rule = rec.data;
+		let rule = rec.data;
 		return rule.pos.toString() +
 		    '?digest=' + encodeURIComponent(rule.digest);
 	    },
@@ -799,9 +799,9 @@ Ext.define('PVE.FirewallRules', {
 		dataIndex: 'enable',
 		listeners: {
 		    checkchange: function(column, recordIndex, checked) {
-			var record = me.getStore().getData().items[recordIndex];
+			let record = me.getStore().getData().items[recordIndex];
 			record.commit();
-			var data = {};
+			let data = {};
 			Ext.Array.forEach(record.getFields(), function(field) {
 			    data[field.name] = record.get(field.name);
 			});
diff --git a/www/manager6/grid/PoolMembers.js b/www/manager6/grid/PoolMembers.js
index 025288cc..f17e931a 100644
--- a/www/manager6/grid/PoolMembers.js
+++ b/www/manager6/grid/PoolMembers.js
@@ -5,7 +5,7 @@ Ext.define('PVE.pool.AddVM', {
     isAdd: true,
     isCreate: true,
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.pool) {
 	    throw "no pool specified";
@@ -14,13 +14,13 @@ Ext.define('PVE.pool.AddVM', {
 	me.url = "/pools/" + me.pool;
 	me.method = 'PUT';
 
-	var vmsField = Ext.create('Ext.form.field.Text', {
+	let vmsField = Ext.create('Ext.form.field.Text', {
 	    name: 'vms',
 	    hidden: true,
 	    allowBlank: false,
 	});
 
-	var vmStore = Ext.create('Ext.data.Store', {
+	let vmStore = Ext.create('Ext.data.Store', {
 	    model: 'PVEResources',
 	    sorters: [
 		{
@@ -35,7 +35,7 @@ Ext.define('PVE.pool.AddVM', {
 	    ],
 	});
 
-	var vmGrid = Ext.create('widget.grid', {
+	let vmGrid = Ext.create('widget.grid', {
 	    store: vmStore,
 	    border: true,
 	    height: 300,
@@ -45,7 +45,7 @@ Ext.define('PVE.pool.AddVM', {
 		mode: 'SIMPLE',
 		listeners: {
 		    selectionchange: function(model, selected, opts) {
-			var selectedVms = [];
+			let selectedVms = [];
 			selected.forEach(function(vm) {
 			    selectedVms.push(vm.data.vmid);
 			});
@@ -99,7 +99,7 @@ Ext.define('PVE.pool.AddStorage', {
     extend: 'Proxmox.window.Edit',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.pool) {
 	    throw "no pool specified";
@@ -139,13 +139,13 @@ Ext.define('PVE.grid.PoolMembers', {
     stateId: 'grid-pool-members',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.pool) {
 	    throw "no pool specified";
 	}
 
-	var store = Ext.create('Ext.data.Store', {
+	let store = Ext.create('Ext.data.Store', {
 	    model: 'PVEResources',
 	    sorters: [
 		{
@@ -160,15 +160,15 @@ Ext.define('PVE.grid.PoolMembers', {
 	    },
 	});
 
-	var coldef = PVE.data.ResourceStore.defaultColumns();
+	let coldef = PVE.data.ResourceStore.defaultColumns();
 
-	var reload = function() {
+	let reload = function() {
 	    store.load();
 	};
 
-	var sm = Ext.create('Ext.selection.RowModel', {});
+	let sm = Ext.create('Ext.selection.RowModel', {});
 
-	var remove_btn = new Proxmox.button.Button({
+	let remove_btn = new Proxmox.button.Button({
 	    text: gettext('Remove'),
 	    disabled: true,
 	    selModel: sm,
@@ -177,7 +177,7 @@ Ext.define('PVE.grid.PoolMembers', {
 					 "'" + rec.data.id + "'");
 	    },
 	    handler: function(btn, event, rec) {
-		var params = { 'delete': 1 };
+		let params = { 'delete': 1 };
 		if (rec.data.type === 'storage') {
 		    params.storage = rec.data.storage;
 		} else if (rec.data.type === 'qemu' || rec.data.type === 'lxc' || rec.data.type === 'openvz') {
@@ -213,7 +213,7 @@ Ext.define('PVE.grid.PoolMembers', {
 				text: gettext('Virtual Machine'),
 				iconCls: 'pve-itype-icon-qemu',
 				handler: function() {
-				    var win = Ext.create('PVE.pool.AddVM', { pool: me.pool });
+				    let win = Ext.create('PVE.pool.AddVM', { pool: me.pool });
 				    win.on('destroy', reload);
 				    win.show();
 				},
@@ -222,7 +222,7 @@ Ext.define('PVE.grid.PoolMembers', {
 				text: gettext('Storage'),
 				iconCls: 'pve-itype-icon-storage',
 				handler: function() {
-				    var win = Ext.create('PVE.pool.AddStorage', { pool: me.pool });
+				    let win = Ext.create('PVE.pool.AddStorage', { pool: me.pool });
 				    win.on('destroy', reload);
 				    win.show();
 				},
@@ -239,7 +239,7 @@ Ext.define('PVE.grid.PoolMembers', {
 	    listeners: {
 		itemcontextmenu: PVE.Utils.createCmdMenu,
 		itemdblclick: function(v, record) {
-		    var ws = me.up('pveStdWorkspace');
+		    let ws = me.up('pveStdWorkspace');
 		    ws.selectById(record.data.id);
 		},
 		activate: reload,
diff --git a/www/manager6/grid/Replication.js b/www/manager6/grid/Replication.js
index b17288b9..3baa1b4f 100644
--- a/www/manager6/grid/Replication.js
+++ b/www/manager6/grid/Replication.js
@@ -9,12 +9,12 @@ Ext.define('PVE.window.ReplicaEdit', {
     method: 'POST',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var vmid = me.pveSelNode.data.vmid;
-	var nodename = me.pveSelNode.data.node;
+	let vmid = me.pveSelNode.data.vmid;
+	let nodename = me.pveSelNode.data.node;
 
-	var items = [];
+	let items = [];
 
 	items.push({
 	    xtype: me.isCreate && !vmid?'pveGuestIDSelector':'displayfield',
@@ -99,10 +99,10 @@ Ext.define('PVE.window.ReplicaEdit', {
 	if (me.isCreate) {
 	    me.load({
 		success: function(response) {
-		    var jobs = response.result.data;
-		    var highestids = {};
+		    let jobs = response.result.data;
+		    let highestids = {};
 		    Ext.Array.forEach(jobs, function(job) {
-			var match = /^([0-9]+)-([0-9]+)$/.exec(job.id);
+			let match = /^([0-9]+)-([0-9]+)$/.exec(job.id);
 			if (match) {
 			    let jobVMID = parseInt(match[1], 10);
 			    let id = parseInt(match[2], 10);
@@ -270,9 +270,9 @@ Ext.define('PVE.grid.ReplicaView', {
     ],
 
     initComponent: function() {
-	var me = this;
-	var mode = '';
-	var url = '/cluster/replication';
+	let me = this;
+	let mode = '';
+	let url = '/cluster/replication';
 
 	me.nodename = me.pveSelNode.data.node;
 	me.vmid = me.pveSelNode.data.vmid;
diff --git a/www/manager6/grid/ResourceGrid.js b/www/manager6/grid/ResourceGrid.js
index 29906a37..f23c8500 100644
--- a/www/manager6/grid/ResourceGrid.js
+++ b/www/manager6/grid/ResourceGrid.js
@@ -32,7 +32,7 @@ Ext.define('PVE.grid.ResourceGrid', {
 	};
 
 	let updateGrid = function() {
-	    var filterfn = me.viewFilter ? me.viewFilter.filterfn : null;
+	    let filterfn = me.viewFilter ? me.viewFilter.filterfn : null;
 
 	    store.suspendEvents();
 
@@ -122,7 +122,7 @@ Ext.define('PVE.grid.ResourceGrid', {
 	    listeners: {
 		itemcontextmenu: PVE.Utils.createCmdMenu,
 		itemdblclick: function(v, record) {
-		    var ws = me.up('pveStdWorkspace');
+		    let ws = me.up('pveStdWorkspace');
 		    ws.selectById(record.data.id);
 		},
 		afterrender: function() {
diff --git a/www/manager6/ha/Fencing.js b/www/manager6/ha/Fencing.js
index c87a761c..c5a7b7d9 100644
--- a/www/manager6/ha/Fencing.js
+++ b/www/manager6/ha/Fencing.js
@@ -5,9 +5,9 @@ Ext.define('PVE.ha.FencingView', {
     onlineHelp: 'ha_manager_fencing',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var store = new Ext.data.Store({
+	let store = new Ext.data.Store({
 	    model: 'pve-ha-fencing',
 	    data: [],
 	});
diff --git a/www/manager6/ha/GroupEdit.js b/www/manager6/ha/GroupEdit.js
index 2c42de6b..27b52ffc 100644
--- a/www/manager6/ha/GroupEdit.js
+++ b/www/manager6/ha/GroupEdit.js
@@ -5,7 +5,7 @@ Ext.define('PVE.ha.GroupInputPanel', {
     groupId: undefined,
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
 	if (me.isCreate) {
 	    values.type = 'group';
@@ -15,7 +15,7 @@ Ext.define('PVE.ha.GroupInputPanel', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	let update_nodefield, update_node_selection;
 
@@ -43,7 +43,7 @@ Ext.define('PVE.ha.GroupInputPanel', {
 	    ],
 	});
 
-	var nodegrid = Ext.createWidget('grid', {
+	let nodegrid = Ext.createWidget('grid', {
 	    store: store,
 	    border: true,
 	    height: 300,
@@ -180,7 +180,7 @@ Ext.define('PVE.ha.GroupEdit', {
     groupId: undefined,
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.isCreate = !me.groupId;
 
@@ -192,7 +192,7 @@ Ext.define('PVE.ha.GroupEdit', {
             me.method = 'PUT';
         }
 
-	var ipanel = Ext.create('PVE.ha.GroupInputPanel', {
+	let ipanel = Ext.create('PVE.ha.GroupInputPanel', {
 	    isCreate: me.isCreate,
 	    groupId: me.groupId,
 	});
@@ -207,7 +207,7 @@ Ext.define('PVE.ha.GroupEdit', {
 	if (!me.isCreate) {
 	    me.load({
 		success: function(response, options) {
-		    var values = response.result.data;
+		    let values = response.result.data;
 
 		    ipanel.setValues(values);
 		},
diff --git a/www/manager6/ha/GroupSelector.js b/www/manager6/ha/GroupSelector.js
index 61ab0c03..00975458 100644
--- a/www/manager6/ha/GroupSelector.js
+++ b/www/manager6/ha/GroupSelector.js
@@ -37,7 +37,7 @@ Ext.define('PVE.ha.GroupSelector', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 	me.callParent();
 	me.getStore().load();
     },
diff --git a/www/manager6/ha/Groups.js b/www/manager6/ha/Groups.js
index da5f4479..98dc3ae4 100644
--- a/www/manager6/ha/Groups.js
+++ b/www/manager6/ha/Groups.js
@@ -8,11 +8,11 @@ Ext.define('PVE.ha.GroupsView', {
     stateId: 'grid-ha-groups',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var caps = Ext.state.Manager.get('GuiCap');
+	let caps = Ext.state.Manager.get('GuiCap');
 
-	var store = new Ext.data.Store({
+	let store = new Ext.data.Store({
 	    model: 'pve-ha-groups',
 	    sorters: {
 		property: 'group',
@@ -20,11 +20,11 @@ Ext.define('PVE.ha.GroupsView', {
 	    },
 	});
 
-	var reload = function() {
+	let reload = function() {
 	    store.load();
 	};
 
-	var sm = Ext.create('Ext.selection.RowModel', {});
+	let sm = Ext.create('Ext.selection.RowModel', {});
 
 	let run_editor = function() {
 	    let rec = sm.getSelection()[0];
diff --git a/www/manager6/ha/ResourceEdit.js b/www/manager6/ha/ResourceEdit.js
index f4c876ea..8e5e0a6d 100644
--- a/www/manager6/ha/ResourceEdit.js
+++ b/www/manager6/ha/ResourceEdit.js
@@ -4,7 +4,7 @@ Ext.define('PVE.ha.VMResourceInputPanel', {
     vmid: undefined,
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
 	if (values.vmid) {
 	    values.sid = values.vmid;
@@ -19,10 +19,10 @@ Ext.define('PVE.ha.VMResourceInputPanel', {
     },
 
     initComponent: function() {
-	var me = this;
-	var MIN_QUORUM_VOTES = 3;
+	let me = this;
+	let MIN_QUORUM_VOTES = 3;
 
-	var disabledHint = Ext.createWidget({
+	let disabledHint = Ext.createWidget({
 	    xtype: 'displayfield', // won't get submitted by default
 	    userCls: 'pmx-hint',
 	    value: 'Disabling the resource will stop the guest system. ' +
@@ -30,7 +30,7 @@ Ext.define('PVE.ha.VMResourceInputPanel', {
 	    hidden: true,
 	});
 
-	var fewVotesHint = Ext.createWidget({
+	let fewVotesHint = Ext.createWidget({
 	    itemId: 'fewVotesHint',
 	    xtype: 'displayfield',
 	    userCls: 'pmx-hint',
@@ -45,10 +45,10 @@ Ext.define('PVE.ha.VMResourceInputPanel', {
 		Ext.Msg.alert(gettext('Error'), response.htmlStatus);
 	    },
 	    success: function(response) {
-		var nodes = response.result.data;
-		var votes = 0;
+		let nodes = response.result.data;
+		let votes = 0;
 		Ext.Array.forEach(nodes, function(node) {
-		    var vote = parseInt(node.quorum_votes, 10); // parse as base 10
+		    let vote = parseInt(node.quorum_votes, 10); // parse as base 10
 		    votes += vote || 0; // parseInt might return NaN, which is false
 		});
 
@@ -58,7 +58,7 @@ Ext.define('PVE.ha.VMResourceInputPanel', {
 	    },
 	});
 
-	var vmidStore = me.vmid ? {} : {
+	let vmidStore = me.vmid ? {} : {
 	    model: 'PVEResources',
 	    autoLoad: true,
 	    sorters: 'vmid',
@@ -156,7 +156,7 @@ Ext.define('PVE.ha.VMResourceEdit', {
     isCreate: undefined,
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (me.isCreate === undefined) {
 	    me.isCreate = !me.vmid;
@@ -170,7 +170,7 @@ Ext.define('PVE.ha.VMResourceEdit', {
             me.method = 'PUT';
         }
 
-	var ipanel = Ext.create('PVE.ha.VMResourceInputPanel', {
+	let ipanel = Ext.create('PVE.ha.VMResourceInputPanel', {
 	    isCreate: me.isCreate,
 	    vmid: me.vmid,
 	    guestType: me.guestType,
@@ -188,10 +188,10 @@ Ext.define('PVE.ha.VMResourceEdit', {
 	if (!me.isCreate) {
 	    me.load({
 		success: function(response, options) {
-		    var values = response.result.data;
+		    let values = response.result.data;
 
-		    var regex = /^(\S+):(\S+)$/;
-		    var res = regex.exec(values.sid);
+		    let regex = /^(\S+):(\S+)$/;
+		    let res = regex.exec(values.sid);
 
 		    if (res[1] !== 'vm' && res[1] !== 'ct') {
 			throw "got unexpected resource type";
diff --git a/www/manager6/ha/Status.js b/www/manager6/ha/Status.js
index 8870faf4..c1348482 100644
--- a/www/manager6/ha/Status.js
+++ b/www/manager6/ha/Status.js
@@ -9,7 +9,7 @@ Ext.define('PVE.ha.Status', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.rstore = Ext.create('Proxmox.data.ObjectStore', {
 	    interval: me.interval,
diff --git a/www/manager6/ha/StatusView.js b/www/manager6/ha/StatusView.js
index 1ccc670f..f6e61359 100644
--- a/www/manager6/ha/StatusView.js
+++ b/www/manager6/ha/StatusView.js
@@ -12,7 +12,7 @@ Ext.define('PVE.ha.StatusView', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.rstore) {
 	    throw "no rstore given";
@@ -20,13 +20,13 @@ Ext.define('PVE.ha.StatusView', {
 
 	Proxmox.Utils.monStoreErrors(me, me.rstore);
 
-	var store = Ext.create('Proxmox.data.DiffStore', {
+	let store = Ext.create('Proxmox.data.DiffStore', {
 	    rstore: me.rstore,
 	    sortAfterUpdate: true,
 	    sorters: [{
 		sorterFn: function(rec1, rec2) {
-		    var p1 = me.sortPriority[rec1.data.type];
-		    var p2 = me.sortPriority[rec2.data.type];
+		    let p1 = me.sortPriority[rec1.data.type];
+		    let p2 = me.sortPriority[rec2.data.type];
 		    return p1 !== p2 ? p1 > p2 ? 1 : -1 : 0;
 		},
 	    }],
diff --git a/www/manager6/lxc/Config.js b/www/manager6/lxc/Config.js
index 89b59c9b..6b0571ce 100644
--- a/www/manager6/lxc/Config.js
+++ b/www/manager6/lxc/Config.js
@@ -5,33 +5,33 @@ Ext.define('PVE.lxc.Config', {
     onlineHelp: 'chapter_pct',
 
     initComponent: function() {
-        var me = this;
-	var vm = me.pveSelNode.data;
+	let me = this;
+	let vm = me.pveSelNode.data;
 
-	var nodename = vm.node;
+	let nodename = vm.node;
 	if (!nodename) {
 	    throw "no node name specified";
 	}
 
-	var vmid = vm.vmid;
+	let vmid = vm.vmid;
 	if (!vmid) {
 	    throw "no VM ID specified";
 	}
 
-	var template = !!vm.template;
+	let template = !!vm.template;
 
-	var running = !!vm.uptime;
+	let running = !!vm.uptime;
 
-	var caps = Ext.state.Manager.get('GuiCap');
+	let caps = Ext.state.Manager.get('GuiCap');
 
-	var base_url = '/nodes/' + nodename + '/lxc/' + vmid;
+	let base_url = '/nodes/' + nodename + '/lxc/' + vmid;
 
 	me.statusStore = Ext.create('Proxmox.data.ObjectStore', {
 	    url: '/api2/json' + base_url + '/status/current',
 	    interval: 1000,
 	});
 
-	var vm_command = function(cmd, params) {
+	let vm_command = function(cmd, params) {
 	    Proxmox.Utils.API2Request({
 		params: params,
 		url: base_url + "/status/" + cmd,
@@ -43,7 +43,7 @@ Ext.define('PVE.lxc.Config', {
 	    });
 	};
 
-	var startBtn = Ext.create('Ext.Button', {
+	let startBtn = Ext.create('Ext.Button', {
 	    text: gettext('Start'),
 	    disabled: !caps.vms['VM.PowerMgmt'] || running,
 	    hidden: template,
@@ -53,7 +53,7 @@ Ext.define('PVE.lxc.Config', {
 	    iconCls: 'fa fa-play',
 	});
 
-	var shutdownBtn = Ext.create('PVE.button.Split', {
+	let shutdownBtn = Ext.create('PVE.button.Split', {
 	    text: gettext('Shutdown'),
 	    disabled: !caps.vms['VM.PowerMgmt'] || !running,
 	    hidden: template,
@@ -87,12 +87,12 @@ Ext.define('PVE.lxc.Config', {
 	    iconCls: 'fa fa-power-off',
 	});
 
-	var migrateBtn = Ext.create('Ext.Button', {
+	let migrateBtn = Ext.create('Ext.Button', {
 	    text: gettext('Migrate'),
 	    disabled: !caps.vms['VM.Migrate'],
 	    hidden: PVE.data.ResourceStore.getNodes().length < 2,
 	    handler: function() {
-		var win = Ext.create('PVE.window.Migrate', {
+		let win = Ext.create('PVE.window.Migrate', {
 		    vmtype: 'lxc',
 		    nodename: nodename,
 		    vmid: vmid,
@@ -102,7 +102,7 @@ Ext.define('PVE.lxc.Config', {
 	    iconCls: 'fa fa-send-o',
 	});
 
-	var moreBtn = Ext.create('Proxmox.button.Button', {
+	let moreBtn = Ext.create('Proxmox.button.Button', {
 	    text: gettext('More'),
 	    menu: {
  items: [
@@ -137,7 +137,7 @@ Ext.define('PVE.lxc.Config', {
 		    hidden: !caps.nodes['Sys.Console'],
 		    text: gettext('Manage HA'),
 		    handler: function() {
-			var ha = vm.hastate;
+			let ha = vm.hastate;
 			Ext.create('PVE.ha.VMResourceEdit', {
 			    vmid: vmid,
 			    guestType: 'ct',
@@ -162,7 +162,7 @@ Ext.define('PVE.lxc.Config', {
 },
 	});
 
-	var consoleBtn = Ext.create('PVE.button.ConsoleButton', {
+	let consoleBtn = Ext.create('PVE.button.ConsoleButton', {
 	    disabled: !caps.vms['VM.Console'],
 	    consoleType: 'lxc',
 	    consoleName: vm.name,
@@ -171,7 +171,7 @@ Ext.define('PVE.lxc.Config', {
 	    vmid: vmid,
 	});
 
-	var statusTxt = Ext.create('Ext.toolbar.TextItem', {
+	let statusTxt = Ext.create('Ext.toolbar.TextItem', {
 	    data: {
 		lock: undefined,
 	    },
@@ -340,14 +340,14 @@ Ext.define('PVE.lxc.Config', {
 
 	me.callParent();
 
-	var prevStatus = 'unknown';
+	let prevStatus = 'unknown';
 	me.mon(me.statusStore, 'load', function(s, records, success) {
-	    var status;
-	    var lock;
+	    let status;
+	    let lock;
 	    if (!success) {
 		status = 'unknown';
 	    } else {
-		var rec = s.data.get('status');
+		let rec = s.data.get('status');
 		status = rec ? rec.data.value : 'unknown';
 		rec = s.data.get('template');
 		template = rec ? rec.data.value : false;
diff --git a/www/manager6/lxc/CreateWizard.js b/www/manager6/lxc/CreateWizard.js
index 1f902c2c..b05586d6 100644
--- a/www/manager6/lxc/CreateWizard.js
+++ b/www/manager6/lxc/CreateWizard.js
@@ -104,7 +104,7 @@ Ext.define('PVE.lxc.CreateWizard', {
 		    allowBlank: true,
 		    submitValue: false,
 		    validator: function(value) {
-			var pw = this.up().down('field[name=password]').getValue();
+			let pw = this.up().down('field[name=password]').getValue();
 			if (pw !== value) {
 			    return "Passwords do not match!";
 			}
diff --git a/www/manager6/lxc/DNS.js b/www/manager6/lxc/DNS.js
index 6c519023..b04c3c3d 100644
--- a/www/manager6/lxc/DNS.js
+++ b/www/manager6/lxc/DNS.js
@@ -5,9 +5,9 @@ Ext.define('PVE.lxc.DNSInputPanel', {
     insideWizard: false,
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
-	var deletes = [];
+	let deletes = [];
 	if (!values.searchdomain && !me.insideWizard) {
 	    deletes.push('searchdomain');
 	}
@@ -27,9 +27,9 @@ Ext.define('PVE.lxc.DNSInputPanel', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var items = [
+	let items = [
 	    {
 		xtype: 'proxmoxtextfield',
 		name: 'searchdomain',
@@ -63,9 +63,9 @@ Ext.define('PVE.lxc.DNSEdit', {
     extend: 'Proxmox.window.Edit',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var ipanel = Ext.create('PVE.lxc.DNSInputPanel');
+	let ipanel = Ext.create('PVE.lxc.DNSInputPanel');
 
 	Ext.apply(me, {
 	    subject: gettext('Resources'),
@@ -77,7 +77,7 @@ Ext.define('PVE.lxc.DNSEdit', {
 	if (!me.isCreate) {
 	    me.load({
 		success: function(response, options) {
-		    var values = response.result.data;
+		    let values = response.result.data;
 
 		    if (values.nameserver) {
 			values.nameserver.replace(/[,;]/, ' ');
@@ -98,21 +98,21 @@ Ext.define('PVE.lxc.DNS', {
     onlineHelp: 'pct_container_network',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var nodename = me.pveSelNode.data.node;
+	let nodename = me.pveSelNode.data.node;
 	if (!nodename) {
 	    throw "no node name specified";
 	}
 
-	var vmid = me.pveSelNode.data.vmid;
+	let vmid = me.pveSelNode.data.vmid;
 	if (!vmid) {
 	    throw "no VM ID specified";
 	}
 
-	var caps = Ext.state.Manager.get('GuiCap');
+	let caps = Ext.state.Manager.get('GuiCap');
 
-	var rows = {
+	let rows = {
 	    hostname: {
 		required: true,
 		defaultValue: me.pveSelNode.data.name,
@@ -131,7 +131,7 @@ Ext.define('PVE.lxc.DNS', {
 			    emptyText: 'CT' + vmid.toString(),
 			},
 			onGetValues: function(values) {
-			    var params = values;
+			    let params = values;
 			    if (values.hostname === undefined ||
 				values.hostname === null ||
 				values.hostname === '') {
@@ -160,26 +160,26 @@ Ext.define('PVE.lxc.DNS', {
 	    },
 	};
 
-	var baseurl = 'nodes/' + nodename + '/lxc/' + vmid + '/config';
+	let baseurl = 'nodes/' + nodename + '/lxc/' + vmid + '/config';
 
-	var reload = function() {
+	let reload = function() {
 	    me.rstore.load();
 	};
 
-	var sm = Ext.create('Ext.selection.RowModel', {});
+	let sm = Ext.create('Ext.selection.RowModel', {});
 
-	var run_editor = function() {
-	    var rec = sm.getSelection()[0];
+	let run_editor = function() {
+	    let rec = sm.getSelection()[0];
 	    if (!rec) {
 		return;
 	    }
 
-	    var rowdef = rows[rec.data.key];
+	    let rowdef = rows[rec.data.key];
 	    if (!rowdef.editor) {
 		return;
 	    }
 
-	    var win;
+	    let win;
 	    if (Ext.isString(rowdef.editor)) {
 		win = Ext.create(rowdef.editor, {
 		    pveSelNode: me.pveSelNode,
@@ -187,7 +187,7 @@ Ext.define('PVE.lxc.DNS', {
 		    url: '/api2/extjs/nodes/' + nodename + '/lxc/' + vmid + '/config',
 		});
 	    } else {
-		var config = Ext.apply({
+		let config = Ext.apply({
 		    pveSelNode: me.pveSelNode,
 		    confid: rec.data.key,
 		    url: '/api2/extjs/nodes/' + nodename + '/lxc/' + vmid + '/config',
@@ -200,20 +200,20 @@ Ext.define('PVE.lxc.DNS', {
 	    win.on('destroy', reload);
 	};
 
-	var edit_btn = new Proxmox.button.Button({
+	let edit_btn = new Proxmox.button.Button({
 	    text: gettext('Edit'),
 	    disabled: true,
 	    selModel: sm,
 	    enableFn: function(rec) {
-		var rowdef = rows[rec.data.key];
+		let rowdef = rows[rec.data.key];
 		return !!rowdef.editor;
 	    },
 	    handler: run_editor,
 	});
 
-	var revert_btn = new PVE.button.PendingRevert();
+	let revert_btn = new PVE.button.PendingRevert();
 
-	var set_button_status = function() {
+	let set_button_status = function() {
 	    let button_sm = me.getSelectionModel();
 	    let rec = button_sm.getSelection()[0];
 
diff --git a/www/manager6/lxc/FeaturesEdit.js b/www/manager6/lxc/FeaturesEdit.js
index bce6e5fb..9dbe069a 100644
--- a/www/manager6/lxc/FeaturesEdit.js
+++ b/www/manager6/lxc/FeaturesEdit.js
@@ -69,8 +69,8 @@ Ext.define('PVE.lxc.FeaturesInputPanel', {
     ],
 
     onGetValues: function(values) {
-	var me = this;
-	var mounts = me.mounts;
+	let me = this;
+	let mounts = me.mounts;
 	me.fstypes.forEach(function(fs) {
 	    if (values[fs]) {
 		mounts.push(fs);
@@ -82,7 +82,7 @@ Ext.define('PVE.lxc.FeaturesInputPanel', {
 	    values.mount = mounts.join(';');
 	}
 
-	var featuresstring = PVE.Parser.printPropertyString(values, undefined);
+	let featuresstring = PVE.Parser.printPropertyString(values, undefined);
 	if (featuresstring === '') {
 	    return { 'delete': 'features' };
 	}
@@ -90,12 +90,12 @@ Ext.define('PVE.lxc.FeaturesInputPanel', {
     },
 
     setValues: function(values) {
-	var me = this;
+	let me = this;
 
 	me.viewModel.set('unprivileged', values.unprivileged);
 
 	if (values.features) {
-	    var res = PVE.Parser.parsePropertyString(values.features);
+	    let res = PVE.Parser.parsePropertyString(values.features);
 	    me.mounts = [];
 	    if (res.mount) {
 		res.mount.split(/[; ]/).forEach(function(item) {
diff --git a/www/manager6/lxc/MPEdit.js b/www/manager6/lxc/MPEdit.js
index 609447ef..f43aab04 100644
--- a/www/manager6/lxc/MPEdit.js
+++ b/www/manager6/lxc/MPEdit.js
@@ -12,16 +12,16 @@ Ext.define('PVE.lxc.MountPointInputPanel', {
     vmconfig: {}, // used to select unused disks
 
     setUnprivileged: function(unprivileged) {
-	var me = this;
-	var vm = me.getViewModel();
+	let me = this;
+	let vm = me.getViewModel();
 	me.unprivileged = unprivileged;
 	vm.set('unpriv', unprivileged);
     },
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
-	var confid = me.confid || "mp"+values.mpid;
+	let confid = me.confid || "mp"+values.mpid;
 	me.mp.file = me.down('field[name=file]').getValue();
 
 	if (me.unused) {
diff --git a/www/manager6/lxc/MPResize.js b/www/manager6/lxc/MPResize.js
index 881c037b..783d96fe 100644
--- a/www/manager6/lxc/MPResize.js
+++ b/www/manager6/lxc/MPResize.js
@@ -4,8 +4,8 @@ Ext.define('PVE.window.MPResize', {
     resizable: false,
 
     resize_disk: function(disk, size) {
-	var me = this;
-        var params = { disk: disk, size: '+' + size + 'G' };
+	let me = this;
+        let params = { disk: disk, size: '+' + size + 'G' };
 
 	Proxmox.Utils.API2Request({
 	    params: params,
@@ -16,8 +16,8 @@ Ext.define('PVE.window.MPResize', {
 		Ext.Msg.alert(gettext('Error'), response.htmlStatus);
 	    },
 	    success: function(response, opts) {
-		var upid = response.result.data;
-		var win = Ext.create('Proxmox.window.TaskViewer', { upid: upid });
+		let upid = response.result.data;
+		let win = Ext.create('Proxmox.window.TaskViewer', { upid: upid });
 		win.show();
 		me.close();
 	    },
@@ -25,7 +25,7 @@ Ext.define('PVE.window.MPResize', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.nodename) {
 	    throw "no node name specified";
@@ -35,7 +35,7 @@ Ext.define('PVE.window.MPResize', {
 	    throw "no VM ID specified";
 	}
 
-	var items = [
+	let items = [
 	    {
 		xtype: 'displayfield',
 		name: 'disk',
@@ -68,16 +68,16 @@ Ext.define('PVE.window.MPResize', {
 	    items: items,
 	});
 
-	var form = me.formPanel.getForm();
+	let form = me.formPanel.getForm();
 
-	var submitBtn;
+	let submitBtn;
 
 	me.title = gettext('Resize disk');
 	submitBtn = Ext.create('Ext.Button', {
 	    text: gettext('Resize disk'),
 	    handler: function() {
 		if (form.isValid()) {
-		    var values = form.getValues();
+		    let values = form.getValues();
 		    me.resize_disk(me.disk, values.size);
 		}
 	    },
diff --git a/www/manager6/lxc/Options.js b/www/manager6/lxc/Options.js
index d0a53fc7..ab4ae5e6 100644
--- a/www/manager6/lxc/Options.js
+++ b/www/manager6/lxc/Options.js
@@ -5,21 +5,21 @@ Ext.define('PVE.lxc.Options', {
     onlineHelp: 'pct_options',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var nodename = me.pveSelNode.data.node;
+	let nodename = me.pveSelNode.data.node;
 	if (!nodename) {
 	    throw "no node name specified";
 	}
 
-	var vmid = me.pveSelNode.data.vmid;
+	let vmid = me.pveSelNode.data.vmid;
 	if (!vmid) {
 	    throw "no VM ID specified";
 	}
 
-	var caps = Ext.state.Manager.get('GuiCap');
+	let caps = Ext.state.Manager.get('GuiCap');
 
-	var rows = {
+	let rows = {
 	    onboot: {
 		header: gettext('Start at boot'),
 		defaultValue: '',
@@ -143,24 +143,24 @@ Ext.define('PVE.lxc.Options', {
 	    },
 	};
 
-	var baseurl = 'nodes/' + nodename + '/lxc/' + vmid + '/config';
+	let baseurl = 'nodes/' + nodename + '/lxc/' + vmid + '/config';
 
-	var sm = Ext.create('Ext.selection.RowModel', {});
+	let sm = Ext.create('Ext.selection.RowModel', {});
 
-	var edit_btn = new Proxmox.button.Button({
+	let edit_btn = new Proxmox.button.Button({
 	    text: gettext('Edit'),
 	    disabled: true,
 	    selModel: sm,
 	    enableFn: function(rec) {
-		var rowdef = rows[rec.data.key];
+		let rowdef = rows[rec.data.key];
 		return !!rowdef.editor;
 	    },
 	    handler: function() { me.run_editor(); },
 	});
 
-	var revert_btn = new PVE.button.PendingRevert();
+	let revert_btn = new PVE.button.PendingRevert();
 
-	var set_button_status = function() {
+	let set_button_status = function() {
 	    let button_sm = me.getSelectionModel();
 	    let rec = button_sm.getSelection()[0];
 
@@ -169,9 +169,9 @@ Ext.define('PVE.lxc.Options', {
 		return;
 	    }
 
-	    var key = rec.data.key;
-	    var pending = rec.data.delete || me.hasPendingChanges(key);
-	    var rowdef = rows[key];
+	    let key = rec.data.key;
+	    let pending = rec.data.delete || me.hasPendingChanges(key);
+	    let rowdef = rows[key];
 
 	    if (key === 'features') {
 		let unprivileged = me.getStore().getById('unprivileged').data.value;
diff --git a/www/manager6/lxc/ResourceEdit.js b/www/manager6/lxc/ResourceEdit.js
index 6f21571b..f4f0d76b 100644
--- a/www/manager6/lxc/ResourceEdit.js
+++ b/www/manager6/lxc/ResourceEdit.js
@@ -1,10 +1,10 @@
-var labelWidth = 120;
+let labelWidth = 120;
 
 Ext.define('PVE.lxc.MemoryEdit', {
     extend: 'Proxmox.window.Edit',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	Ext.apply(me, {
 	    subject: gettext('Memory'),
@@ -22,7 +22,7 @@ Ext.define('PVE.lxc.CPUEdit', {
     extend: 'Proxmox.window.Edit',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	Ext.apply(me, {
 	    subject: gettext('CPU'),
@@ -44,7 +44,7 @@ Ext.define('PVE.lxc.CPUInputPanel', {
     insideWizard: false,
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
 	PVE.Utils.delete_if_default(values, 'cores', '', me.insideWizard);
 	// cpu{limit,unit} aren't in the wizard so create is always false
@@ -81,7 +81,7 @@ Ext.define('PVE.lxc.CPUInputPanel', {
     ],
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.column1 = [
 	    {
@@ -110,9 +110,9 @@ Ext.define('PVE.lxc.MemoryInputPanel', {
     insideWizard: false,
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var items = [
+	let items = [
 	    {
 		xtype: 'proxmoxintegerfield',
 		name: 'memory',
diff --git a/www/manager6/lxc/Resources.js b/www/manager6/lxc/Resources.js
index 4b2ae95e..daa3c509 100644
--- a/www/manager6/lxc/Resources.js
+++ b/www/manager6/lxc/Resources.js
@@ -27,25 +27,25 @@ Ext.define('PVE.lxc.RessourceView', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 	let confid;
 
-	var nodename = me.pveSelNode.data.node;
+	let nodename = me.pveSelNode.data.node;
 	if (!nodename) {
 	    throw "no node name specified";
 	}
 
-	var vmid = me.pveSelNode.data.vmid;
+	let vmid = me.pveSelNode.data.vmid;
 	if (!vmid) {
 	    throw "no VM ID specified";
 	}
 
-	var caps = Ext.state.Manager.get('GuiCap');
-	var diskCap = caps.vms['VM.Config.Disk'];
+	let caps = Ext.state.Manager.get('GuiCap');
+	let diskCap = caps.vms['VM.Config.Disk'];
 
-	var mpeditor = caps.vms['VM.Config.Disk'] ? 'PVE.lxc.MountPointEdit' : undefined;
+	let mpeditor = caps.vms['VM.Config.Disk'] ? 'PVE.lxc.MountPointEdit' : undefined;
 
-	var rows = {
+	let rows = {
 	    memory: {
 		header: gettext('Memory'),
 		editor: caps.vms['VM.Config.Memory'] ? 'PVE.lxc.MemoryEdit' : undefined,
@@ -73,9 +73,9 @@ Ext.define('PVE.lxc.RessourceView', {
 		tdCls: 'pmx-itype-icon-processor',
 		group: 3,
 		renderer: function(value) {
-		    var cpulimit = me.getObjectValue('cpulimit');
-		    var cpuunits = me.getObjectValue('cpuunits');
-		    var res;
+		    let cpulimit = me.getObjectValue('cpulimit');
+		    let cpuunits = me.getObjectValue('cpuunits');
+		    let res;
 		    if (value) {
 			res = value;
 		    } else {
@@ -112,8 +112,8 @@ Ext.define('PVE.lxc.RessourceView', {
 
 	PVE.Utils.forEachMP(function(bus, i) {
 	    confid = bus + i;
-	    var group = 5;
-	    var header;
+	    let group = 5;
+	    let header;
 	    if (bus === 'mp') {
 		header = gettext('Mount Point') + ' (' + confid + ')';
 	    } else {
@@ -129,17 +129,17 @@ Ext.define('PVE.lxc.RessourceView', {
 	    };
 	}, true);
 
-	var baseurl = 'nodes/' + nodename + '/lxc/' + vmid + '/config';
+	let baseurl = 'nodes/' + nodename + '/lxc/' + vmid + '/config';
 
 	me.selModel = Ext.create('Ext.selection.RowModel', {});
 
-	var run_resize = function() {
-	    var rec = me.selModel.getSelection()[0];
+	let run_resize = function() {
+	    let rec = me.selModel.getSelection()[0];
 	    if (!rec) {
 		return;
 	    }
 
-	    var win = Ext.create('PVE.window.MPResize', {
+	    let win = Ext.create('PVE.window.MPResize', {
 		disk: rec.data.key,
 		nodename: nodename,
 		vmid: vmid,
@@ -148,7 +148,7 @@ Ext.define('PVE.lxc.RessourceView', {
 	    win.show();
 	};
 
-	var run_remove = function(b, e, rec) {
+	let run_remove = function(b, e, rec) {
 	    Proxmox.Utils.API2Request({
 		url: '/api2/extjs/' + baseurl,
 		waitMsgTarget: me,
@@ -168,7 +168,7 @@ Ext.define('PVE.lxc.RessourceView', {
 		return;
 	    }
 
-	    var win = Ext.create('PVE.window.HDMove', {
+	    let win = Ext.create('PVE.window.HDMove', {
 		disk: rec.data.key,
 		nodename: nodename,
 		vmid: vmid,
@@ -198,7 +198,7 @@ Ext.define('PVE.lxc.RessourceView', {
 	    });
 	};
 
-	var edit_btn = new Proxmox.button.Button({
+	let edit_btn = new Proxmox.button.Button({
 	    text: gettext('Edit'),
 	    selModel: me.selModel,
 	    disabled: true,
@@ -206,13 +206,13 @@ Ext.define('PVE.lxc.RessourceView', {
 		if (!rec) {
 		    return false;
 		}
-		var rowdef = rows[rec.data.key];
+		let rowdef = rows[rec.data.key];
 		return !!rowdef.editor;
 	    },
 	    handler: function() { me.run_editor(); },
 	});
 
-	var remove_btn = new Proxmox.button.Button({
+	let remove_btn = new Proxmox.button.Button({
 	    text: gettext('Remove'),
 	    defaultText: gettext('Remove'),
 	    altText: gettext('Detach'),
diff --git a/www/manager6/node/ACME.js b/www/manager6/node/ACME.js
index 0642e7c5..fa94042e 100644
--- a/www/manager6/node/ACME.js
+++ b/www/manager6/node/ACME.js
@@ -64,14 +64,14 @@ Ext.define('PVE.node.ACMEAccountCreate', {
 	    },
 	    listeners: {
 		change: function(combogrid, value) {
-		    var me = this;
+		    let me = this;
 		    if (!value) {
 			return;
 		    }
 
-		    var disp = me.up('window').down('#tos_url_display');
-		    var field = me.up('window').down('#tos_url');
-		    var checkbox = me.up('window').down('#tos_checkbox');
+		    let disp = me.up('window').down('#tos_url_display');
+		    let field = me.up('window').down('#tos_url');
+		    let checkbox = me.up('window').down('#tos_checkbox');
 
 		    disp.setValue(gettext('Loading'));
 		    field.setValue(undefined);
@@ -164,7 +164,7 @@ Ext.define('PVE.node.ACMEAccountView', {
     ],
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.accountname) {
 	    throw "no account name defined";
@@ -179,7 +179,7 @@ Ext.define('PVE.node.ACMEAccountView', {
 
 	me.load({
 	    success: function(response) {
-		var data = response.result.data;
+		let data = response.result.data;
 		data.email = data.account.contact[0];
 		data.createdAt = data.account.createdAt;
 		data.status = data.account.status;
@@ -523,7 +523,7 @@ Ext.define('PVE.node.ACME', {
 
 	orderFinished: function(success) {
 	    if (!success) return;
-	    var txt = gettext('pveproxy will be restarted with new certificates, please reload the GUI!');
+	    let txt = gettext('pveproxy will be restarted with new certificates, please reload the GUI!');
 	    Ext.getBody().mask(txt, ['pve-static-mask']);
 	    // reload after 10 seconds automatically
 	    Ext.defer(function() {
@@ -712,7 +712,7 @@ Ext.define('PVE.node.ACME', {
     ],
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.nodename) {
 	    throw "no nodename given";
diff --git a/www/manager6/node/Certificates.js b/www/manager6/node/Certificates.js
index ab9f0696..6f195730 100644
--- a/www/manager6/node/Certificates.js
+++ b/www/manager6/node/Certificates.js
@@ -339,7 +339,7 @@ Ext.define('PVE.node.Certificates', {
 	if (!selection || selection.length < 1) {
 	    return;
 	}
-	var win = Ext.create('PVE.node.CertificateViewer', {
+	let win = Ext.create('PVE.node.CertificateViewer', {
 	    cert: selection[0].data.filename,
 	    nodename: me.nodename,
 	});
@@ -351,7 +351,7 @@ Ext.define('PVE.node.Certificates', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.nodename) {
 	    throw "no nodename given";
diff --git a/www/manager6/node/Config.js b/www/manager6/node/Config.js
index 7e5b1112..3d58f095 100644
--- a/www/manager6/node/Config.js
+++ b/www/manager6/node/Config.js
@@ -5,21 +5,21 @@ Ext.define('PVE.node.Config', {
     onlineHelp: 'chapter_system_administration',
 
     initComponent: function() {
-        var me = this;
+        let me = this;
 
-	var nodename = me.pveSelNode.data.node;
+	let nodename = me.pveSelNode.data.node;
 	if (!nodename) {
 	    throw "no node name specified";
 	}
 
-	var caps = Ext.state.Manager.get('GuiCap');
+	let caps = Ext.state.Manager.get('GuiCap');
 
 	me.statusStore = Ext.create('Proxmox.data.ObjectStore', {
 	    url: "/api2/json/nodes/" + nodename + "/status",
 	    interval: 5000,
 	});
 
-	var node_command = function(cmd) {
+	let node_command = function(cmd) {
 	    Proxmox.Utils.API2Request({
 		params: { command: cmd },
 		url: '/nodes/' + nodename + '/status',
@@ -31,7 +31,7 @@ Ext.define('PVE.node.Config', {
 	    });
 	};
 
-	var actionBtn = Ext.create('Ext.Button', {
+	let actionBtn = Ext.create('Ext.Button', {
 	    text: gettext('Bulk Actions'),
 	    iconCls: 'fa fa-fw fa-ellipsis-v',
 	    disabled: !caps.nodes['Sys.PowerMgmt'],
@@ -41,7 +41,7 @@ Ext.define('PVE.node.Config', {
 			text: gettext('Bulk Start'),
 			iconCls: 'fa fa-fw fa-play',
 			handler: function() {
-			    var win = Ext.create('PVE.window.BulkAction', {
+			    let win = Ext.create('PVE.window.BulkAction', {
 				nodename: nodename,
 				title: gettext('Bulk Start'),
 				btnText: gettext('Start'),
@@ -54,7 +54,7 @@ Ext.define('PVE.node.Config', {
 			text: gettext('Bulk Stop'),
 			iconCls: 'fa fa-fw fa-stop',
 			handler: function() {
-			    var win = Ext.create('PVE.window.BulkAction', {
+			    let win = Ext.create('PVE.window.BulkAction', {
 				nodename: nodename,
 				title: gettext('Bulk Stop'),
 				btnText: gettext('Stop'),
@@ -67,7 +67,7 @@ Ext.define('PVE.node.Config', {
 			text: gettext('Bulk Migrate'),
 			iconCls: 'fa fa-fw fa-send-o',
 			handler: function() {
-			    var win = Ext.create('PVE.window.BulkAction', {
+			    let win = Ext.create('PVE.window.BulkAction', {
 				nodename: nodename,
 				title: gettext('Bulk Migrate'),
 				btnText: gettext('Migrate'),
@@ -91,7 +91,7 @@ Ext.define('PVE.node.Config', {
 	    iconCls: 'fa fa-undo',
 	});
 
-	var shutdownBtn = Ext.create('Proxmox.button.Button', {
+	let shutdownBtn = Ext.create('Proxmox.button.Button', {
 	    text: gettext('Shutdown'),
 	    disabled: !caps.nodes['Sys.PowerMgmt'],
 	    dangerous: true,
@@ -102,7 +102,7 @@ Ext.define('PVE.node.Config', {
 	    iconCls: 'fa fa-power-off',
 	});
 
-	var shellBtn = Ext.create('PVE.button.ConsoleButton', {
+	let shellBtn = Ext.create('PVE.button.ConsoleButton', {
 	    disabled: !caps.nodes['Sys.Console'],
 	    text: gettext('Shell'),
 	    consoleType: 'shell',
diff --git a/www/manager6/node/Directory.js b/www/manager6/node/Directory.js
index d79c0d63..685af75a 100644
--- a/www/manager6/node/Directory.js
+++ b/www/manager6/node/Directory.js
@@ -9,7 +9,7 @@ Ext.define('PVE.node.CreateDirectory', {
     onlineHelp: 'chapter_storage',
 
     initComponent: function() {
-        var me = this;
+        let me = this;
 
 	if (!me.nodename) {
 	    throw "no node name specified";
diff --git a/www/manager6/node/LVMThin.js b/www/manager6/node/LVMThin.js
index b9ad4b8d..b77fbb43 100644
--- a/www/manager6/node/LVMThin.js
+++ b/www/manager6/node/LVMThin.js
@@ -175,7 +175,7 @@ Ext.define('PVE.node.LVMThinList', {
 	{
 	    text: gettext('Create') + ': Thinpool',
 	    handler: function() {
-		var view = this.up('panel');
+		let view = this.up('panel');
 		Ext.create('PVE.node.CreateLVMThin', {
 		    nodename: view.nodename,
 		    taskDone: () => view.reload(),
diff --git a/www/manager6/node/StatusView.js b/www/manager6/node/StatusView.js
index d34724f7..33e61197 100644
--- a/www/manager6/node/StatusView.js
+++ b/www/manager6/node/StatusView.js
@@ -116,8 +116,8 @@ Ext.define('PVE.node.StatusView', {
     ],
 
     updateTitle: function() {
-	var me = this;
-	var uptime = Proxmox.Utils.render_uptime(me.getRecordValue('uptime'));
+	let me = this;
+	let uptime = Proxmox.Utils.render_uptime(me.getRecordValue('uptime'));
 	me.setTitle(me.pveSelNode.data.node + ' (' + gettext('Uptime') + ': ' + uptime + ')');
     },
 
diff --git a/www/manager6/node/Subscription.js b/www/manager6/node/Subscription.js
index 2558f523..3e21ba8f 100644
--- a/www/manager6/node/Subscription.js
+++ b/www/manager6/node/Subscription.js
@@ -9,7 +9,7 @@ Ext.define('PVE.node.SubscriptionKeyEdit', {
 	fieldLabel: gettext('Subscription Key'),
     },
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.callParent();
 
@@ -29,14 +29,14 @@ Ext.define('PVE.node.Subscription', {
     },
 
     showReport: function() {
-	var me = this;
+	let me = this;
 
-	var getReportFileName = function() {
-	    var now = Ext.Date.format(new Date(), 'D-d-F-Y-G-i');
+	let getReportFileName = function() {
+	    let now = Ext.Date.format(new Date(), 'D-d-F-Y-G-i');
 	    return `${me.nodename}-pve-report-${now}.txt`;
 	};
 
-	var view = Ext.createWidget('component', {
+	let view = Ext.createWidget('component', {
 	    itemId: 'system-report-view',
 	    scrollable: true,
 	    style: {
@@ -47,7 +47,7 @@ Ext.define('PVE.node.Subscription', {
 	    },
 	});
 
-	var reportWindow = Ext.create('Ext.window.Window', {
+	let reportWindow = Ext.create('Ext.window.Window', {
 	    title: gettext('System Report'),
 	    width: 1024,
 	    height: 600,
@@ -58,14 +58,14 @@ Ext.define('PVE.node.Subscription', {
 		{
 		    text: gettext('Download'),
 		    handler: function() {
-			var fileContent = Ext.String.htmlDecode(reportWindow.getComponent('system-report-view').html);
-			var fileName = getReportFileName();
+			let fileContent = Ext.String.htmlDecode(reportWindow.getComponent('system-report-view').html);
+			let fileName = getReportFileName();
 
 			// Internet Explorer
 			if (window.navigator.msSaveOrOpenBlob) {
 			    navigator.msSaveOrOpenBlob(new Blob([fileContent]), fileName);
 			} else {
-			    var element = document.createElement('a');
+			    let element = document.createElement('a');
 			    element.setAttribute('href', 'data:text/plain;charset=utf-8,' +
 			      encodeURIComponent(fileContent));
 			    element.setAttribute('download', fileName);
@@ -88,7 +88,7 @@ Ext.define('PVE.node.Subscription', {
 		Ext.Msg.alert(gettext('Error'), response.htmlStatus);
 	    },
 	    success: function(response) {
-		var report = Ext.htmlEncode(response.result.data);
+		let report = Ext.htmlEncode(response.result.data);
 		reportWindow.show();
 		view.update(report);
 	    },
@@ -96,27 +96,27 @@ Ext.define('PVE.node.Subscription', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.nodename) {
 	    throw "no node name specified";
 	}
 
-	var reload = function() {
+	let reload = function() {
 	    me.rstore.load();
 	};
 
-	var baseurl = '/nodes/' + me.nodename + '/subscription';
+	let baseurl = '/nodes/' + me.nodename + '/subscription';
 
-	var render_status = function(value) {
-	    var message = me.getObjectValue('message');
+	let render_status = function(value) {
+	    let message = me.getObjectValue('message');
 	    if (message) {
 		return value + ": " + message;
 	    }
 	    return value;
 	};
 
-	var rows = {
+	let rows = {
 	    productname: {
 		header: gettext('Type'),
 	    },
@@ -152,7 +152,7 @@ Ext.define('PVE.node.Subscription', {
 		{
 		    text: gettext('Upload Subscription Key'),
 		    handler: function() {
-			var win = Ext.create('PVE.node.SubscriptionKeyEdit', {
+			let win = Ext.create('PVE.node.SubscriptionKeyEdit', {
 			    url: '/api2/extjs/' + baseurl,
 			});
 			win.show();
diff --git a/www/manager6/node/Summary.js b/www/manager6/node/Summary.js
index 8680fa5f..916a1ce5 100644
--- a/www/manager6/node/Summary.js
+++ b/www/manager6/node/Summary.js
@@ -6,14 +6,14 @@ Ext.define('PVE.node.Summary', {
     bodyPadding: 5,
 
     showVersions: function() {
-	var me = this;
+	let me = this;
 
 	// Note: we use simply text/html here, because ExtJS grid has problems
 	// with cut&paste
 
-	var nodename = me.pveSelNode.data.node;
+	let nodename = me.pveSelNode.data.node;
 
-	var view = Ext.createWidget('component', {
+	let view = Ext.createWidget('component', {
 	    autoScroll: true,
 	    id: 'pkgversions',
 	    padding: 5,
@@ -24,7 +24,7 @@ Ext.define('PVE.node.Summary', {
 	    },
 	});
 
-	var win = Ext.create('Ext.window.Window', {
+	let win = Ext.create('Ext.window.Window', {
 	    title: gettext('Package versions'),
 	    width: 600,
 	    height: 600,
@@ -109,9 +109,9 @@ Ext.define('PVE.node.Summary', {
     },
 
     initComponent: function() {
-        var me = this;
+        let me = this;
 
-	var nodename = me.pveSelNode.data.node;
+	let nodename = me.pveSelNode.data.node;
 	if (!nodename) {
 	    throw "no node name specified";
 	}
@@ -120,16 +120,16 @@ Ext.define('PVE.node.Summary', {
 	    throw "no status storage specified";
 	}
 
-	var rstore = me.statusStore;
+	let rstore = me.statusStore;
 
-	var version_btn = new Ext.Button({
+	let version_btn = new Ext.Button({
 	    text: gettext('Package versions'),
 	    handler: function() {
 		Proxmox.Utils.checked_command(function() { me.showVersions(); });
 	    },
 	});
 
-	var rrdstore = Ext.create('Proxmox.data.RRDStore', {
+	let rrdstore = Ext.create('Proxmox.data.RRDStore', {
 	    rrdurl: "/api2/json/nodes/" + nodename + "/rrddata",
 	    model: 'pve-rrd-node',
 	});
diff --git a/www/manager6/node/ZFS.js b/www/manager6/node/ZFS.js
index 5b3bdbda..f0e9e163 100644
--- a/www/manager6/node/ZFS.js
+++ b/www/manager6/node/ZFS.js
@@ -272,11 +272,11 @@ Ext.define('PVE.node.ZFSList', {
     },
 
     set_button_status: function() {
-	var me = this;
+	let me = this;
     },
 
     reload: function() {
-	var me = this;
+	let me = this;
 	me.store.load();
 	me.store.sort();
     },
diff --git a/www/manager6/panel/ConfigPanel.js b/www/manager6/panel/ConfigPanel.js
index 224bc768..af7d1716 100644
--- a/www/manager6/panel/ConfigPanel.js
+++ b/www/manager6/panel/ConfigPanel.js
@@ -78,8 +78,8 @@ Ext.define('PVE.panel.Config', {
 		    view.updateLayout();
 		},
 		itemclick: function(treelist, info) {
-		    var olditem = treelist.getSelection();
-		    var newitem = info.node;
+		    let olditem = treelist.getSelection();
+		    let newitem = info.node;
 
 		    // when clicking on the expand arrow, we don't select items, but still want the original behaviour
 		    if (info.select === false) {
@@ -111,14 +111,14 @@ Ext.define('PVE.panel.Config', {
 
     // used for automated test
     selectById: function(cardid) {
-	var me = this;
+	let me = this;
 
-	var root = me.store.getRoot();
-	var selection = root.findChild('id', cardid, true);
+	let root = me.store.getRoot();
+	let selection = root.findChild('id', cardid, true);
 
 	if (selection) {
 	    selection.expand();
-	    var menu = me.down('#menu');
+	    let menu = me.down('#menu');
 	    menu.setSelection(selection);
 	    return cardid;
 	}
@@ -126,10 +126,10 @@ Ext.define('PVE.panel.Config', {
     },
 
     activateCard: function(cardid) {
-	var me = this;
+	let me = this;
 	if (me.savedItems[cardid]) {
-	    var curcard = me.getLayout().getActiveItem();
-	    var newcard = me.add(me.savedItems[cardid]);
+	    let curcard = me.getLayout().getActiveItem();
+	    let newcard = me.add(me.savedItems[cardid]);
 	    me.helpButton.setOnlineHelp(newcard.onlineHelp || me.onlineHelp);
 	    if (curcard) {
 		me.setActiveItem(cardid);
@@ -137,7 +137,7 @@ Ext.define('PVE.panel.Config', {
 
 		// trigger state change
 
-		var ncard = cardid;
+		let ncard = cardid;
 		// Note: '' is alias for first tab.
 		// First tab can be 'search' or something else
 		if (cardid === me.firstItem) {
@@ -151,13 +151,13 @@ Ext.define('PVE.panel.Config', {
     },
 
     initComponent: function() {
-        var me = this;
+        let me = this;
 
-	var stateid = me.hstateid;
+	let stateid = me.hstateid;
 
 	me.sp = Ext.state.Manager.getProvider();
 
-	var activeTab; // leaving this undefined means items[0] will be the default tab
+	let activeTab; // leaving this undefined means items[0] will be the default tab
 
 	if (stateid) {
 	    let state = me.sp.get(stateid);
@@ -168,11 +168,11 @@ Ext.define('PVE.panel.Config', {
 	}
 
 	// get title
-	var title = me.title || me.pveSelNode.data.text;
+	let title = me.title || me.pveSelNode.data.text;
 	me.title = undefined;
 
 	// create toolbar
-	var tbar = me.tbar || [];
+	let tbar = me.tbar || [];
 	me.tbar = undefined;
 
 	if (!me.onlineHelp) {
@@ -226,7 +226,7 @@ Ext.define('PVE.panel.Config', {
 		expanded: true,
 	    },
 	});
-	var root = me.store.getRoot();
+	let root = me.store.getRoot();
 	me.insertNodes(me.items);
 
 	delete me.items;
@@ -240,9 +240,9 @@ Ext.define('PVE.panel.Config', {
 
 	me.callParent();
 
-	var menu = me.down('#menu');
-	var selection = root.findChild('id', activeTab, true) || root.firstChild;
-	var node = selection;
+	let menu = me.down('#menu');
+	let selection = root.findChild('id', activeTab, true) || root.firstChild;
+	let node = selection;
 	while (node !== root) {
 	    node.expand();
 	    node = node.parentNode;
@@ -252,13 +252,13 @@ Ext.define('PVE.panel.Config', {
 
 	// on a state change,
 	// select the new item
-	var statechange = function(sp, key, state) {
+	let statechange = function(sp, key, state) {
 	    // it the state change is for this panel
 	    if (stateid && key === stateid && state) {
 		// get active item
-		var acard = me.getLayout().getActiveItem().itemId;
+		let acard = me.getLayout().getActiveItem().itemId;
 		// get the itemid of the new value
-		var ncard = state.value || me.firstItem;
+		let ncard = state.value || me.firstItem;
 		if (ncard && acard !== ncard) {
 		    // select the chosen item
 		    menu.setSelection(root.findChild('id', ncard, true) || root.firstChild);
@@ -272,11 +272,11 @@ Ext.define('PVE.panel.Config', {
     },
 
     insertNodes: function(items) {
-	var me = this;
-	var root = me.store.getRoot();
+	let me = this;
+	let root = me.store.getRoot();
 
 	items.forEach(function(item) {
-	    var treeitem = Ext.create('Ext.data.TreeModel', {
+	    let treeitem = Ext.create('Ext.data.TreeModel', {
 		id: item.itemId,
 		text: item.title,
 		iconCls: item.iconCls,
@@ -289,14 +289,14 @@ Ext.define('PVE.panel.Config', {
 	    }
 	    me.savedItems[item.itemId] = item;
 
-	    var group;
-	    var curnode = root;
+	    let group;
+	    let curnode = root;
 
 	    // get/create the group items
 	    while (Ext.isArray(item.groups) && item.groups.length > 0) {
 		group = item.groups.shift();
 
-		var child = curnode.findChild('id', group);
+		let child = curnode.findChild('id', group);
 		if (child === null) {
 		    // did not find the group item
 		    // so add it where we are
@@ -308,7 +308,7 @@ Ext.define('PVE.panel.Config', {
 	    // insert the item
 
 	    // lets see if it already exists
-	    var node = curnode.findChild('id', item.itemId);
+	    let node = curnode.findChild('id', item.itemId);
 
 	    if (node === null) {
 		curnode.appendChild(treeitem);
diff --git a/www/manager6/panel/GuestStatusView.js b/www/manager6/panel/GuestStatusView.js
index 8db1f492..ab187038 100644
--- a/www/manager6/panel/GuestStatusView.js
+++ b/www/manager6/panel/GuestStatusView.js
@@ -4,7 +4,7 @@ Ext.define('PVE.panel.GuestStatusView', {
     mixins: ['Proxmox.Mixin.CBind'],
 
     cbindData: function(initialConfig) {
-	var me = this;
+	let me = this;
 	return {
 	    isQemu: me.pveSelNode.data.type === 'qemu',
 	    isLxc: me.pveSelNode.data.type === 'lxc',
@@ -32,9 +32,9 @@ Ext.define('PVE.panel.GuestStatusView', {
 	    printBar: false,
 	    multiField: true,
 	    renderer: function(record) {
-		var me = this;
-		var text = record.data.status;
-		var qmpstatus = record.data.qmpstatus;
+		let me = this;
+		let text = record.data.status;
+		let qmpstatus = record.data.qmpstatus;
 		if (qmpstatus && qmpstatus !== record.data.status) {
 		    text += ' (' + qmpstatus + ')';
 		}
@@ -99,7 +99,7 @@ Ext.define('PVE.panel.GuestStatusView', {
 	    maxField: 'maxdisk',
 	    printBar: false,
 	    renderer: function(used, max) {
-		var me = this;
+		let me = this;
 		me.setPrintBar(used > 0);
 		if (used === 0) {
 		    return Proxmox.Utils.render_size(max);
@@ -125,10 +125,10 @@ Ext.define('PVE.panel.GuestStatusView', {
     ],
 
     updateTitle: function() {
-	var me = this;
-	var uptime = me.getRecordValue('uptime');
+	let me = this;
+	let uptime = me.getRecordValue('uptime');
 
-	var text = "";
+	let text = "";
 	if (Number(uptime) > 0) {
 	    text = " (" + gettext('Uptime') + ': ' + Proxmox.Utils.format_duration_long(uptime)
 		+ ')';
diff --git a/www/manager6/panel/GuestSummary.js b/www/manager6/panel/GuestSummary.js
index 35721419..1094be44 100644
--- a/www/manager6/panel/GuestSummary.js
+++ b/www/manager6/panel/GuestSummary.js
@@ -6,14 +6,14 @@ Ext.define('PVE.qemu.Summary', {
     bodyPadding: 5,
 
     initComponent: function() {
-        var me = this;
+        let me = this;
 
-	var nodename = me.pveSelNode.data.node;
+	let nodename = me.pveSelNode.data.node;
 	if (!nodename) {
 	    throw "no node name specified";
 	}
 
-	var vmid = me.pveSelNode.data.vmid;
+	let vmid = me.pveSelNode.data.vmid;
 	if (!vmid) {
 	    throw "no VM ID specified";
 	}
@@ -26,11 +26,11 @@ Ext.define('PVE.qemu.Summary', {
 	    throw "no status storage specified";
 	}
 
-	var type = me.pveSelNode.data.type;
-	var template = !!me.pveSelNode.data.template;
-	var rstore = me.statusStore;
+	let type = me.pveSelNode.data.type;
+	let template = !!me.pveSelNode.data.template;
+	let rstore = me.statusStore;
 
-	var items = [
+	let items = [
 	    {
 		xtype: template ? 'pveTemplateStatusView' : 'pveGuestStatusView',
 		flex: 1,
@@ -48,7 +48,7 @@ Ext.define('PVE.qemu.Summary', {
 	    },
 	];
 
-	var rrdstore;
+	let rrdstore;
 	if (!template) {
 	    // in non-template mode put the two panels always together
 	    items = [
diff --git a/www/manager6/panel/HealthWidget.js b/www/manager6/panel/HealthWidget.js
index 3543223a..51743483 100644
--- a/www/manager6/panel/HealthWidget.js
+++ b/www/manager6/panel/HealthWidget.js
@@ -20,12 +20,12 @@ Ext.define('PVE.widget.HealthWidget', {
     ],
 
     updateHealth: function(data) {
-	var me = this;
+	let me = this;
 	me.update(Ext.apply(me.data, data));
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (me.title) {
 	    me.config.data.title = me.title;
diff --git a/www/manager6/panel/IPSet.js b/www/manager6/panel/IPSet.js
index a4606769..8d8511a7 100644
--- a/www/manager6/panel/IPSet.js
+++ b/www/manager6/panel/IPSet.js
@@ -20,7 +20,7 @@ Ext.define('PVE.IPSetList', {
     editBtn: undefined,
 
     initComponent: function() {
-        var me = this;
+        let me = this;
 
 	if (typeof me.ipset_panel === 'undefined') {
 	    throw "no rule panel specified";
@@ -30,7 +30,7 @@ Ext.define('PVE.IPSetList', {
 	    throw "no base_url specified";
 	}
 
-	var store = new Ext.data.Store({
+	let store = new Ext.data.Store({
 	    model: 'pve-fw-ipsets',
 	    proxy: {
 		type: 'proxmox',
@@ -42,13 +42,13 @@ Ext.define('PVE.IPSetList', {
 	    },
 	});
 
-	var sm = Ext.create('Ext.selection.RowModel', {});
+	let sm = Ext.create('Ext.selection.RowModel', {});
 
-	var reload = function() {
-	    var oldrec = sm.getSelection()[0];
+	let reload = function() {
+	    let oldrec = sm.getSelection()[0];
 	    store.load(function(records, operation, success) {
 		if (oldrec) {
-		    var rec = store.findRecord('name', oldrec.data.name, 0, false, true, true);
+		    let rec = store.findRecord('name', oldrec.data.name, 0, false, true, true);
 		    if (rec) {
 			sm.select(rec);
 		    }
@@ -56,12 +56,12 @@ Ext.define('PVE.IPSetList', {
 	    });
 	};
 
-	var run_editor = function() {
-	    var rec = sm.getSelection()[0];
+	let run_editor = function() {
+	    let rec = sm.getSelection()[0];
 	    if (!rec) {
 		return;
 	    }
-	    var win = Ext.create('Proxmox.window.Edit', {
+	    let win = Ext.create('Proxmox.window.Edit', {
 		subject: "IPSet '" + rec.data.name + "'",
 		url: me.base_url,
 		method: 'POST',
@@ -102,7 +102,7 @@ Ext.define('PVE.IPSetList', {
 	    text: gettext('Create'),
 	    handler: function() {
 		sm.deselectAll();
-		var win = Ext.create('Proxmox.window.Edit', {
+		let win = Ext.create('Proxmox.window.Edit', {
 		    subject: 'IPSet',
 		    url: me.base_url,
 		    method: 'POST',
@@ -144,7 +144,7 @@ Ext.define('PVE.IPSetList', {
 	    listeners: {
 		itemdblclick: run_editor,
 		select: function(_, rec) {
-		    var url = me.base_url + '/' + rec.data.name;
+		    let url = me.base_url + '/' + rec.data.name;
 		    me.ipset_panel.setBaseUrl(url);
 		},
 		deselect: function() {
@@ -166,7 +166,7 @@ Ext.define('PVE.IPSetCidrEdit', {
     cidr: undefined,
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.isCreate = me.cidr === undefined;
 
@@ -179,7 +179,7 @@ Ext.define('PVE.IPSetCidrEdit', {
             me.method = 'PUT';
         }
 
-	var column1 = [];
+	let column1 = [];
 
 	if (me.isCreate) {
 	    if (!me.list_refs_url) {
@@ -205,7 +205,7 @@ Ext.define('PVE.IPSetCidrEdit', {
 	    });
 	}
 
-	var ipanel = Ext.create('Proxmox.panel.InputPanel', {
+	let ipanel = Ext.create('Proxmox.panel.InputPanel', {
 	    isCreate: me.isCreate,
 	    column1: column1,
 	    column2: [
@@ -237,7 +237,7 @@ Ext.define('PVE.IPSetCidrEdit', {
 	if (!me.isCreate) {
 	    me.load({
 		success: function(response, options) {
-		    var values = response.result.data;
+		    let values = response.result.data;
 		    ipanel.setValues(values);
 		},
 	    });
@@ -260,7 +260,7 @@ Ext.define('PVE.IPSetGrid', {
     editBtn: undefined,
 
     setBaseUrl: function(url) {
-        var me = this;
+        let me = this;
 
 	me.base_url = url;
 
@@ -280,28 +280,28 @@ Ext.define('PVE.IPSetGrid', {
     },
 
     initComponent: function() {
-        var me = this;
+        let me = this;
 
 	if (!me.list_refs_url) {
 	    throw "no1 list_refs_url specified";
 	}
 
-	var store = new Ext.data.Store({
+	let store = new Ext.data.Store({
 	    model: 'pve-ipset',
 	});
 
-	var reload = function() {
+	let reload = function() {
 	    store.load();
 	};
 
-	var sm = Ext.create('Ext.selection.RowModel', {});
+	let sm = Ext.create('Ext.selection.RowModel', {});
 
-	var run_editor = function() {
-	    var rec = sm.getSelection()[0];
+	let run_editor = function() {
+	    let rec = sm.getSelection()[0];
 	    if (!rec) {
 		return;
 	    }
-	    var win = Ext.create('PVE.IPSetCidrEdit', {
+	    let win = Ext.create('PVE.IPSetCidrEdit', {
 		base_url: me.base_url,
 		cidr: rec.data.cidr,
 	    });
@@ -323,7 +323,7 @@ Ext.define('PVE.IPSetGrid', {
 		if (!me.base_url) {
 		    return;
 		}
-		var win = Ext.create('PVE.IPSetCidrEdit', {
+		let win = Ext.create('PVE.IPSetCidrEdit', {
 		    base_url: me.base_url,
 		    list_refs_url: me.list_refs_url,
 		});
@@ -338,13 +338,13 @@ Ext.define('PVE.IPSetGrid', {
 	    callback: reload,
 	});
 
-	var render_errors = function(value, metaData, record) {
-	    var errors = record.data.errors;
+	let render_errors = function(value, metaData, record) {
+	    let errors = record.data.errors;
 	    if (errors) {
-		var msg = errors.cidr || errors.nomatch;
+		let msg = errors.cidr || errors.nomatch;
 		if (msg) {
 		    metaData.tdCls = 'proxmox-invalid-row';
-		    var html = '<p>' + Ext.htmlEncode(msg) + '</p>';
+		    let html = '<p>' + Ext.htmlEncode(msg) + '</p>';
 		    metaData.tdAttr = 'data-qwidth=600 data-qtitle="ERROR" data-qtip="' +
 			html.replace(/"/g, '&quot;') + '"';
 		}
@@ -412,19 +412,19 @@ Ext.define('PVE.IPSet', {
     list_refs_url: undefined,
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.list_refs_url) {
 	    throw "no list_refs_url specified";
 	}
 
-	var ipset_panel = Ext.createWidget('pveIPSetGrid', {
+	let ipset_panel = Ext.createWidget('pveIPSetGrid', {
 	    region: 'center',
 	    list_refs_url: me.list_refs_url,
 	    border: false,
 	});
 
-	var ipset_list = Ext.createWidget('pveIPSetList', {
+	let ipset_list = Ext.createWidget('pveIPSetList', {
 	    region: 'west',
 	    ipset_panel: ipset_panel,
 	    base_url: me.base_url,
diff --git a/www/manager6/panel/RunningChart.js b/www/manager6/panel/RunningChart.js
index 19db8b50..d0c72934 100644
--- a/www/manager6/panel/RunningChart.js
+++ b/www/manager6/panel/RunningChart.js
@@ -117,7 +117,7 @@ Ext.define('PVE.widget.RunningChart', {
 	// we prevent a memory leak when someone has the site open for a long time
 	// with minimal graphical glitches
 	if (view.store.count() > panel.timeFrame * 20) {
-	    var oldData = view.store.getData().createFiltered(function(item) {
+	    let oldData = view.store.getData().createFiltered(function(item) {
 		return item.data.time < begin;
 	    });
 
@@ -141,7 +141,7 @@ Ext.define('PVE.widget.RunningChart', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 	me.callParent();
 
 	if (me.title) {
diff --git a/www/manager6/panel/StatusPanel.js b/www/manager6/panel/StatusPanel.js
index f9e3537b..d078b7e4 100644
--- a/www/manager6/panel/StatusPanel.js
+++ b/www/manager6/panel/StatusPanel.js
@@ -10,12 +10,12 @@ Ext.define('PVE.panel.StatusPanel', {
     //tabPosition: 'bottom',
 
     initComponent: function() {
-        var me = this;
+        let me = this;
 
-	var stateid = 'ltab';
-	var sp = Ext.state.Manager.getProvider();
+	let stateid = 'ltab';
+	let sp = Ext.state.Manager.getProvider();
 
-	var state = sp.get(stateid);
+	let state = sp.get(stateid);
 	if (state && state.value) {
 	    me.activeTab = state.value;
 	}
@@ -23,7 +23,7 @@ Ext.define('PVE.panel.StatusPanel', {
 	Ext.apply(me, {
 	    listeners: {
 		tabchange: function() {
-		    var atab = me.getActiveTab().itemId;
+		    let atab = me.getActiveTab().itemId;
 		    let tabstate = { value: atab };
 		    sp.set(stateid, tabstate);
 		},
@@ -46,9 +46,9 @@ Ext.define('PVE.panel.StatusPanel', {
 
 	me.items.get(0).fireEvent('show', me.items.get(0));
 
-	var statechange = function(_, key, newstate) {
+	let statechange = function(_, key, newstate) {
 	    if (key === stateid) {
-		var atab = me.getActiveTab().itemId;
+		let atab = me.getActiveTab().itemId;
 		let ntab = newstate.value;
 		if (newstate && ntab && atab !== ntab) {
 		    me.setActiveTab(ntab);
diff --git a/www/manager6/panel/TemplateStatusView.js b/www/manager6/panel/TemplateStatusView.js
index 4e17a41c..7cab05ed 100644
--- a/www/manager6/panel/TemplateStatusView.js
+++ b/www/manager6/panel/TemplateStatusView.js
@@ -68,9 +68,9 @@ Ext.define('PVE.panel.TemplateStatusView', {
     ],
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var name = me.pveSelNode.data.name;
+	let name = me.pveSelNode.data.name;
 	if (!name) {
 	    throw "no name specified";
 	}
diff --git a/www/manager6/pool/Config.js b/www/manager6/pool/Config.js
index 1f04ba0e..7c4c5240 100644
--- a/www/manager6/pool/Config.js
+++ b/www/manager6/pool/Config.js
@@ -5,9 +5,9 @@ Ext.define('PVE.pool.Config', {
     onlineHelp: 'pveum_pools',
 
     initComponent: function() {
-        var me = this;
+        let me = this;
 
-	var pool = me.pveSelNode.data.pool;
+	let pool = me.pveSelNode.data.pool;
 	if (!pool) {
 	    throw "no pool specified";
 	}
diff --git a/www/manager6/pool/StatusView.js b/www/manager6/pool/StatusView.js
index 302ae5ab..6f57f7b2 100644
--- a/www/manager6/pool/StatusView.js
+++ b/www/manager6/pool/StatusView.js
@@ -8,14 +8,14 @@ Ext.define('PVE.pool.StatusView', {
     interval: 30000,
     //height: 195,
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var pool = me.pveSelNode.data.pool;
+	let pool = me.pveSelNode.data.pool;
 	if (!pool) {
 	    throw "no pool specified";
 	}
 
-	var rows = {
+	let rows = {
 	    comment: {
 		header: gettext('Comment'),
 		renderer: Ext.String.htmlEncode,
diff --git a/www/manager6/pool/Summary.js b/www/manager6/pool/Summary.js
index 1a47428d..837b183f 100644
--- a/www/manager6/pool/Summary.js
+++ b/www/manager6/pool/Summary.js
@@ -3,19 +3,19 @@ Ext.define('PVE.pool.Summary', {
     alias: 'widget.pvePoolSummary',
 
     initComponent: function() {
-        var me = this;
+        let me = this;
 
-	var pool = me.pveSelNode.data.pool;
+	let pool = me.pveSelNode.data.pool;
 	if (!pool) {
 	    throw "no pool specified";
 	}
 
-	var statusview = Ext.create('PVE.pool.StatusView', {
+	let statusview = Ext.create('PVE.pool.StatusView', {
 	    pveSelNode: me.pveSelNode,
 	    style: 'padding-top:0px',
 	});
 
-	var rstore = statusview.rstore;
+	let rstore = statusview.rstore;
 
 	Ext.apply(me, {
 	    autoScroll: true,
diff --git a/www/manager6/qemu/AgentIPView.js b/www/manager6/qemu/AgentIPView.js
index 1411361a..d67852b7 100644
--- a/www/manager6/qemu/AgentIPView.js
+++ b/www/manager6/qemu/AgentIPView.js
@@ -32,10 +32,10 @@ Ext.define('PVE.window.IPInfo', {
 			if (!Ext.isArray(val)) {
 			    return '';
 			}
-			var ips = [];
+			let ips = [];
 			val.forEach(function(ip) {
-			    var addr = ip['ip-address'];
-			    var pref = ip.prefix;
+			    let addr = ip['ip-address'];
+			    let pref = ip.prefix;
 			    if (addr && pref) {
 				ips.push(addr + '/' + pref);
 			    }
@@ -89,7 +89,7 @@ Ext.define('PVE.qemu.AgentIPView', {
 		    handler: function(btn) {
 			let view = this.up('pveAgentIPView');
 
-			var win = Ext.create('PVE.window.IPInfo');
+			let win = Ext.create('PVE.window.IPInfo');
 			win.down('grid').getStore().setData(view.nics);
 			win.show();
 		    },
@@ -100,15 +100,15 @@ Ext.define('PVE.qemu.AgentIPView', {
     ],
 
     getDefaultIps: function(nics) {
-	var me = this;
-	var ips = [];
+	let me = this;
+	let ips = [];
 	nics.forEach(function(nic) {
 	    if (nic['hardware-address'] &&
 		nic['hardware-address'] !== '00:00:00:00:00:00' &&
 		nic['hardware-address'] !== '0:0:0:0:0:0') {
-		var nic_ips = nic['ip-addresses'] || [];
+		let nic_ips = nic['ip-addresses'] || [];
 		nic_ips.forEach(function(ip) {
-		    var p = ip['ip-address'];
+		    let p = ip['ip-address'];
 		    // show 2 ips at maximum
 		    if (ips.length < 2) {
 			ips.push(p);
@@ -121,17 +121,17 @@ Ext.define('PVE.qemu.AgentIPView', {
     },
 
     startIPStore: function(store, records, success) {
-	var me = this;
+	let me = this;
 	let agentRec = store.getById('agent');
 	let state = store.getById('status');
 
 	me.agent = agentRec && agentRec.data.value === 1;
 	me.running = state && state.data.value === 'running';
 
-	var caps = Ext.state.Manager.get('GuiCap');
+	let caps = Ext.state.Manager.get('GuiCap');
 
 	if (!caps.vms['VM.Monitor']) {
-	    var errorText = gettext("Requires '{0}' Privileges");
+	    let errorText = gettext("Requires '{0}' Privileges");
 	    me.updateStatus(false, Ext.String.format(errorText, 'VM.Monitor'));
 	    return;
 	}
@@ -144,15 +144,15 @@ Ext.define('PVE.qemu.AgentIPView', {
     },
 
     updateStatus: function(unsuccessful, defaulttext) {
-	var me = this;
-	var text = defaulttext || gettext('No network information');
-	var more = false;
+	let me = this;
+	let text = defaulttext || gettext('No network information');
+	let more = false;
 	if (unsuccessful) {
 	    text = gettext('Guest Agent not running');
 	} else if (me.agent && me.running) {
 	    if (Ext.isArray(me.nics) && me.nics.length) {
 		more = true;
-		var ips = me.getDefaultIps(me.nics);
+		let ips = me.getDefaultIps(me.nics);
 		if (ips.length !== 0) {
 		    text = ips.join('<br>');
 		}
@@ -165,15 +165,15 @@ Ext.define('PVE.qemu.AgentIPView', {
 	    text = gettext('No Guest Agent configured');
 	}
 
-	var ipBox = me.down('#ipBox');
+	let ipBox = me.down('#ipBox');
 	ipBox.update(text);
 
-	var moreBtn = me.down('#moreBtn');
+	let moreBtn = me.down('#moreBtn');
 	moreBtn.setVisible(more);
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.rstore) {
 	    throw 'rstore not given';
@@ -183,8 +183,8 @@ Ext.define('PVE.qemu.AgentIPView', {
 	    throw 'pveSelNode not given';
 	}
 
-	var nodename = me.pveSelNode.data.node;
-	var vmid = me.pveSelNode.data.vmid;
+	let nodename = me.pveSelNode.data.node;
+	let vmid = me.pveSelNode.data.vmid;
 
 	me.ipStore = Ext.create('Proxmox.data.UpdateStore', {
 	    interval: 10000,
diff --git a/www/manager6/qemu/AudioEdit.js b/www/manager6/qemu/AudioEdit.js
index e7861ceb..ff85c907 100644
--- a/www/manager6/qemu/AudioEdit.js
+++ b/www/manager6/qemu/AudioEdit.js
@@ -6,7 +6,7 @@ Ext.define('PVE.qemu.AudioInputPanel', {
     //onlineHelp: 'qm_audio_device',
 
     onGetValues: function(values) {
-	var ret = PVE.Parser.printPropertyString(values);
+	let ret = PVE.Parser.printPropertyString(values);
 	if (ret === '') {
 	    return {
 		'delete': 'audio0',
@@ -51,7 +51,7 @@ Ext.define('PVE.qemu.AudioEdit', {
     }],
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.callParent();
 
@@ -59,7 +59,7 @@ Ext.define('PVE.qemu.AudioEdit', {
 	    success: function(response) {
 		me.vmconfig = response.result.data;
 
-		var audio0 = me.vmconfig.audio0;
+		let audio0 = me.vmconfig.audio0;
 		if (audio0) {
 		    me.setValues(PVE.Parser.parsePropertyString(audio0));
 		}
diff --git a/www/manager6/qemu/CDEdit.js b/www/manager6/qemu/CDEdit.js
index fc7a59cc..d3b76432 100644
--- a/www/manager6/qemu/CDEdit.js
+++ b/www/manager6/qemu/CDEdit.js
@@ -5,9 +5,9 @@ Ext.define('PVE.qemu.CDInputPanel', {
     insideWizard: false,
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
-	var confid = me.confid || values.controller + values.deviceid;
+	let confid = me.confid || values.controller + values.deviceid;
 
 	me.drive.media = 'cdrom';
 	if (values.mediaType === 'iso') {
@@ -18,7 +18,7 @@ Ext.define('PVE.qemu.CDInputPanel', {
 	    me.drive.file = 'none';
 	}
 
-	var params = {};
+	let params = {};
 
 	params[confid] = PVE.Parser.printQemuDrive(me.drive);
 
@@ -26,7 +26,7 @@ Ext.define('PVE.qemu.CDInputPanel', {
     },
 
     setVMConfig: function(vmconfig) {
-	var me = this;
+	let me = this;
 
 	if (me.bussel) {
 	    me.bussel.setVMConfig(vmconfig, 'cdrom');
@@ -34,16 +34,16 @@ Ext.define('PVE.qemu.CDInputPanel', {
     },
 
     setDrive: function(drive) {
-	var me = this;
+	let me = this;
 
-	var values = {};
+	let values = {};
 	if (drive.file === 'cdrom') {
 	    values.mediaType = 'cdrom';
 	} else if (drive.file === 'none') {
 	    values.mediaType = 'none';
 	} else {
 	    values.mediaType = 'iso';
-	    var match = drive.file.match(/^([^:]+):/);
+	    let match = drive.file.match(/^([^:]+):/);
 	    if (match) {
 		values.cdstorage = match[1];
 		values.cdimage = drive.file;
@@ -56,18 +56,18 @@ Ext.define('PVE.qemu.CDInputPanel', {
     },
 
     setNodename: function(nodename) {
-	var me = this;
+	let me = this;
 
 	me.cdstoragesel.setNodename(nodename);
 	me.cdfilesel.setStorage(undefined, nodename);
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.drive = {};
 
-	var items = [];
+	let items = [];
 
 	if (!me.confid) {
 	    me.bussel = Ext.create('PVE.form.ControllerSelector', {
@@ -88,7 +88,7 @@ Ext.define('PVE.qemu.CDInputPanel', {
 			return;
 		    }
 		    me.down('field[name=cdstorage]').setDisabled(!value);
-		    var cdImageField = me.down('field[name=cdimage]');
+		    let cdImageField = me.down('field[name=cdimage]');
 		    cdImageField.setDisabled(!value);
 		    if (value) {
 			cdImageField.validate();
@@ -152,16 +152,16 @@ Ext.define('PVE.qemu.CDEdit', {
     width: 400,
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var nodename = me.pveSelNode.data.node;
+	let nodename = me.pveSelNode.data.node;
 	if (!nodename) {
 	    throw "no node name specified";
 	}
 
 	me.isCreate = !me.confid;
 
-	var ipanel = Ext.create('PVE.qemu.CDInputPanel', {
+	let ipanel = Ext.create('PVE.qemu.CDInputPanel', {
 	    confid: me.confid,
 	    nodename: nodename,
 	});
@@ -177,8 +177,8 @@ Ext.define('PVE.qemu.CDEdit', {
 	    success: function(response, options) {
 		ipanel.setVMConfig(response.result.data);
 		if (me.confid) {
-		    var value = response.result.data[me.confid];
-		    var drive = PVE.Parser.parseQemuDrive(me.confid, value);
+		    let value = response.result.data[me.confid];
+		    let drive = PVE.Parser.parseQemuDrive(me.confid, value);
 		    if (!drive) {
 			Ext.Msg.alert('Error', 'Unable to parse drive options');
 			me.close();
diff --git a/www/manager6/qemu/CIDriveEdit.js b/www/manager6/qemu/CIDriveEdit.js
index a9ca8bf1..90d8aa8b 100644
--- a/www/manager6/qemu/CIDriveEdit.js
+++ b/www/manager6/qemu/CIDriveEdit.js
@@ -7,10 +7,10 @@ Ext.define('PVE.qemu.CIDriveInputPanel', {
     vmconfig: {}, // used to select usused disks
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
-	var drive = {};
-	var params = {};
+	let drive = {};
+	let params = {};
 	drive.file = values.hdstorage + ":cloudinit";
 	drive.format = values.diskformat;
 	params[values.controller + values.deviceid] = PVE.Parser.printQemuDrive(drive);
@@ -18,18 +18,18 @@ Ext.define('PVE.qemu.CIDriveInputPanel', {
     },
 
     setNodename: function(nodename) {
-	var me = this;
+	let me = this;
 	me.down('#hdstorage').setNodename(nodename);
 	me.down('#hdimage').setStorage(undefined, nodename);
     },
 
     setVMConfig: function(config) {
-	var me = this;
+	let me = this;
 	me.down('#drive').setVMConfig(config, 'cdrom');
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.drive = {};
 
@@ -61,9 +61,9 @@ Ext.define('PVE.qemu.CIDriveEdit', {
     subject: gettext('CloudInit Drive'),
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var nodename = me.pveSelNode.data.node;
+	let nodename = me.pveSelNode.data.node;
 	if (!nodename) {
 	    throw "no node name specified";
 	}
diff --git a/www/manager6/qemu/CloudInit.js b/www/manager6/qemu/CloudInit.js
index 77ff93d4..dd283360 100644
--- a/www/manager6/qemu/CloudInit.js
+++ b/www/manager6/qemu/CloudInit.js
@@ -11,17 +11,17 @@ Ext.define('PVE.qemu.CloudInit', {
 	    dangerous: true,
 	    confirmMsg: function(rec) {
 		let view = this.up('grid');
-		var warn = gettext('Are you sure you want to remove entry {0}');
+		let warn = gettext('Are you sure you want to remove entry {0}');
 
-		var entry = rec.data.key;
-		var msg = Ext.String.format(warn, "'"
+		let entry = rec.data.key;
+		let msg = Ext.String.format(warn, "'"
 		    + view.renderKey(entry, {}, rec) + "'");
 
 		return msg;
 	    },
 	    enableFn: function(record) {
 		let view = this.up('grid');
-		var caps = Ext.state.Manager.get('GuiCap');
+		let caps = Ext.state.Manager.get('GuiCap');
 		if (view.rows[record.data.key].never_delete ||
 		    !caps.vms['VM.Config.Network']) {
 		    return false;
@@ -39,13 +39,13 @@ Ext.define('PVE.qemu.CloudInit', {
 		    return;
 		}
 
-		var id = records[0].data.key;
-		var match = id.match(/^net(\d+)$/);
+		let id = records[0].data.key;
+		let match = id.match(/^net(\d+)$/);
 		if (match) {
 		    id = 'ipconfig' + match[1];
 		}
 
-		var params = {};
+		let params = {};
 		params.delete = id;
 		Proxmox.Utils.API2Request({
 		    url: view.baseurl + '/config',
@@ -82,18 +82,18 @@ Ext.define('PVE.qemu.CloudInit', {
 	    text: gettext('Regenerate Image'),
 	    handler: function() {
 		let view = this.up('grid');
-		var eject_params = {};
-		var insert_params = {};
+		let eject_params = {};
+		let insert_params = {};
 		let disk = PVE.Parser.parseQemuDrive(view.ciDriveId, view.ciDrive);
-		var storage = '';
-		var stormatch = disk.file.match(/^([^:]+):/);
+		let storage = '';
+		let stormatch = disk.file.match(/^([^:]+):/);
 		if (stormatch) {
 		    storage = stormatch[1];
 		}
 		eject_params[view.ciDriveId] = 'none,media=cdrom';
 		insert_params[view.ciDriveId] = storage + ':cloudinit';
 
-		var failure = function(response, opts) {
+		let failure = function(response, opts) {
 		    Ext.Msg.alert('Error', response.htmlStatus);
 		};
 
@@ -126,15 +126,15 @@ Ext.define('PVE.qemu.CloudInit', {
 	if (!success || records.length < 1) {
 	    return;
 	}
-	var me = this;
-	var found;
+	let me = this;
+	let found;
 	records.forEach(function(record) {
 	    if (found) {
 		return;
 	    }
-	    var id = record.data.key;
-	    var value = record.data.value;
-	    var ciregex = new RegExp("vm-" + me.pveSelNode.data.vmid + "-cloudinit");
+	    let id = record.data.key;
+	    let value = record.data.value;
+	    let ciregex = new RegExp("vm-" + me.pveSelNode.data.vmid + "-cloudinit");
 		if (id.match(/^(ide|scsi|sata)\d+$/) && ciregex.test(value)) {
 		    found = id;
 		    me.ciDriveId = found;
@@ -152,11 +152,11 @@ Ext.define('PVE.qemu.CloudInit', {
     },
 
     renderKey: function(key, metaData, rec, rowIndex, colIndex, store) {
-	var me = this;
-	var rows = me.rows;
-	var rowdef = rows[key] || {};
+	let me = this;
+	let rows = me.rows;
+	let rowdef = rows[key] || {};
 
-	var icon = "";
+	let icon = "";
 	if (rowdef.iconCls) {
 	    icon = '<i class="' + rowdef.iconCls + '"></i> ';
 	}
@@ -165,28 +165,28 @@ Ext.define('PVE.qemu.CloudInit', {
 
     listeners: {
 	activate: function() {
-	    var me = this;
+	    let me = this;
 	    me.rstore.startUpdate();
 	},
 	itemdblclick: function() {
-	    var me = this;
+	    let me = this;
 	    me.run_editor();
 	},
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var nodename = me.pveSelNode.data.node;
+	let nodename = me.pveSelNode.data.node;
 	if (!nodename) {
 	    throw "no node name specified";
 	}
 
-	var vmid = me.pveSelNode.data.vmid;
+	let vmid = me.pveSelNode.data.vmid;
 	if (!vmid) {
 	    throw "no VM ID specified";
 	}
-	var caps = Ext.state.Manager.get('GuiCap');
+	let caps = Ext.state.Manager.get('GuiCap');
 	me.baseurl = '/api2/extjs/nodes/' + nodename + '/qemu/' + vmid;
 	me.url = me.baseurl + '/pending';
 	me.editorConfig.url = me.baseurl + '/config';
@@ -260,8 +260,8 @@ Ext.define('PVE.qemu.CloudInit', {
 		never_delete: true,
 		renderer: function(value) {
 		    value = decodeURIComponent(value);
-		    var keys = value.split('\n');
-		    var text = [];
+		    let keys = value.split('\n');
+		    let text = [];
 		    keys.forEach(function(key) {
 			if (key.length) {
 			    let res = PVE.Parser.parseSSHKey(key);
@@ -287,11 +287,11 @@ Ext.define('PVE.qemu.CloudInit', {
 		defaultValue: '',
 	    },
 	};
-	var i;
-	var ipconfig_renderer = function(value, md, record, ri, ci, store, pending) {
-	    var id = record.data.key;
-	    var match = id.match(/^net(\d+)$/);
-	    var val = '';
+	let i;
+	let ipconfig_renderer = function(value, md, record, ri, ci, store, pending) {
+	    let id = record.data.key;
+	    let match = id.match(/^net(\d+)$/);
+	    let val = '';
 	    if (match) {
 		val = me.getObjectValue('ipconfig'+match[1], '', pending);
 	    }
diff --git a/www/manager6/qemu/Config.js b/www/manager6/qemu/Config.js
index 9fe933df..20767991 100644
--- a/www/manager6/qemu/Config.js
+++ b/www/manager6/qemu/Config.js
@@ -5,33 +5,33 @@ Ext.define('PVE.qemu.Config', {
     onlineHelp: 'chapter_virtual_machines',
 
     initComponent: function() {
-        var me = this;
-	var vm = me.pveSelNode.data;
+        let me = this;
+	let vm = me.pveSelNode.data;
 
-	var nodename = vm.node;
+	let nodename = vm.node;
 	if (!nodename) {
 	    throw "no node name specified";
 	}
 
-	var vmid = vm.vmid;
+	let vmid = vm.vmid;
 	if (!vmid) {
 	    throw "no VM ID specified";
 	}
 
-	var template = !!vm.template;
+	let template = !!vm.template;
 
-	var running = !!vm.uptime;
+	let running = !!vm.uptime;
 
-	var caps = Ext.state.Manager.get('GuiCap');
+	let caps = Ext.state.Manager.get('GuiCap');
 
-	var base_url = '/nodes/' + nodename + "/qemu/" + vmid;
+	let base_url = '/nodes/' + nodename + "/qemu/" + vmid;
 
 	me.statusStore = Ext.create('Proxmox.data.ObjectStore', {
 	    url: '/api2/json' + base_url + '/status/current',
 	    interval: 1000,
 	});
 
-	var vm_command = function(cmd, params) {
+	let vm_command = function(cmd, params) {
 	    Proxmox.Utils.API2Request({
 		params: params,
 		url: base_url + '/status/' + cmd,
@@ -43,7 +43,7 @@ Ext.define('PVE.qemu.Config', {
 	    });
 	};
 
-	var resumeBtn = Ext.create('Ext.Button', {
+	let resumeBtn = Ext.create('Ext.Button', {
 	    text: gettext('Resume'),
 	    disabled: !caps.vms['VM.PowerMgmt'],
 	    hidden: true,
@@ -53,7 +53,7 @@ Ext.define('PVE.qemu.Config', {
 	    iconCls: 'fa fa-play',
 	});
 
-	var startBtn = Ext.create('Ext.Button', {
+	let startBtn = Ext.create('Ext.Button', {
 	    text: gettext('Start'),
 	    disabled: !caps.vms['VM.PowerMgmt'] || running,
 	    hidden: template,
@@ -63,12 +63,12 @@ Ext.define('PVE.qemu.Config', {
 	    iconCls: 'fa fa-play',
 	});
 
-	var migrateBtn = Ext.create('Ext.Button', {
+	let migrateBtn = Ext.create('Ext.Button', {
 	    text: gettext('Migrate'),
 	    disabled: !caps.vms['VM.Migrate'],
 	    hidden: PVE.data.ResourceStore.getNodes().length < 2,
 	    handler: function() {
-		var win = Ext.create('PVE.window.Migrate', {
+		let win = Ext.create('PVE.window.Migrate', {
 		    vmtype: 'qemu',
 		    nodename: nodename,
 		    vmid: vmid,
@@ -78,7 +78,7 @@ Ext.define('PVE.qemu.Config', {
 	    iconCls: 'fa fa-send-o',
 	});
 
-	var moreBtn = Ext.create('Proxmox.button.Button', {
+	let moreBtn = Ext.create('Proxmox.button.Button', {
 	    text: gettext('More'),
 	    menu: {
  items: [
@@ -113,7 +113,7 @@ Ext.define('PVE.qemu.Config', {
 		    hidden: !caps.nodes['Sys.Console'],
 		    text: gettext('Manage HA'),
 		    handler: function() {
-			var ha = vm.hastate;
+			let ha = vm.hastate;
 			Ext.create('PVE.ha.VMResourceEdit', {
 			    vmid: vmid,
 			    isCreate: !ha || ha === 'unmanaged',
@@ -137,7 +137,7 @@ Ext.define('PVE.qemu.Config', {
 },
 	});
 
-	var shutdownBtn = Ext.create('PVE.button.Split', {
+	let shutdownBtn = Ext.create('PVE.button.Split', {
 	    text: gettext('Shutdown'),
 	    disabled: !caps.vms['VM.PowerMgmt'] || !running,
 	    hidden: template,
@@ -196,7 +196,7 @@ Ext.define('PVE.qemu.Config', {
 	    iconCls: 'fa fa-power-off',
 	});
 
-	var consoleBtn = Ext.create('PVE.button.ConsoleButton', {
+	let consoleBtn = Ext.create('PVE.button.ConsoleButton', {
 	    disabled: !caps.vms['VM.Console'],
 	    hidden: template,
 	    consoleType: 'kvm',
@@ -208,7 +208,7 @@ Ext.define('PVE.qemu.Config', {
 	    vmid: vmid,
 	});
 
-	var statusTxt = Ext.create('Ext.toolbar.TextItem', {
+	let statusTxt = Ext.create('Ext.toolbar.TextItem', {
 	    data: {
 		lock: undefined,
 	    },
@@ -375,18 +375,18 @@ Ext.define('PVE.qemu.Config', {
 
 	me.callParent();
 
-	var prevQMPStatus = 'unknown';
+	let prevQMPStatus = 'unknown';
         me.mon(me.statusStore, 'load', function(s, records, success) {
-	    var status;
-	    var qmpstatus;
-	    var spice = false;
-	    var xtermjs = false;
-	    var lock;
+	    let status;
+	    let qmpstatus;
+	    let spice = false;
+	    let xtermjs = false;
+	    let lock;
 
 	    if (!success) {
 		status = qmpstatus = 'unknown';
 	    } else {
-		var rec = s.data.get('status');
+		let rec = s.data.get('status');
 		status = rec ? rec.data.value : 'unknown';
 		rec = s.data.get('qmpstatus');
 		qmpstatus = rec ? rec.data.value : 'unknown';
@@ -403,7 +403,7 @@ Ext.define('PVE.qemu.Config', {
 		return;
 	    }
 
-	    var resume = ['prelaunch', 'paused', 'suspended'].indexOf(qmpstatus) !== -1;
+	    let resume = ['prelaunch', 'paused', 'suspended'].indexOf(qmpstatus) !== -1;
 
 	    if (resume || lock === 'suspended') {
 		startBtn.setVisible(false);
diff --git a/www/manager6/qemu/CreateWizard.js b/www/manager6/qemu/CreateWizard.js
index a785a882..8232113f 100644
--- a/www/manager6/qemu/CreateWizard.js
+++ b/www/manager6/qemu/CreateWizard.js
@@ -107,7 +107,7 @@ Ext.define('PVE.qemu.CreateWizard', {
 		    }
 		});
 
-		var res = PVE.Parser.printStartup({
+		let res = PVE.Parser.printStartup({
 		    order: values.order,
 		    up: values.up,
 		    down: values.down,
@@ -208,8 +208,8 @@ Ext.define('PVE.qemu.CreateWizard', {
 	    ],
 	    listeners: {
 		show: function(panel) {
-		    var kv = this.up('window').getValues();
-		    var data = [];
+		    let kv = this.up('window').getValues();
+		    let data = [];
 		    Ext.Object.each(kv, function(key, value) {
 			if (key === 'delete') { // ignore
 			    return;
@@ -217,7 +217,7 @@ Ext.define('PVE.qemu.CreateWizard', {
 			data.push({ key: key, value: value });
 		    });
 
-		    var summarystore = panel.down('grid').getStore();
+		    let summarystore = panel.down('grid').getStore();
 		    summarystore.suspendEvents();
 		    summarystore.removeAll();
 		    summarystore.add(data);
@@ -227,11 +227,11 @@ Ext.define('PVE.qemu.CreateWizard', {
 		},
 	    },
 	    onSubmit: function() {
-		var wizard = this.up('window');
-		var kv = wizard.getValues();
+		let wizard = this.up('window');
+		let kv = wizard.getValues();
 		delete kv.delete;
 
-		var nodename = kv.nodename;
+		let nodename = kv.nodename;
 		delete kv.nodename;
 
 		Proxmox.Utils.API2Request({
diff --git a/www/manager6/qemu/HDEdit.js b/www/manager6/qemu/HDEdit.js
index 4e4d6aac..d7ccb774 100644
--- a/www/manager6/qemu/HDEdit.js
+++ b/www/manager6/qemu/HDEdit.js
@@ -49,14 +49,14 @@ Ext.define('PVE.qemu.HDInputPanel', {
 		    if (!this.getView().insideWizard) {
 			return;
 		    }
-		    var vmScsiType = value ? 'virtio-scsi-single': 'virtio-scsi-pci';
+		    let vmScsiType = value ? 'virtio-scsi-single': 'virtio-scsi-pci';
 		    this.lookupReference('scsiController').setValue(vmScsiType);
 		},
 	    },
 	},
 
 	init: function(view) {
-	    var vm = this.getViewModel();
+	    let vm = this.getViewModel();
 	    if (view.isCreate) {
 		vm.set('isIncludedInBackup', true);
 	    }
@@ -68,10 +68,10 @@ Ext.define('PVE.qemu.HDInputPanel', {
     },
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
-	var params = {};
-	var confid = me.confid || values.controller + values.deviceid;
+	let params = {};
+	let confid = me.confid || values.controller + values.deviceid;
 
 	if (me.unused) {
 	    me.drive.file = me.vmconfig[values.unusedId];
@@ -106,13 +106,13 @@ Ext.define('PVE.qemu.HDInputPanel', {
     },
 
     updateVMConfig: function(vmconfig) {
-	var me = this;
+	let me = this;
 	me.vmconfig = vmconfig;
 	me.bussel?.updateVMConfig(vmconfig);
     },
 
     setVMConfig: function(vmconfig) {
-	var me = this;
+	let me = this;
 
 	me.vmconfig = vmconfig;
 
@@ -121,7 +121,7 @@ Ext.define('PVE.qemu.HDInputPanel', {
 	    me.scsiController.setValue(vmconfig.scsihw);
 	}
 	if (me.unusedDisks) {
-	    var disklist = [];
+	    let disklist = [];
 	    Ext.Object.each(vmconfig, function(key, value) {
 		if (key.match(/^unused\d+$/)) {
 		    disklist.push([key, value]);
@@ -133,12 +133,12 @@ Ext.define('PVE.qemu.HDInputPanel', {
     },
 
     setDrive: function(drive) {
-	var me = this;
+	let me = this;
 
 	me.drive = drive;
 
-	var values = {};
-	var match = drive.file.match(/^([^:]+):/);
+	let values = {};
+	let match = drive.file.match(/^([^:]+):/);
 	if (match) {
 	    values.hdstorage = match[1];
 	}
@@ -167,7 +167,7 @@ Ext.define('PVE.qemu.HDInputPanel', {
     },
 
     setNodename: function(nodename) {
-	var me = this;
+	let me = this;
 	me.down('#hdstorage').setNodename(nodename);
 	me.down('#hdimage').setStorage(undefined, nodename);
     },
@@ -175,7 +175,7 @@ Ext.define('PVE.qemu.HDInputPanel', {
     hasAdvanced: true,
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.drive = {};
 
@@ -448,18 +448,18 @@ Ext.define('PVE.qemu.HDEdit', {
     bodyPadding: 0,
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var nodename = me.pveSelNode.data.node;
+	let nodename = me.pveSelNode.data.node;
 	if (!nodename) {
 	    throw "no node name specified";
 	}
 
-	var unused = me.confid && me.confid.match(/^unused\d+$/);
+	let unused = me.confid && me.confid.match(/^unused\d+$/);
 
 	me.isCreate = me.confid ? unused : true;
 
-	var ipanel = Ext.create('PVE.qemu.HDInputPanel', {
+	let ipanel = Ext.create('PVE.qemu.HDInputPanel', {
 	    confid: me.confid,
 	    nodename: nodename,
 	    unused: unused,
@@ -484,8 +484,8 @@ Ext.define('PVE.qemu.HDEdit', {
 	    success: function(response, options) {
 		ipanel.setVMConfig(response.result.data);
 		if (me.confid) {
-		    var value = response.result.data[me.confid];
-		    var drive = PVE.Parser.parseQemuDrive(me.confid, value);
+		    let value = response.result.data[me.confid];
+		    let drive = PVE.Parser.parseQemuDrive(me.confid, value);
 		    if (!drive) {
 			Ext.Msg.alert(gettext('Error'), 'Unable to parse drive options');
 			me.close();
diff --git a/www/manager6/qemu/HDEfi.js b/www/manager6/qemu/HDEfi.js
index a8ca8f56..c331bb32 100644
--- a/www/manager6/qemu/HDEfi.js
+++ b/www/manager6/qemu/HDEfi.js
@@ -9,13 +9,13 @@ Ext.define('PVE.qemu.EFIDiskInputPanel', {
     vmconfig: {}, // used to select usused disks
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
 	if (me.disabled) {
 	    return {};
 	}
 
-	var confid = 'efidisk0';
+	let confid = 'efidisk0';
 
 	if (values.hdimage) {
 	    me.drive.file = values.hdimage;
@@ -37,7 +37,7 @@ Ext.define('PVE.qemu.EFIDiskInputPanel', {
     },
 
     setNodename: function(nodename) {
-	var me = this;
+	let me = this;
 	me.down('#hdstorage').setNodename(nodename);
 	me.down('#hdimage').setStorage(undefined, nodename);
     },
@@ -50,7 +50,7 @@ Ext.define('PVE.qemu.EFIDiskInputPanel', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.drive = {};
 
@@ -96,9 +96,9 @@ Ext.define('PVE.qemu.EFIDiskEdit', {
 
     width: 450,
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var nodename = me.pveSelNode.data.node;
+	let nodename = me.pveSelNode.data.node;
 	if (!nodename) {
 	    throw "no node name specified";
 	}
diff --git a/www/manager6/qemu/HDResize.js b/www/manager6/qemu/HDResize.js
index f9c7290d..b11aea31 100644
--- a/www/manager6/qemu/HDResize.js
+++ b/www/manager6/qemu/HDResize.js
@@ -4,8 +4,8 @@ Ext.define('PVE.window.HDResize', {
     resizable: false,
 
     resize_disk: function(disk, size) {
-	var me = this;
-        var params = { disk: disk, size: '+' + size + 'G' };
+	let me = this;
+        let params = { disk: disk, size: '+' + size + 'G' };
 
 	Proxmox.Utils.API2Request({
 	    params: params,
@@ -22,7 +22,7 @@ Ext.define('PVE.window.HDResize', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.nodename) {
 	    throw "no node name specified";
@@ -32,7 +32,7 @@ Ext.define('PVE.window.HDResize', {
 	    throw "no VM ID specified";
 	}
 
-	var items = [
+	let items = [
 	    {
 		xtype: 'displayfield',
 		name: 'disk',
@@ -65,16 +65,16 @@ Ext.define('PVE.window.HDResize', {
 	    items: items,
 	});
 
-	var form = me.formPanel.getForm();
+	let form = me.formPanel.getForm();
 
-	var submitBtn;
+	let submitBtn;
 
 	me.title = gettext('Resize disk');
 	submitBtn = Ext.create('Ext.Button', {
 	    text: gettext('Resize disk'),
 	    handler: function() {
 		if (form.isValid()) {
-		    var values = form.getValues();
+		    let values = form.getValues();
 		    me.resize_disk(me.disk, values.size);
 		}
 	    },
diff --git a/www/manager6/qemu/HDTPM.js b/www/manager6/qemu/HDTPM.js
index 87349aed..3c6034e4 100644
--- a/www/manager6/qemu/HDTPM.js
+++ b/www/manager6/qemu/HDTPM.js
@@ -6,13 +6,13 @@ Ext.define('PVE.qemu.TPMDiskInputPanel', {
     vmconfig: {},
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
 	if (me.disabled) {
 	    return {};
 	}
 
-	var confid = 'tpmstate0';
+	let confid = 'tpmstate0';
 
 	if (values.hdimage) {
 	    me.drive.file = values.hdimage;
@@ -22,13 +22,13 @@ Ext.define('PVE.qemu.TPMDiskInputPanel', {
 	}
 
 	me.drive.version = values.version;
-	var params = {};
+	let params = {};
 	params[confid] = PVE.Parser.printQemuDrive(me.drive);
 	return params;
     },
 
     setNodename: function(nodename) {
-	var me = this;
+	let me = this;
 	me.down('#hdstorage').setNodename(nodename);
 	me.down('#hdimage').setStorage(undefined, nodename);
     },
@@ -41,7 +41,7 @@ Ext.define('PVE.qemu.TPMDiskInputPanel', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.drive = {};
 
@@ -82,9 +82,9 @@ Ext.define('PVE.qemu.TPMDiskEdit', {
 
     width: 450,
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var nodename = me.pveSelNode.data.node;
+	let nodename = me.pveSelNode.data.node;
 	if (!nodename) {
 	    throw "no node name specified";
 	}
diff --git a/www/manager6/qemu/HardwareView.js b/www/manager6/qemu/HardwareView.js
index 6e9d03b4..5180f0aa 100644
--- a/www/manager6/qemu/HardwareView.js
+++ b/www/manager6/qemu/HardwareView.js
@@ -5,17 +5,17 @@ Ext.define('PVE.qemu.HardwareView', {
     onlineHelp: 'qm_virtual_machines_settings',
 
     renderKey: function(key, metaData, rec, rowIndex, colIndex, store) {
-	var me = this;
-	var rows = me.rows;
-	var rowdef = rows[key] || {};
-	var iconCls = rowdef.iconCls;
-	var icon = '';
-	var txt = rowdef.header || key;
+	let me = this;
+	let rows = me.rows;
+	let rowdef = rows[key] || {};
+	let iconCls = rowdef.iconCls;
+	let icon = '';
+	let txt = rowdef.header || key;
 
 	metaData.tdAttr = "valign=middle";
 
 	if (rowdef.isOnStorageBus) {
-	    var value = me.getObjectValue(key, '', false);
+	    let value = me.getObjectValue(key, '', false);
 	    if (value === '') {
 		value = me.getObjectValue(key, '', true);
 	    }
@@ -44,7 +44,7 @@ Ext.define('PVE.qemu.HardwareView', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	const { node: nodename, vmid } = me.pveSelNode.data;
 	if (!nodename) {
@@ -69,11 +69,11 @@ Ext.define('PVE.qemu.HardwareView', {
 		group: 2,
 		multiKey: ['memory', 'balloon', 'shares'],
 		renderer: function(value, metaData, record, ri, ci, store, pending) {
-		    var res = '';
+		    let res = '';
 
-		    var max = me.getObjectValue('memory', 512, pending);
-		    var balloon = me.getObjectValue('balloon', undefined, pending);
-		    var shares = me.getObjectValue('shares', undefined, pending);
+		    let max = me.getObjectValue('memory', 512, pending);
+		    let balloon = me.getObjectValue('balloon', undefined, pending);
+		    let shares = me.getObjectValue('shares', undefined, pending);
 
 		    res = Proxmox.Utils.format_size(max*1024*1024);
 
@@ -99,13 +99,13 @@ Ext.define('PVE.qemu.HardwareView', {
 		defaultValue: '1',
 		multiKey: ['sockets', 'cpu', 'cores', 'numa', 'vcpus', 'cpulimit', 'cpuunits'],
 		renderer: function(value, metaData, record, rowIndex, colIndex, store, pending) {
-		    var sockets = me.getObjectValue('sockets', 1, pending);
-		    var model = me.getObjectValue('cpu', undefined, pending);
-		    var cores = me.getObjectValue('cores', 1, pending);
-		    var numa = me.getObjectValue('numa', undefined, pending);
-		    var vcpus = me.getObjectValue('vcpus', undefined, pending);
-		    var cpulimit = me.getObjectValue('cpulimit', undefined, pending);
-		    var cpuunits = me.getObjectValue('cpuunits', undefined, pending);
+		    let sockets = me.getObjectValue('sockets', 1, pending);
+		    let model = me.getObjectValue('cpu', undefined, pending);
+		    let cores = me.getObjectValue('cores', 1, pending);
+		    let numa = me.getObjectValue('numa', undefined, pending);
+		    let vcpus = me.getObjectValue('vcpus', undefined, pending);
+		    let cpulimit = me.getObjectValue('cpulimit', undefined, pending);
+		    let cpuunits = me.getObjectValue('cpuunits', undefined, pending);
 
 		    let res = Ext.String.format(
 		        '{0} ({1} sockets, {2} cores)', sockets * cores, sockets, cores);
@@ -304,13 +304,13 @@ Ext.define('PVE.qemu.HardwareView', {
 	    header: gettext("VirtIO RNG"),
 	};
 
-	var sorterFn = function(rec1, rec2) {
-	    var v1 = rec1.data.key;
-	    var v2 = rec2.data.key;
-	    var g1 = rows[v1].group || 0;
-	    var g2 = rows[v2].group || 0;
-	    var order1 = rows[v1].order || 0;
-	    var order2 = rows[v2].order || 0;
+	let sorterFn = function(rec1, rec2) {
+	    let v1 = rec1.data.key;
+	    let v2 = rec2.data.key;
+	    let g1 = rows[v1].group || 0;
+	    let g2 = rows[v2].group || 0;
+	    let order1 = rows[v1].order || 0;
+	    let order2 = rows[v2].order || 0;
 
 	    if (g1 - g2 !== 0) {
 		return g1 - g2;
@@ -506,14 +506,14 @@ Ext.define('PVE.qemu.HardwareView', {
 		render: function(btn) {
 		    // hack: calculate the max button width on first display to prevent the whole
 		    // toolbar to move when we switch between the "Remove" and "Detach" labels
-		    var def = btn.getSize().width;
+		    let def = btn.getSize().width;
 
 		    btn.setText(btn.altText);
-		    var alt = btn.getSize().width;
+		    let alt = btn.getSize().width;
 
 		    btn.setText(btn.defaultText);
 
-		    var optimal = alt > def ? alt : def;
+		    let optimal = alt > def ? alt : def;
 		    btn.setSize({ width: optimal });
 		},
 	    },
diff --git a/www/manager6/qemu/IPConfigEdit.js b/www/manager6/qemu/IPConfigEdit.js
index 829240c2..b42f5816 100644
--- a/www/manager6/qemu/IPConfigEdit.js
+++ b/www/manager6/qemu/IPConfigEdit.js
@@ -7,7 +7,7 @@ Ext.define('PVE.qemu.IPConfigPanel', {
     vmconfig: {},
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
 	if (values.ipv4mode !== 'static') {
 	    values.ip = values.ipv4mode;
@@ -17,9 +17,9 @@ Ext.define('PVE.qemu.IPConfigPanel', {
 	    values.ip6 = values.ipv6mode;
 	}
 
-	var params = {};
+	let params = {};
 
-	var cfg = PVE.Parser.printIPConfig(values);
+	let cfg = PVE.Parser.printIPConfig(values);
 	if (cfg === '') {
 	    params.delete = [me.confid];
 	} else {
@@ -29,12 +29,12 @@ Ext.define('PVE.qemu.IPConfigPanel', {
     },
 
     setVMConfig: function(config) {
-	var me = this;
+	let me = this;
 	me.vmconfig = config;
     },
 
     setIPConfig: function(confid, data) {
-	var me = this;
+	let me = this;
 
 	me.confid = confid;
 
@@ -56,7 +56,7 @@ Ext.define('PVE.qemu.IPConfigPanel', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.ipconfig = {};
 
@@ -196,23 +196,23 @@ Ext.define('PVE.qemu.IPConfigEdit', {
     isAdd: true,
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	// convert confid from netX to ipconfigX
-	var match = me.confid.match(/^net(\d+)$/);
+	let match = me.confid.match(/^net(\d+)$/);
 	if (match) {
 	    me.netid = me.confid;
 	    me.confid = 'ipconfig' + match[1];
 	}
 
-	var nodename = me.pveSelNode.data.node;
+	let nodename = me.pveSelNode.data.node;
 	if (!nodename) {
 	    throw "no node name specified";
 	}
 
 	me.isCreate = !me.confid;
 
-	var ipanel = Ext.create('PVE.qemu.IPConfigPanel', {
+	let ipanel = Ext.create('PVE.qemu.IPConfigPanel', {
 	    confid: me.confid,
 	    netid: me.netid,
 	    nodename: nodename,
@@ -228,8 +228,8 @@ Ext.define('PVE.qemu.IPConfigEdit', {
 	me.load({
 	    success: function(response, options) {
 		me.vmconfig = response.result.data;
-		var ipconfig = {};
-		var value = me.vmconfig[me.confid];
+		let ipconfig = {};
+		let value = me.vmconfig[me.confid];
 		if (value) {
 		    ipconfig = PVE.Parser.parseIPConfig(me.confid, value);
 		    if (!ipconfig) {
diff --git a/www/manager6/qemu/KeyboardEdit.js b/www/manager6/qemu/KeyboardEdit.js
index da7b56c0..461f3c0b 100644
--- a/www/manager6/qemu/KeyboardEdit.js
+++ b/www/manager6/qemu/KeyboardEdit.js
@@ -2,7 +2,7 @@ Ext.define('PVE.qemu.KeyboardEdit', {
     extend: 'Proxmox.window.Edit',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	Ext.applyIf(me, {
 	    subject: gettext('Keyboard Layout'),
diff --git a/www/manager6/qemu/MemoryEdit.js b/www/manager6/qemu/MemoryEdit.js
index 5e91dc9b..4723f3a1 100644
--- a/www/manager6/qemu/MemoryEdit.js
+++ b/www/manager6/qemu/MemoryEdit.js
@@ -32,9 +32,9 @@ Ext.define('PVE.qemu.MemoryInputPanel', {
     },
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
-	var res = {};
+	let res = {};
 
 	res.memory = values.memory;
 	res.balloon = values.balloon;
@@ -55,8 +55,8 @@ Ext.define('PVE.qemu.MemoryInputPanel', {
     },
 
     initComponent: function() {
-	var me = this;
-	var labelWidth = 160;
+	let me = this;
+	let labelWidth = 160;
 
 	me.items= [
 	    {
@@ -70,8 +70,8 @@ Ext.define('PVE.qemu.MemoryInputPanel', {
 		hotplug: me.hotplug,
 		listeners: {
 		    change: function(f, value, old) {
-			var bf = me.down('field[name=balloon]');
-			var balloon = bf.getValue();
+			let bf = me.down('field[name=balloon]');
+			let balloon = bf.getValue();
 			bf.setMaxValue(value);
 			if (balloon === old) {
 			    bf.setValue(value);
@@ -96,8 +96,8 @@ Ext.define('PVE.qemu.MemoryInputPanel', {
 		allowBlank: false,
 		listeners: {
 		    change: function(f, value) {
-			var memory = me.down('field[name=memory]').getValue();
-			var shares = me.down('field[name=shares]');
+			let memory = me.down('field[name=memory]').getValue();
+			let shares = me.down('field[name=shares]');
 			shares.setDisabled(value === memory);
 		    },
 		},
@@ -124,9 +124,9 @@ Ext.define('PVE.qemu.MemoryInputPanel', {
 		fieldLabel: gettext('Ballooning Device'),
 		listeners: {
 		    change: function(f, value) {
-			var bf = me.down('field[name=balloon]');
-			var shares = me.down('field[name=shares]');
-			var memory = me.down('field[name=memory]');
+			let bf = me.down('field[name=balloon]');
+			let shares = me.down('field[name=shares]');
+			let memory = me.down('field[name=memory]');
 			bf.setDisabled(!value);
 			shares.setDisabled(!value || bf.getValue() === memory.getValue());
 		    },
@@ -149,9 +149,9 @@ Ext.define('PVE.qemu.MemoryEdit', {
     extend: 'Proxmox.window.Edit',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var memoryhotplug;
+	let memoryhotplug;
 	if (me.hotplug) {
 	    Ext.each(me.hotplug.split(','), function(el) {
 		if (el === 'memory') {
@@ -160,7 +160,7 @@ Ext.define('PVE.qemu.MemoryEdit', {
 	    });
 	}
 
-	var ipanel = Ext.create('PVE.qemu.MemoryInputPanel', {
+	let ipanel = Ext.create('PVE.qemu.MemoryInputPanel', {
 	    hotplug: memoryhotplug,
 	});
 
@@ -176,9 +176,9 @@ Ext.define('PVE.qemu.MemoryEdit', {
 
 	me.load({
 	    success: function(response, options) {
-		var data = response.result.data;
+		let data = response.result.data;
 
-		var values = {
+		let values = {
 		    ballooning: data.balloon === 0 ? '0' : '1',
 		    shares: data.shares,
 		    memory: data.memory || '512',
diff --git a/www/manager6/qemu/Monitor.js b/www/manager6/qemu/Monitor.js
index d85018e6..889550fb 100644
--- a/www/manager6/qemu/Monitor.js
+++ b/www/manager6/qemu/Monitor.js
@@ -6,23 +6,23 @@ Ext.define('PVE.qemu.Monitor', {
     maxLines: 500,
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var nodename = me.pveSelNode.data.node;
+	let nodename = me.pveSelNode.data.node;
 	if (!nodename) {
 	    throw "no node name specified";
 	}
 
-	var vmid = me.pveSelNode.data.vmid;
+	let vmid = me.pveSelNode.data.vmid;
 	if (!vmid) {
 	    throw "no VM ID specified";
 	}
 
-	var history = [];
-	var histNum = -1;
-	var lines = [];
+	let history = [];
+	let histNum = -1;
+	let lines = [];
 
-	var textbox = Ext.createWidget('panel', {
+	let textbox = Ext.createWidget('panel', {
 	    region: 'center',
 	    xtype: 'panel',
 	    autoScroll: true,
@@ -31,11 +31,11 @@ Ext.define('PVE.qemu.Monitor', {
 	    bodyStyle: 'font-family: monospace;',
 	});
 
-	var scrollToEnd = function() {
-	    var el = textbox.getTargetEl();
-	    var dom = Ext.getDom(el);
+	let scrollToEnd = function() {
+	    let el = textbox.getTargetEl();
+	    let dom = Ext.getDom(el);
 
-	    var clientHeight = dom.clientHeight;
+	    let clientHeight = dom.clientHeight;
 	    // BrowserBug: clientHeight reports 0 in IE9 StrictMode
             // Instead we are using offsetHeight and hardcoding borders
             if (Ext.isIE9 && Ext.isStrict) {
@@ -44,19 +44,19 @@ Ext.define('PVE.qemu.Monitor', {
 	    dom.scrollTop = dom.scrollHeight - clientHeight;
 	};
 
-	var refresh = function() {
+	let refresh = function() {
 	    textbox.update('<pre>' + lines.join('\n') + '</pre>');
 	    scrollToEnd();
 	};
 
-	var addLine = function(line) {
+	let addLine = function(line) {
 	    lines.push(line);
 	    if (lines.length > me.maxLines) {
 		lines.shift();
 	    }
 	};
 
-	var executeCmd = function(cmd) {
+	let executeCmd = function(cmd) {
 	    addLine("# " + Ext.htmlEncode(cmd));
 	    if (cmd) {
 		history.unshift(cmd);
@@ -73,7 +73,7 @@ Ext.define('PVE.qemu.Monitor', {
 		method: 'POST',
 		waitMsgTarget: me,
 		success: function(response, opts) {
-		    var res = response.result.data;
+		    let res = response.result.data;
 		    Ext.Array.each(res.split('\n'), function(line) {
 			addLine(Ext.htmlEncode(line));
 		    });
@@ -106,13 +106,14 @@ Ext.define('PVE.qemu.Monitor', {
 			    refresh();
 			},
 			specialkey: function(f, e) {
-			    var key = e.getKey();
+			    let key = e.getKey();
 			    switch (key) {
-				case e.ENTER:
-				    var cmd = f.getValue();
+				case e.ENTER: {
+				    let cmd = f.getValue();
 				    f.setValue('');
 				    executeCmd(cmd);
 				    break;
+				}
 				case e.PAGE_UP:
 				    textbox.scrollBy(0, -0.9*textbox.getHeight(), false);
 				    break;
@@ -140,7 +141,7 @@ Ext.define('PVE.qemu.Monitor', {
 	    ],
 	    listeners: {
 		show: function() {
-		    var field = me.query('textfield[name="cmd"]')[0];
+		    let field = me.query('textfield[name="cmd"]')[0];
 		    field.focus(false, true);
 		},
 	    },
diff --git a/www/manager6/qemu/NetworkEdit.js b/www/manager6/qemu/NetworkEdit.js
index b39cffdc..54224a75 100644
--- a/www/manager6/qemu/NetworkEdit.js
+++ b/www/manager6/qemu/NetworkEdit.js
@@ -6,7 +6,7 @@ Ext.define('PVE.qemu.NetworkInputPanel', {
     insideWizard: false,
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
 	me.network.model = values.model;
 	if (values.nonetwork) {
@@ -26,7 +26,7 @@ Ext.define('PVE.qemu.NetworkInputPanel', {
 	    delete me.network.rate;
 	}
 
-	var params = {};
+	let params = {};
 
 	params[me.confid] = PVE.Parser.printQemuNetwork(me.network);
 
@@ -34,7 +34,7 @@ Ext.define('PVE.qemu.NetworkInputPanel', {
     },
 
     setNetwork: function(confid, data) {
-	var me = this;
+	let me = this;
 
 	me.confid = confid;
 
@@ -50,13 +50,13 @@ Ext.define('PVE.qemu.NetworkInputPanel', {
     },
 
     setNodename: function(nodename) {
-	var me = this;
+	let me = this;
 
 	me.bridgesel.setNodename(nodename);
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.network = {};
 	me.confid = 'net0';
@@ -103,7 +103,7 @@ Ext.define('PVE.qemu.NetworkInputPanel', {
 		boxLabel: gettext('No network device'),
 		listeners: {
 		    change: function(cb, value) {
-			var fields = [
+			let fields = [
 			    'disconnect',
 			    'bridge',
 			    'tag',
@@ -173,16 +173,16 @@ Ext.define('PVE.qemu.NetworkEdit', {
     isAdd: true,
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var nodename = me.pveSelNode.data.node;
+	let nodename = me.pveSelNode.data.node;
 	if (!nodename) {
 	    throw "no node name specified";
 	}
 
 	me.isCreate = !me.confid;
 
-	var ipanel = Ext.create('PVE.qemu.NetworkInputPanel', {
+	let ipanel = Ext.create('PVE.qemu.NetworkInputPanel', {
 	    confid: me.confid,
 	    nodename: nodename,
 	    isCreate: me.isCreate,
@@ -197,11 +197,11 @@ Ext.define('PVE.qemu.NetworkEdit', {
 
 	me.load({
 	    success: function(response, options) {
-		var i, confid;
+		let i, confid;
 		me.vmconfig = response.result.data;
 		if (!me.isCreate) {
-		    var value = me.vmconfig[me.confid];
-		    var network = PVE.Parser.parseQemuNetwork(me.confid, value);
+		    let value = me.vmconfig[me.confid];
+		    let network = PVE.Parser.parseQemuNetwork(me.confid, value);
 		    if (!network) {
 			Ext.Msg.alert(gettext('Error'), 'Unable to parse network options');
 			me.close();
diff --git a/www/manager6/qemu/OSDefaults.js b/www/manager6/qemu/OSDefaults.js
index eed9eebc..6411c9d0 100644
--- a/www/manager6/qemu/OSDefaults.js
+++ b/www/manager6/qemu/OSDefaults.js
@@ -25,7 +25,7 @@ Ext.define('PVE.qemu.OSDefaults', {
 
 	let addOS = function(settings) {
 		if (Object.prototype.hasOwnProperty.call(settings, 'parent')) {
-		    var child = Ext.clone(me[settings.parent]);
+		    let child = Ext.clone(me[settings.parent]);
 		    me[settings.pveOS] = Ext.apply(child, settings);
 		} else {
 		    throw "Could not find your genitor";
diff --git a/www/manager6/qemu/OSTypeEdit.js b/www/manager6/qemu/OSTypeEdit.js
index d9a0988e..36637af1 100644
--- a/www/manager6/qemu/OSTypeEdit.js
+++ b/www/manager6/qemu/OSTypeEdit.js
@@ -19,22 +19,22 @@ Ext.define('PVE.qemu.OSTypeInputPanel', {
 	    this.lookup('ostype').getStore().setData(PVE.Utils.kvm_ostypes[value]);
 	},
 	onOSTypeChange: function(field) {
-	    var me = this, ostype = field.getValue();
+	    let me = this, ostype = field.getValue();
 	    if (!me.getView().insideWizard) {
 		return;
 	    }
-	    var targetValues = PVE.qemu.OSDefaults.getDefaults(ostype);
+	    let targetValues = PVE.qemu.OSDefaults.getDefaults(ostype);
 
 	    me.setWidget('pveBusSelector', targetValues.busType);
 	    me.setWidget('pveNetworkCardSelector', targetValues.networkCard);
-	    var scsihw = targetValues.scsihw || '__default__';
+	    let scsihw = targetValues.scsihw || '__default__';
 	    this.getViewModel().set('current.scsihw', scsihw);
 	    this.getViewModel().set('current.ostype', ostype);
 	},
 	setWidget: function(widget, newValue) {
 	    // changing a widget is safe only if ComponentQuery.query returns us
 	    // a single value array
-	    var widgets = Ext.ComponentQuery.query('pveQemuCreateWizard ' + widget);
+	    let widgets = Ext.ComponentQuery.query('pveQemuCreateWizard ' + widget);
 	    if (widgets.length === 1) {
 		widgets[0].setValue(newValue);
 	    } else {
@@ -44,7 +44,7 @@ Ext.define('PVE.qemu.OSTypeInputPanel', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.items = [
 	    {
@@ -78,8 +78,8 @@ Ext.define('PVE.qemu.OSTypeInputPanel', {
 		    data: PVE.Utils.kvm_ostypes.Linux,
 		    listeners: {
 			datachanged: function(store) {
-			    var ostype = me.lookup('ostype');
-			    var old_val = ostype.getValue();
+			    let ostype = me.lookup('ostype');
+			    let old_val = ostype.getValue();
 			    if (!me.insideWizard && old_val && store.find('val', old_val) !== -1) {
 				ostype.setValue(old_val);
 			    } else {
@@ -103,14 +103,14 @@ Ext.define('PVE.qemu.OSTypeEdit', {
     items: [{ xtype: 'pveQemuOSTypePanel' }],
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.callParent();
 
 	me.load({
 	    success: function(response, options) {
-		var value = response.result.data.ostype || 'other';
-		var osinfo = PVE.Utils.get_kvm_osinfo(value);
+		let value = response.result.data.ostype || 'other';
+		let osinfo = PVE.Utils.get_kvm_osinfo(value);
 		me.setValues({ ostype: value, osbase: osinfo.base });
 	    },
 	});
diff --git a/www/manager6/qemu/Options.js b/www/manager6/qemu/Options.js
index a1def4bb..edc5f8c4 100644
--- a/www/manager6/qemu/Options.js
+++ b/www/manager6/qemu/Options.js
@@ -5,21 +5,21 @@ Ext.define('PVE.qemu.Options', {
     onlineHelp: 'qm_options',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var nodename = me.pveSelNode.data.node;
+	let nodename = me.pveSelNode.data.node;
 	if (!nodename) {
 	    throw "no node name specified";
 	}
 
-	var vmid = me.pveSelNode.data.vmid;
+	let vmid = me.pveSelNode.data.vmid;
 	if (!vmid) {
 	    throw "no VM ID specified";
 	}
 
-	var caps = Ext.state.Manager.get('GuiCap');
+	let caps = Ext.state.Manager.get('GuiCap');
 
-	var rows = {
+	let rows = {
 	    name: {
 		required: true,
 		defaultValue: me.pveSelNode.data.name,
@@ -38,7 +38,7 @@ Ext.define('PVE.qemu.Options', {
 			    allowBlank: true,
 			},
 			onGetValues: function(values) {
-			    var params = values;
+			    let params = values;
 			    if (values.name === undefined ||
 				values.name === null ||
 				values.name === '') {
@@ -109,14 +109,14 @@ Ext.define('PVE.qemu.Options', {
 
 		    // legacy style and fallback
 		    let i;
-		    var text = '';
-		    var bootdisk = me.getObjectValue('bootdisk', undefined, pending);
+		    let text = '';
+		    let bootdisk = me.getObjectValue('bootdisk', undefined, pending);
 		    order = boot.legacy || 'cdn';
 		    for (i = 0; i < order.length; i++) {
 			if (text) {
 			    text += ', ';
 			}
-			var sel = order.substring(i, i + 1);
+			let sel = order.substring(i, i + 1);
 			if (sel === 'c') {
 			    if (bootdisk) {
 				text += bootdisk;
@@ -343,28 +343,28 @@ Ext.define('PVE.qemu.Options', {
 	    },
 	};
 
-	var baseurl = 'nodes/' + nodename + '/qemu/' + vmid + '/config';
+	let baseurl = 'nodes/' + nodename + '/qemu/' + vmid + '/config';
 
-	var edit_btn = new Ext.Button({
+	let edit_btn = new Ext.Button({
 	    text: gettext('Edit'),
 	    disabled: true,
 	    handler: function() { me.run_editor(); },
 	});
 
-	var revert_btn = new PVE.button.PendingRevert();
+	let revert_btn = new PVE.button.PendingRevert();
 
-	var set_button_status = function() {
-	    var sm = me.getSelectionModel();
-	    var rec = sm.getSelection()[0];
+	let set_button_status = function() {
+	    let sm = me.getSelectionModel();
+	    let rec = sm.getSelection()[0];
 
 	    if (!rec) {
 		edit_btn.disable();
 		return;
 	    }
 
-	    var key = rec.data.key;
-	    var pending = rec.data.delete || me.hasPendingChanges(key);
-	    var rowdef = rows[key];
+	    let key = rec.data.key;
+	    let pending = rec.data.delete || me.hasPendingChanges(key);
+	    let rowdef = rows[key];
 
 	    edit_btn.setDisabled(!rowdef.editor);
 	    revert_btn.setDisabled(!pending);
diff --git a/www/manager6/qemu/PCIEdit.js b/www/manager6/qemu/PCIEdit.js
index 2f67aece..5dab88c5 100644
--- a/www/manager6/qemu/PCIEdit.js
+++ b/www/manager6/qemu/PCIEdit.js
@@ -4,12 +4,12 @@ Ext.define('PVE.qemu.PCIInputPanel', {
     onlineHelp: 'qm_pci_passthrough_vm_config',
 
     setVMConfig: function(vmconfig) {
-	var me = this;
+	let me = this;
 	me.vmconfig = vmconfig;
 
-	var hostpci = me.vmconfig[me.confid] || '';
+	let hostpci = me.vmconfig[me.confid] || '';
 
-	var values = PVE.Parser.parsePropertyString(hostpci, 'host');
+	let values = PVE.Parser.parsePropertyString(hostpci, 'host');
 	if (values.host) {
 	    if (!values.host.match(/^[0-9a-f]{4}:/i)) { // add optional domain
 		values.host = "0000:" + values.host;
@@ -27,7 +27,7 @@ Ext.define('PVE.qemu.PCIInputPanel', {
 	me.setValues(values);
 	if (!me.vmconfig.machine || me.vmconfig.machine.indexOf('q35') === -1) {
 	    // machine is not set to some variant of q35, so we disable pcie
-	    var pcie = me.down('field[name=pcie]');
+	    let pcie = me.down('field[name=pcie]');
 	    pcie.setDisabled(true);
 	    pcie.setBoxLabel(gettext('Q35 only'));
 	}
diff --git a/www/manager6/qemu/ProcessorEdit.js b/www/manager6/qemu/ProcessorEdit.js
index 1bed2877..476ea218 100644
--- a/www/manager6/qemu/ProcessorEdit.js
+++ b/www/manager6/qemu/ProcessorEdit.js
@@ -21,7 +21,7 @@ Ext.define('PVE.qemu.ProcessorInputPanel', {
     },
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
 	if (Array.isArray(values.delete)) {
 	    values.delete = values.delete.join(',');
@@ -41,10 +41,10 @@ Ext.define('PVE.qemu.ProcessorInputPanel', {
 
 	delete values.cputype;
 	delete values.flags;
-	var cpustring = PVE.Parser.printQemuCpu(me.cpu);
+	let cpustring = PVE.Parser.printQemuCpu(me.cpu);
 
 	// remove cputype delete request:
-	var del = values.delete;
+	let del = values.delete;
 	delete values.delete;
 	if (del) {
 	    del = del.split(',');
@@ -59,7 +59,7 @@ Ext.define('PVE.qemu.ProcessorInputPanel', {
 	    del.push('cpu');
 	}
 
-	var delarr = del.join(',');
+	let delarr = del.join(',');
 	if (delarr) {
 	    values.delete = delarr;
 	}
@@ -219,9 +219,9 @@ Ext.define('PVE.qemu.ProcessorEdit', {
     width: 700,
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var ipanel = Ext.create('PVE.qemu.ProcessorInputPanel');
+	let ipanel = Ext.create('PVE.qemu.ProcessorInputPanel');
 
 	Ext.apply(me, {
 	    subject: gettext('Processors'),
@@ -232,10 +232,10 @@ Ext.define('PVE.qemu.ProcessorEdit', {
 
 	me.load({
 	    success: function(response, options) {
-		var data = response.result.data;
-		var value = data.cpu;
+		let data = response.result.data;
+		let value = data.cpu;
 		if (value) {
-		    var cpu = PVE.Parser.parseQemuCpu(value);
+		    let cpu = PVE.Parser.parseQemuCpu(value);
 		    ipanel.cpu = cpu;
 		    data.cputype = cpu.cputype;
 		    if (cpu.flags) {
diff --git a/www/manager6/qemu/RNGEdit.js b/www/manager6/qemu/RNGEdit.js
index e34e2c08..05045dd6 100644
--- a/www/manager6/qemu/RNGEdit.js
+++ b/www/manager6/qemu/RNGEdit.js
@@ -11,7 +11,7 @@ Ext.define('PVE.qemu.RNGInputPanel', {
 	    delete values.max_bytes;
 	}
 
-	var ret = PVE.Parser.printPropertyString(values);
+	let ret = PVE.Parser.printPropertyString(values);
 
 	return {
 	    rng0: ret,
@@ -103,7 +103,7 @@ Ext.define('PVE.qemu.RNGEdit', {
     }],
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.callParent();
 
@@ -112,7 +112,7 @@ Ext.define('PVE.qemu.RNGEdit', {
 		success: function(response) {
 		    me.vmconfig = response.result.data;
 
-		    var rng0 = me.vmconfig.rng0;
+		    let rng0 = me.vmconfig.rng0;
 		    if (rng0) {
 			me.setValues(PVE.Parser.parsePropertyString(rng0));
 		    }
diff --git a/www/manager6/qemu/SSHKey.js b/www/manager6/qemu/SSHKey.js
index f38e5fab..58621d2a 100644
--- a/www/manager6/qemu/SSHKey.js
+++ b/www/manager6/qemu/SSHKey.js
@@ -5,7 +5,7 @@ Ext.define('PVE.qemu.SSHKeyInputPanel', {
     insideWizard: false,
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 	if (values.sshkeys) {
 	    values.sshkeys.trim();
 	}
@@ -39,7 +39,7 @@ Ext.define('PVE.qemu.SSHKeyInputPanel', {
 		    Ext.Array.each(e.target.files, function(file) {
 			PVE.Utils.loadSSHKeyFromFile(file, function(res) {
 			    let keysField = view.down('#sshkeys');
-			    var old = keysField.getValue();
+			    let old = keysField.getValue();
 			    keysField.setValue(old + res);
 			});
 		    });
@@ -50,7 +50,7 @@ Ext.define('PVE.qemu.SSHKeyInputPanel', {
     ],
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.callParent();
 	if (!window.FileReader) {
@@ -65,9 +65,9 @@ Ext.define('PVE.qemu.SSHKeyEdit', {
     width: 800,
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var ipanel = Ext.create('PVE.qemu.SSHKeyInputPanel');
+	let ipanel = Ext.create('PVE.qemu.SSHKeyInputPanel');
 
 	Ext.apply(me, {
 	    subject: gettext('SSH Keys'),
@@ -79,7 +79,7 @@ Ext.define('PVE.qemu.SSHKeyEdit', {
 	if (!me.create) {
 	    me.load({
 		success: function(response, options) {
-		    var data = response.result.data;
+		    let data = response.result.data;
 		    if (data.sshkeys) {
 			data.sshkeys = decodeURIComponent(data.sshkeys);
 			ipanel.setValues(data);
diff --git a/www/manager6/qemu/ScsiHwEdit.js b/www/manager6/qemu/ScsiHwEdit.js
index 70f09c17..09e24dcf 100644
--- a/www/manager6/qemu/ScsiHwEdit.js
+++ b/www/manager6/qemu/ScsiHwEdit.js
@@ -2,7 +2,7 @@ Ext.define('PVE.qemu.ScsiHwEdit', {
     extend: 'Proxmox.window.Edit',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	Ext.applyIf(me, {
 	    subject: gettext('SCSI Controller Type'),
diff --git a/www/manager6/qemu/SerialEdit.js b/www/manager6/qemu/SerialEdit.js
index 6ce18ec2..e4f09186 100644
--- a/www/manager6/qemu/SerialEdit.js
+++ b/www/manager6/qemu/SerialEdit.js
@@ -4,11 +4,11 @@ Ext.define('PVE.qemu.SerialnputPanel', {
     autoComplete: false,
 
     setVMConfig: function(vmconfig) {
-	var me = this, i;
+	let me = this, i;
 	me.vmconfig = vmconfig;
 
 	for (i = 0; i < 4; i++) {
-	    var port = 'serial' + i.toString();
+	    let port = 'serial' + i.toString();
 	    if (!me.vmconfig[port]) {
 		me.down('field[name=serialid]').setValue(i);
 		break;
@@ -17,9 +17,9 @@ Ext.define('PVE.qemu.SerialnputPanel', {
     },
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
-	var id = 'serial' + values.serialid;
+	let id = 'serial' + values.serialid;
 	delete values.serialid;
 	values[id] = 'socket';
 	return values;
@@ -57,12 +57,12 @@ Ext.define('PVE.qemu.SerialEdit', {
     subject: gettext('Serial Port'),
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	// for now create of (socket) serial port only
 	me.isCreate = true;
 
-	var ipanel = Ext.create('PVE.qemu.SerialnputPanel', {});
+	let ipanel = Ext.create('PVE.qemu.SerialnputPanel', {});
 
 	Ext.apply(me, {
 	    items: [ipanel],
diff --git a/www/manager6/qemu/Smbios1Edit.js b/www/manager6/qemu/Smbios1Edit.js
index fc159125..529497fc 100644
--- a/www/manager6/qemu/Smbios1Edit.js
+++ b/www/manager6/qemu/Smbios1Edit.js
@@ -7,9 +7,9 @@ Ext.define('PVE.qemu.Smbios1InputPanel', {
     smbios1: {},
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
-	var params = {
+	let params = {
 	    smbios1: PVE.Parser.printQemuSmbios1(values),
 	};
 
@@ -17,7 +17,7 @@ Ext.define('PVE.qemu.Smbios1InputPanel', {
     },
 
     setSmbios1: function(data) {
-	var me = this;
+	let me = this;
 
 	me.smbios1 = data;
 
@@ -92,9 +92,9 @@ Ext.define('PVE.qemu.Smbios1Edit', {
     extend: 'Proxmox.window.Edit',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var ipanel = Ext.create('PVE.qemu.Smbios1InputPanel', {});
+	let ipanel = Ext.create('PVE.qemu.Smbios1InputPanel', {});
 
 	Ext.applyIf(me, {
 	    subject: gettext('SMBIOS settings (type1)'),
@@ -107,9 +107,9 @@ Ext.define('PVE.qemu.Smbios1Edit', {
 	me.load({
 	    success: function(response, options) {
 		me.vmconfig = response.result.data;
-		var value = me.vmconfig.smbios1;
+		let value = me.vmconfig.smbios1;
 		if (value) {
-		    var data = PVE.Parser.parseQemuSmbios1(value);
+		    let data = PVE.Parser.parseQemuSmbios1(value);
 		    if (!data) {
 			Ext.Msg.alert(gettext('Error'), 'Unable to parse smbios options');
 			me.close();
diff --git a/www/manager6/qemu/SystemEdit.js b/www/manager6/qemu/SystemEdit.js
index 592c88ee..c86685aa 100644
--- a/www/manager6/qemu/SystemEdit.js
+++ b/www/manager6/qemu/SystemEdit.js
@@ -36,14 +36,14 @@ Ext.define('PVE.qemu.SystemInputPanel', {
 	xclass: 'Ext.app.ViewController',
 
 	scsihwChange: function(field, value) {
-	    var me = this;
+	    let me = this;
 	    if (me.getView().insideWizard) {
 		me.getViewModel().set('current.scsihw', value);
 	    }
 	},
 
 	biosChange: function(field, value) {
-	    var me = this;
+	    let me = this;
 	    if (me.getView().insideWizard) {
 		me.getViewModel().set('efi', value === 'ovmf');
 	    }
diff --git a/www/manager6/qemu/USBEdit.js b/www/manager6/qemu/USBEdit.js
index a2204584..ddf8d0d2 100644
--- a/www/manager6/qemu/USBEdit.js
+++ b/www/manager6/qemu/USBEdit.js
@@ -10,12 +10,12 @@ Ext.define('PVE.qemu.USBInputPanel', {
     },
 
     setVMConfig: function(vmconfig) {
-	var me = this;
+	let me = this;
 	me.vmconfig = vmconfig;
     },
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 	if (!me.confid) {
 	    for (let i = 0; i < 6; i++) {
 		let id = 'usb' + i.toString();
@@ -25,8 +25,8 @@ Ext.define('PVE.qemu.USBInputPanel', {
 		}
 	    }
 	}
-	var val = "";
-	var type = me.down('radiofield').getGroupValue();
+	let val = "";
+	let type = me.down('radiofield').getGroupValue();
 	switch (type) {
 	    case 'spice':
 		val = 'spice';
@@ -122,11 +122,11 @@ Ext.define('PVE.qemu.USBEdit', {
     subject: gettext('USB Device'),
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.isCreate = !me.confid;
 
-	var ipanel = Ext.create('PVE.qemu.USBInputPanel', {
+	let ipanel = Ext.create('PVE.qemu.USBInputPanel', {
 	    confid: me.confid,
 	    pveSelNode: me.pveSelNode,
 	});
@@ -144,9 +144,9 @@ Ext.define('PVE.qemu.USBEdit', {
 		    return;
 		}
 
-		var data = response.result.data[me.confid].split(',');
-		var port, hostdevice, usb3 = false;
-		var type = 'spice';
+		let data = response.result.data[me.confid].split(',');
+		let port, hostdevice, usb3 = false;
+		let type = 'spice';
 
 		for (let i = 0; i < data.length; i++) {
 		    if (/^(host=)?(0x)?[a-zA-Z0-9]{4}:(0x)?[a-zA-Z0-9]{4}$/.test(data[i])) {
@@ -163,7 +163,7 @@ Ext.define('PVE.qemu.USBEdit', {
 			usb3 = true;
 		    }
 		}
-		var values = {
+		let values = {
 		    usb: type,
 		    hostdevice: hostdevice,
 		    port: port,
diff --git a/www/manager6/sdn/Browser.js b/www/manager6/sdn/Browser.js
index bb30cbe0..008931a2 100644
--- a/www/manager6/sdn/Browser.js
+++ b/www/manager6/sdn/Browser.js
@@ -5,21 +5,21 @@ Ext.define('PVE.sdn.Browser', {
     onlineHelp: 'chapter_pvesdn',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var nodename = me.pveSelNode.data.node;
+	let nodename = me.pveSelNode.data.node;
 	if (!nodename) {
 	    throw "no node name specified";
 	}
 
-	var sdnid = me.pveSelNode.data.sdn;
+	let sdnid = me.pveSelNode.data.sdn;
 	if (!sdnid) {
 	    throw "no sdn ID specified";
 	}
 
 	me.items = [];
 
-	var caps = Ext.state.Manager.get('GuiCap');
+	let caps = Ext.state.Manager.get('GuiCap');
 
 	Ext.apply(me, {
 	    title: Ext.String.format(gettext("Zone {0} on node {1}"),
diff --git a/www/manager6/sdn/ControllerView.js b/www/manager6/sdn/ControllerView.js
index aff3fb8d..8b46be6e 100644
--- a/www/manager6/sdn/ControllerView.js
+++ b/www/manager6/sdn/ControllerView.js
@@ -8,7 +8,7 @@ Ext.define('PVE.sdn.ControllerView', {
     stateId: 'grid-sdn-controller',
 
     createSDNControllerEditWindow: function(type, sid) {
-	var schema = PVE.Utils.sdncontrollerSchema[type];
+	let schema = PVE.Utils.sdncontrollerSchema[type];
 	if (!schema || !schema.ipanel) {
 	    throw "no editor registered for controller type: " + type;
 	}
@@ -25,9 +25,9 @@ Ext.define('PVE.sdn.ControllerView', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var store = new Ext.data.Store({
+	let store = new Ext.data.Store({
 	    model: 'pve-sdn-controller',
 	    proxy: {
 		type: 'proxmox',
diff --git a/www/manager6/sdn/Status.js b/www/manager6/sdn/Status.js
index 0fdcfda0..005d3043 100644
--- a/www/manager6/sdn/Status.js
+++ b/www/manager6/sdn/Status.js
@@ -10,7 +10,7 @@ Ext.define('PVE.sdn.Status', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.rstore = Ext.create('Proxmox.data.ObjectStore', {
 	    interval: me.interval,
diff --git a/www/manager6/sdn/StatusView.js b/www/manager6/sdn/StatusView.js
index 970aa919..fa83b0ae 100644
--- a/www/manager6/sdn/StatusView.js
+++ b/www/manager6/sdn/StatusView.js
@@ -9,7 +9,7 @@ Ext.define('PVE.sdn.StatusView', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.rstore) {
 	    throw "no rstore given";
@@ -17,13 +17,13 @@ Ext.define('PVE.sdn.StatusView', {
 
 	Proxmox.Utils.monStoreErrors(me, me.rstore);
 
-	var store = Ext.create('Proxmox.data.DiffStore', {
+	let store = Ext.create('Proxmox.data.DiffStore', {
 	    rstore: me.rstore,
 	    sortAfterUpdate: true,
 	    sorters: [{
 		sorterFn: function(rec1, rec2) {
-		    var p1 = me.sortPriority[rec1.data.type];
-		    var p2 = me.sortPriority[rec2.data.type];
+		    let p1 = me.sortPriority[rec1.data.type];
+		    let p2 = me.sortPriority[rec2.data.type];
 		    return p1 !== p2 ? p1 > p2 ? 1 : -1 : 0;
 		},
 	    }],
diff --git a/www/manager6/sdn/SubnetEdit.js b/www/manager6/sdn/SubnetEdit.js
index 154de8ef..57ce91f8 100644
--- a/www/manager6/sdn/SubnetEdit.js
+++ b/www/manager6/sdn/SubnetEdit.js
@@ -68,7 +68,7 @@ Ext.define('PVE.sdn.SubnetEdit', {
     base_url: undefined,
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.isCreate = me.subnet === undefined;
 
diff --git a/www/manager6/sdn/SubnetView.js b/www/manager6/sdn/SubnetView.js
index 4a8b0754..309d6495 100644
--- a/www/manager6/sdn/SubnetView.js
+++ b/www/manager6/sdn/SubnetView.js
@@ -79,7 +79,7 @@ Ext.define('PVE.sdn.SubnetView', {
 	});
 
 	let set_button_status = function() {
-	    var rec = me.selModel.getSelection()[0];
+	    let rec = me.selModel.getSelection()[0];
 
 	    if (!rec || rec.data.state === 'deleted') {
 		edit_btn.disable();
diff --git a/www/manager6/sdn/VnetEdit.js b/www/manager6/sdn/VnetEdit.js
index 0f55595f..067c4ebd 100644
--- a/www/manager6/sdn/VnetEdit.js
+++ b/www/manager6/sdn/VnetEdit.js
@@ -69,7 +69,7 @@ Ext.define('PVE.sdn.VnetEdit', {
     width: 350,
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.isCreate = me.vnet === undefined;
 
diff --git a/www/manager6/sdn/VnetPanel.js b/www/manager6/sdn/VnetPanel.js
index 48c09693..8cf77e89 100644
--- a/www/manager6/sdn/VnetPanel.js
+++ b/www/manager6/sdn/VnetPanel.js
@@ -7,15 +7,15 @@ Ext.define('PVE.sdn.Vnet', {
     onlineHelp: 'pvesdn_config_vnet',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var subnetview_panel = Ext.createWidget('pveSDNSubnetView', {
+	let subnetview_panel = Ext.createWidget('pveSDNSubnetView', {
 	    title: gettext('Subnets'),
 	    region: 'center',
 	    border: false,
 	});
 
-	var vnetview_panel = Ext.createWidget('pveSDNVnetView', {
+	let vnetview_panel = Ext.createWidget('pveSDNVnetView', {
 	    title: 'Vnets',
 	    region: 'west',
 	    subnetview_panel: subnetview_panel,
diff --git a/www/manager6/sdn/VnetView.js b/www/manager6/sdn/VnetView.js
index 3fd3c916..d1d91b5e 100644
--- a/www/manager6/sdn/VnetView.js
+++ b/www/manager6/sdn/VnetView.js
@@ -53,7 +53,7 @@ Ext.define('PVE.sdn.VnetView', {
 	});
 
 	let set_button_status = function() {
-	    var rec = me.selModel.getSelection()[0];
+	    let rec = me.selModel.getSelection()[0];
 
 	    if (!rec || rec.data.state === 'deleted') {
 		edit_btn.disable();
diff --git a/www/manager6/sdn/ZoneContentView.js b/www/manager6/sdn/ZoneContentView.js
index 1ea65450..db737828 100644
--- a/www/manager6/sdn/ZoneContentView.js
+++ b/www/manager6/sdn/ZoneContentView.js
@@ -15,20 +15,20 @@ Ext.define('PVE.sdn.ZoneContentView', {
 	},
     ],
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var nodename = me.pveSelNode.data.node;
+	let nodename = me.pveSelNode.data.node;
 	if (!nodename) {
 	    throw "no node name specified";
 	}
 
-	var zone = me.pveSelNode.data.sdn;
+	let zone = me.pveSelNode.data.sdn;
 	if (!zone) {
 	    throw "no zone ID specified";
 	}
 
-	var baseurl = "/nodes/" + nodename + "/sdn/zones/" + zone + "/content";
-	var store = Ext.create('Ext.data.Store', {
+	let baseurl = "/nodes/" + nodename + "/sdn/zones/" + zone + "/content";
+	let store = Ext.create('Ext.data.Store', {
 	    model: 'pve-sdnzone-content',
 	    groupField: 'content',
 	    proxy: {
@@ -41,9 +41,9 @@ Ext.define('PVE.sdn.ZoneContentView', {
 	    },
 	});
 
-	var sm = Ext.create('Ext.selection.RowModel', {});
+	let sm = Ext.create('Ext.selection.RowModel', {});
 
-	var reload = function() {
+	let reload = function() {
 	    store.load();
 	};
 
diff --git a/www/manager6/sdn/ZoneView.js b/www/manager6/sdn/ZoneView.js
index 71890dd3..f1834c16 100644
--- a/www/manager6/sdn/ZoneView.js
+++ b/www/manager6/sdn/ZoneView.js
@@ -70,7 +70,7 @@ Ext.define('PVE.sdn.ZoneView', {
 	});
 
 	let set_button_status = function() {
-	    var rec = me.selModel.getSelection()[0];
+	    let rec = me.selModel.getSelection()[0];
 
 	    if (!rec || rec.data.state === 'deleted') {
 		edit_btn.disable();
diff --git a/www/manager6/sdn/controllers/Base.js b/www/manager6/sdn/controllers/Base.js
index fd8bd9a0..fdc77afc 100644
--- a/www/manager6/sdn/controllers/Base.js
+++ b/www/manager6/sdn/controllers/Base.js
@@ -4,7 +4,7 @@ Ext.define('PVE.panel.SDNControllerBase', {
     type: '',
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
 	if (me.isCreate) {
 	    values.type = me.type;
@@ -20,7 +20,7 @@ Ext.define('PVE.sdn.controllers.BaseEdit', {
     extend: 'Proxmox.window.Edit',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.isCreate = !me.controllerid;
 
@@ -32,7 +32,7 @@ Ext.define('PVE.sdn.controllers.BaseEdit', {
 	    me.method = 'PUT';
 	}
 
-	var ipanel = Ext.create(me.paneltype, {
+	let ipanel = Ext.create(me.paneltype, {
 	    type: me.type,
 	    isCreate: me.isCreate,
 	    controllerid: me.controllerid,
@@ -49,8 +49,8 @@ Ext.define('PVE.sdn.controllers.BaseEdit', {
 	if (!me.isCreate) {
 	    me.load({
 		success: function(response, options) {
-		    var values = response.result.data;
-		    var ctypes = values.content || '';
+		    let values = response.result.data;
+		    let ctypes = values.content || '';
 
 		    values.content = ctypes.split(',');
 
diff --git a/www/manager6/sdn/controllers/BgpEdit.js b/www/manager6/sdn/controllers/BgpEdit.js
index ce5ef93d..c9839bc4 100644
--- a/www/manager6/sdn/controllers/BgpEdit.js
+++ b/www/manager6/sdn/controllers/BgpEdit.js
@@ -4,7 +4,7 @@ Ext.define('PVE.sdn.controllers.BgpInputPanel', {
     onlineHelp: 'pvesdn_controller_plugin_evpn',
 
     onGetValues: function(values) {
-        var me = this;
+        let me = this;
 
         if (me.isCreate) {
             values.type = me.type;
@@ -17,7 +17,7 @@ Ext.define('PVE.sdn.controllers.BgpInputPanel', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.items = [
 	    {
diff --git a/www/manager6/sdn/controllers/EvpnEdit.js b/www/manager6/sdn/controllers/EvpnEdit.js
index d04b3e54..347ede20 100644
--- a/www/manager6/sdn/controllers/EvpnEdit.js
+++ b/www/manager6/sdn/controllers/EvpnEdit.js
@@ -4,7 +4,7 @@ Ext.define('PVE.sdn.controllers.EvpnInputPanel', {
     onlineHelp: 'pvesdn_controller_plugin_evpn',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.items = [
 	    {
diff --git a/www/manager6/sdn/dns/Base.js b/www/manager6/sdn/dns/Base.js
index 6ce97b0c..5ba20e8d 100644
--- a/www/manager6/sdn/dns/Base.js
+++ b/www/manager6/sdn/dns/Base.js
@@ -4,7 +4,7 @@ Ext.define('PVE.panel.SDNDnsBase', {
     type: '',
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
 	if (me.isCreate) {
 	    values.type = me.type;
@@ -16,7 +16,7 @@ Ext.define('PVE.panel.SDNDnsBase', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.callParent();
     },
@@ -26,7 +26,7 @@ Ext.define('PVE.sdn.dns.BaseEdit', {
     extend: 'Proxmox.window.Edit',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.isCreate = !me.dns;
 
@@ -38,7 +38,7 @@ Ext.define('PVE.sdn.dns.BaseEdit', {
 	    me.method = 'PUT';
 	}
 
-	var ipanel = Ext.create(me.paneltype, {
+	let ipanel = Ext.create(me.paneltype, {
 	    type: me.type,
 	    isCreate: me.isCreate,
 	    dns: me.dns,
@@ -55,8 +55,8 @@ Ext.define('PVE.sdn.dns.BaseEdit', {
 	if (!me.isCreate) {
 	    me.load({
 		success: function(response, options) {
-		    var values = response.result.data;
-		    var ctypes = values.content || '';
+		    let values = response.result.data;
+		    let ctypes = values.content || '';
 
 		    values.content = ctypes.split(',');
 
diff --git a/www/manager6/sdn/dns/PowerdnsEdit.js b/www/manager6/sdn/dns/PowerdnsEdit.js
index f35b89af..9e167fe9 100644
--- a/www/manager6/sdn/dns/PowerdnsEdit.js
+++ b/www/manager6/sdn/dns/PowerdnsEdit.js
@@ -4,7 +4,7 @@ Ext.define('PVE.sdn.dns.PowerdnsInputPanel', {
     onlineHelp: 'pvesdn_dns_plugin_powerdns',
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
 	if (me.isCreate) {
 	    values.type = me.type;
@@ -16,7 +16,7 @@ Ext.define('PVE.sdn.dns.PowerdnsInputPanel', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.items = [
 	    {
diff --git a/www/manager6/sdn/ipams/Base.js b/www/manager6/sdn/ipams/Base.js
index 2fb82fbf..6ea7df99 100644
--- a/www/manager6/sdn/ipams/Base.js
+++ b/www/manager6/sdn/ipams/Base.js
@@ -4,7 +4,7 @@ Ext.define('PVE.panel.SDNIpamBase', {
     type: '',
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
 	if (me.isCreate) {
 	    values.type = me.type;
@@ -16,7 +16,7 @@ Ext.define('PVE.panel.SDNIpamBase', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.callParent();
     },
@@ -26,7 +26,7 @@ Ext.define('PVE.sdn.ipams.BaseEdit', {
     extend: 'Proxmox.window.Edit',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.isCreate = !me.ipam;
 
@@ -38,7 +38,7 @@ Ext.define('PVE.sdn.ipams.BaseEdit', {
 	    me.method = 'PUT';
 	}
 
-	var ipanel = Ext.create(me.paneltype, {
+	let ipanel = Ext.create(me.paneltype, {
 	    type: me.type,
 	    isCreate: me.isCreate,
 	    ipam: me.ipam,
@@ -55,8 +55,8 @@ Ext.define('PVE.sdn.ipams.BaseEdit', {
 	if (!me.isCreate) {
 	    me.load({
 		success: function(response, options) {
-		    var values = response.result.data;
-		    var ctypes = values.content || '';
+		    let values = response.result.data;
+		    let ctypes = values.content || '';
 
 		    values.content = ctypes.split(',');
 
diff --git a/www/manager6/sdn/ipams/NetboxEdit.js b/www/manager6/sdn/ipams/NetboxEdit.js
index 2133b48c..4627cd36 100644
--- a/www/manager6/sdn/ipams/NetboxEdit.js
+++ b/www/manager6/sdn/ipams/NetboxEdit.js
@@ -4,7 +4,7 @@ Ext.define('PVE.sdn.ipams.NetboxInputPanel', {
     onlineHelp: 'pvesdn_ipam_plugin_netbox',
 
     onGetValues: function(values) {
-        var me = this;
+        let me = this;
 
 	if (me.isCreate) {
 	    values.type = me.type;
@@ -16,7 +16,7 @@ Ext.define('PVE.sdn.ipams.NetboxInputPanel', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.items = [
 	    {
diff --git a/www/manager6/sdn/ipams/PVEIpamEdit.js b/www/manager6/sdn/ipams/PVEIpamEdit.js
index 783bbdb9..b45edd65 100644
--- a/www/manager6/sdn/ipams/PVEIpamEdit.js
+++ b/www/manager6/sdn/ipams/PVEIpamEdit.js
@@ -4,7 +4,7 @@ Ext.define('PVE.sdn.ipams.PVEIpamInputPanel', {
     onlineHelp: 'pvesdn_ipam_plugin_pveipam',
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
 	if (me.isCreate) {
 	    values.type = me.type;
@@ -16,7 +16,7 @@ Ext.define('PVE.sdn.ipams.PVEIpamInputPanel', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.items = [
 	    {
diff --git a/www/manager6/sdn/ipams/PhpIpamEdit.js b/www/manager6/sdn/ipams/PhpIpamEdit.js
index 8726e0c8..1182aa4f 100644
--- a/www/manager6/sdn/ipams/PhpIpamEdit.js
+++ b/www/manager6/sdn/ipams/PhpIpamEdit.js
@@ -4,7 +4,7 @@ Ext.define('PVE.sdn.ipams.PhpIpamInputPanel', {
     onlineHelp: 'pvesdn_ipam_plugin_phpipam',
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
 	if (me.isCreate) {
 	    values.type = me.type;
@@ -16,7 +16,7 @@ Ext.define('PVE.sdn.ipams.PhpIpamInputPanel', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.items = [
 	    {
diff --git a/www/manager6/sdn/zones/Base.js b/www/manager6/sdn/zones/Base.js
index 347889c0..c670fd33 100644
--- a/www/manager6/sdn/zones/Base.js
+++ b/www/manager6/sdn/zones/Base.js
@@ -4,7 +4,7 @@ Ext.define('PVE.panel.SDNZoneBase', {
     type: '',
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
 	if (me.isCreate) {
 	    values.type = me.type;
@@ -16,7 +16,7 @@ Ext.define('PVE.panel.SDNZoneBase', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.advancedItems = [
 	    {
@@ -59,7 +59,7 @@ Ext.define('PVE.sdn.zones.BaseEdit', {
     width: 400,
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.isCreate = !me.zone;
 
@@ -71,7 +71,7 @@ Ext.define('PVE.sdn.zones.BaseEdit', {
 	    me.method = 'PUT';
 	}
 
-	var ipanel = Ext.create(me.paneltype, {
+	let ipanel = Ext.create(me.paneltype, {
 	    type: me.type,
 	    isCreate: me.isCreate,
 	    zone: me.zone,
@@ -88,8 +88,8 @@ Ext.define('PVE.sdn.zones.BaseEdit', {
 	if (!me.isCreate) {
 	    me.load({
 		success: function(response, options) {
-		    var values = response.result.data;
-		    var ctypes = values.content || '';
+		    let values = response.result.data;
+		    let ctypes = values.content || '';
 
 		    values.content = ctypes.split(',');
 
diff --git a/www/manager6/sdn/zones/EvpnEdit.js b/www/manager6/sdn/zones/EvpnEdit.js
index f1314ad5..aefbe84b 100644
--- a/www/manager6/sdn/zones/EvpnEdit.js
+++ b/www/manager6/sdn/zones/EvpnEdit.js
@@ -4,7 +4,7 @@ Ext.define('PVE.sdn.zones.EvpnInputPanel', {
     onlineHelp: 'pvesdn_zone_plugin_evpn',
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
 	if (me.isCreate) {
 	    values.type = me.type;
@@ -36,7 +36,7 @@ Ext.define('PVE.sdn.zones.EvpnInputPanel', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.items = [
 	    {
diff --git a/www/manager6/sdn/zones/SimpleEdit.js b/www/manager6/sdn/zones/SimpleEdit.js
index 56df7952..1385616f 100644
--- a/www/manager6/sdn/zones/SimpleEdit.js
+++ b/www/manager6/sdn/zones/SimpleEdit.js
@@ -4,7 +4,7 @@ Ext.define('PVE.sdn.zones.SimpleInputPanel', {
     onlineHelp: 'pvesdn_zone_plugin_simple',
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
 	if (me.isCreate) {
 	    values.type = me.type;
@@ -16,7 +16,7 @@ Ext.define('PVE.sdn.zones.SimpleInputPanel', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
         me.items = [
            {
diff --git a/www/manager6/sdn/zones/VlanEdit.js b/www/manager6/sdn/zones/VlanEdit.js
index 93d2bede..fac122ad 100644
--- a/www/manager6/sdn/zones/VlanEdit.js
+++ b/www/manager6/sdn/zones/VlanEdit.js
@@ -4,7 +4,7 @@ Ext.define('PVE.sdn.zones.VlanInputPanel', {
     onlineHelp: 'pvesdn_zone_plugin_vlan',
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
 	if (me.isCreate) {
 	    values.type = me.type;
@@ -16,7 +16,7 @@ Ext.define('PVE.sdn.zones.VlanInputPanel', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
         me.items = [
            {
diff --git a/www/manager6/sdn/zones/VxlanEdit.js b/www/manager6/sdn/zones/VxlanEdit.js
index 41cc7e68..03556496 100644
--- a/www/manager6/sdn/zones/VxlanEdit.js
+++ b/www/manager6/sdn/zones/VxlanEdit.js
@@ -4,7 +4,7 @@ Ext.define('PVE.sdn.zones.VxlanInputPanel', {
     onlineHelp: 'pvesdn_zone_plugin_vxlan',
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
 	if (me.isCreate) {
 	    values.type = me.type;
@@ -18,7 +18,7 @@ Ext.define('PVE.sdn.zones.VxlanInputPanel', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.items = [
 	    {
diff --git a/www/manager6/storage/BackupView.js b/www/manager6/storage/BackupView.js
index 2328c0fc..95c971fc 100644
--- a/www/manager6/storage/BackupView.js
+++ b/www/manager6/storage/BackupView.js
@@ -6,23 +6,23 @@ Ext.define('PVE.storage.BackupView', {
     showColumns: ['name', 'notes', 'protected', 'date', 'format', 'size'],
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var nodename = me.nodename = me.pveSelNode.data.node;
+	let nodename = me.nodename = me.pveSelNode.data.node;
 	if (!nodename) {
 	    throw "no node name specified";
 	}
 
-	var storage = me.storage = me.pveSelNode.data.storage;
+	let storage = me.storage = me.pveSelNode.data.storage;
 	if (!storage) {
 	    throw "no storage ID specified";
 	}
 
 	me.content = 'backup';
 
-	var sm = me.sm = Ext.create('Ext.selection.RowModel', {});
+	let sm = me.sm = Ext.create('Ext.selection.RowModel', {});
 
-	var reload = function() {
+	let reload = function() {
 	    me.store.load();
 	};
 
@@ -85,7 +85,7 @@ Ext.define('PVE.storage.BackupView', {
 		selModel: sm,
 		disabled: true,
 		handler: function(b, e, rec) {
-		    var vmtype;
+		    let vmtype;
 		    if (PVE.Utils.volume_is_qemu_backup(rec.data.volid, rec.data.format)) {
 			vmtype = 'qemu';
 		    } else if (PVE.Utils.volume_is_lxc_backup(rec.data.volid, rec.data.format)) {
@@ -94,7 +94,7 @@ Ext.define('PVE.storage.BackupView', {
 			return;
 		    }
 
-		    var win = Ext.create('PVE.window.Restore', {
+		    let win = Ext.create('PVE.window.Restore', {
 			nodename: nodename,
 			volid: rec.data.volid,
 			volidText: PVE.Utils.render_storage_content(rec.data.volid, {}, rec),
@@ -134,7 +134,7 @@ Ext.define('PVE.storage.BackupView', {
 		disabled: true,
 		selModel: sm,
 		handler: function(b, e, rec) {
-		    var win = Ext.create('PVE.window.BackupConfig', {
+		    let win = Ext.create('PVE.window.BackupConfig', {
 			volume: rec.data.volid,
 			pveSelNode: me.pveSelNode,
 		    });
diff --git a/www/manager6/storage/Browser.js b/www/manager6/storage/Browser.js
index 1916ff6a..35343eda 100644
--- a/www/manager6/storage/Browser.js
+++ b/www/manager6/storage/Browser.js
@@ -5,14 +5,14 @@ Ext.define('PVE.storage.Browser', {
     onlineHelp: 'chapter_storage',
 
     initComponent: function() {
-        var me = this;
+        let me = this;
 
-	var nodename = me.pveSelNode.data.node;
+	let nodename = me.pveSelNode.data.node;
 	if (!nodename) {
 	    throw "no node name specified";
 	}
 
-	var storeid = me.pveSelNode.data.storage;
+	let storeid = me.pveSelNode.data.storage;
 	if (!storeid) {
 	    throw "no storage ID specified";
 	}
@@ -27,7 +27,7 @@ Ext.define('PVE.storage.Browser', {
 	    },
 	];
 
-	var caps = Ext.state.Manager.get('GuiCap');
+	let caps = Ext.state.Manager.get('GuiCap');
 
 	Ext.apply(me, {
 	    title: Ext.String.format(
diff --git a/www/manager6/storage/CIFSEdit.js b/www/manager6/storage/CIFSEdit.js
index 71415401..5c172bd1 100644
--- a/www/manager6/storage/CIFSEdit.js
+++ b/www/manager6/storage/CIFSEdit.js
@@ -14,13 +14,13 @@ Ext.define('PVE.storage.CIFSScan', {
     doRawQuery: Ext.emptyFn,
 
     onTriggerClick: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.queryCaching || me.lastQuery !== me.cifsServer) {
 	    me.store.removeAll();
 	}
 
-	var params = {};
+	let params = {};
 	if (me.cifsUsername) {
 	    params.username = me.cifsUsername;
 	}
@@ -73,7 +73,7 @@ Ext.define('PVE.storage.CIFSScan', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.nodename) {
 	    me.nodename = 'localhost';
@@ -134,7 +134,7 @@ Ext.define('PVE.storage.CIFSInputPanel', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.column1 = [
 	    {
@@ -146,7 +146,7 @@ Ext.define('PVE.storage.CIFSInputPanel', {
 		listeners: {
 		    change: function(f, value) {
 			if (me.isCreate) {
-			    var exportField = me.down('field[name=share]');
+			    let exportField = me.down('field[name=share]');
 			    exportField.setServer(value);
 			}
 		    },
@@ -163,7 +163,7 @@ Ext.define('PVE.storage.CIFSInputPanel', {
 			if (!me.isCreate) {
 			    return;
 			}
-			var exportField = me.down('field[name=share]');
+			let exportField = me.down('field[name=share]');
 			exportField.setUsername(value);
 		    },
 		},
diff --git a/www/manager6/storage/CephFSEdit.js b/www/manager6/storage/CephFSEdit.js
index 6a95a00a..b9a11437 100644
--- a/www/manager6/storage/CephFSEdit.js
+++ b/www/manager6/storage/CephFSEdit.js
@@ -18,7 +18,7 @@ Ext.define('PVE.storage.CephFSInputPanel', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.nodename) {
 	    me.nodename = 'localhost';
diff --git a/www/manager6/storage/ContentView.js b/www/manager6/storage/ContentView.js
index 2761b48e..0bb07db1 100644
--- a/www/manager6/storage/ContentView.js
+++ b/www/manager6/storage/ContentView.js
@@ -8,7 +8,7 @@ Ext.define('PVE.storage.ContentView', {
 	loadMask: false,
     },
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.nodename) {
 	    me.nodename = me.pveSelNode.data.node;
@@ -26,7 +26,7 @@ Ext.define('PVE.storage.ContentView', {
 	}
 	const storage = me.storage;
 
-	var content = me.content;
+	let content = me.content;
 	if (!content) {
 	    throw "no content type specified";
 	}
diff --git a/www/manager6/storage/DirEdit.js b/www/manager6/storage/DirEdit.js
index 7e9ec44d..8d60af5f 100644
--- a/www/manager6/storage/DirEdit.js
+++ b/www/manager6/storage/DirEdit.js
@@ -4,7 +4,7 @@ Ext.define('PVE.storage.DirInputPanel', {
     onlineHelp: 'storage_directory',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.column1 = [
 	    {
diff --git a/www/manager6/storage/GlusterFsEdit.js b/www/manager6/storage/GlusterFsEdit.js
index 8155d9c2..86eb4c90 100644
--- a/www/manager6/storage/GlusterFsEdit.js
+++ b/www/manager6/storage/GlusterFsEdit.js
@@ -16,7 +16,7 @@ Ext.define('PVE.storage.GlusterFsScan', {
     },
 
     onTriggerClick: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.queryCaching || me.lastQuery !== me.glusterServer) {
 	    me.store.removeAll();
@@ -28,19 +28,19 @@ Ext.define('PVE.storage.GlusterFsScan', {
     },
 
     setServer: function(server) {
-	var me = this;
+	let me = this;
 
 	me.glusterServer = server;
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.nodename) {
 	    me.nodename = 'localhost';
 	}
 
-	var store = Ext.create('Ext.data.Store', {
+	let store = Ext.create('Ext.data.Store', {
 	    fields: ['volname'],
 	    proxy: {
 		type: 'proxmox',
@@ -64,7 +64,7 @@ Ext.define('PVE.storage.GlusterFsInputPanel', {
     onlineHelp: 'storage_glusterfs',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.column1 = [
 	    {
@@ -76,7 +76,7 @@ Ext.define('PVE.storage.GlusterFsInputPanel', {
 		listeners: {
 		    change: function(f, value) {
 			if (me.isCreate) {
-			    var volumeField = me.down('field[name=volume]');
+			    let volumeField = me.down('field[name=volume]');
 			    volumeField.setServer(value);
 			    volumeField.setValue('');
 			}
diff --git a/www/manager6/storage/ImageView.js b/www/manager6/storage/ImageView.js
index 69517b5e..e38fd8b8 100644
--- a/www/manager6/storage/ImageView.js
+++ b/www/manager6/storage/ImageView.js
@@ -4,14 +4,14 @@ Ext.define('PVE.storage.ImageView', {
     alias: 'widget.pveStorageImageView',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var nodename = me.nodename = me.pveSelNode.data.node;
+	let nodename = me.nodename = me.pveSelNode.data.node;
 	if (!me.nodename) {
 	    throw "no node name specified";
 	}
 
-	var storage = me.storage = me.pveSelNode.data.storage;
+	let storage = me.storage = me.pveSelNode.data.storage;
 	if (!me.storage) {
 	    throw "no storage ID specified";
 	}
@@ -20,9 +20,9 @@ Ext.define('PVE.storage.ImageView', {
 	    throw "content needs to be either 'images' or 'rootdir'";
 	}
 
-	var sm = me.sm = Ext.create('Ext.selection.RowModel', {});
+	let sm = me.sm = Ext.create('Ext.selection.RowModel', {});
 
-	var reload = function() {
+	let reload = function() {
 	    me.store.load();
 	};
 
@@ -34,17 +34,17 @@ Ext.define('PVE.storage.ImageView', {
 		disabled: true,
 		handler: function(btn, event, rec) {
 		    let url = `/nodes/${nodename}/storage/${storage}/content/${rec.data.volid}`;
-		    var vmid = rec.data.vmid;
+		    let vmid = rec.data.vmid;
 
-		    var store = PVE.data.ResourceStore;
+		    let store = PVE.data.ResourceStore;
 
 		    if (vmid && store.findVMID(vmid)) {
-			var guest_node = store.guestNode(vmid);
-			var storage_path = 'storage/' + nodename + '/' + storage;
+			let guest_node = store.guestNode(vmid);
+			let storage_path = 'storage/' + nodename + '/' + storage;
 
 			// allow to delete local backed images if a VMID exists on another node.
 			if (store.storageIsShared(storage_path) || guest_node === nodename) {
-			    var msg = Ext.String.format(
+			    let msg = Ext.String.format(
 				gettext("Cannot remove image, a guest with VMID '{0}' exists!"), vmid);
 			    msg += '<br />' + gettext("You can delete the image from the guest's hardware pane");
 
@@ -56,7 +56,7 @@ Ext.define('PVE.storage.ImageView', {
 			    return;
 			}
 		    }
-		    var win = Ext.create('Proxmox.window.SafeDestroy', {
+		    let win = Ext.create('Proxmox.window.SafeDestroy', {
 			title: Ext.String.format(gettext("Destroy '{0}'"), rec.data.volid),
 			showProgress: true,
 			url: url,
diff --git a/www/manager6/storage/NFSEdit.js b/www/manager6/storage/NFSEdit.js
index 202c7de0..85fe7dcf 100644
--- a/www/manager6/storage/NFSEdit.js
+++ b/www/manager6/storage/NFSEdit.js
@@ -16,7 +16,7 @@ Ext.define('PVE.storage.NFSScan', {
     },
 
     onTriggerClick: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.queryCaching || me.lastQuery !== me.nfsServer) {
 	    me.store.removeAll();
@@ -28,19 +28,19 @@ Ext.define('PVE.storage.NFSScan', {
     },
 
     setServer: function(server) {
-	var me = this;
+	let me = this;
 
 	me.nfsServer = server;
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.nodename) {
 	    me.nodename = 'localhost';
 	}
 
-	var store = Ext.create('Ext.data.Store', {
+	let store = Ext.create('Ext.data.Store', {
 	    fields: ['path', 'options'],
 	    proxy: {
 		type: 'proxmox',
@@ -66,12 +66,12 @@ Ext.define('PVE.storage.NFSInputPanel', {
     options: [],
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
-	var i;
-	var res = [];
+	let i;
+	let res = [];
 	for (i = 0; i < me.options.length; i++) {
-	    var item = me.options[i];
+	    let item = me.options[i];
 	    if (!item.match(/^vers=(.*)$/)) {
 		res.push(item);
 	    }
@@ -92,11 +92,11 @@ Ext.define('PVE.storage.NFSInputPanel', {
     },
 
     setValues: function(values) {
-	var me = this;
+	let me = this;
 	if (values.options) {
 	    me.options = values.options.split(',');
 	    me.options.forEach(function(item) {
-		var match = item.match(/^vers=(.*)$/);
+		let match = item.match(/^vers=(.*)$/);
 		if (match) {
 		    values.nfsversion = match[1];
 		}
@@ -106,7 +106,7 @@ Ext.define('PVE.storage.NFSInputPanel', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 
 	me.column1 = [
@@ -119,7 +119,7 @@ Ext.define('PVE.storage.NFSInputPanel', {
 		listeners: {
 		    change: function(f, value) {
 			if (me.isCreate) {
-			    var exportField = me.down('field[name=export]');
+			    let exportField = me.down('field[name=export]');
 			    exportField.setServer(value);
 			    exportField.setValue('');
 			}
diff --git a/www/manager6/storage/PBSEdit.js b/www/manager6/storage/PBSEdit.js
index d880308c..76981eda 100644
--- a/www/manager6/storage/PBSEdit.js
+++ b/www/manager6/storage/PBSEdit.js
@@ -469,7 +469,7 @@ Ext.define('PVE.storage.PBSInputPanel', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.column1 = [
 	    {
diff --git a/www/manager6/storage/RBDEdit.js b/www/manager6/storage/RBDEdit.js
index 15fc1304..0d7c0124 100644
--- a/www/manager6/storage/RBDEdit.js
+++ b/www/manager6/storage/RBDEdit.js
@@ -45,23 +45,23 @@ Ext.define('PVE.storage.Ceph.Controller', {
 	if (field && !newVal && oldVal) {
 	    return;
 	}
-	var view = this.getView();
-	var vm = this.getViewModel();
+	let view = this.getView();
+	let vm = this.getViewModel();
 	if (!(view.isCreate || vm.get('pveceph'))) {
 	    return; // only query on create or if editing a pveceph store
 	}
 
-	var monhostField = this.lookupReference('monhost');
+	let monhostField = this.lookupReference('monhost');
 
 	Proxmox.Utils.API2Request({
 	    url: '/api2/json/nodes/localhost/ceph/mon',
 	    method: 'GET',
 	    scope: this,
 	    callback: function(options, success, response) {
-		var data = response.result.data;
+		let data = response.result.data;
 		if (response.status === 200) {
 		    if (data.length > 0) {
-			var monhost = Ext.Array.pluck(data, 'name').sort().join(',');
+			let monhost = Ext.Array.pluck(data, 'name').sort().join(',');
 			monhostField.setValue(monhost);
 			monhostField.resetOriginalValue();
 			if (view.isCreate) {
@@ -102,7 +102,7 @@ Ext.define('PVE.storage.RBDInputPanel', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.nodename) {
 	    me.nodename = 'localhost';
diff --git a/www/manager6/storage/Summary.js b/www/manager6/storage/Summary.js
index bc61139d..131e9dc7 100644
--- a/www/manager6/storage/Summary.js
+++ b/www/manager6/storage/Summary.js
@@ -17,24 +17,24 @@ Ext.define('PVE.storage.Summary', {
 	columnWidth: 1,
     },
     initComponent: function() {
-        var me = this;
+        let me = this;
 
-	var nodename = me.pveSelNode.data.node;
+	let nodename = me.pveSelNode.data.node;
 	if (!nodename) {
 	    throw "no node name specified";
 	}
 
-	var storage = me.pveSelNode.data.storage;
+	let storage = me.pveSelNode.data.storage;
 	if (!storage) {
 	    throw "no storage ID specified";
 	}
 
-	var rstore = Ext.create('Proxmox.data.ObjectStore', {
+	let rstore = Ext.create('Proxmox.data.ObjectStore', {
 	    url: "/api2/json/nodes/" + nodename + "/storage/" + storage + "/status",
 	    interval: 1000,
 	});
 
-	var rrdstore = Ext.create('Proxmox.data.RRDStore', {
+	let rrdstore = Ext.create('Proxmox.data.RRDStore', {
 	    rrdurl: "/api2/json/nodes/" + nodename + "/storage/" + storage + "/rrddata",
 	    model: 'pve-rrd-storage',
 	});
diff --git a/www/manager6/storage/TemplateView.js b/www/manager6/storage/TemplateView.js
index a2a05e00..3b3064d0 100644
--- a/www/manager6/storage/TemplateView.js
+++ b/www/manager6/storage/TemplateView.js
@@ -9,14 +9,14 @@ Ext.define('PVE.grid.TemplateSelector', {
 	trackOver: false,
     },
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.nodename) {
 	    throw "no node name specified";
 	}
 
-	var baseurl = "/nodes/" + me.nodename + "/aplinfo";
-	var store = new Ext.data.Store({
+	let baseurl = "/nodes/" + me.nodename + "/aplinfo";
+	let store = new Ext.data.Store({
 	    model: 'pve-aplinfo',
 	    groupField: 'section',
 	    proxy: {
@@ -25,13 +25,13 @@ Ext.define('PVE.grid.TemplateSelector', {
 	    },
 	});
 
-	var sm = Ext.create('Ext.selection.RowModel', {});
+	let sm = Ext.create('Ext.selection.RowModel', {});
 
-	var groupingFeature = Ext.create('Ext.grid.feature.Grouping', {
+	let groupingFeature = Ext.create('Ext.grid.feature.Grouping', {
             groupHeaderTpl: '{[ "Section: " + values.name ]} ({rows.length} Item{[values.rows.length > 1 ? "s" : ""]})',
 	});
 
-	var reload = function() {
+	let reload = function() {
 	    store.load();
 	};
 
@@ -50,7 +50,7 @@ Ext.define('PVE.grid.TemplateSelector', {
 		    listeners: {
 			buffer: 500,
 			keyup: function(field) {
-			    var value = field.getValue().toLowerCase();
+			    let value = field.getValue().toLowerCase();
 			    store.clearFilter(true);
 			    store.filterBy(function(rec) {
 				return rec.data.package.toLowerCase().indexOf(value) !== -1 ||
@@ -113,17 +113,17 @@ Ext.define('PVE.storage.TemplateDownload', {
     width: 900,
     height: 600,
     initComponent: function() {
-        var me = this;
+        let me = this;
 
-	var grid = Ext.create('PVE.grid.TemplateSelector', {
+	let grid = Ext.create('PVE.grid.TemplateSelector', {
 	    border: false,
 	    scrollable: true,
 	    nodename: me.nodename,
 	});
 
-	var sm = grid.getSelectionModel();
+	let sm = grid.getSelectionModel();
 
-	var submitBtn = Ext.create('Proxmox.button.Button', {
+	let submitBtn = Ext.create('Proxmox.button.Button', {
 	    text: gettext('Download'),
 	    disabled: true,
 	    selModel: sm,
@@ -139,7 +139,7 @@ Ext.define('PVE.storage.TemplateDownload', {
 			Ext.Msg.alert(gettext('Error'), response.htmlStatus);
 		    },
 		    success: function(response, options) {
-			var upid = response.result.data;
+			let upid = response.result.data;
 
 			Ext.create('Proxmox.window.TaskViewer', {
 			    upid: upid,
@@ -169,29 +169,29 @@ Ext.define('PVE.storage.TemplateView', {
     alias: 'widget.pveStorageTemplateView',
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var nodename = me.nodename = me.pveSelNode.data.node;
+	let nodename = me.nodename = me.pveSelNode.data.node;
 	if (!nodename) {
 	    throw "no node name specified";
 	}
 
-	var storage = me.storage = me.pveSelNode.data.storage;
+	let storage = me.storage = me.pveSelNode.data.storage;
 	if (!storage) {
 	    throw "no storage ID specified";
 	}
 
 	me.content = 'vztmpl';
 
-	var reload = function() {
+	let reload = function() {
 	    me.store.load();
 	};
 
-	var templateButton = Ext.create('Proxmox.button.Button', {
+	let templateButton = Ext.create('Proxmox.button.Button', {
 	    itemId: 'tmpl-btn',
 	    text: gettext('Templates'),
 	    handler: function() {
-		var win = Ext.create('PVE.storage.TemplateDownload', {
+		let win = Ext.create('PVE.storage.TemplateDownload', {
 		    nodename: nodename,
 		    storage: storage,
 		    reloadGrid: reload,
diff --git a/www/manager6/storage/ZFSEdit.js b/www/manager6/storage/ZFSEdit.js
index 0c5a3ceb..c1baedb6 100644
--- a/www/manager6/storage/ZFSEdit.js
+++ b/www/manager6/storage/ZFSEdit.js
@@ -18,7 +18,7 @@ Ext.define('PVE.storage.ZFSInputPanel', {
 	    },
 	},
 	changeISCSIProvider: function(f, newVal, oldVal) {
-	    var vm = this.getViewModel();
+	    let vm = this.getViewModel();
 	    vm.set('isLIO', newVal === 'LIO');
 	    vm.set('isComstar', newVal === 'comstar');
 	    vm.set('hasWriteCacheOption', newVal === 'comstar' || newVal === 'istgt');
@@ -26,7 +26,7 @@ Ext.define('PVE.storage.ZFSInputPanel', {
     },
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
 	if (me.isCreate) {
 	    values.content = 'images';
@@ -44,7 +44,7 @@ Ext.define('PVE.storage.ZFSInputPanel', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.column1 = [
 	    {
diff --git a/www/manager6/tree/SnapshotTree.js b/www/manager6/tree/SnapshotTree.js
index 97268072..ab576d44 100644
--- a/www/manager6/tree/SnapshotTree.js
+++ b/www/manager6/tree/SnapshotTree.js
@@ -83,8 +83,8 @@ Ext.define('PVE.guest.SnapshotTree', {
 		    Ext.Msg.alert(gettext('Error'), response.htmlStatus);
 		},
 		success: function(response, options) {
-		    var upid = response.result.data;
-		    var win = Ext.create('Proxmox.window.TaskProgress', { upid: upid });
+		    let upid = response.result.data;
+		    let win = Ext.create('Proxmox.window.TaskProgress', { upid: upid });
 		    win.show();
 		},
 	    });
@@ -124,9 +124,9 @@ Ext.define('PVE.guest.SnapshotTree', {
 			return;
 		    }
 		    Proxmox.Utils.setErrorMask(view, false);
-		    var digest = 'invalid';
-		    var idhash = {};
-		    var root = { name: '__root', expanded: true, children: [] };
+		    let digest = 'invalid';
+		    let idhash = {};
+		    let root = { name: '__root', expanded: true, children: [] };
 		    Ext.Array.each(response.result.data, function(item) {
 			item.leaf = true;
 			item.children = [];
@@ -145,7 +145,7 @@ Ext.define('PVE.guest.SnapshotTree', {
 
 			Ext.Array.each(response.result.data, function(item) {
 			    if (item.parent && idhash[item.parent]) {
-				var parent_item = idhash[item.parent];
+				let parent_item = idhash[item.parent];
 				parent_item.children.push(item);
 				parent_item.leaf = false;
 				parent_item.expanded = true;
diff --git a/www/manager6/window/Backup.js b/www/manager6/window/Backup.js
index 510430c0..d2f8aa66 100644
--- a/www/manager6/window/Backup.js
+++ b/www/manager6/window/Backup.js
@@ -4,7 +4,7 @@ Ext.define('PVE.window.Backup', {
     resizable: false,
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.nodename) {
 	    throw "no node name specified";
@@ -71,7 +71,7 @@ Ext.define('PVE.window.Backup', {
 
 	let initialDefaults = false;
 
-	var storagesel = Ext.create('PVE.form.StorageSelector', {
+	let storagesel = Ext.create('PVE.form.StorageSelector', {
 	    nodename: me.nodename,
 	    name: 'storage',
 	    fieldLabel: gettext('Storage'),
@@ -239,12 +239,12 @@ Ext.define('PVE.window.Backup', {
 	    ],
 	});
 
-	var submitBtn = Ext.create('Ext.Button', {
+	let submitBtn = Ext.create('Ext.Button', {
 	    text: gettext('Backup'),
 	    handler: function() {
-		var storage = storagesel.getValue();
+		let storage = storagesel.getValue();
 		let values = me.formPanel.getValues();
-		var params = {
+		let params = {
 		    storage: storage,
 		    vmid: me.vmid,
 		    mode: values.mode,
@@ -280,9 +280,9 @@ Ext.define('PVE.window.Backup', {
 			// after the task has completed
 			me.hide();
 
-			var upid = response.result.data;
+			let upid = response.result.data;
 
-			var win = Ext.create('Proxmox.window.TaskViewer', {
+			let win = Ext.create('Proxmox.window.TaskViewer', {
 			    upid: upid,
 			    listeners: {
 				close: function() {
@@ -296,13 +296,13 @@ Ext.define('PVE.window.Backup', {
 	    },
 	});
 
-	var helpBtn = Ext.create('Proxmox.button.Help', {
+	let helpBtn = Ext.create('Proxmox.button.Help', {
 	    onlineHelp: 'chapter_vzdump',
 	    listenToGlobalEvent: false,
 	    hidden: false,
 	});
 
-	var title = gettext('Backup') + " " +
+	let title = gettext('Backup') + " " +
 	    (me.vmtype === 'lxc' ? "CT" : "VM") +
 	    " " + me.vmid;
 
diff --git a/www/manager6/window/BackupConfig.js b/www/manager6/window/BackupConfig.js
index ca61b1e4..413e8a1d 100644
--- a/www/manager6/window/BackupConfig.js
+++ b/www/manager6/window/BackupConfig.js
@@ -18,13 +18,13 @@ Ext.define('PVE.window.BackupConfig', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.volume) {
 	    throw "no volume specified";
 	}
 
-	var nodename = me.pveSelNode.data.node;
+	let nodename = me.pveSelNode.data.node;
 	if (!nodename) {
 	    throw "no node name specified";
 	}
diff --git a/www/manager6/window/BulkAction.js b/www/manager6/window/BulkAction.js
index 01233080..f6c7a37d 100644
--- a/www/manager6/window/BulkAction.js
+++ b/www/manager6/window/BulkAction.js
@@ -17,7 +17,7 @@ Ext.define('PVE.window.BulkAction', {
     action: undefined,
 
     submit: function(params) {
-	var me = this;
+	let me = this;
 
 	Proxmox.Utils.API2Request({
 	    params: params,
@@ -28,9 +28,9 @@ Ext.define('PVE.window.BulkAction', {
 		Ext.Msg.alert('Error', response.htmlStatus);
 	    },
 	    success: function(response, options) {
-		var upid = response.result.data;
+		let upid = response.result.data;
 
-		var win = Ext.create('Proxmox.window.TaskViewer', {
+		let win = Ext.create('Proxmox.window.TaskViewer', {
 		    upid: upid,
 		});
 		win.show();
@@ -43,7 +43,7 @@ Ext.define('PVE.window.BulkAction', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.nodename) {
 	    throw "no node name specified";
@@ -58,7 +58,7 @@ Ext.define('PVE.window.BulkAction', {
 	    throw "no title specified";
 	}
 
-	var items = [];
+	let items = [];
 
 	if (me.action === 'migrateall') {
 	    /*value is string and number*/
@@ -155,9 +155,9 @@ Ext.define('PVE.window.BulkAction', {
 	    items: items,
 	});
 
-	var form = me.formPanel.getForm();
+	let form = me.formPanel.getForm();
 
-	var submitBtn = Ext.create('Ext.Button', {
+	let submitBtn = Ext.create('Ext.Button', {
 	    text: me.btnText,
 	    handler: function() {
 		form.isValid();
@@ -173,7 +173,7 @@ Ext.define('PVE.window.BulkAction', {
 	me.callParent();
 
 	form.on('validitychange', function() {
-	    var valid = form.isValid();
+	    let valid = form.isValid();
 	    submitBtn.setDisabled(!valid);
 	});
 	form.isValid();
diff --git a/www/manager6/window/Clone.js b/www/manager6/window/Clone.js
index e94cd92d..918ab9b7 100644
--- a/www/manager6/window/Clone.js
+++ b/www/manager6/window/Clone.js
@@ -28,8 +28,8 @@ Ext.define('PVE.window.Clone', {
 		    Ext.Msg.alert('Error', response.htmlStatus);
 		},
 		success: function(response, opts) {
-		    var snapshotList = response.result.data;
-		    var hasSnapshots = !(snapshotList.length === 1 &&
+		    let snapshotList = response.result.data;
+		    let hasSnapshots = !(snapshotList.length === 1 &&
 			snapshotList[0].name === 'current');
 
 		    Ext.create('PVE.window.Clone', {
@@ -45,9 +45,9 @@ Ext.define('PVE.window.Clone', {
     },
 
     create_clone: function(values) {
-	var me = this;
+	let me = this;
 
-	var params = { newid: values.newvmid };
+	let params = { newid: values.newvmid };
 
 	if (values.snapname && values.snapname !== 'current') {
 	    params.snapname = values.snapname;
@@ -95,21 +95,21 @@ Ext.define('PVE.window.Clone', {
 
     // disable the Storage selector when clone mode is linked clone
     updateVisibility: function() {
-	var me = this;
-	var clonemode = me.lookupReference('clonemodesel').getValue();
-	var disksel = me.lookup('diskselector');
+	let me = this;
+	let clonemode = me.lookupReference('clonemodesel').getValue();
+	let disksel = me.lookup('diskselector');
 	disksel.setDisabled(clonemode === 'clone');
     },
 
     // add to the list of valid nodes each node where
     // all the VM disks are available
     verifyFeature: function() {
-	var me = this;
+	let me = this;
 
-	var snapname = me.lookupReference('snapshotsel').getValue();
-	var clonemode = me.lookupReference('clonemodesel').getValue();
+	let snapname = me.lookupReference('snapshotsel').getValue();
+	let clonemode = me.lookupReference('clonemodesel').getValue();
 
-	var params = { feature: clonemode };
+	let params = { feature: clonemode };
 	if (snapname !== 'current') {
 	    params.snapname = snapname;
 	}
@@ -124,7 +124,7 @@ Ext.define('PVE.window.Clone', {
 		Ext.Msg.alert('Error', response.htmlStatus);
 	    },
 	    success: function(response, options) {
-		var res = response.result.data;
+		let res = response.result.data;
 
 		me.lookupReference('targetsel').allowedNodes = res.nodes;
 		me.lookupReference('targetsel').validate();
@@ -133,7 +133,7 @@ Ext.define('PVE.window.Clone', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	if (!me.nodename) {
 	    throw "no node name specified";
@@ -151,14 +151,14 @@ Ext.define('PVE.window.Clone', {
 	    throw "no Guest Type specified";
 	}
 
-	var titletext = me.guestType === 'lxc' ? 'CT' : 'VM';
+	let titletext = me.guestType === 'lxc' ? 'CT' : 'VM';
 	if (me.isTemplate) {
 	    titletext += ' Template';
 	}
 	me.title = "Clone " + titletext + " " + me.vmid;
 
-	var col1 = [];
-	var col2 = [];
+	let col1 = [];
+	let col2 = [];
 
 	col1.push({
 	    xtype: 'pveNodeSelector',
@@ -175,7 +175,7 @@ Ext.define('PVE.window.Clone', {
 	    },
 	});
 
-	var modelist = [['copy', gettext('Full Clone')]];
+	let modelist = [['copy', gettext('Full Clone')]];
 	if (me.isTemplate) {
 	    modelist.push(['clone', gettext('Linked Clone')]);
 	}
@@ -251,7 +251,7 @@ Ext.define('PVE.window.Clone', {
 	    disabled: !!me.isTemplate, // because default mode is clone for templates
 	});
 
-	var formPanel = Ext.create('Ext.form.Panel', {
+	let formPanel = Ext.create('Ext.form.Panel', {
 	    bodyPadding: 10,
 	    reference: 'cloneform',
 	    border: false,
@@ -295,7 +295,7 @@ Ext.define('PVE.window.Clone', {
 		text: gettext('Clone'),
 		disabled: true,
 		handler: function() {
-		    var cloneForm = me.lookupReference('cloneform');
+		    let cloneForm = me.lookupReference('cloneform');
 		    if (cloneForm.isValid()) {
 			me.create_clone(cloneForm.getValues());
 		    }
diff --git a/www/manager6/window/DownloadUrlToStorage.js b/www/manager6/window/DownloadUrlToStorage.js
index 48543d28..61f6a329 100644
--- a/www/manager6/window/DownloadUrlToStorage.js
+++ b/www/manager6/window/DownloadUrlToStorage.js
@@ -13,7 +13,7 @@ Ext.define('PVE.window.DownloadUrlToStorage', {
     submitText: gettext('Download'),
 
     cbindData: function(initialConfig) {
-	var me = this;
+	let me = this;
 	return {
 	    nodename: me.nodename,
 	    storage: me.storage,
@@ -215,7 +215,7 @@ Ext.define('PVE.window.DownloadUrlToStorage', {
     ],
 
     initComponent: function() {
-        var me = this;
+        let me = this;
 
 	if (!me.nodename) {
 	    throw "no node name specified";
diff --git a/www/manager6/window/FirewallEnableEdit.js b/www/manager6/window/FirewallEnableEdit.js
index 34ecadbc..cb81656f 100644
--- a/www/manager6/window/FirewallEnableEdit.js
+++ b/www/manager6/window/FirewallEnableEdit.js
@@ -31,7 +31,7 @@ Ext.define('PVE.FirewallEnableEdit', {
     ],
 
     beforeShow: function() {
-	var me = this;
+	let me = this;
 
 	Proxmox.Utils.API2Request({
 	    url: '/api2/extjs/cluster/firewall/options',
diff --git a/www/manager6/window/FirewallLograteEdit.js b/www/manager6/window/FirewallLograteEdit.js
index 12fcc3f1..d3a1e865 100644
--- a/www/manager6/window/FirewallLograteEdit.js
+++ b/www/manager6/window/FirewallLograteEdit.js
@@ -77,7 +77,7 @@ Ext.define('PVE.FirewallLograteInputPanel', {
 	if (values.log_ratelimit !== undefined) {
 	    properties = PVE.Parser.parsePropertyString(values.log_ratelimit, 'enable');
 	    if (properties.rate) {
-		var matches = properties.rate.match(/^(\d+)\/(second|minute|hour|day)$/);
+		let matches = properties.rate.match(/^(\d+)\/(second|minute|hour|day)$/);
 		if (matches) {
 		    properties.rate = matches[1];
 		    properties.unit = matches[2];
diff --git a/www/manager6/window/LoginWindow.js b/www/manager6/window/LoginWindow.js
index 4a07f75b..99c3f6b8 100644
--- a/www/manager6/window/LoginWindow.js
+++ b/www/manager6/window/LoginWindow.js
@@ -22,12 +22,12 @@ Ext.define('PVE.window.LoginWindow', {
 	xclass: 'Ext.app.ViewController',
 
 	onLogon: async function() {
-	    var me = this;
+	    let me = this;
 
-	    var form = this.lookupReference('loginForm');
-	    var unField = this.lookupReference('usernameField');
-	    var saveunField = this.lookupReference('saveunField');
-	    var view = this.getView();
+	    let form = this.lookupReference('loginForm');
+	    let unField = this.lookupReference('usernameField');
+	    let saveunField = this.lookupReference('saveunField');
+	    let view = this.getView();
 
 	    if (!form.isValid()) {
 		return;
@@ -62,7 +62,7 @@ Ext.define('PVE.window.LoginWindow', {
 	    view.el.mask(gettext('Please wait...'), 'x-mask-loading');
 
 	    // set or clear username
-	    var sp = Ext.state.Manager.getProvider();
+	    let sp = Ext.state.Manager.getProvider();
 	    if (saveunField.getValue() === true) {
 		sp.set(unField.getStateId(), unField.getValue());
 	    } else {
@@ -135,11 +135,11 @@ Ext.define('PVE.window.LoginWindow', {
 	/* END NEW TFA CODE (pbs copy) */
 
 	failure: function(resp) {
-	    var me = this;
-	    var view = me.getView();
+	    let me = this;
+	    let view = me.getView();
 	    view.el.unmask();
-	    var handler = function() {
-		var uf = me.lookupReference('usernameField');
+	    let handler = function() {
+		let uf = me.lookupReference('usernameField');
 		uf.focus(true, true);
 	    };
 
@@ -152,16 +152,16 @@ Ext.define('PVE.window.LoginWindow', {
 	    Ext.MessageBox.alert(gettext('Error'), emsg, handler);
 	},
 	success: function(data) {
-	    var me = this;
-	    var view = me.getView();
-	    var handler = view.handler || Ext.emptyFn;
+	    let me = this;
+	    let view = me.getView();
+	    let handler = view.handler || Ext.emptyFn;
 	    handler.call(me, data);
 	    view.close();
 	},
 
 	perform_otp: function() {
-	    var me = this;
-	    var win = Ext.create('PVE.window.TFALoginWindow', {
+	    let me = this;
+	    let win = Ext.create('PVE.window.TFALoginWindow', {
 		onLogin: function(value) {
 		    me.finish_tfa(value);
 		},
@@ -175,15 +175,15 @@ Ext.define('PVE.window.LoginWindow', {
 	},
 
 	perform_u2f: function(data) {
-	    var me = this;
+	    let me = this;
 	    // Show the message:
-	    var msg = Ext.Msg.show({
+	    let msg = Ext.Msg.show({
 		title: 'U2F: '+gettext('Verification'),
 		message: gettext('Please press the button on your U2F Device'),
 		buttons: [],
 	    });
-	    var chlg = data.U2FChallenge;
-	    var key = {
+	    let chlg = data.U2FChallenge;
+	    let key = {
 		version: chlg.version,
 		keyHandle: chlg.keyHandle,
 	    };
@@ -199,8 +199,8 @@ Ext.define('PVE.window.LoginWindow', {
 	    });
 	},
 	finish_tfa: function(res) {
-	    var me = this;
-	    var view = me.getView();
+	    let me = this;
+	    let view = me.getView();
 	    view.el.mask(gettext('Please wait...'), 'x-mask-loading');
 	    Proxmox.Utils.API2Request({
 		url: '/api2/extjs/access/tfa',
@@ -212,7 +212,7 @@ Ext.define('PVE.window.LoginWindow', {
 		success: function(resp, opts) {
 		    view.el.unmask();
 		    // Fill in what we copy over from the 1st factor:
-		    var data = resp.result.data;
+		    let data = resp.result.data;
 		    data.CSRFPreventionToken = Proxmox.CSRFPreventionToken;
 		    data.username = Proxmox.UserName;
 		    // Finish logging in:
@@ -229,7 +229,7 @@ Ext.define('PVE.window.LoginWindow', {
 	    'field[name=username]': {
 		specialkey: function(f, e) {
 		    if (e.getKey() === e.ENTER) {
-			var pf = this.lookupReference('passwordField');
+			let pf = this.lookupReference('passwordField');
 			if (!pf.getValue()) {
 			    pf.focus(false);
 			}
@@ -238,7 +238,7 @@ Ext.define('PVE.window.LoginWindow', {
 	    },
 	    'field[name=lang]': {
 		change: function(f, value) {
-		    var dt = Ext.Date.add(new Date(), Ext.Date.YEAR, 10);
+		    let dt = Ext.Date.add(new Date(), Ext.Date.YEAR, 10);
 		    Ext.util.Cookies.set('PVELangCookie', value, dt);
 		    this.getView().mask(gettext('Please wait...'), 'x-mask-loading');
 		    window.location.reload();
@@ -257,19 +257,19 @@ Ext.define('PVE.window.LoginWindow', {
 	    },
 	    '#': {
 		show: function() {
-		    var me = this;
+		    let me = this;
 
-		    var sp = Ext.state.Manager.getProvider();
-		    var checkboxField = this.lookupReference('saveunField');
-		    var unField = this.lookupReference('usernameField');
+		    let sp = Ext.state.Manager.getProvider();
+		    let checkboxField = this.lookupReference('saveunField');
+		    let unField = this.lookupReference('usernameField');
 
-		    var checked = sp.get(checkboxField.getStateId());
+		    let checked = sp.get(checkboxField.getStateId());
 		    checkboxField.setValue(checked);
 
 		    if (checked === true) {
-			var username = sp.get(unField.getStateId());
+			let username = sp.get(unField.getStateId());
 			unField.setValue(username);
-			var pwField = this.lookupReference('passwordField');
+			let pwField = this.lookupReference('passwordField');
 			pwField.focus();
 		    }
 
diff --git a/www/manager6/window/Migrate.js b/www/manager6/window/Migrate.js
index 1c23abb3..54e1f700 100644
--- a/www/manager6/window/Migrate.js
+++ b/www/manager6/window/Migrate.js
@@ -74,7 +74,7 @@ Ext.define('PVE.window.Migrate', {
 	},
 
 	init: function(view) {
-	    var me = this,
+	    let me = this,
 		vm = view.getViewModel();
 
 	    if (!view.nodename) {
@@ -108,12 +108,12 @@ Ext.define('PVE.window.Migrate', {
 	},
 
 	startMigration: function() {
-	    var me = this,
+	    let me = this,
 		view = me.getView(),
 		vm = me.getViewModel();
 
-	    var values = me.lookup('formPanel').getValues();
-	    var params = {
+	    let values = me.lookup('formPanel').getValues();
+	    let params = {
 		target: values.target,
 	    };
 
@@ -142,8 +142,8 @@ Ext.define('PVE.window.Migrate', {
 		    Ext.Msg.alert(gettext('Error'), response.htmlStatus);
 		},
 		success: function(response, options) {
-		    var upid = response.result.data;
-		    var extraTitle = Ext.String.format(' ({0} ---> {1})', vm.get('nodename'), params.target);
+		    let upid = response.result.data;
+		    let extraTitle = Ext.String.format(' ({0} ---> {1})', vm.get('nodename'), params.target);
 
 		    Ext.create('Proxmox.window.TaskViewer', {
 			upid: upid,
@@ -156,10 +156,10 @@ Ext.define('PVE.window.Migrate', {
 	},
 
 	checkMigratePreconditions: function(resetMigrationPossible) {
-	    var me = this,
+	    let me = this,
 		vm = me.getViewModel();
 
-	    var vmrec = PVE.data.ResourceStore.findRecord('vmid', vm.get('vmid'),
+	    let vmrec = PVE.data.ResourceStore.findRecord('vmid', vm.get('vmid'),
 			0, false, false, true);
 	    if (vmrec && vmrec.data && vmrec.data.running) {
 		vm.set('running', true);
diff --git a/www/manager6/window/Prune.js b/www/manager6/window/Prune.js
index 6156fe03..e16daa25 100644
--- a/www/manager6/window/Prune.js
+++ b/www/manager6/window/Prune.js
@@ -106,7 +106,7 @@ Ext.define('PVE.PruneInputPanel', {
 		    Ext.Msg.alert(gettext('Error'), response.htmlStatus);
 		},
 		success: function(response, options) {
-		    var data = response.result.data;
+		    let data = response.result.data;
 		    addKeepReasons(data, keepParams);
 		    view.pruneStore.setData(data);
 		},
@@ -152,7 +152,7 @@ Ext.define('PVE.PruneInputPanel', {
     ],
 
     initComponent: function() {
-        var me = this;
+        let me = this;
 
 	me.pruneStore = Ext.create('Ext.data.Store', {
 	    model: 'pve-prune-list',
@@ -214,7 +214,7 @@ Ext.define('PVE.window.Prune', {
     isCreate: true,
 
     initComponent: function() {
-        var me = this;
+        let me = this;
 
 	if (!me.nodename) {
 	    throw "no nodename specified";
diff --git a/www/manager6/window/Settings.js b/www/manager6/window/Settings.js
index 5cf7a70f..67a55b5b 100644
--- a/www/manager6/window/Settings.js
+++ b/www/manager6/window/Settings.js
@@ -29,12 +29,12 @@ Ext.define('PVE.window.Settings', {
 	xclass: 'Ext.app.ViewController',
 
 	init: function(view) {
-	    var me = this;
-	    var sp = Ext.state.Manager.getProvider();
+	    let me = this;
+	    let sp = Ext.state.Manager.getProvider();
 
-	    var username = sp.get('login-username') || Proxmox.Utils.noneText;
+	    let username = sp.get('login-username') || Proxmox.Utils.noneText;
 	    me.lookupReference('savedUserName').setValue(Ext.String.htmlEncode(username));
-	    var vncMode = sp.get('novnc-scaling') || 'auto';
+	    let vncMode = sp.get('novnc-scaling') || 'auto';
 	    me.lookupReference('noVNCScalingGroup').setValue({ noVNCScalingField: vncMode });
 
 	    let summarycolumns = sp.get('summarycolumns', 'auto');
@@ -42,11 +42,11 @@ Ext.define('PVE.window.Settings', {
 
 	    me.lookup('guestNotesCollapse').setValue(sp.get('guest-notes-collapse', 'never'));
 
-	    var settings = ['fontSize', 'fontFamily', 'letterSpacing', 'lineHeight'];
+	    let settings = ['fontSize', 'fontFamily', 'letterSpacing', 'lineHeight'];
 	    settings.forEach(function(setting) {
-		var val = localStorage.getItem('pve-xterm-' + setting);
+		let val = localStorage.getItem('pve-xterm-' + setting);
 		if (val !== undefined && val !== null) {
-		    var field = me.lookup(setting);
+		    let field = me.lookup(setting);
 		    field.setValue(val);
 		    field.resetOriginalValue();
 		}
@@ -71,12 +71,12 @@ Ext.define('PVE.window.Settings', {
 	    },
 	    '#xtermjs button': {
 		click: function(button) {
-		    var me = this;
-		    var settings = ['fontSize', 'fontFamily', 'letterSpacing', 'lineHeight'];
+		    let me = this;
+		    let settings = ['fontSize', 'fontFamily', 'letterSpacing', 'lineHeight'];
 		    settings.forEach(function(setting) {
-			var field = me.lookup(setting);
+			let field = me.lookup(setting);
 			if (button.reference === 'xtermsave') {
-			    var value = field.getValue();
+			    let value = field.getValue();
 			    if (value) {
 				localStorage.setItem('pve-xterm-' + setting, value);
 			    } else {
@@ -112,8 +112,8 @@ Ext.define('PVE.window.Settings', {
 	    },
 	    'grid[reference=dashboard-storages]': {
 		selectionchange: function(grid, selected) {
-		    var me = this;
-		    var sp = Ext.state.Manager.getProvider();
+		    let me = this;
+		    let sp = Ext.state.Manager.getProvider();
 
 		    // saves the selected storageids as "id1,id2,id3,..." or clears the variable
 		    if (selected.length > 0) {
diff --git a/www/manager6/window/Snapshot.js b/www/manager6/window/Snapshot.js
index 426be7cc..42d4981a 100644
--- a/www/manager6/window/Snapshot.js
+++ b/www/manager6/window/Snapshot.js
@@ -25,8 +25,8 @@ Ext.define('PVE.window.Snapshot', {
     },
 
     initComponent: function() {
-	var me = this;
-	var vm = me.getViewModel();
+	let me = this;
+	let vm = me.getViewModel();
 
 	if (!me.nodename) {
 	    throw "no node name specified";
diff --git a/www/manager6/window/StartupEdit.js b/www/manager6/window/StartupEdit.js
index b9fd7646..dd107c11 100644
--- a/www/manager6/window/StartupEdit.js
+++ b/www/manager6/window/StartupEdit.js
@@ -3,9 +3,9 @@ Ext.define('PVE.panel.StartupInputPanel', {
     onlineHelp: 'qm_startup_and_shutdown',
 
     onGetValues: function(values) {
-	var me = this;
+	let me = this;
 
-	var res = PVE.Parser.printStartup(values);
+	let res = PVE.Parser.printStartup(values);
 
 	if (res === undefined || res === '') {
 	    return { 'delete': 'startup' };
@@ -15,16 +15,16 @@ Ext.define('PVE.panel.StartupInputPanel', {
     },
 
     setStartup: function(value) {
-	var me = this;
+	let me = this;
 
-	var startup = PVE.Parser.parseStartup(value);
+	let startup = PVE.Parser.parseStartup(value);
 	if (startup) {
 	    me.setValues(startup);
 	}
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
 	me.items = [
 	    {
diff --git a/www/manager6/window/Wizard.js b/www/manager6/window/Wizard.js
index 4aacb8a3..8a3942bc 100644
--- a/www/manager6/window/Wizard.js
+++ b/www/manager6/window/Wizard.js
@@ -34,9 +34,9 @@ Ext.define('PVE.window.Wizard', {
     },
 
     initComponent: function() {
-	var me = this;
+	let me = this;
 
-	var tabs = me.items || [];
+	let tabs = me.items || [];
 	delete me.items;
 
 	/*
-- 
2.30.2





^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [pve-devel] [PATCH V2 manager 1/3] fix #2822: add iscsi, lvm, lvmthin & zfs storage for all cluster nodes
  2022-06-22 14:39 ` [pve-devel] [PATCH V2 manager 1/3] fix #2822: add iscsi, lvm, lvmthin & zfs storage for " Stefan Hrdlicka
@ 2022-06-28 10:33   ` Fabian Ebner
       [not found]     ` <779a3434-e2a9-c92a-56b1-625346dcf1d4@proxmox.com>
  0 siblings, 1 reply; 8+ messages in thread
From: Fabian Ebner @ 2022-06-28 10:33 UTC (permalink / raw)
  To: pve-devel, Stefan Hrdlicka

Am 22.06.22 um 16:39 schrieb Stefan Hrdlicka:
> This adds a dropdown box for iSCSI, LVM, LVMThin & ZFS storage options where a
> cluster node needs to be chosen. As default the current node is
> selected. It restricts the the storage to be only availabe on the
> selected node.

I don't think we should change the default restriction, especially for
iSCSI and (shared) LVM, but also for local ones, as in many cases,
cluster nodes will be set-up with similar storage and the new default
might trip up some people.

> 
> Signed-off-by: Stefan Hrdlicka <s.hrdlicka@proxmox.com>
> ---
>  www/manager6/storage/Base.js        | 44 ++++++++++++++++++++++-
>  www/manager6/storage/IScsiEdit.js   | 54 ++++++++++++++++++++++-------
>  www/manager6/storage/LVMEdit.js     | 21 +++++++++--
>  www/manager6/storage/LvmThinEdit.js | 35 ++++++++++++++-----
>  www/manager6/storage/ZFSPoolEdit.js | 24 ++++++++++---
>  5 files changed, 148 insertions(+), 30 deletions(-)
> 
> diff --git a/www/manager6/storage/Base.js b/www/manager6/storage/Base.js
> index 7f6d7a09..bb497a5f 100644
> --- a/www/manager6/storage/Base.js
> +++ b/www/manager6/storage/Base.js
> @@ -34,8 +34,9 @@ Ext.define('PVE.panel.StorageBase', {
>  	me.column2 = me.column2 || [];
>  	me.column2.unshift(
>  	    {
> -		xtype: 'pveNodeSelector',
> +		xtype: 'pveScanNodeSelector',

This class/type alias is never defined? And why change the restriction
selector to a scan selector?

>  		name: 'nodes',
> +		reference: 'storageNodeRestriction',
>  		disabled: me.storageId === 'local',
>  		fieldLabel: gettext('Nodes'),
>  		emptyText: gettext('All') + ' (' + gettext('No restrictions') +')',
> @@ -74,6 +75,47 @@ Ext.define('PVE.panel.StorageBase', {
>  
>  	me.callParent();
>      },
> +    getPveScanNodeSelector: function() {

No need for this function. The properties can be set as part of the
class definition and overriden by the specific instances as needed.

> +	return {
> +	    xtype: 'pveScanNodeSelector',
> +	    name: 'node',
> +	    itemId: 'pveScanNodeSelector',
> +	    fieldLabel: gettext('Scan node'),
> +	    allowBlank: false,
> +	    disallowedNodes: undefined,
> +	    onlineValidator: true,
> +	    preferredValue: Proxmox.NodeName,
> +	    submitValue: false,
> +	    autoEl: {
> +		tag: 'div',
> +		'data-qtip': gettext('Look for availabe storage options from selected node.'),

"Look" and "from" sound a bit strange to me (also typo in "availabe").
Maybe "Scan for available storages on (the) selected node"?

> +	    },
> +	};
> +    },
> +});
> +
> +Ext.define('PVE.storage.ComboBoxSetStoreNode', {
> +    extend: 'Ext.form.field.ComboBox',
> +    config: {
> +	apiBaseUrl: '/api2/json/nodes/',
> +	apiStoragePath: '',
> +    },
> +
> +    setNodeName: function(value, storeLoad = true) {
> +	let me = this;
> +	if (value === null || value === '') {
> +	    value = Proxmox.NodeName;
> +	}
> +
> +	let store = me.getStore();
> +	let proxy = store.getProxy();
> +	proxy.setUrl(me.apiBaseUrl + value + me.apiStoragePath);
> +	this.clearValue();
> +	if (storeLoad) {
> +	    store.load();
> +	}
> +    },
> +
>  });
>  
>  Ext.define('PVE.storage.BaseEdit', {

(...)

> @@ -140,6 +145,20 @@ Ext.define('PVE.storage.LvmThinInputPanel', {
>  		    },
>  		},
>  	    });
> +	    let pveScanNodeSelector = me.getPveScanNodeSelector();
> +	    pveScanNodeSelector.listeners = {
> +	        change: {
> +		    fn: function(field, value) {
> +			// don't reload the store, it requires a VG selected
> +			vgField.setNodeName(value, false);

I'd rather drop the additional parameter from setNodeName and override
it for this class. The class itself knows best when it can load and the
'vg' property should be reset as part of the setNodeName implementation.

> +			vgSelector.setNodeName(value);
> +			me.lookupReference('storageNodeRestriction').setValue(value);
> +		    },
> +	        },
> +	    };
> +	    me.column1.push(pveScanNodeSelector);
> +
> +	    me.column1.push(vgSelector);
>  
>  	    me.column1.push(vgField);
>  	}




^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [pve-devel] [PATCH V2 manager 2/3] cleanup: "var" to "let", fix some indentation in related files
  2022-06-22 14:39 ` [pve-devel] [PATCH V2 manager 2/3] cleanup: "var" to "let", fix some indentation in related files Stefan Hrdlicka
@ 2022-06-28 10:54   ` Fabian Ebner
  2022-06-28 13:10     ` Thomas Lamprecht
  0 siblings, 1 reply; 8+ messages in thread
From: Fabian Ebner @ 2022-06-28 10:54 UTC (permalink / raw)
  To: pve-devel, Stefan Hrdlicka; +Cc: Thomas Lamprecht, Dominik Csapak

Am 22.06.22 um 16:39 schrieb Stefan Hrdlicka:
> replace all "var" with "let" in files related to patch for ticket 2822
> 
> Signed-off-by: Stefan Hrdlicka <s.hrdlicka@proxmox.com>

While this patch can be fine, I think the next one is a bit too big ;)
It might introduce subtle bugs (since we might be relying on the
semantics of var somewhere) and I'd rather continue having the
conversion be done organically for a while, with patches limited in
scope (pun intended) like this one being okay.

@Dominik, @Thomas opinions?




^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [pve-devel] [PATCH V2 manager 2/3] cleanup: "var" to "let", fix some indentation in related files
  2022-06-28 10:54   ` Fabian Ebner
@ 2022-06-28 13:10     ` Thomas Lamprecht
  0 siblings, 0 replies; 8+ messages in thread
From: Thomas Lamprecht @ 2022-06-28 13:10 UTC (permalink / raw)
  To: Fabian Ebner, pve-devel, Stefan Hrdlicka

On 28/06/2022 12:54, Fabian Ebner wrote:
> Am 22.06.22 um 16:39 schrieb Stefan Hrdlicka:
>> replace all "var" with "let" in files related to patch for ticket 2822
>>
>> Signed-off-by: Stefan Hrdlicka <s.hrdlicka@proxmox.com>
> 
> While this patch can be fine, I think the next one is a bit too big ;)
> It might introduce subtle bugs (since we might be relying on the
> semantics of var somewhere) and I'd rather continue having the
> conversion be done organically for a while, with patches limited in
> scope (pun intended) like this one being okay.
> 
> @Dominik, @Thomas opinions?

+1

Such general and (semi-)automatable cleanups are IMO better applied by
maintainers directly, they can push out a quick fix if anything is off
and often are much more experienced in the code base to have a feeling
where it actually has a benefit (parts seeing more churn) and how safe
it is wrt. to side effects.




^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [pve-devel] [PATCH V2 manager 1/3] fix #2822: add iscsi, lvm, lvmthin & zfs storage for all cluster nodes
       [not found]     ` <779a3434-e2a9-c92a-56b1-625346dcf1d4@proxmox.com>
@ 2022-07-19  6:50       ` Fabian Ebner
  0 siblings, 0 replies; 8+ messages in thread
From: Fabian Ebner @ 2022-07-19  6:50 UTC (permalink / raw)
  To: Stefan Hrdlicka, Proxmox VE development discussion

Am 18.07.22 um 16:33 schrieb Stefan Hrdlicka:
> Servus Fabian,
> 
> wenn ich die automatische Node Einschränkung weg nehme. Dann müsste ich
> vermutlich etwas im Perl code anpassen, da ich sonst einen Fehler
> bekomme wenn ich versuche neue Storages auf anderen Nodes hinzufügen. Da
> er dann überprüft ob das Storage auch verfügbar ist/existiert. Das ist
> z.B. bei ZFS oder LVMThin ist der Fall.
> 
> Was sagst du denn dazu?
> 

Please always post such discussions about patches/development to the
developer list, so others can see it too ;) Also, please use
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

For non-German speakers: Stefan is concerned that users will run into
errors when the node is not automatically restricted.

Well, it actually *is* an error if the storage is configured for all
nodes and not available on the current (i.e. from where it's added) node.

But you do have a point of course, because why would a user even change
the node to scan, if the storage is already available on the current node.

I'd still rather not change the default restriction behavior (see
below). Maybe we should just auto-restrict if the user actively changed
the node to scan?

> grüße Stefan
> 
> 
> On 6/28/22 12:33, Fabian Ebner wrote:
>> Am 22.06.22 um 16:39 schrieb Stefan Hrdlicka:
>>> This adds a dropdown box for iSCSI, LVM, LVMThin & ZFS storage
>>> options where a
>>> cluster node needs to be chosen. As default the current node is
>>> selected. It restricts the the storage to be only availabe on the
>>> selected node.
>>
>> I don't think we should change the default restriction, especially for
>> iSCSI and (shared) LVM, but also for local ones, as in many cases,
>> cluster nodes will be set-up with similar storage and the new default
>> might trip up some people.
>>
>>>




^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2022-07-19  6:51 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-22 14:39 [pve-devel] [PATCH V2 manager 0/3] add iscsi, lvm, lvmthin & zfs storage on all cluster nodes Stefan Hrdlicka
2022-06-22 14:39 ` [pve-devel] [PATCH V2 manager 1/3] fix #2822: add iscsi, lvm, lvmthin & zfs storage for " Stefan Hrdlicka
2022-06-28 10:33   ` Fabian Ebner
     [not found]     ` <779a3434-e2a9-c92a-56b1-625346dcf1d4@proxmox.com>
2022-07-19  6:50       ` Fabian Ebner
2022-06-22 14:39 ` [pve-devel] [PATCH V2 manager 2/3] cleanup: "var" to "let", fix some indentation in related files Stefan Hrdlicka
2022-06-28 10:54   ` Fabian Ebner
2022-06-28 13:10     ` Thomas Lamprecht
2022-06-22 14:39 ` [pve-devel] [PATCH V2 manager 3/3] cleanup: "var" to "let" in all javascript files Stefan Hrdlicka

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal