]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/window/Migrate.js
use Proxmox.Utils instead of PVE.Utils
[pve-manager.git] / www / manager6 / window / Migrate.js
CommitLineData
04c32bed
DM
1Ext.define('PVE.window.Migrate', {
2 extend: 'Ext.window.Window',
3
2df7ea9f
EK
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 }
04c32bed 19 },
2df7ea9f
EK
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
1c62fde2
EK
30 if (view.liveMode) {
31 params[view.liveMode] = 1;
2df7ea9f
EK
32 }
33
e7ade592 34 Proxmox.Utils.API2Request({
2df7ea9f
EK
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 }
04c32bed 55 }
04c32bed 56 }
2df7ea9f 57 },
04c32bed 58
2df7ea9f
EK
59 width: 350,
60 modal: true,
61 layout: 'auto',
62 border: false,
63 resizable: false,
64 items: [
65 {
66 xtype: 'form',
67 reference: 'formPanel',
04c32bed
DM
68 bodyPadding: 10,
69 border: false,
70 fieldDefaults: {
71 labelWidth: 100,
72 anchor: '100%'
73 },
74 items: [
75 {
d46faa2c 76 xtype: 'pveNodeSelector',
2df7ea9f 77 reference: 'pveNodeSelector',
04c32bed
DM
78 name: 'target',
79 fieldLabel: gettext('Target node'),
80 allowBlank: false,
2df7ea9f 81 disallowedNodes: undefined,
04c32bed
DM
82 onlineValidator: true
83 },
84 {
1c62fde2
EK
85 xtype: 'displayfield',
86 reference: 'migrationMode',
87 fieldLabel: gettext('Mode'),
88 value: gettext('Offline')
04c32bed 89 }
2df7ea9f
EK
90 ]
91 }
92 ],
93 buttons: [
94 {
95 xtype: 'pveHelpButton',
96 reference: 'pveHelpButton',
97 onlineHelp: 'pct_migration',
98 listenToGlobalEvent: false,
99 hidden: false
100 },
101 '->',
102 {
103 xtype: 'button',
104 reference: 'submitButton',
105 text: gettext('Migrate')
106 }
107 ],
04c32bed 108
2df7ea9f
EK
109 initComponent : function() {
110 var me = this;
04c32bed 111
2df7ea9f
EK
112 if (!me.nodename) {
113 throw "no node name specified";
209daf22
DC
114 }
115
2df7ea9f
EK
116 if (!me.vmid) {
117 throw "no VM ID specified";
118 }
209daf22 119
2df7ea9f
EK
120 if (!me.vmtype) {
121 throw "no VM type specified";
122 }
04c32bed
DM
123
124 me.callParent();
8f3600b6 125
2df7ea9f
EK
126 var title = gettext('Migrate') + (' CT ') + me.vmid;
127 me.liveMode = 'restart';
128
129 if (me.vmtype === 'qemu') {
2df7ea9f
EK
130 me.lookup('pveHelpButton').setHelpConfig({
131 onlineHelp: 'qm_migration'
132 });
133 title = gettext('Migrate') + (' VM ') + me.vmid;
134 me.liveMode = 'online';
135 }
2df7ea9f
EK
136
137 var running = false;
138 var vmrec = PVE.data.ResourceStore.findRecord('vmid', me.vmid,
139 0, false, false, true);
140 if (vmrec && vmrec.data && vmrec.data.running) {
141 running = true;
142 }
8f3600b6 143
1c62fde2
EK
144 if (running) {
145 var displayField = me.lookup('migrationMode');
146 if (me.vmtype === 'qemu') {
147 displayField.setValue(gettext('Online'));
148 me.liveMode = 'online';
149 } else {
150 displayField.setValue(gettext('Restart Mode'));
151 me.liveMode = 'restart';
152 }
153 }
154
155 me.setTitle(title);
2df7ea9f
EK
156 me.lookup('pveNodeSelector').disallowedNodes = [me.nodename];
157 me.lookup('formPanel').isValid();
04c32bed 158 }
2df7ea9f 159});