[pve-devel] r6246 - in pve-manager/pve2: . www/manager www/manager/qemu www/manager/window

svn-commits at proxmox.com svn-commits at proxmox.com
Wed Jul 6 13:00:20 CEST 2011


Author: dietmar
Date: 2011-07-06 13:00:20 +0200 (Wed, 06 Jul 2011)
New Revision: 6246

Modified:
   pve-manager/pve2/ChangeLog
   pve-manager/pve2/www/manager/Parser.js
   pve-manager/pve2/www/manager/qemu/HardwareView.js
   pve-manager/pve2/www/manager/window/Edit.js
Log:
	* www/manager/qemu/HardwareView.js: impl. PVE.qemu.NetworkEdit

	* www/manager/window/Edit.js: enable submit if me.create is true.



Modified: pve-manager/pve2/ChangeLog
===================================================================
--- pve-manager/pve2/ChangeLog	2011-07-06 08:19:07 UTC (rev 6245)
+++ pve-manager/pve2/ChangeLog	2011-07-06 11:00:20 UTC (rev 6246)
@@ -1,5 +1,9 @@
 2011-07-06  Proxmox Support Team  <support at proxmox.com>
 
+	* www/manager/qemu/HardwareView.js: impl. PVE.qemu.NetworkEdit
+
+	* www/manager/window/Edit.js: enable submit if me.create is true.
+
 	* www/manager/qemu/HardwareView.js: add 'Deletion Confirmation',
 	ability to re-add unused disks.
 

Modified: pve-manager/pve2/www/manager/Parser.js
===================================================================
--- pve-manager/pve2/www/manager/Parser.js	2011-07-06 08:19:07 UTC (rev 6245)
+++ pve-manager/pve2/www/manager/Parser.js	2011-07-06 11:00:20 UTC (rev 6246)
@@ -5,6 +5,51 @@
 
     // this class only contains static functions
 
+    parseQemuNetwork: function(key, value) {
+	if (!(key && value))
+	    return;
+
+	var res = {};
+
+	var errors = false;
+	Ext.Array.each(value.split(','), function(p) {
+	    if (!p || p.match(/^\s*$/))
+		return; // continue
+	    var match_res;
+
+	    if (match_res = p.match(/^(ne2k_pci|e1000|rtl8139|pcnet|virtio|ne2k_isa|i82551|i82557b|i82559er)(=([0-9a-f]{2}(:[0-9a-f]{2}){5}))?$/i)) {
+		res.model = match_res[1].toLowerCase();
+		if (match_res[3])
+		    res.macaddr = match_res[3];
+	    } else if (match_res = p.match(/^bridge=(\S+)$/)) {
+		res.bridge = match_res[1];
+	    } else if (match_res = p.match(/^rate=(\d+(\.\d+)?)$/)) {
+		res.rate = match_res[1];
+	    } else {
+		errors = true;
+		return false; // break
+	    }
+	});
+
+	if (errors || !res.model)
+	    return;
+
+	return res;
+    },
+
+    printQemuNetwork: function(net) {
+
+	var netstr = net.model;
+	if (net.macaddr)
+	    netstr += "=" + net.macaddr;
+	if (net.bridge)
+	    netstr += ",bridge=" + net.bridge;
+	if (net.rate)
+	    netstr += ",rate=" + net.rate;
+
+	return netstr;
+    },
+
     parseQemuDrive: function(key, value) {
 	if (!(key && value))
 	    return;
@@ -48,7 +93,7 @@
 	    res[k] = v;
 	});
 
-	if (errors)
+	if (errors || !res.file)
 	    return;
 	
 	return res;

Modified: pve-manager/pve2/www/manager/qemu/HardwareView.js
===================================================================
--- pve-manager/pve2/www/manager/qemu/HardwareView.js	2011-07-06 08:19:07 UTC (rev 6245)
+++ pve-manager/pve2/www/manager/qemu/HardwareView.js	2011-07-06 11:00:20 UTC (rev 6246)
@@ -124,6 +124,128 @@
     }
 });
 
+Ext.define('PVE.qemu.NetworkEdit', {
+    extend: 'PVE.window.Edit',
+
+    getParams: function(values) {
+	var me = this;
+
+	me.network.model = values.model;
+	if (values.mode === 'bridge') {
+	    me.network.bridge = values.bridge;
+	} else {
+	    me.network.bridge = undefined;
+	}
+	me.network.macaddr = values.macaddr;
+
+	var params = {};
+
+	params[me.confid] = PVE.Parser.printQemuNetwork(me.network);
+
+	return params;
+    },
+
+    initComponent : function() {
+	var me = this;
+
+	var nodename = me.pveSelNode.data.node;
+	if (!nodename) 
+	    throw "no node name specified";	    
+
+	me.create = me.confid ? false : true;
+
+	Ext.applyIf(me, {
+	    title: me.create ? "Add network device" : 
+		"Edit network device settings"
+ 	});
+
+	me.column1 = [
+	    {
+		xtype: 'radiofield',
+		name: 'mode',
+		height: 22, // hack: set same height as text fields
+		inputValue: 'bridge',
+		boxLabel: 'Bridged mode',
+		checked: true,
+		listeners: {
+		    change: function(f, value) {
+			if (!me.rendered)
+			    return;
+			me.down('field[name=bridge]').setDisabled(!value);
+			me.down('field[name=bridge]').validate();
+		    }
+		}
+	    },
+	    {
+		xtype: 'textfield',
+		name: 'bridge',
+		value: 'vmbr0',
+		fieldLabel: 'Bridge',
+		labelAlign: 'right',
+		allowBlank: false
+	    },
+	    {
+		xtype: 'radiofield',
+		name: 'mode',
+		height: 22, // hack: set same height as text fields
+		inputValue: 'nat',
+		boxLabel: 'NAT mode'
+	    }
+	];
+
+	me.column2 = [
+	    {
+		xtype: 'PVE.form.NetworkCardSelector',
+		name: 'model',
+		fieldLabel: 'Network card',
+		value: 'rtl8139',
+		allowBlank: false
+	    },
+	    {
+		xtype: 'textfield',
+		name: 'macaddr',
+		fieldLabel: 'MAC address',
+		allowBlank: true,
+		emptyText: 'auto'
+	    }
+	];
+
+	me.callParent();
+
+	me.load({
+	    success: function(form, action) {
+		var i, confid;
+		me.vmconfig = action.result.data;
+		if (!me.create) {
+		    var value = me.vmconfig[me.confid];
+		    me.network = PVE.Parser.parseQemuNetwork(me.confid, value);
+		    if (!me.network) {
+			Ext.Msg.alert('Error', 'Unable to parse network options');
+			me.close();
+			return;
+		    }
+		    var values = me.network;
+		    values.mode = values.bridge ? 'bridge' : 'nat';
+		    form.setValues(values);
+		    // hack: fix ExtJS bug
+		    Ext.Array.each(me.query('radiofield'), function(f) {
+			f.resetOriginalValue();
+		    });
+		} else {
+		    me.network = {};
+		    for (i = 0; i < 100; i++) {
+			confid = 'net' + i;
+			if (!Ext.isDefined(me.vmconfig[confid])) {
+			    me.confid = confid;
+			    break;
+			}
+		    }
+		}
+	    }
+	});
+    }
+});
+
 Ext.define('PVE.qemu.HDEdit', {
     extend: 'PVE.window.Edit',
 
@@ -745,6 +867,7 @@
 	    confid = "net" + i;
 	    rows[confid] = {
 		tdCls: 'pve-itype-icon-network',
+		editor: 'PVE.qemu.NetworkEdit',
 		header: 'Network Adapter '+ '(' + confid +')'
 	    };
 	}
@@ -889,6 +1012,12 @@
 				text: 'Network Device',
 				iconCls: 'pve-itype-icon-network',
 				handler: function() {
+				    var win = Ext.create('PVE.qemu.NetworkEdit', {
+					url: '/api2/extjs/' + baseurl,
+					pveSelNode: me.pveSelNode
+				    });
+				    win.on('destroy', reload);
+				    win.show();
 				}
 			    }
 			]

Modified: pve-manager/pve2/www/manager/window/Edit.js
===================================================================
--- pve-manager/pve2/www/manager/window/Edit.js	2011-07-06 08:19:07 UTC (rev 6245)
+++ pve-manager/pve2/www/manager/window/Edit.js	2011-07-06 11:00:20 UTC (rev 6246)
@@ -116,7 +116,7 @@
 
 	var submitBtn = Ext.create('Ext.Button', {
 	    text: me.create ? 'Create' : 'OK',
-	    disabled: true,
+	    disabled: !me.create,
 	    handler: function() {
 		me.submit(formpanel);
 	    }
@@ -133,7 +133,7 @@
 	var set_button_status = function() {
 	    var valid = form.isValid();
 	    var dirty = form.isDirty();
-	    submitBtn.setDisabled(!(valid && dirty));
+	    submitBtn.setDisabled(!valid || !(dirty || me.create));
 	    resetBtn.setDisabled(!dirty);
 	};
 



More information about the pve-devel mailing list