[pve-devel] [PATCH manager v2 3/5] add new "RBD (PVE)" storage choice

Dominik Csapak d.csapak at proxmox.com
Thu Sep 7 12:34:02 CEST 2017


this is for adding a pve managed ceph rbd storage, so that the user
just has to select the pool, and does not need to write the monitor
hosts and copy the keyring

the old "RBD" is renamed to "RBD (external)" in the storage panel

Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
changes from v1:
* added logic to display only 'RBD' on a storage summary, because
  we cannot differentiate between a pve managed storage and an external
  one there
 www/manager6/Utils.js           |  9 +++++-
 www/manager6/dc/StorageView.js  | 16 ++++++++--
 www/manager6/storage/RBDEdit.js | 70 ++++++++++++++++++++++++++---------------
 3 files changed, 67 insertions(+), 28 deletions(-)

diff --git a/www/manager6/Utils.js b/www/manager6/Utils.js
index fecf9aff..0d4217d4 100644
--- a/www/manager6/Utils.js
+++ b/www/manager6/Utils.js
@@ -775,7 +775,10 @@ Ext.define('PVE.Utils', { utilities: {
 	return Ext.Date.format(date, "Y-m-d");
     },
 
-    format_storage_type: function(value) {
+    format_storage_type: function(value, md, record) {
+	if (value === 'rbd' && record) {
+	    value = (record.get('monhost')?'rbd_ext':'pveceph');
+	}
 	if (value === 'dir') {
 	    return PVE.Utils.directoryText;
 	} else if (value === 'nfs') {
@@ -790,6 +793,10 @@ Ext.define('PVE.Utils', { utilities: {
 	    return 'iSCSI';
 	} else if (value === 'rbd') {
 	    return 'RBD';
+	} else if (value === 'rbd_ext') {
+	    return 'RBD (external)';
+	} else if (value === 'pveceph') {
+	    return 'RBD (PVE)';
 	} else if (value === 'sheepdog') {
 	    return 'Sheepdog';
 	} else if (value === 'zfs') {
diff --git a/www/manager6/dc/StorageView.js b/www/manager6/dc/StorageView.js
index 2940a98f..8f5a055c 100644
--- a/www/manager6/dc/StorageView.js
+++ b/www/manager6/dc/StorageView.js
@@ -62,7 +62,8 @@ Ext.define('PVE.dc.StorageView', {
 		return;
 	    }
 	    var win = Ext.create(editor, {
-		storageId: rec.data.storage
+		storageId: rec.data.storage,
+		pveceph: !rec.data.monhost
 	    });
 
 	    win.show();
@@ -166,7 +167,18 @@ Ext.define('PVE.dc.StorageView', {
 				}
 			    },
 			    {
-				text: PVE.Utils.format_storage_type('rbd'),
+				text: PVE.Utils.format_storage_type('pveceph'),
+				iconCls: 'fa fa-fw fa-building',
+				handler: function() {
+				    var win = Ext.create('PVE.storage.RBDEdit', {
+					pveceph: 1
+				    });
+				    win.on('destroy', reload);
+				    win.show();
+				}
+			    },
+			    {
+				text: PVE.Utils.format_storage_type('rbd_ext'),
 				iconCls: 'fa fa-fw fa-building',
 				handler: function() {
 				    var win = Ext.create('PVE.storage.RBDEdit', {});
diff --git a/www/manager6/storage/RBDEdit.js b/www/manager6/storage/RBDEdit.js
index 64776e6e..55ac8541 100644
--- a/www/manager6/storage/RBDEdit.js
+++ b/www/manager6/storage/RBDEdit.js
@@ -19,6 +19,9 @@ Ext.define('PVE.storage.RBDInputPanel', {
     initComponent : function() {
 	var me = this;
 
+	if (!me.nodename) {
+	    me.nodename = 'localhost';
+	}
 
 	me.column1 = [
 	    {
@@ -28,32 +31,47 @@ Ext.define('PVE.storage.RBDInputPanel', {
 		fieldLabel: 'ID',
 		vtype: 'StorageId',
 		allowBlank: false
-	    },
-	    {
-		xtype: me.isCreate ? 'textfield' : 'displayfield',
-		name: 'pool',
-		value: 'rbd',
-		fieldLabel: gettext('Pool'),
-		allowBlank: false
-	    },
-	    {
-		xtype: me.isCreate ? 'textfield' : 'displayfield',
-		name: 'monhost',
-		vtype: 'HostList',
-		value: '',
-		fieldLabel: 'Monitor(s)',
-		allowBlank: false
-	    },
-	    {
-		xtype: me.isCreate ? 'textfield' : 'displayfield',
-		name: 'username',
-		value: me.isCreate ? 'admin': '',
-		fieldLabel: gettext('User name'),
-		allowBlank: true
 	    }
 	];
 
-	// here value is an array, 
+	if (me.pveceph) {
+	    me.column1.push(
+		{
+		    xtype: me.isCreate ? 'pveCephPoolSelector' : 'displayfield',
+		    nodename: me.nodename,
+		    name: 'pool',
+		    fieldLabel: gettext('Pool'),
+		    allowBlank: false
+		}
+	    );
+	} else {
+	    me.column1.push(
+		{
+		    xtype: me.isCreate ? 'textfield' : 'displayfield',
+		    name: 'pool',
+		    value: 'rbd',
+		    fieldLabel: gettext('Pool'),
+		    allowBlank: false
+		},
+		{
+		    xtype: me.isCreate ? 'textfield' : 'displayfield',
+		    name: 'monhost',
+		    vtype: 'HostList',
+		    value: '',
+		    fieldLabel: 'Monitor(s)',
+		    allowBlank: false
+		},
+		{
+		    xtype: me.isCreate ? 'textfield' : 'displayfield',
+		    name: 'username',
+		    value: me.isCreate ? 'admin': '',
+		    fieldLabel: gettext('User name'),
+		    allowBlank: true
+		}
+	    );
+	}
+
+	// here value is an array,
 	// while before it was a string
 	/*jslint confusion: true*/
 	me.column2 = [
@@ -116,11 +134,13 @@ Ext.define('PVE.storage.RBDEdit', {
 
 	var ipanel = Ext.create('PVE.storage.RBDInputPanel', {
 	    isCreate: me.isCreate,
-	    storageId: me.storageId
+	    storageId: me.storageId,
+	    nodename: me.nodename,
+	    pveceph: me.pveceph
 	});
 
 	Ext.apply(me, {
-            subject: PVE.Utils.format_storage_type('rbd'),
+	    subject: PVE.Utils.format_storage_type(me.pveceph?'pveceph':'rbd'),
 	    isAdd: true,
 	    items: [ ipanel ]
 	});
-- 
2.11.0





More information about the pve-devel mailing list