]> git.proxmox.com Git - pve-manager.git/commitdiff
fix #2515: ui: ceph pool create: use configured defaults for size and min_size
authorAaron Lauterer <a.lauterer@proxmox.com>
Fri, 29 Sep 2023 13:02:02 +0000 (15:02 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Tue, 21 Nov 2023 13:39:25 +0000 (14:39 +0100)
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.lauterer@proxmox.com>
Tested-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
www/manager6/ceph/Pool.js

index 8de23ecf438fc85a0b73e7ea8e0de5f1a08039e1..0ad59baf44ae10d5035e0f165ce12bde772cbce8 100644 (file)
@@ -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(),
+                                   },
+                               });
                            },
                        });
                    },