5ba187c1a8
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
133 lines
2.5 KiB
JavaScript
133 lines
2.5 KiB
JavaScript
Ext.define('PVE.MigrateBase', {
|
|
extend: 'PVE.Page',
|
|
|
|
nodename: undefined,
|
|
vmid: undefined,
|
|
vmtype: undefined, // qemu or lxc
|
|
|
|
config: {
|
|
items: [
|
|
{
|
|
xtype: 'pveTitleBar',
|
|
pveReloadButton: false,
|
|
},
|
|
{
|
|
xtype: 'formpanel',
|
|
flex: 1,
|
|
padding: 10,
|
|
items: [
|
|
{
|
|
xtype: 'fieldset',
|
|
items: [
|
|
{
|
|
xtype: 'pveNodeSelector',
|
|
placeHolder: gettext('Target node'),
|
|
name: 'target',
|
|
required: true,
|
|
},
|
|
{
|
|
xtype: 'checkboxfield',
|
|
name: 'online',
|
|
checked: true,
|
|
label: gettext('Online'),
|
|
},
|
|
],
|
|
},
|
|
{
|
|
xtype: 'button',
|
|
itemId: 'migrate',
|
|
ui: 'action',
|
|
text: gettext('Migrate'),
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
|
|
initialize: function() {
|
|
var me = this;
|
|
|
|
var btn = me.down('#migrate');
|
|
|
|
btn.setHandler(function() {
|
|
var form = this.up('formpanel');
|
|
var values = form.getValues();
|
|
|
|
if (!values.target) {
|
|
Ext.Msg.alert('Error', 'Please select a target node');
|
|
return;
|
|
}
|
|
|
|
Proxmox.Utils.API2Request({
|
|
params: { target: values.target, online: values.online ? 1 : 0 },
|
|
url: '/nodes/' + me.nodename + '/' + me.vmtype + '/' + me.vmid + "/migrate",
|
|
method: 'POST',
|
|
failure: function(response, opts) {
|
|
Ext.Msg.alert('Error', response.htmlStatus);
|
|
},
|
|
success: function(response, options) {
|
|
var upid = response.result.data;
|
|
var page = 'nodes/' + me.nodename + '/tasks/' + upid;
|
|
PVE.Workspace.gotoPage(page);
|
|
},
|
|
});
|
|
});
|
|
},
|
|
});
|
|
|
|
Ext.define('PVE.QemuMigrate', {
|
|
extend: 'PVE.MigrateBase',
|
|
|
|
vmtype: 'qemu',
|
|
|
|
statics: {
|
|
pathMatch: function(loc) {
|
|
return loc.match(/^nodes\/([^\s/]+)\/qemu\/(\d+)\/migrate$/);
|
|
},
|
|
},
|
|
|
|
initialize: function() {
|
|
var me = this;
|
|
|
|
var match = me.self.pathMatch(me.getAppUrl());
|
|
if (!match) {
|
|
throw "pathMatch failed";
|
|
}
|
|
|
|
me.nodename = match[1];
|
|
me.vmid = match[2];
|
|
|
|
me.down('titlebar').setTitle(gettext('Migrate') + ': VM ' + me.vmid);
|
|
|
|
this.callParent();
|
|
},
|
|
});
|
|
|
|
Ext.define('PVE.LXCMigrate', {
|
|
extend: 'PVE.MigrateBase',
|
|
|
|
vmtype: 'lxc',
|
|
|
|
statics: {
|
|
pathMatch: function(loc) {
|
|
return loc.match(/^nodes\/([^\s/]+)\/lxc\/(\d+)\/migrate$/);
|
|
},
|
|
},
|
|
|
|
initialize: function() {
|
|
var me = this;
|
|
|
|
var match = me.self.pathMatch(me.getAppUrl());
|
|
if (!match) {
|
|
throw "pathMatch failed";
|
|
}
|
|
|
|
me.nodename = match[1];
|
|
me.vmid = match[2];
|
|
|
|
me.down('titlebar').setTitle(gettext('Migrate') + ': CT ' + me.vmid);
|
|
|
|
this.callParent();
|
|
},
|
|
});
|