]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/window/Migrate.js
Rework Migrate Window with declarative synthax
[pve-manager.git] / www / manager6 / window / Migrate.js
1 Ext.define('PVE.window.Migrate', {
2 extend: 'Ext.window.Window',
3
4 config: {
5 vmtype: undefined,
6 nodename: undefined,
7 vmid: undefined
8 },
9 // private, used to store the migration mode after checking if the guest runs
10 liveMode: undefined,
11
12 controller: {
13 xclass: 'Ext.app.ViewController',
14 control: {
15 'panel[reference=formPanel]': {
16 validityChange: function(panel, isValid) {
17 this.lookup('submitButton').setDisabled(!isValid);
18 }
19 },
20 'button[reference=submitButton]': {
21 click: function() {
22 var me = this;
23 var view = me.getView();
24
25 var values = me.lookup('formPanel').getValues();
26 var params = {
27 target: values.target
28 };
29
30 if (values.online) {
31 params[view.liveMode] = values.online;
32 }
33
34 PVE.Utils.API2Request({
35 params: params,
36 url: '/nodes/' + view.nodename + '/' + view.vmtype + '/' + view.vmid + '/migrate',
37 waitMsgTarget: view,
38 method: 'POST',
39 failure: function(response, opts) {
40 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
41 },
42 success: function(response, options) {
43 var upid = response.result.data;
44 var extraTitle = Ext.String.format(' ({0} ---> {1})', view.nodename, params.target);
45
46 Ext.create('PVE.window.TaskViewer', {
47 upid: upid,
48 extraTitle: extraTitle
49 }).show();
50
51 view.close();
52 }
53 });
54 }
55 }
56 }
57 },
58
59 width: 350,
60 modal: true,
61 layout: 'auto',
62 border: false,
63 resizable: false,
64 items: [
65 {
66 xtype: 'form',
67 reference: 'formPanel',
68 bodyPadding: 10,
69 border: false,
70 fieldDefaults: {
71 labelWidth: 100,
72 anchor: '100%'
73 },
74 items: [
75 {
76 xtype: 'pveNodeSelector',
77 reference: 'pveNodeSelector',
78 name: 'target',
79 fieldLabel: gettext('Target node'),
80 allowBlank: false,
81 disallowedNodes: undefined,
82 onlineValidator: true
83 },
84 {
85 xtype: 'pvecheckbox',
86 reference: 'onlineToggle',
87 name: 'online',
88 uncheckedValue: 0,
89 defaultValue: 0,
90 checked: false,
91 fieldLabel: gettext('Restart Mode')
92 }
93 ]
94 }
95 ],
96 buttons: [
97 {
98 xtype: 'pveHelpButton',
99 reference: 'pveHelpButton',
100 onlineHelp: 'pct_migration',
101 listenToGlobalEvent: false,
102 hidden: false
103 },
104 '->',
105 {
106 xtype: 'button',
107 reference: 'submitButton',
108 text: gettext('Migrate')
109 }
110 ],
111
112 initComponent : function() {
113 var me = this;
114
115 if (!me.nodename) {
116 throw "no node name specified";
117 }
118
119 if (!me.vmid) {
120 throw "no VM ID specified";
121 }
122
123 if (!me.vmtype) {
124 throw "no VM type specified";
125 }
126
127 me.callParent();
128
129 var title = gettext('Migrate') + (' CT ') + me.vmid;
130 me.liveMode = 'restart';
131
132 if (me.vmtype === 'qemu') {
133 me.lookup('onlineToggle').setFieldLabel(gettext('Online'));
134 me.lookup('pveHelpButton').setHelpConfig({
135 onlineHelp: 'qm_migration'
136 });
137 title = gettext('Migrate') + (' VM ') + me.vmid;
138 me.liveMode = 'online';
139 }
140 me.setTitle(title);
141
142 var running = false;
143 var vmrec = PVE.data.ResourceStore.findRecord('vmid', me.vmid,
144 0, false, false, true);
145 if (vmrec && vmrec.data && vmrec.data.running) {
146 running = true;
147 }
148 me.lookup('onlineToggle').setValue(running);
149
150 me.lookup('pveNodeSelector').disallowedNodes = [me.nodename];
151 me.lookup('formPanel').isValid();
152 }
153 });