]> git.proxmox.com Git - pve-manager.git/blobdiff - www/manager6/ceph/Pool.js
use windowEdit from widget toolkit
[pve-manager.git] / www / manager6 / ceph / Pool.js
index 240cc2c370c7a0dd36e166a9be6b873299602eb2..d02eedde99faad45eaf6d863dc38cb5ddb308cf8 100644 (file)
@@ -1,12 +1,12 @@
-// Ext.create is a function, but
-// we defined create a bool in PVE.window.Edit
-/*jslint confusion: true*/
 Ext.define('PVE.CephCreatePool', {
-    extend: 'PVE.window.Edit',
-    alias: ['widget.pveCephCreatePool'],
+    extend: 'Proxmox.window.Edit',
+    alias: 'widget.pveCephCreatePool',
+
+    showProgress: true,
+    onlineHelp: 'pve_ceph_pools',
 
     subject: 'Ceph Pool',
-    create: true,
+    isCreate: true,
     method: 'POST',
     items: [
        {
@@ -16,40 +16,42 @@ Ext.define('PVE.CephCreatePool', {
            allowBlank: false
        },
        {
-           xtype: 'pveIntegerField',
+           xtype: 'proxmoxintegerfield',
            fieldLabel: gettext('Size'),
            name: 'size',
-           value: 2,
+           value: 3,
            minValue: 1,
-           maxValue: 3,
+           maxValue: 7,
            allowBlank: false
        },
        {
-           xtype: 'pveIntegerField',
+           xtype: 'proxmoxintegerfield',
            fieldLabel: gettext('Min. Size'),
            name: 'min_size',
-           value: 1,
+           value: 2,
            minValue: 1,
-           maxValue: 3,
+           maxValue: 7,
            allowBlank: false
        },
        {
-           xtype: 'pveIntegerField',
-           fieldLabel: 'Crush RuleSet', // do not localize
-           name: 'crush_ruleset',
-           value: 0,
-           minValue: 0,
-           maxValue: 32768,
+           xtype: 'pveCephRuleSelector',
+           fieldLabel: 'Crush Rule', // do not localize
+           name: 'crush_rule',
            allowBlank: false
        },
        {
-           xtype: 'pveIntegerField',
+           xtype: 'proxmoxintegerfield',
            fieldLabel: 'pg_num',
            name: 'pg_num',
            value: 64,
            minValue: 8,
            maxValue: 32768,
            allowBlank: false
+       },
+       {
+           xtype: 'proxmoxcheckbox',
+           fieldLabel: gettext('Add Storages'),
+           name: 'add_storages'
        }
     ],
     initComponent : function() {
@@ -60,8 +62,11 @@ Ext.define('PVE.CephCreatePool', {
            throw "no node name specified";
        }
 
-        Ext.applyIf(me, {
-           url: "/nodes/" + me.nodename + "/ceph/pools"
+        Ext.apply(me, {
+           url: "/nodes/" + me.nodename + "/ceph/pools",
+           defaults: {
+               nodename: me.nodename
+           }
         });
 
         me.callParent();
@@ -70,7 +75,7 @@ Ext.define('PVE.CephCreatePool', {
 
 Ext.define('PVE.node.CephPoolList', {
     extend: 'Ext.grid.GridPanel',
-    alias: ['widget.pveNodeCephPoolList'],
+    alias: 'widget.pveNodeCephPoolList',
 
     onlineHelp: 'chapter_pveceph',
     stateful: true,
@@ -100,10 +105,16 @@ Ext.define('PVE.node.CephPoolList', {
            dataIndex: 'pg_num'
        },
        {
-           header: 'ruleset',
+           header: 'rule',
            width: 50,
            sortable: false,
-           dataIndex: 'crush_ruleset'
+           dataIndex: 'crush_rule'
+       },
+       {
+           header: 'rule_name',
+           width: 50,
+           sortable: false,
+           dataIndex: 'crush_rule_name'
        },
        {
            header: gettext('Used'),
@@ -141,7 +152,7 @@ Ext.define('PVE.node.CephPoolList', {
 
        var sm = Ext.create('Ext.selection.RowModel', {});
 
-       var rstore = Ext.create('PVE.data.UpdateStore', {
+       var rstore = Ext.create('Proxmox.data.UpdateStore', {
            interval: 3000,
            storeid: 'ceph-pool-list' + nodename,
            model: 'ceph-pool-list',
@@ -153,7 +164,7 @@ Ext.define('PVE.node.CephPoolList', {
 
        var store = Ext.create('PVE.data.DiffStore', { rstore: rstore });
 
-       PVE.Utils.monStoreErrors(me, rstore);
+       Proxmox.Utils.monStoreErrors(me, rstore);
 
        var create_btn = new Ext.Button({
            text: gettext('Create'),
@@ -162,34 +173,35 @@ Ext.define('PVE.node.CephPoolList', {
                     nodename: nodename
                });
                win.show();
+               win.on('destroy', function() {
+                   rstore.load();
+               });
            }
        });
 
-       var remove_btn = new PVE.button.Button({
-           text: gettext('Remove'),
+       var destroy_btn = Ext.create('Proxmox.button.Button', {
+           text: gettext('Destroy'),
            selModel: sm,
            disabled: true,
-           confirmMsg: function(rec) {
-               var msg = Ext.String.format(gettext('Are you sure you want to remove entry {0}'),
-                                           "'" + rec.data.pool_name + "'");
-               msg += " " + gettext('This will permanently erase all data.');
-
-               return msg;
-           },
            handler: function() {
                var rec = sm.getSelection()[0];
 
                if (!rec.data.pool_name) {
                    return;
                }
+               var base_url = '/nodes/' + nodename + '/ceph/pools/' +
+                   rec.data.pool_name;
 
-               PVE.Utils.API2Request({
-                   url: "/nodes/" + nodename + "/ceph/pools/" +
-                       rec.data.pool_name,
-                   method: 'DELETE',
-                   failure: function(response, opts) {
-                       Ext.Msg.alert(gettext('Error'), response.htmlStatus);
-                   }
+               var win = Ext.create('PVE.window.SafeDestroy', {
+                   showProgress: true,
+                   url: base_url,
+                   params: {
+                       remove_storages: 1
+                   },
+                   item: { type: 'CephPool', id: rec.data.pool_name }
+               }).show();
+               win.on('destroy', function() {
+                   rstore.load();
                });
            }
        });
@@ -197,7 +209,7 @@ Ext.define('PVE.node.CephPoolList', {
        Ext.apply(me, {
            store: store,
            selModel: sm,
-           tbar: [ create_btn, remove_btn ],
+           tbar: [ create_btn, destroy_btn ],
            listeners: {
                activate: rstore.startUpdate,
                destroy: rstore.stopUpdate
@@ -217,8 +229,52 @@ Ext.define('PVE.node.CephPoolList', {
                  { name: 'pg_num', type: 'integer'},
                  { name: 'bytes_used', type: 'integer'},
                  { name: 'percent_used', type: 'number'},
-                 { name: 'crush_ruleset', type: 'integer'}
+                 { name: 'crush_rule', type: 'integer'},
+                 { name: 'crush_rule_name', type: 'string'}
                ],
        idProperty: 'pool_name'
     });
 });
+
+Ext.define('PVE.form.CephRuleSelector', {
+    extend: 'Ext.form.field.ComboBox',
+    alias: 'widget.pveCephRuleSelector',
+
+    allowBlank: false,
+    valueField: 'name',
+    displayField: 'name',
+    editable: false,
+    queryMode: 'local',
+
+    initComponent: function() {
+       var me = this;
+
+       if (!me.nodename) {
+           throw "no nodename given";
+       }
+
+       var store = Ext.create('Ext.data.Store', {
+           fields: ['name'],
+           sorters: 'name',
+           proxy: {
+               type: 'pve',
+               url: '/api2/json/nodes/' + me.nodename + '/ceph/rules'
+           }
+       });
+
+       Ext.apply(me, {
+           store: store
+       });
+
+       me.callParent();
+
+       store.load({
+           callback: function(rec, op, success){
+               if (success && rec.length > 0) {
+                   me.select(rec[0]);
+               }
+           }
+       });
+    }
+
+});