]> git.proxmox.com Git - pve-manager.git/commitdiff
add rbd storage panel
authorAlexandre Derumier <aderumier@odiso.com>
Fri, 17 Aug 2012 13:51:20 +0000 (15:51 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Thu, 23 Aug 2012 12:13:48 +0000 (14:13 +0200)
Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
www/manager/Makefile
www/manager/dc/StorageView.js
www/manager/storage/RBDEdit.js [new file with mode: 0644]

index a1483d3f8aa7ceffa83a044a66d53c08ab5ebc20..286bc519929e4fd5a72af38a84961f115ba17209 100644 (file)
@@ -121,6 +121,7 @@ JSSRC=                                                      \
        storage/NFSEdit.js                              \
        storage/IScsiEdit.js                            \
        storage/LVMEdit.js                              \
+       storage/RBDEdit.js                              \
        dc/Summary.js                                   \
        dc/OptionView.js                                \
        dc/StorageView.js                               \
index 865c7a55e8d7e2bd01a8591555db82bc7758a495..9d3dba871703c0ec1321887060d02e7b6bb2573b 100644 (file)
@@ -40,6 +40,8 @@ Ext.define('PVE.dc.StorageView', {
                editor = 'PVE.storage.LVMEdit';
            } else if (type === 'iscsi') {
                editor = 'PVE.storage.IScsiEdit';
+           } else if (type === 'rbd') {
+               editor = 'PVE.storage.RBDEdit';
            } else {
                return;
            }
@@ -128,7 +130,17 @@ Ext.define('PVE.dc.StorageView', {
                                    win.on('destroy', reload);
                                    win.show();
                                }
-                           }
+                           },
+                           {
+                               text: 'RBD',
+                               iconCls: 'pve-itype-icon-node',
+                               handler: function() {
+                                   var win = Ext.create('PVE.storage.RBDEdit', {});
+                                   win.on('destroy', reload);
+                                   win.show();
+                               }
+                           },
+
                        ]
                    })
                },
@@ -203,4 +215,4 @@ Ext.define('PVE.dc.StorageView', {
        idProperty: 'storage'
     });
 
-});
\ No newline at end of file
+});
diff --git a/www/manager/storage/RBDEdit.js b/www/manager/storage/RBDEdit.js
new file mode 100644 (file)
index 0000000..b3f3a11
--- /dev/null
@@ -0,0 +1,137 @@
+Ext.define('PVE.storage.RBDInputPanel', {
+    extend: 'PVE.panel.InputPanel',
+
+    onGetValues: function(values) {
+       var me = this;
+
+       if (me.create) {
+           values.type = 'rbd';
+            values.content = 'images';
+
+       } else {
+           delete values.storage;
+       }
+
+       values.disable = values.enable ? 0 : 1;     
+       delete values.enable;
+
+       return values;
+    },
+
+    initComponent : function() {
+       var me = this;
+
+
+       me.column1 = [
+           {
+               xtype: me.create ? 'textfield' : 'displayfield',
+               name: 'storage',
+               height: 22, // hack: set same height as text fields
+               value: me.storageId || '',
+               fieldLabel: 'ID',
+               vtype: 'StorageId',
+               allowBlank: false
+           },
+           {
+               xtype: me.create ? 'textfield' : 'displayfield',
+               height: 22, // hack: set same height as text fields
+               name: 'pool',
+               value: 'rbd',
+               fieldLabel: gettext('Pool'),
+               allowBlank: false
+           },
+           {
+               xtype: me.create ? 'textfield' : 'displayfield',
+               height: 22, // hack: set same height as text fields
+               name: 'monhost',
+               value: 'X.X.X.X:6789;X.X.X.X:6789;X.X.X.X:6789',
+               fieldLabel: gettext('Monitor Host'),
+               allowBlank: false
+           },
+           {
+               xtype: me.create ? 'textfield' : 'displayfield',
+               height: 22, // hack: set same height as text fields
+               name: 'username',
+               value: 'admin',
+               fieldLabel: gettext('username'),
+               allowBlank: false
+           },
+           {
+               xtype: me.create ? 'textfield' : 'displayfield',
+               height: 22, // hack: set same height as text fields
+               name: 'authsupported',
+               value: 'cephx;none',
+               fieldLabel: gettext('authsupported'),
+               allowBlank: false
+           },
+       ];
+
+       me.column2 = [
+           {
+               xtype: 'pvecheckbox',
+               name: 'enable',
+               checked: true,
+               uncheckedValue: 0,
+               fieldLabel: gettext('Enable')
+           },
+       ];
+
+       if (me.create || me.storageId !== 'local') {
+           me.column2.unshift({
+               xtype: 'PVE.form.NodeSelector',
+               name: 'nodes',
+               fieldLabel: gettext('Nodes'),
+               emptyText: gettext('All') + ' (' + 
+                   gettext('No restrictions') +')',
+               multiSelect: true,
+               autoSelect: false
+           });
+       }
+
+       me.callParent();
+    }
+});
+
+Ext.define('PVE.storage.RBDEdit', {
+    extend: 'PVE.window.Edit',
+
+    initComponent : function() {
+       var me = this;
+       me.create = !me.storageId;
+
+       if (me.create) {
+            me.url = '/api2/extjs/storage';
+            me.method = 'POST';
+        } else {
+            me.url = '/api2/extjs/storage/' + me.storageId;
+            me.method = 'PUT';
+        }
+
+       var ipanel = Ext.create('PVE.storage.RBDInputPanel', {
+           create: me.create,
+           storageId: me.storageId
+       });
+
+       Ext.apply(me, {
+            subject: 'RBD Storage',
+           isAdd: true,
+           items: [ ipanel ]
+       });
+       
+       me.callParent();
+
+        if (!me.create) {
+            me.load({
+                success:  function(response, options) {
+                    var values = response.result.data;
+                    if (values.nodes) {
+                        values.nodes = values.nodes.split(',');
+                    }
+                    values.enable = values.disable ? 0 : 1;
+                    ipanel.setValues(values);
+                }
+            });
+        }
+    }
+});