[pve-devel] [PATCH] add live storage migration to migrate window

Alexandre Derumier aderumier at odiso.com
Sun Jul 2 08:30:06 CEST 2017


If online is checked && vm is a qemu machine,

we display 2 new field:

-use-local-disk checkbox (unchecked by default)
-target storage option (disabled by default, enabled is localdisk is checked)

Signed-off-by: Alexandre Derumier <aderumier at odiso.com>
---
 www/manager6/window/Migrate.js | 90 ++++++++++++++++++++++++++++++++++++------
 1 file changed, 77 insertions(+), 13 deletions(-)

diff --git a/www/manager6/window/Migrate.js b/www/manager6/window/Migrate.js
index dfc8da33..496229cd 100644
--- a/www/manager6/window/Migrate.js
+++ b/www/manager6/window/Migrate.js
@@ -3,7 +3,7 @@ Ext.define('PVE.window.Migrate', {
 
     resizable: false,
 
-    migrate: function(target, online) {
+    migrate: function(target, online, localdisks, targetstorage) {
 	var me = this;
 	var params = {
 	    target: target
@@ -11,6 +11,12 @@ Ext.define('PVE.window.Migrate', {
 
 	if (me.vmtype === 'qemu') {
 	    params.online = online;
+	    if(localdisks) {
+		params['with-local-disks'] = localdisks;
+		if(targetstorage) {
+		    params.targetstorage = targetstorage;
+		}
+	    }
 	} else {
 	    params.restart = online;
 	}
@@ -57,21 +63,51 @@ Ext.define('PVE.window.Migrate', {
 	    running = true;
 	}
 
-	me.formPanel = Ext.create('Ext.form.Panel', {
-	    bodyPadding: 10,
-	    border: false,
-	    fieldDefaults: {
-		labelWidth: 100,
-		anchor: '100%'
-	    },
-	    items: [
+        me.localdisks = Ext.createWidget('pvecheckbox', {
+            name: 'localdisks',
+            defaultValue: 0,
+            fieldLabel: gettext('Migrate local disks'),
+	    hidden: running ? false : true,
+	    listeners: {
+		change: function(field, checked) {
+
+		    if(checked) {
+			me.storagesel.setDisabled(false);
+		    } else {
+			me.storagesel.setDisabled(true);
+		    }
+		}
+	    }
+        });
+
+        me.storagesel = Ext.create('PVE.form.StorageSelector', {
+            nodename: me.nodename,
+            name: 'targetstorage',
+            value: '',
+            fieldLabel: gettext('Storage'),
+            storageContent: 'images',
+	    autoSelect: false, // will use for each disk the same storage as source
+	    allowBlank: true,
+	    emptyText: gettext('Same as source'),
+	    disabled: true,
+	    hidden: running ? false : true,
+        });
+
+        var items = [
 		{
 		    xtype: 'pveNodeSelector',
 		    name: 'target',
 		    fieldLabel: gettext('Target node'),
 		    allowBlank: false,
 		    disallowedNodes: [me.nodename],
-		    onlineValidator: true
+		    onlineValidator: true,
+		    listeners: {
+			change: function(f, value) {
+			    if (me.vmtype === 'qemu') { 
+				me.storagesel.setNodename(value);
+			    }
+			}
+		    }
 		},
 		{
 		    xtype: 'pvecheckbox',
@@ -79,9 +115,37 @@ Ext.define('PVE.window.Migrate', {
 		    uncheckedValue: 0,
 		    defaultValue: 0,
 		    checked: running,
-		    fieldLabel: me.vmtype === 'qemu' ? gettext('Online') : gettext('Restart Mode')
+		    fieldLabel: me.vmtype === 'qemu' ? gettext('Online') : gettext('Restart Mode'),
+		    listeners: {
+			change: function(field, checked) {
+			    if (me.vmtype === 'qemu') {
+
+				if(checked) {
+				    me.storagesel.setHidden(false);
+				    me.localdisks.setHidden(false);
+				} else {
+				    me.storagesel.setHidden(true);
+				    me.localdisks.setHidden(true);
+				}
+			    }
+			}
+		    }
 		}
-	    ]
+        ];
+
+	if (me.vmtype === 'qemu') {
+	    items.push(me.localdisks);
+	    items.push(me.storagesel);
+	}
+
+	me.formPanel = Ext.create('Ext.form.Panel', {
+	    bodyPadding: 10,
+	    border: false,
+	    fieldDefaults: {
+		labelWidth: 100,
+		anchor: '100%'
+	    },
+	    items: items
 	});
 
 	var form = me.formPanel.getForm();
@@ -90,7 +154,7 @@ Ext.define('PVE.window.Migrate', {
 	    text: gettext('Migrate'),
 	    handler: function() {
 		var values = form.getValues();
-		me.migrate(values.target, values.online);
+		me.migrate(values.target, values.online, values.localdisks, values.targetstorage);
 	    }
 	});
 
-- 
2.11.0




More information about the pve-devel mailing list