]>
Commit | Line | Data |
---|---|---|
04c32bed DM |
1 | Ext.define('PVE.window.Migrate', { |
2 | extend: 'Ext.window.Window', | |
3 | ||
4 | resizable: false, | |
5 | ||
6 | migrate: function(target, online) { | |
7 | var me = this; | |
18fdf0bc DC |
8 | var params = { |
9 | target: target | |
10 | }; | |
11 | ||
12 | if (me.vmtype === 'qemu') { | |
13 | params.online = online; | |
14 | } else { | |
15 | params.restart = online; | |
16 | } | |
17 | ||
04c32bed | 18 | PVE.Utils.API2Request({ |
18fdf0bc | 19 | params: params, |
04c32bed DM |
20 | url: '/nodes/' + me.nodename + '/' + me.vmtype + '/' + me.vmid + "/migrate", |
21 | waitMsgTarget: me, | |
22 | method: 'POST', | |
23 | failure: function(response, opts) { | |
24 | Ext.Msg.alert(gettext('Error'), response.htmlStatus); | |
25 | }, | |
26 | success: function(response, options) { | |
27 | var upid = response.result.data; | |
28 | ||
29 | var win = Ext.create('PVE.window.TaskViewer', { | |
30 | upid: upid | |
31 | }); | |
32 | win.show(); | |
33 | me.close(); | |
34 | } | |
35 | }); | |
36 | }, | |
37 | ||
38 | initComponent : function() { | |
39 | var me = this; | |
40 | ||
41 | if (!me.nodename) { | |
42 | throw "no node name specified"; | |
43 | } | |
44 | ||
45 | if (!me.vmid) { | |
46 | throw "no VM ID specified"; | |
47 | } | |
48 | ||
49 | if (!me.vmtype) { | |
50 | throw "no VM type specified"; | |
51 | } | |
52 | ||
53 | var running = false; | |
54 | var vmrec = PVE.data.ResourceStore.findRecord('vmid', me.vmid, | |
55 | 0, false, false, true); | |
56 | if (vmrec && vmrec.data && vmrec.data.running) { | |
57 | running = true; | |
58 | } | |
59 | ||
60 | me.formPanel = Ext.create('Ext.form.Panel', { | |
61 | bodyPadding: 10, | |
62 | border: false, | |
63 | fieldDefaults: { | |
64 | labelWidth: 100, | |
65 | anchor: '100%' | |
66 | }, | |
67 | items: [ | |
68 | { | |
d46faa2c | 69 | xtype: 'pveNodeSelector', |
04c32bed DM |
70 | name: 'target', |
71 | fieldLabel: gettext('Target node'), | |
72 | allowBlank: false, | |
766998b1 | 73 | disallowedNodes: [me.nodename], |
04c32bed DM |
74 | onlineValidator: true |
75 | }, | |
76 | { | |
77 | xtype: 'pvecheckbox', | |
78 | name: 'online', | |
79 | uncheckedValue: 0, | |
80 | defaultValue: 0, | |
81 | checked: running, | |
6b43f8f1 | 82 | fieldLabel: me.vmtype === 'qemu' ? gettext('Online') : gettext('Restart Mode') |
04c32bed DM |
83 | } |
84 | ] | |
85 | }); | |
86 | ||
87 | var form = me.formPanel.getForm(); | |
88 | ||
89 | var submitBtn = Ext.create('Ext.Button', { | |
90 | text: gettext('Migrate'), | |
91 | handler: function() { | |
92 | var values = form.getValues(); | |
93 | me.migrate(values.target, values.online); | |
94 | } | |
95 | }); | |
96 | ||
209daf22 DC |
97 | var helpConfig; |
98 | // fixme: | |
99 | // the onlinehelp parser needs | |
100 | // that every id is explicitely written | |
101 | // can we do this better? | |
102 | if (me.vmtype === 'qemu') { | |
103 | helpConfig = { | |
104 | onlineHelp: 'qm_migration', | |
105 | listenToGlobalEvent: false, | |
106 | hidden: false | |
107 | }; | |
108 | } else { | |
109 | helpConfig = { | |
110 | onlineHelp: 'pct_migration', | |
111 | listenToGlobalEvent: false, | |
112 | hidden: false | |
113 | }; | |
114 | } | |
115 | ||
116 | var helpBtn = Ext.create('PVE.button.Help', helpConfig); | |
117 | ||
04c32bed | 118 | Ext.apply(me, { |
87d7df96 | 119 | title: gettext('Migrate') + ((me.vmtype === 'qemu')?' VM ':' CT ') + me.vmid, |
04c32bed DM |
120 | width: 350, |
121 | modal: true, | |
122 | layout: 'auto', | |
123 | border: false, | |
124 | items: [ me.formPanel ], | |
209daf22 | 125 | buttons: [ helpBtn, '->', submitBtn ] |
04c32bed DM |
126 | }); |
127 | ||
128 | me.callParent(); | |
8f3600b6 DC |
129 | |
130 | me.mon(me.formPanel, 'validitychange', function(fp, isValid) { | |
131 | submitBtn.setDisabled(!isValid); | |
132 | }); | |
133 | ||
134 | me.formPanel.isValid(); | |
04c32bed DM |
135 | } |
136 | }); |