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