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

svn-commits at proxmox.com svn-commits at proxmox.com
Wed Jul 6 10:19:07 CEST 2011


Author: dietmar
Date: 2011-07-06 10:19:07 +0200 (Wed, 06 Jul 2011)
New Revision: 6245

Modified:
   pve-manager/pve2/ChangeLog
   pve-manager/pve2/www/manager/qemu/HardwareView.js
Log:
* www/manager/qemu/HardwareView.js: add 'Deletion Confirmation',
  ability to re-add unused disks.



Modified: pve-manager/pve2/ChangeLog
===================================================================
--- pve-manager/pve2/ChangeLog	2011-07-06 06:30:26 UTC (rev 6244)
+++ pve-manager/pve2/ChangeLog	2011-07-06 08:19:07 UTC (rev 6245)
@@ -1,3 +1,8 @@
+2011-07-06  Proxmox Support Team  <support at proxmox.com>
+
+	* www/manager/qemu/HardwareView.js: add 'Deletion Confirmation',
+	ability to re-add unused disks.
+
 2011-07-05  Proxmox Support Team  <support at proxmox.com>
 
 	* www/manager/qemu/HardwareView.js: impl. PVE.qemu.CDEdit

Modified: pve-manager/pve2/www/manager/qemu/HardwareView.js
===================================================================
--- pve-manager/pve2/www/manager/qemu/HardwareView.js	2011-07-06 06:30:26 UTC (rev 6244)
+++ pve-manager/pve2/www/manager/qemu/HardwareView.js	2011-07-06 08:19:07 UTC (rev 6245)
@@ -216,6 +216,8 @@
 
     cdrom: false,
 
+    unused: false,
+
     getParams: function(values) {
 	var me = this;
 
@@ -233,9 +235,13 @@
 		drive.file = 'none';
 	    }
 	} else {
-	    drive.file = values.storage + ":" + values.disksize;
-	    drive.format = values.diskformat;
-	
+	    if (me.unused) {
+		drive.file = me.vmconfig[values.unusedId];
+	    } else {
+		drive.file = values.storage + ":" + values.disksize;
+		drive.format = values.diskformat;
+	    }
+
 	    if (values.cache)
 		drive.cache = values.cache;
 	    
@@ -257,15 +263,21 @@
 	if (!nodename) 
 	    throw "no node name specified";	    
 
+	if (!me.cdrom && me.confid && me.confid.match(/^unused\d+$/))
+	    me.unused = true;
+
 	var maxIds = {
 	    ide: 3,
 	    virtio: 15,
 	    scsi: 15
 	};
 
+	var unused_disks;
+
 	var bussel = Ext.createWidget('fieldcontainer', {
 	    fieldLabel: 'Bus/Device',
 	    layout: 'hbox',
+	    height: 22, // hack: set to same height as other fields
 	    defaults: {
                 flex: 1,
                 hideLabel: true
@@ -367,36 +379,45 @@
 	    ];
 
 	} else {
-	    me.column1 = [
-		{
-		    xtype: 'PVE.form.StorageSelector',
-		    name: 'storage',
-		    nodename: nodename,
-		    fieldLabel: 'Storage',
-		    storageContent: 'images',
+	    if (me.unused) {
+
+		unused_disks = Ext.create('PVE.form.KVComboBox', {
+		    name: 'unusedId',	
+		    fieldLabel: 'Disk image',
+		    matchFieldWidth: false,
+		    listConfig: {
+			width: 350
+		    },
+		    data: [],
 		    allowBlank: false
-		},
-		{
-		    xtype: 'numberfield',
-		    name: 'disksize',
-		    minValue: 1,
-		    maxValue: 128*1024,
-		    value: 32,
-		    fieldLabel: 'Disk size (GB)',
-		    allowBlank: false
-		},
-		bussel
-	    ];
+		});
 
+		me.column1 = [ bussel, unused_disks ];
+	    } else {
+		me.column1 = [
+		    bussel,
+		    {
+			xtype: 'PVE.form.StorageSelector',
+			name: 'storage',
+			nodename: nodename,
+			fieldLabel: 'Storage',
+			storageContent: 'images',
+			allowBlank: false
+		    },
+		    {
+			xtype: 'numberfield',
+			name: 'disksize',
+			minValue: 1,
+			maxValue: 128*1024,
+			value: 32,
+			fieldLabel: 'Disk size (GB)',
+			allowBlank: false
+		    }
+		];
+	    }
+
 	    me.column2 = [
 		{
-		    xtype: 'PVE.form.DiskFormatSelector',
-		    name: 'diskformat',
-		    fieldLabel: 'Image format',
-		    value: 'raw',
-		    allowBlank: false
-		},
-		{
 		    xtype: 'CacheTypeSelector',
 		    name: 'cache',
 		    value: '',
@@ -408,11 +429,26 @@
                     name: 'nobackup'
  		}
 	    ];
+
+	    if (!me.unused) {
+		me.column2.unshift({
+		    xtype: 'PVE.form.DiskFormatSelector',
+		    name: 'diskformat',
+		    fieldLabel: 'Image format',
+		    value: 'raw',
+		    allowBlank: false
+		});
+	    };
+
 	}
 
-	Ext.applyIf(me, {
-	    title: me.cdrom ? 'Add CD/DVD Drive' : 'Add Harddisk',
-	});
+	if (me.cdrom) {
+	    me.title = 'Add CD/DVD Drive';
+	} else if (me.unused) {
+	    me.title = 'Add (previously unused) Harddisk';	    
+	} else {
+	    me.title = 'Add Harddisk';
+	}
 
 	me.callParent();
 
@@ -428,6 +464,16 @@
 		    return;
 		}
 
+		if (unused_disks) {
+		    var disklist = [];
+		    
+		    Ext.Object.each(me.vmconfig, function(key, value) {
+			if (key.match(/^unused\d+$/))
+			    disklist.push([key, value]);
+		    });
+		    unused_disks.store.loadData(disklist);
+		    unused_disks.setValue(me.confid);
+		}
 		var controller = 'ide';
 		if (me.vmconfig.ostype === 'l26') {
 		    controller = 'virtio';
@@ -705,6 +751,7 @@
 	for (i = 0; i < 8; i++) {
 	    rows["unused" + i] = {
 		tdCls: 'pve-itype-icon-storage',
+		editor: 'PVE.qemu.HDCreate',
 		header: 'Unused Disk'
 	    };
 	}
@@ -758,22 +805,33 @@
 		if (!rec)
 		    return;
 
-		me.setLoading(true, true);
-		PVE.Utils.API2Request({
-		    url: '/api2/extjs/' + baseurl,
-		    method: 'PUT',
-		    params: {
-			delete: rec.data.key
-		    },
-		    callback: function() {
-			me.setLoading(false);
-			reload();
-		    },
-		    failure: function (response, opts) {
-			Ext.Msg.alert('Error',response.htmlStatus);
-		    }
+		var msg = 'Are you sure you want to remove: ' + 
+		    me.renderKey(rec.data.key, {}, rec);
+		if (rec.data.key.match(/^unused\d+$/)) {
+		    msg = 'Are you sure you want to remove image "' +
+			rec.data.value + '"? This will permanently erase ' +
+			'all image data.';
+		}
+
+		Ext.Msg.confirm('Deletion Confirmation', msg, function(btn) {
+		    if (btn !== 'yes')
+			return;
+		    me.setLoading(true, true);
+		    PVE.Utils.API2Request({
+			url: '/api2/extjs/' + baseurl,
+			method: 'PUT',
+			params: {
+			    delete: rec.data.key
+			},
+			callback: function() {
+			    me.setLoading(false);
+			    reload();
+			},
+			failure: function (response, opts) {
+			    Ext.Msg.alert('Error',response.htmlStatus);
+			}
+		    });
 		});
-
 	    }
 	});
 



More information about the pve-devel mailing list