[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