Instead of hard coded defaults for the size and min_size parameter, check if we have defaults configured in the ceph.conf or config db and use those.
There are clusters where different defaults are needed. For example if the cluster spans two rooms and needs to survive the loss of one. A size/min_size of 4/2 are common defaults in such a situation. Signed-off-by: Aaron Lauterer <a.laute...@proxmox.com> --- changes since v3: * rebased v2: * default 3/2 values for size/min_size are now set right when we get the API response. The component expects to get a value set via cbind. This avoids setting default values in multiple places within the component. v1: * set defaultSize and defaultMinSize to undefined in CephPoolInputPanel * set them in cbindData in PoolEdit (needed when editing existing pool) * waitMsgTarget when opening pool create window * guard returned values for config keys in case they are empty www/manager6/ceph/Pool.js | 62 +++++++++++++++++++++++++++++++-------- 1 file changed, 50 insertions(+), 12 deletions(-) diff --git a/www/manager6/ceph/Pool.js b/www/manager6/ceph/Pool.js index 8de23ecf..0ad59baf 100644 --- a/www/manager6/ceph/Pool.js +++ b/www/manager6/ceph/Pool.js @@ -7,6 +7,10 @@ Ext.define('PVE.CephPoolInputPanel', { onlineHelp: 'pve_ceph_pools', subject: 'Ceph Pool', + + defaultSize: undefined, + defaultMinSize: undefined, + column1: [ { xtype: 'pmxDisplayEditField', @@ -27,7 +31,9 @@ Ext.define('PVE.CephPoolInputPanel', { name: 'size', editConfig: { xtype: 'proxmoxintegerfield', - value: 3, + cbind: { + value: (get) => get('defaultSize'), + }, minValue: 2, maxValue: 7, allowBlank: false, @@ -40,7 +46,6 @@ Ext.define('PVE.CephPoolInputPanel', { }, }, }, - }, ], column2: [ @@ -78,9 +83,15 @@ Ext.define('PVE.CephPoolInputPanel', { xtype: 'proxmoxintegerfield', fieldLabel: gettext('Min. Size'), name: 'min_size', - value: 2, cbind: { - minValue: (get) => get('isCreate') ? 2 : 1, + value: (get) => get('defaultMinSize'), + minValue: (get) => { + if (Number(get('defaultMinSize')) === 1) { + return 1; + } else { + return get('isCreate') ? 2 : 1; + } + }, }, maxValue: 7, allowBlank: false, @@ -195,6 +206,8 @@ Ext.define('PVE.Ceph.PoolEdit', { cbindData: { pool_name: '', isCreate: (cfg) => !cfg.pool_name, + defaultSize: undefined, + defaultMinSize: undefined, }, cbind: { @@ -217,6 +230,8 @@ Ext.define('PVE.Ceph.PoolEdit', { pool_name: '{pool_name}', isErasure: '{isErasure}', isCreate: '{isCreate}', + defaultSize: '{defaultSize}', + defaultMinSize: '{defaultMinSize}', }, }], }); @@ -397,14 +412,37 @@ Ext.define('PVE.node.Ceph.PoolList', { { text: gettext('Create'), handler: function() { - Ext.create('PVE.Ceph.PoolEdit', { - title: gettext('Create') + ': Ceph Pool', - isCreate: true, - isErasure: false, - nodename: nodename, - autoShow: true, - listeners: { - destroy: () => rstore.load(), + let keys = [ + 'global:osd-pool-default-min-size', + 'global:osd-pool-default-size', + ]; + let params = { + 'config-keys': keys.join(';'), + }; + + Proxmox.Utils.API2Request({ + url: '/nodes/localhost/ceph/cfg/value', + method: 'GET', + params, + waitMsgTarget: me.getView(), + failure: response => Ext.Msg.alert(gettext('Error'), response.htmlStatus), + success: function({ result: { data } }) { + let global = data.global; + let defaultSize = global?.['osd-pool-default-size'] ?? 3; + let defaultMinSize = global?.['osd-pool-default-min-size'] ?? 2; + + Ext.create('PVE.Ceph.PoolEdit', { + title: gettext('Create') + ': Ceph Pool', + isCreate: true, + isErasure: false, + defaultSize, + defaultMinSize, + nodename: nodename, + autoShow: true, + listeners: { + destroy: () => rstore.load(), + }, + }); }, }); }, -- 2.39.2 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel