]>
Commit | Line | Data |
---|---|---|
dc56cd13 DM |
1 | Ext.define('PVE.qemu.CmdMenu', { |
2 | extend: 'Ext.menu.Menu', | |
3 | ||
efbc9f5d | 4 | showSeparator: false, |
dc56cd13 DM |
5 | initComponent: function() { |
6 | var me = this; | |
7 | ||
8 | var nodename = me.pveSelNode.data.node; | |
9 | if (!nodename) { | |
10 | throw "no node name specified"; | |
11 | } | |
12 | ||
13 | var vmid = me.pveSelNode.data.vmid; | |
14 | if (!vmid) { | |
15 | throw "no VM ID specified"; | |
16 | } | |
17 | ||
18 | var vmname = me.pveSelNode.data.name; | |
19 | ||
20 | var vm_command = function(cmd, params) { | |
e7ade592 | 21 | Proxmox.Utils.API2Request({ |
dc56cd13 DM |
22 | params: params, |
23 | url: '/nodes/' + nodename + '/qemu/' + vmid + "/status/" + cmd, | |
24 | method: 'POST', | |
25 | failure: function(response, opts) { | |
26 | Ext.Msg.alert('Error', response.htmlStatus); | |
27 | } | |
28 | }); | |
29 | }; | |
30 | ||
9875a997 EK |
31 | var caps = Ext.state.Manager.get('GuiCap'); |
32 | ||
ce8dac51 DC |
33 | var running = false; |
34 | var stopped = true; | |
35 | var suspended = false; | |
8ad34211 | 36 | var standalone = PVE.data.ResourceStore.getNodes().length < 2; |
ce8dac51 DC |
37 | |
38 | switch (me.pveSelNode.data.status) { | |
39 | case 'running': | |
40 | running = true; | |
41 | stopped = false; | |
42 | break; | |
43 | case 'paused': | |
44 | stopped = false; | |
45 | suspended = true; | |
46 | break; | |
47 | default: break; | |
48 | } | |
49 | ||
dc56cd13 DM |
50 | me.title = "VM " + vmid; |
51 | ||
52 | me.items = [ | |
53 | { | |
54 | text: gettext('Start'), | |
d4333933 | 55 | iconCls: 'fa fa-fw fa-play', |
52af3f0d | 56 | disabled: running || suspended, |
dc56cd13 DM |
57 | handler: function() { |
58 | vm_command('start'); | |
59 | } | |
60 | }, | |
dc56cd13 DM |
61 | { |
62 | text: gettext('Suspend'), | |
d4333933 | 63 | iconCls: 'fa fa-fw fa-pause', |
efbc9f5d | 64 | hidden: suspended, |
ce8dac51 | 65 | disabled: stopped || suspended, |
dc56cd13 | 66 | handler: function() { |
e7ade592 | 67 | var msg = Proxmox.Utils.format_task_description('qmsuspend', vmid); |
dc56cd13 DM |
68 | Ext.Msg.confirm(gettext('Confirm'), msg, function(btn) { |
69 | if (btn !== 'yes') { | |
70 | return; | |
71 | } | |
72 | vm_command('suspend'); | |
73 | }); | |
74 | } | |
75 | }, | |
76 | { | |
77 | text: gettext('Resume'), | |
d4333933 | 78 | iconCls: 'fa fa-fw fa-play', |
efbc9f5d | 79 | hidden: !suspended, |
dc56cd13 DM |
80 | handler: function() { |
81 | vm_command('resume'); | |
82 | } | |
83 | }, | |
84 | { | |
85 | text: gettext('Shutdown'), | |
d4333933 | 86 | iconCls: 'fa fa-fw fa-power-off', |
ce8dac51 | 87 | disabled: stopped || suspended, |
dc56cd13 | 88 | handler: function() { |
e7ade592 | 89 | var msg = Proxmox.Utils.format_task_description('qmshutdown', vmid); |
dc56cd13 DM |
90 | Ext.Msg.confirm(gettext('Confirm'), msg, function(btn) { |
91 | if (btn !== 'yes') { | |
92 | return; | |
93 | } | |
94 | ||
95 | vm_command('shutdown'); | |
96 | }); | |
9bd6cd80 | 97 | } |
dc56cd13 DM |
98 | }, |
99 | { | |
100 | text: gettext('Stop'), | |
d4333933 | 101 | iconCls: 'fa fa-fw fa-stop', |
ce8dac51 | 102 | disabled: stopped, |
dc56cd13 | 103 | handler: function() { |
e7ade592 | 104 | var msg = Proxmox.Utils.format_task_description('qmstop', vmid); |
dc56cd13 DM |
105 | Ext.Msg.confirm(gettext('Confirm'), msg, function(btn) { |
106 | if (btn !== 'yes') { | |
107 | return; | |
108 | } | |
109 | ||
110 | vm_command("stop"); | |
9bd6cd80 | 111 | }); |
dc56cd13 DM |
112 | } |
113 | }, | |
8ad34211 DC |
114 | { |
115 | xtype: 'menuseparator', | |
116 | hidden: (standalone || !caps.vms['VM.Migrate']) && !caps.vms['VM.Allocate'] && !caps.vms['VM.Clone'] | |
117 | }, | |
efbc9f5d DC |
118 | { |
119 | text: gettext('Migrate'), | |
120 | iconCls: 'fa fa-fw fa-send-o', | |
8ad34211 | 121 | hidden: standalone || !caps.vms['VM.Migrate'], |
efbc9f5d DC |
122 | handler: function() { |
123 | var win = Ext.create('PVE.window.Migrate', { | |
124 | vmtype: 'qemu', | |
125 | nodename: nodename, | |
126 | vmid: vmid | |
127 | }); | |
128 | win.show(); | |
129 | } | |
130 | }, | |
dc56cd13 DM |
131 | { |
132 | text: gettext('Clone'), | |
d4333933 | 133 | iconCls: 'fa fa-fw fa-clone', |
8ad34211 | 134 | hidden: !caps.vms['VM.Clone'], |
dc56cd13 | 135 | handler: function() { |
0718aefc | 136 | PVE.window.Clone.wrap(nodename, vmid, me.isTemplate, 'qemu'); |
dc56cd13 DM |
137 | } |
138 | }, | |
139 | { | |
140 | text: gettext('Convert to template'), | |
52af3f0d | 141 | iconCls: 'fa fa-fw fa-file-o', |
8ad34211 | 142 | hidden: !caps.vms['VM.Allocate'], |
dc56cd13 | 143 | handler: function() { |
e7ade592 | 144 | var msg = Proxmox.Utils.format_task_description('qmtemplate', vmid); |
dc56cd13 DM |
145 | Ext.Msg.confirm(gettext('Confirm'), msg, function(btn) { |
146 | if (btn !== 'yes') { | |
147 | return; | |
148 | } | |
149 | ||
e7ade592 | 150 | Proxmox.Utils.API2Request({ |
dc56cd13 DM |
151 | url: '/nodes/' + nodename + '/qemu/' + vmid + '/template', |
152 | method: 'POST', | |
153 | failure: function(response, opts) { | |
154 | Ext.Msg.alert('Error', response.htmlStatus); | |
155 | } | |
156 | }); | |
157 | }); | |
158 | } | |
159 | }, | |
efbc9f5d | 160 | { xtype: 'menuseparator' }, |
dc56cd13 DM |
161 | { |
162 | text: gettext('Console'), | |
d4333933 | 163 | iconCls: 'fa fa-fw fa-terminal', |
dc56cd13 | 164 | handler: function() { |
e7ade592 | 165 | Proxmox.Utils.API2Request({ |
dc56cd13 DM |
166 | url: '/nodes/' + nodename + '/qemu/' + vmid + '/status/current', |
167 | failure: function(response, opts) { | |
168 | Ext.Msg.alert('Error', response.htmlStatus); | |
169 | }, | |
170 | success: function(response, opts) { | |
171 | var allowSpice = response.result.data.spice; | |
3438c27e DC |
172 | var allowXtermjs = response.result.data.serial; |
173 | var consoles = { | |
174 | spice: allowSpice, | |
175 | xtermjs: allowXtermjs | |
176 | }; | |
177 | PVE.Utils.openDefaultConsoleWindow(consoles, 'kvm', vmid, nodename, vmname); | |
dc56cd13 DM |
178 | } |
179 | }); | |
180 | } | |
181 | } | |
182 | ]; | |
183 | ||
184 | me.callParent(); | |
185 | } | |
186 | }); |