[pve-devel] [PATCH pve-manager v3] ui: storage: add is_mountpoint checkbox to dir/btrfs storage edit

Hannes Laimer h.laimer at proxmox.com
Tue Mar 25 16:20:58 CET 2025


This came up in support, and there is no reason to not have it in
the UI, while having it in the API.

Signed-off-by: Hannes Laimer <h.laimer at proxmox.com>
---
v2:
 - use Aaron's improved help text

v3, thanks @Fabian and @Fiona:
 - handle if a path is set correctly
 - move to BaseStorage, so we don't have the same code in two places

 www/manager6/storage/Base.js | 44 ++++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)

diff --git a/www/manager6/storage/Base.js b/www/manager6/storage/Base.js
index c8c735f3..813f961b 100644
--- a/www/manager6/storage/Base.js
+++ b/www/manager6/storage/Base.js
@@ -4,6 +4,13 @@ Ext.define('PVE.panel.StorageBase', {
 
     type: '',
 
+    viewModel: {
+	data: {
+	    isMpReadOnly: false,
+	    isMpChecked: false,
+	},
+    },
+
     onGetValues: function(values) {
 	let me = this;
 
@@ -19,6 +26,16 @@ Ext.define('PVE.panel.StorageBase', {
 	return values;
     },
 
+    setValues: function(values) {
+	let isMp = values.is_mountpoint;
+	let isMpSet = !!isMp && isMp !== '0';
+	let isMpIsPath = isMpSet && isMp !== '1';
+	this.viewModel.set('isMpReadOnly', isMpIsPath);
+	this.viewModel.set('isMpChecked', isMpSet);
+
+	this.callParent([values]);
+    },
+
     initComponent: function() {
 	let me = this;
 
@@ -73,6 +90,33 @@ Ext.define('PVE.panel.StorageBase', {
 	    }
 	}
 
+	const hasIsMountpointStorageTypes = ['dir', 'btrfs'];
+
+	if (hasIsMountpointStorageTypes.includes(me.type)) {
+	    const isMountpointBox = {
+		xtype: 'proxmoxcheckbox',
+		name: 'is_mountpoint',
+		uncheckedValue: 0,
+		fieldLabel: gettext('Mountpoint'),
+		bind: {
+		    disabled: '{isMpReadOnly}',
+		    value: '{isMpChecked}',
+		},
+		autoEl: {
+		    tag: 'div',
+		    'data-qtip': gettext('Enable if something is mounted at this path. Storage is considered offline as long as nothing is mounted.'),
+		},
+	    };
+
+	    me.advancedColumn1 = me.advancedColumn1 || [];
+	    me.advancedColumn2 = me.advancedColumn2 || [];
+	    if (me.advancedColumn2.length < me.advancedColumn1.length) {
+		me.advancedColumn2.unshift(isMountpointBox);
+	    } else {
+		me.advancedColumn1.unshift(isMountpointBox);
+	    }
+	}
+
 	me.callParent();
     },
 });
-- 
2.39.5





More information about the pve-devel mailing list