[pve-devel] [PATCH manager 2/4] ceph: gui: ability to edit an existing pool

Alwin Antreich a.antreich at proxmox.com
Tue Oct 27 17:47:15 CET 2020


Signed-off-by: Alwin Antreich <a.antreich at proxmox.com>
---
 www/manager6/ceph/Pool.js | 82 ++++++++++++++++++++++++++-------------
 1 file changed, 56 insertions(+), 26 deletions(-)

diff --git a/www/manager6/ceph/Pool.js b/www/manager6/ceph/Pool.js
index 11bcf9d5..d1fb2f3e 100644
--- a/www/manager6/ceph/Pool.js
+++ b/www/manager6/ceph/Pool.js
@@ -1,17 +1,33 @@
-Ext.define('PVE.CephCreatePool', {
+Ext.define('PVE.CephPoolEdit', {
     extend: 'Proxmox.window.Edit',
-    alias: 'widget.pveCephCreatePool',
+    alias: 'widget.pveCephPoolEdit',
+    mixins: ['Proxmox.Mixin.CBind'],
+
+    cbindData: {
+	pool_name: '',
+	isCreate: (cfg) => !cfg.pool_name,
+    },
+
+    cbind: {
+	autoLoad: get => !get('isCreate'),
+	url: get => get('isCreate') ?
+	    `/nodes/${get('nodename')}/ceph/pools` :
+	    `/nodes/${get('nodename')}/ceph/pools/${get('pool_name')}`,
+	method: get => get('isCreate') ? 'POST' : 'PUT',
+    },
 
     showProgress: true,
     onlineHelp: 'pve_ceph_pools',
 
     subject: 'Ceph Pool',
-    isCreate: true,
-    method: 'POST',
     items: [
 	{
-	    xtype: 'textfield',
+	    xtype: 'pmxDisplayEditField',
 	    fieldLabel: gettext('Name'),
+	    cbind: {
+		editable: '{isCreate}',
+		value: '{pool_name}',
+	    },
 	    name: 'name',
 	    allowBlank: false
 	},
@@ -36,6 +52,7 @@ Ext.define('PVE.CephCreatePool', {
 	{
 	    xtype: 'pveCephRuleSelector',
 	    fieldLabel: 'Crush Rule', // do not localize
+	    cbind: { nodename: '{nodename}' },
 	    name: 'crush_rule',
 	    allowBlank: false
 	},
@@ -65,7 +82,10 @@ Ext.define('PVE.CephCreatePool', {
 	{
 	    xtype: 'proxmoxcheckbox',
 	    fieldLabel: gettext('Add as Storage'),
-	    value: true,
+	    cbind: {
+		value: '{isCreate}',
+		hidden: '{!isCreate}',
+	    },
 	    name: 'add_storages',
 	    autoEl: {
 		tag: 'div',
@@ -73,22 +93,6 @@ Ext.define('PVE.CephCreatePool', {
 	    },
 	}
     ],
-    initComponent : function() {
-        var me = this;
-
-	if (!me.nodename) {
-	    throw "no node name specified";
-	}
-
-        Ext.apply(me, {
-	    url: "/nodes/" + me.nodename + "/ceph/pools",
-	    defaults: {
-		nodename: me.nodename
-	    }
-        });
-
-        me.callParent();
-    }
 });
 
 Ext.define('PVE.node.CephPoolList', {
@@ -203,6 +207,9 @@ Ext.define('PVE.node.CephPoolList', {
 	});
 
 	var store = Ext.create('Proxmox.data.DiffStore', { rstore: rstore });
+	var reload = function() {
+	    rstore.load();
+	};
 
 	var regex = new RegExp("not (installed|initialized)", "i");
 	PVE.Utils.handleStoreErrorOrMask(me, rstore, regex, function(me, error){
@@ -219,8 +226,8 @@ Ext.define('PVE.node.CephPoolList', {
 	var create_btn = new Ext.Button({
 	    text: gettext('Create'),
 	    handler: function() {
-		var win = Ext.create('PVE.CephCreatePool', {
-                    nodename: nodename
+		var win = Ext.create('PVE.CephPoolEdit', {
+		    nodename: nodename,
 		});
 		win.show();
 		win.on('destroy', function() {
@@ -229,6 +236,27 @@ Ext.define('PVE.node.CephPoolList', {
 	    }
 	});
 
+	var run_editor = function() {
+	    var rec = sm.getSelection()[0];
+	    if (!rec) {
+		return;
+	    }
+
+	    var win = Ext.create('PVE.CephPoolEdit', {
+		nodename: nodename,
+		pool_name: rec.data.pool_name,
+	    });
+            win.on('destroy', reload);
+            win.show();
+	};
+
+	var edit_btn = new Proxmox.button.Button({
+	    text: gettext('Edit'),
+	    disabled: true,
+	    selModel: sm,
+	    handler: run_editor,
+	});
+
 	var destroy_btn = Ext.create('Proxmox.button.Button', {
 	    text: gettext('Destroy'),
 	    selModel: sm,
@@ -259,10 +287,11 @@ Ext.define('PVE.node.CephPoolList', {
 	Ext.apply(me, {
 	    store: store,
 	    selModel: sm,
-	    tbar: [ create_btn, destroy_btn ],
+	    tbar: [ create_btn, edit_btn, destroy_btn ],
 	    listeners: {
 		activate: () => rstore.startUpdate(),
 		destroy: () => rstore.stopUpdate(),
+		itemdblclick: run_editor,
 	    }
 	});
 
@@ -280,7 +309,8 @@ Ext.define('PVE.node.CephPoolList', {
 		  { name: 'bytes_used', type: 'integer'},
 		  { name: 'percent_used', type: 'number'},
 		  { name: 'crush_rule', type: 'integer'},
-		  { name: 'crush_rule_name', type: 'string'}
+		  { name: 'crush_rule_name', type: 'string'},
+		  { name: 'pg_autoscale_mode', type: 'string'},
 		],
 	idProperty: 'pool_name'
     });
-- 
2.27.0






More information about the pve-devel mailing list