]>
Commit | Line | Data |
---|---|---|
48295db4 DM |
1 | Ext.define('PVE.MigrateBase', { |
2 | extend: 'PVE.Page', | |
3 | ||
4 | nodename: undefined, | |
5 | vmid: undefined, | |
617c5801 | 6 | vmtype: undefined, // qemu or lxc |
48295db4 DM |
7 | |
8 | config: { | |
9 | items: [ | |
10 | { | |
7853a5ff | 11 | xtype: 'pveTitleBar', |
5ba187c1 | 12 | pveReloadButton: false, |
48295db4 | 13 | }, |
5ba187c1 | 14 | { |
48295db4 DM |
15 | xtype: 'formpanel', |
16 | flex: 1, | |
17 | padding: 10, | |
18 | items: [ | |
19 | { | |
20 | xtype: 'fieldset', | |
21 | items: [ | |
22 | { | |
23 | xtype: 'pveNodeSelector', | |
24 | placeHolder: gettext('Target node'), | |
25 | name: 'target', | |
26 | required: true, | |
27 | }, | |
28 | { | |
29 | xtype: 'checkboxfield', | |
5ba187c1 | 30 | name: 'online', |
48295db4 | 31 | checked: true, |
5ba187c1 TL |
32 | label: gettext('Online'), |
33 | }, | |
34 | ], | |
48295db4 DM |
35 | }, |
36 | { | |
37 | xtype: 'button', | |
38 | itemId: 'migrate', | |
39 | ui: 'action', | |
5ba187c1 TL |
40 | text: gettext('Migrate'), |
41 | }, | |
42 | ], | |
43 | }, | |
44 | ], | |
48295db4 DM |
45 | }, |
46 | ||
47 | initialize: function() { | |
48 | var me = this; | |
49 | ||
50 | var btn = me.down('#migrate'); | |
51 | ||
52 | btn.setHandler(function() { | |
53 | var form = this.up('formpanel'); | |
54 | var values = form.getValues(); | |
5ba187c1 | 55 | |
48295db4 DM |
56 | if (!values.target) { |
57 | Ext.Msg.alert('Error', 'Please select a target node'); | |
58 | return; | |
59 | } | |
60 | ||
e54ad66e | 61 | Proxmox.Utils.API2Request({ |
48295db4 DM |
62 | params: { target: values.target, online: values.online ? 1 : 0 }, |
63 | url: '/nodes/' + me.nodename + '/' + me.vmtype + '/' + me.vmid + "/migrate", | |
64 | method: 'POST', | |
65 | failure: function(response, opts) { | |
66 | Ext.Msg.alert('Error', response.htmlStatus); | |
67 | }, | |
68 | success: function(response, options) { | |
69 | var upid = response.result.data; | |
5ba187c1 | 70 | var page = 'nodes/' + me.nodename + '/tasks/' + upid; |
48295db4 | 71 | PVE.Workspace.gotoPage(page); |
5ba187c1 | 72 | }, |
48295db4 DM |
73 | }); |
74 | }); | |
5ba187c1 | 75 | }, |
48295db4 DM |
76 | }); |
77 | ||
78 | Ext.define('PVE.QemuMigrate', { | |
79 | extend: 'PVE.MigrateBase', | |
80 | ||
81 | vmtype: 'qemu', | |
82 | ||
83 | statics: { | |
84 | pathMatch: function(loc) { | |
5ba187c1 TL |
85 | return loc.match(/^nodes\/([^\s/]+)\/qemu\/(\d+)\/migrate$/); |
86 | }, | |
48295db4 DM |
87 | }, |
88 | ||
89 | initialize: function() { | |
90 | var me = this; | |
91 | ||
92 | var match = me.self.pathMatch(me.getAppUrl()); | |
93 | if (!match) { | |
94 | throw "pathMatch failed"; | |
95 | } | |
96 | ||
97 | me.nodename = match[1]; | |
98 | me.vmid = match[2]; | |
99 | ||
100 | me.down('titlebar').setTitle(gettext('Migrate') + ': VM ' + me.vmid); | |
101 | ||
102 | this.callParent(); | |
5ba187c1 | 103 | }, |
48295db4 DM |
104 | }); |
105 | ||
617c5801 | 106 | Ext.define('PVE.LXCMigrate', { |
48295db4 DM |
107 | extend: 'PVE.MigrateBase', |
108 | ||
617c5801 | 109 | vmtype: 'lxc', |
48295db4 DM |
110 | |
111 | statics: { | |
112 | pathMatch: function(loc) { | |
5ba187c1 TL |
113 | return loc.match(/^nodes\/([^\s/]+)\/lxc\/(\d+)\/migrate$/); |
114 | }, | |
48295db4 DM |
115 | }, |
116 | ||
117 | initialize: function() { | |
118 | var me = this; | |
119 | ||
120 | var match = me.self.pathMatch(me.getAppUrl()); | |
121 | if (!match) { | |
122 | throw "pathMatch failed"; | |
123 | } | |
124 | ||
125 | me.nodename = match[1]; | |
126 | me.vmid = match[2]; | |
127 | ||
128 | me.down('titlebar').setTitle(gettext('Migrate') + ': CT ' + me.vmid); | |
129 | ||
130 | this.callParent(); | |
5ba187c1 | 131 | }, |
48295db4 | 132 | }); |