[pve-devel] [PATCH QQQ] fix #2822: enable node storage scanning for LVM, LVMThin & ZFS
Stefan Hrdlicka
s.hrdlicka at proxmox.com
Tue May 24 16:58:56 CEST 2022
please ignore this, there was an old file in my folder
On 5/24/22 16:45, Stefan Hrdlicka wrote:
> This adds a dropdown box for LVM, LVMThin & ZFS storage options where a
> cluster node needs to be chosen. As default the first node in the list is
> selected. It restricts the the storage to be only availabe on the
> selected node.
>
> Signed-off-by: Stefan Hrdlicka <s.hrdlicka at proxmox.com>
> ---
> www/manager6/controller/StorageEdit.js | 20 ++++++++++++++++++++
> www/manager6/storage/Base.js | 24 ++++++++++++++++++++++++
> www/manager6/storage/LVMEdit.js | 9 ++++++++-
> www/manager6/storage/LvmThinEdit.js | 14 +++++++++++++-
> www/manager6/storage/ZFSPoolEdit.js | 24 +++++++++++++++---------
> 5 files changed, 80 insertions(+), 11 deletions(-)
>
> diff --git a/www/manager6/controller/StorageEdit.js b/www/manager6/controller/StorageEdit.js
> index cb73b776..25745a5b 100644
> --- a/www/manager6/controller/StorageEdit.js
> +++ b/www/manager6/controller/StorageEdit.js
> @@ -25,3 +25,23 @@ Ext.define('PVE.controller.StorageEdit', {
> },
> },
> });
> +
> +Ext.define('PVE.storage.StorageLocalController', {
> + extend: 'PVE.controller.StorageEdit',
> + alias: 'controller.storageLocal',
> + apiBaseUrl: '/api2/json/nodes/',
> +
> + clearValueSetUrl: function(reference, path, nodeSelector) {
> + var me = this;
> +
> + var refObj = me.lookupReference(reference);
> + refObj.clearValue();
> +
> + var refObjStore = refObj.getStore();
> + refObjStore.getProxy().setUrl(me.apiBaseUrl + nodeSelector.value + path);
> + refObjStore.load();
> +
> + var nodeRestriction = me.lookupReference('nodeRestriction');
> + nodeRestriction.setValue(nodeSelector.value);
> + },
> +});
> diff --git a/www/manager6/storage/Base.js b/www/manager6/storage/Base.js
> index 7f6d7a09..121cf26e 100644
> --- a/www/manager6/storage/Base.js
> +++ b/www/manager6/storage/Base.js
> @@ -36,6 +36,7 @@ Ext.define('PVE.panel.StorageBase', {
> {
> xtype: 'pveNodeSelector',
> name: 'nodes',
> + reference: 'nodeRestriction',
> disabled: me.storageId === 'local',
> fieldLabel: gettext('Nodes'),
> emptyText: gettext('All') + ' (' + gettext('No restrictions') +')',
> @@ -76,6 +77,29 @@ Ext.define('PVE.panel.StorageBase', {
> },
> });
>
> +Ext.define('PVE.panel.StorageBaseLocal', {
> + extend: 'PVE.panel.StorageBase',
> + controller: 'storageLocal',
> +
> + initComponent: function() {
> + var me = this;
> +
> + me.columnT = [
> + {
> + xtype: 'pveNodeSelector',
> + reference: 'pveNodeSelector',
> + name: 'node',
> + itemId: 'pveNodeSelector',
> + fieldLabel: gettext('Scan node'),
> + allowBlank: false,
> + disallowedNodes: undefined,
> + onlineValidator: true,
> + }];
> + me.callParent();
> + },
> +
> +});
> +
> Ext.define('PVE.storage.BaseEdit', {
> extend: 'Proxmox.window.Edit',
>
> diff --git a/www/manager6/storage/LVMEdit.js b/www/manager6/storage/LVMEdit.js
> index 2a9cd283..d6f8da06 100644
> --- a/www/manager6/storage/LVMEdit.js
> +++ b/www/manager6/storage/LVMEdit.js
> @@ -84,7 +84,7 @@ Ext.define('PVE.storage.BaseStorageSelector', {
> });
>
> Ext.define('PVE.storage.LVMInputPanel', {
> - extend: 'PVE.panel.StorageBase',
> + extend: 'PVE.panel.StorageBaseLocal',
>
> onlineHelp: 'storage_lvm',
>
> @@ -105,6 +105,7 @@ Ext.define('PVE.storage.LVMInputPanel', {
> if (me.isCreate) {
> var vgField = Ext.create('PVE.storage.VgSelector', {
> name: 'vgname',
> + reference: 'pveLVMVGSelector',
> fieldLabel: gettext('Volume group'),
> allowBlank: false,
> });
> @@ -175,5 +176,11 @@ Ext.define('PVE.storage.LVMInputPanel', {
> ];
>
> me.callParent();
> + var nodeSelector = Ext.ComponentQuery.query('#pveNodeSelector')[0];
> + nodeSelector.on({
> + change: {
> + fn: 'clearValueSetUrl', args: ['pveLVMVGSelector', '/scan/lvm'],
> + },
> + });
> },
> });
> diff --git a/www/manager6/storage/LvmThinEdit.js b/www/manager6/storage/LvmThinEdit.js
> index 4eab7740..ab1abb4c 100644
> --- a/www/manager6/storage/LvmThinEdit.js
> +++ b/www/manager6/storage/LvmThinEdit.js
> @@ -93,7 +93,7 @@ Ext.define('PVE.storage.BaseVGSelector', {
> });
>
> Ext.define('PVE.storage.LvmThinInputPanel', {
> - extend: 'PVE.panel.StorageBase',
> + extend: 'PVE.panel.StorageBaseLocal',
>
> onlineHelp: 'storage_lvmthin',
>
> @@ -123,6 +123,7 @@ Ext.define('PVE.storage.LvmThinInputPanel', {
> if (me.isCreate) {
> var vgField = Ext.create('PVE.storage.TPoolSelector', {
> name: 'thinpool',
> + reference: 'pveLVMThinPoolSelector',
> fieldLabel: gettext('Thin Pool'),
> allowBlank: false,
> });
> @@ -130,6 +131,7 @@ Ext.define('PVE.storage.LvmThinInputPanel', {
> me.column1.push({
> xtype: 'pveBaseVGSelector',
> name: 'vgname',
> + reference: 'pveLVMThinVGSelector',
> fieldLabel: gettext('Volume group'),
> listeners: {
> change: function(f, value) {
> @@ -163,5 +165,15 @@ Ext.define('PVE.storage.LvmThinInputPanel', {
> me.column2 = [];
>
> me.callParent();
> +
> + var nodeSelector = Ext.ComponentQuery.query('#pveNodeSelector')[0];
> + nodeSelector.on({
> + change: {
> + fn: function() {
> + me.controller.clearValueSetUrl('pveLVMThinVGSelector', '/scan/lvm', nodeSelector);
> + me.controller.clearValueSetUrl('pveLVMThinPoolSelector', '/scan/lvmthin', nodeSelector);
> + },
> + },
> + });
> },
> });
> diff --git a/www/manager6/storage/ZFSPoolEdit.js b/www/manager6/storage/ZFSPoolEdit.js
> index 8e689f0c..885f7a47 100644
> --- a/www/manager6/storage/ZFSPoolEdit.js
> +++ b/www/manager6/storage/ZFSPoolEdit.js
> @@ -2,6 +2,7 @@ Ext.define('PVE.storage.ZFSPoolSelector', {
> extend: 'Ext.form.field.ComboBox',
> alias: 'widget.pveZFSPoolSelector',
> valueField: 'pool',
> + reference: "pveZFSPoolSelector",
> displayField: 'pool',
> queryMode: 'local',
> editable: false,
> @@ -23,7 +24,6 @@ Ext.define('PVE.storage.ZFSPoolSelector', {
> url: '/api2/json/nodes/' + me.nodename + '/scan/zfs',
> },
> });
> -
> store.sort('pool', 'ASC');
>
> Ext.apply(me, {
> @@ -35,7 +35,7 @@ Ext.define('PVE.storage.ZFSPoolSelector', {
> });
>
> Ext.define('PVE.storage.ZFSPoolInputPanel', {
> - extend: 'PVE.panel.StorageBase',
> + extend: 'PVE.panel.StorageBaseLocal',
>
> onlineHelp: 'storage_zfspool',
>
> @@ -63,13 +63,13 @@ Ext.define('PVE.storage.ZFSPoolInputPanel', {
> // 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,
> + xtype: 'pveContentTypeSelector',
> + cts: ['images', 'rootdir'],
> + fieldLabel: gettext('Content'),
> + name: 'content',
> + value: ['images', 'rootdir'],
> + multiSelect: true,
> + allowBlank: false,
> });
> me.column2 = [
> {
> @@ -89,5 +89,11 @@ xtype: 'pveContentTypeSelector',
> ];
>
> me.callParent();
> + var nodeSelector = Ext.ComponentQuery.query('#pveNodeSelector')[0];
> + nodeSelector.on({
> + change: {
> + fn: 'clearValueSetUrl', args: ['pveZFSPoolSelector', '/scan/zfs'],
> + },
> + });
> },
> });
More information about the pve-devel
mailing list