[pve-devel] r6218 - in pve-manager/pve2/www/manager: . form qemu window
svn-commits at proxmox.com
svn-commits at proxmox.com
Fri Jul 1 13:53:29 CEST 2011
Author: dietmar
Date: 2011-07-01 13:53:29 +0200 (Fri, 01 Jul 2011)
New Revision: 6218
Added:
pve-manager/pve2/www/manager/Parser.js
pve-manager/pve2/www/manager/form/CacheTypeSelector.js
Modified:
pve-manager/pve2/www/manager/Makefile.am
pve-manager/pve2/www/manager/PVEUtils.js
pve-manager/pve2/www/manager/form/ComboGrid.js
pve-manager/pve2/www/manager/form/StorageSelector.js
pve-manager/pve2/www/manager/qemu/HardwareView.js
pve-manager/pve2/www/manager/window/Edit.js
Log:
impl. PVE.qemu.HDEdit (first try)
Modified: pve-manager/pve2/www/manager/Makefile.am
===================================================================
--- pve-manager/pve2/www/manager/Makefile.am 2011-07-01 07:31:42 UTC (rev 6217)
+++ pve-manager/pve2/www/manager/Makefile.am 2011-07-01 11:53:29 UTC (rev 6218)
@@ -2,6 +2,7 @@
JSSRC= \
PVEUtils.js \
+ Parser.js \
StateProvider.js \
VNCConsole.js \
data/TimezoneStore.js \
@@ -29,6 +30,7 @@
form/CPUModelSelector.js \
form/VNCKeyboardSelector.js \
form/DisplaySelector.js \
+ form/CacheTypeSelector.js \
dc/Tasks.js \
dc/Log.js \
panel/StatusPanel.js \
Modified: pve-manager/pve2/www/manager/PVEUtils.js
===================================================================
--- pve-manager/pve2/www/manager/PVEUtils.js 2011-07-01 07:31:42 UTC (rev 6217)
+++ pve-manager/pve2/www/manager/PVEUtils.js 2011-07-01 11:53:29 UTC (rev 6218)
@@ -207,7 +207,8 @@
var successFn = options.success;
var failureFn = options.failure;
- options.url = '/api2/extjs' + options.url;
+ if (!options.url.match(/^\/api2/))
+ options.url = '/api2/extjs' + options.url;
delete options.callback;
Added: pve-manager/pve2/www/manager/Parser.js
===================================================================
--- pve-manager/pve2/www/manager/Parser.js (rev 0)
+++ pve-manager/pve2/www/manager/Parser.js 2011-07-01 11:53:29 UTC (rev 6218)
@@ -0,0 +1,72 @@
+// Some configuration values are complex strings -
+// so we need parsers/generators for them.
+
+Ext.define('PVE.Parser', { statics: {
+
+ // this class only contains static functions
+
+ parseQemuDrive: function(key, value) {
+ if (!(key && value))
+ return;
+
+ var res = {};
+
+ var match_res = key.match(/^([^\d]+)(\d+)$/);
+ if (!match_res)
+ return;
+
+ res['interface'] = match_res[1];
+ res['index'] = match_res[2];
+
+ var errors = false;
+ Ext.Array.each(value.split(','), function(p) {
+ if (!p || p.match(/^\s*$/))
+ return; // continue
+ var match_res = p.match(/^([a-z]+)=(.+)$/);
+ if (!match_res) {
+ if (!p.match(/=/)) {
+ res.file = p;
+ return; // continue
+ }
+ errors = true;
+ return false; // break
+ }
+ var k = match_res[1];
+ if (k === 'volume')
+ k = 'file';
+
+ if (Ext.isDefined(res[k])) {
+ errors = true;
+ return false; // break
+ }
+
+ var v = match_res[2];
+
+ if (k === 'cache' && v === 'off')
+ v = 'none';
+
+ res[k] = v;
+ });
+
+ if (errors)
+ return;
+
+ return res;
+ },
+
+ printQemuDrive: function(drive) {
+
+ var drivestr = drive.file;
+
+ Ext.Object.each(drive, function(key, value) {
+ if (!Ext.isDefined(value) || key === 'file' ||
+ key === 'index' || key === 'interface')
+ return; // continue
+
+ drivestr += ',' + key + '=' + value;
+ });
+
+ return drivestr;
+ }
+
+}});
Added: pve-manager/pve2/www/manager/form/CacheTypeSelector.js
===================================================================
--- pve-manager/pve2/www/manager/form/CacheTypeSelector.js (rev 0)
+++ pve-manager/pve2/www/manager/form/CacheTypeSelector.js 2011-07-01 11:53:29 UTC (rev 6218)
@@ -0,0 +1,17 @@
+Ext.define('PVE.form.CacheTypeSelector', {
+ extend: 'PVE.form.KVComboBox',
+ alias: ['widget.CacheTypeSelector'],
+
+ initComponent: function() {
+ var me = this;
+
+ me.data = [
+ ['', 'Default (no cache)'],
+ ['writethrough', 'Write through'],
+ ['writeback', 'Write back'],
+ ['none', 'No cache']
+ ];
+
+ me.callParent();
+ }
+});
Modified: pve-manager/pve2/www/manager/form/ComboGrid.js
===================================================================
--- pve-manager/pve2/www/manager/form/ComboGrid.js 2011-07-01 07:31:42 UTC (rev 6217)
+++ pve-manager/pve2/www/manager/form/ComboGrid.js 2011-07-01 11:53:29 UTC (rev 6218)
@@ -74,11 +74,14 @@
me.callParent();
me.store.on('beforeload', function() {
- me.up('form').setLoading(true, true);
+ var form = me.up('form');
+ if (form)
+ form.setLoading(true, true);
});
// hack: autoSelect does not work
me.store.on('load', function(store, r, success, o) {
+ var form = me.up('form');
if (success) {
var def = me.getValue();
if (!def || !store.findRecord(me.valueField, def)) {
@@ -91,7 +94,8 @@
}
}
}
- me.up('form').setLoading(false);
+ if (form)
+ form.setLoading(false);
});
}
});
\ No newline at end of file
Modified: pve-manager/pve2/www/manager/form/StorageSelector.js
===================================================================
--- pve-manager/pve2/www/manager/form/StorageSelector.js 2011-07-01 07:31:42 UTC (rev 6217)
+++ pve-manager/pve2/www/manager/form/StorageSelector.js 2011-07-01 11:53:29 UTC (rev 6218)
@@ -29,6 +29,9 @@
initComponent: function() {
var me = this;
+ var nodename = me.nodename;
+ me.nodename = undefined;
+
var store = Ext.create('Ext.data.Store', {
fields: [ 'storage', 'active', 'type', 'used', 'total' ],
autoDestory: true
@@ -70,6 +73,7 @@
me.callParent();
- me.setNodename(me.nodename);
+ if (nodename)
+ me.setNodename(nodename);
}
});
\ No newline at end of file
Modified: pve-manager/pve2/www/manager/qemu/HardwareView.js
===================================================================
--- pve-manager/pve2/www/manager/qemu/HardwareView.js 2011-07-01 07:31:42 UTC (rev 6217)
+++ pve-manager/pve2/www/manager/qemu/HardwareView.js 2011-07-01 11:53:29 UTC (rev 6218)
@@ -1,3 +1,105 @@
+Ext.define('PVE.qemu.HDEdit', {
+ extend: 'PVE.window.Edit',
+
+ submit: function(formpanel) {
+ var me = this;
+
+ var field = me.down('field[name=_cache]');
+ var value = field.getValue();
+ me.drive.cache = value ? field.getValue() : undefined;
+
+ field = me.down('field[name=_nobackup]');
+ value = field.getValue();
+ me.drive.backup = value ? 'no' : undefined;
+
+ var params = {};
+
+ params[me.confid] = PVE.Parser.printQemuDrive(me.drive);
+
+ PVE.Utils.API2Request({
+ url: me.url,
+ method: 'PUT',
+ params: params,
+ failure: function(response, opts) {
+ Ext.Msg.alert('Error', response.htmlStatus);
+ },
+ success: function(response, opts) {
+ me.close();
+ }
+ });
+
+ },
+
+ initComponent : function() {
+ var me = this;
+
+ var nodename = me.pveSelNode.data.node;
+ if (!nodename)
+ throw "no node name specified";
+
+ if (!me.confid)
+ throw "create not implemented";
+
+ me.column1 = [
+ {
+ xtype: 'displayfield',
+ fieldLabel: 'Image',
+ name: '_file'
+ },
+ {
+ xtype: 'CacheTypeSelector',
+ name: '_cache',
+ value: '',
+ fieldLabel: 'Cache',
+ }
+ ];
+
+ me.column2 = [
+ {
+ xtype: 'pvecheckbox',
+ fieldLabel: 'Exclude from backup',
+ labelWidth: 130,
+ name: '_nobackup'
+ }
+ ];
+
+ Ext.applyIf(me, {
+ title: "Edit Harddisk settings (" + me.confid + ")",
+ fieldDefaults: {
+ labelWidth: 70
+ }
+ });
+
+ me.callParent();
+
+ me.load({
+ success: function(form, action) {
+ var value = action.result.data[me.confid];
+ me.drive = PVE.Parser.parseQemuDrive(me.confid, value);
+ if (!me.drive) {
+ Ext.Msg.alert('Error', 'Unable to parse drive options');
+ me.close();
+ return;
+ }
+
+ var field = me.down('field[name=_file]');
+ field.setValue(me.drive.file);
+ field.resetOriginalValue();
+
+ field = me.down('field[name=_cache]');
+ field.setValue(me.drive.cache || '');
+ field.resetOriginalValue();
+
+ if (me.drive.backup === 'no') {
+ field = me.down('field[name=_nobackup]');
+ field.setValue(true);
+ field.resetOriginalValue();
+ }
+ }
+ });
+ }
+});
+
Ext.define('PVE.qemu.MemoryEdit', {
extend: 'PVE.window.Edit',
@@ -225,6 +327,7 @@
confid = "ide" + i;
rows[confid] = {
tdCls: 'pve-itype-icon-storage',
+ editor: 'PVE.qemu.HDEdit',
header: 'Hard Disk ' + '(' + confid +')'
};
}
@@ -232,6 +335,7 @@
confid = "scsi" + i;
rows[confid] = {
tdCls: 'pve-itype-icon-storage',
+ editor: 'PVE.qemu.HDEdit',
header: 'Hard Disk ' + '(' + confid +')'
};
}
@@ -239,6 +343,7 @@
confid = "virtio" + i;
rows[confid] = {
tdCls: 'pve-itype-icon-storage',
+ editor: 'PVE.qemu.HDEdit',
header: 'Hard Disk ' + '(' + confid +')'
};
}
@@ -270,6 +375,7 @@
var win = Ext.create(rowdef.editor, {
pveSelNode: me.pveSelNode,
+ confid: rec.data.key,
url: '/api2/extjs/' + baseurl
});
Modified: pve-manager/pve2/www/manager/window/Edit.js
===================================================================
--- pve-manager/pve2/www/manager/window/Edit.js 2011-07-01 07:31:42 UTC (rev 6217)
+++ pve-manager/pve2/www/manager/window/Edit.js 2011-07-01 11:53:29 UTC (rev 6218)
@@ -3,6 +3,19 @@
resizable: false,
+ submit: function(formpanel) {
+ var me = this;
+
+ formpanel.submit({
+ success: function() {
+ me.close();
+ },
+ failure: function(form, action) {
+ Ext.Msg.alert('Error', PVE.Utils.extractFormActionError(action));
+ }
+ });
+ },
+
load: function(options) {
var me = this;
@@ -77,14 +90,7 @@
text: 'OK',
disabled: true,
handler: function() {
- formpanel.submit({
- success: function() {
- me.close();
- },
- failure: function(form, action) {
- Ext.Msg.alert('Error', PVE.Utils.extractFormActionError(action));
- }
- });
+ me.submit(formpanel);
}
});
More information about the pve-devel
mailing list