]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/qemu/CmdMenu.js
ui: ct/vm: add tooltip to hibernate and stop button
[pve-manager.git] / www / manager6 / qemu / CmdMenu.js
1 Ext.define('PVE.qemu.CmdMenu', {
2 extend: 'Ext.menu.Menu',
3
4 showSeparator: false,
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) {
21 Proxmox.Utils.API2Request({
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
31 var caps = Ext.state.Manager.get('GuiCap');
32
33 var running = false;
34 var stopped = true;
35 var suspended = false;
36 var standalone = PVE.data.ResourceStore.getNodes().length < 2;
37
38 switch (me.pveSelNode.data.status) {
39 case 'running':
40 running = true;
41 stopped = false;
42 break;
43 case 'suspended':
44 stopped = false;
45 suspended = true;
46 break;
47 case 'paused':
48 stopped = false;
49 suspended = true;
50 break;
51 default: break;
52 }
53
54 me.title = "VM " + vmid;
55
56 me.items = [
57 {
58 text: gettext('Start'),
59 iconCls: 'fa fa-fw fa-play',
60 hidden: running || suspended,
61 disabled: running || suspended,
62 handler: function() {
63 vm_command('start');
64 }
65 },
66 {
67 text: gettext('Pause'),
68 iconCls: 'fa fa-fw fa-pause',
69 hidden: stopped || suspended,
70 disabled: stopped || suspended,
71 handler: function() {
72 var msg = Proxmox.Utils.format_task_description('qmpause', vmid);
73 Ext.Msg.confirm(gettext('Confirm'), msg, function(btn) {
74 if (btn !== 'yes') {
75 return;
76 }
77 vm_command('suspend');
78 });
79 }
80 },
81 {
82 text: gettext('Hibernate'),
83 iconCls: 'fa fa-fw fa-stop',
84 hidden: stopped || suspended,
85 disabled: stopped || suspended,
86 tooltip: gettext('Suspend to disk'),
87 handler: function() {
88 var msg = Proxmox.Utils.format_task_description('qmsuspend', vmid);
89 Ext.Msg.confirm(gettext('Confirm'), msg, function(btn) {
90 if (btn !== 'yes') {
91 return;
92 }
93 vm_command('suspend', { todisk: 1 });
94 });
95 }
96 },
97 {
98 text: gettext('Resume'),
99 iconCls: 'fa fa-fw fa-play',
100 hidden: !suspended,
101 handler: function() {
102 vm_command('resume');
103 }
104 },
105 {
106 text: gettext('Shutdown'),
107 iconCls: 'fa fa-fw fa-power-off',
108 disabled: stopped || suspended,
109 handler: function() {
110 var msg = Proxmox.Utils.format_task_description('qmshutdown', vmid);
111 Ext.Msg.confirm(gettext('Confirm'), msg, function(btn) {
112 if (btn !== 'yes') {
113 return;
114 }
115
116 vm_command('shutdown');
117 });
118 }
119 },
120 {
121 text: gettext('Stop'),
122 iconCls: 'fa fa-fw fa-stop',
123 disabled: stopped,
124 tooltip: Ext.String.format(gettext('Stop {0} immediately'), 'VM'),
125 handler: function() {
126 var msg = Proxmox.Utils.format_task_description('qmstop', vmid);
127 Ext.Msg.confirm(gettext('Confirm'), msg, function(btn) {
128 if (btn !== 'yes') {
129 return;
130 }
131
132 vm_command("stop");
133 });
134 }
135 },
136 {
137 xtype: 'menuseparator',
138 hidden: (standalone || !caps.vms['VM.Migrate']) && !caps.vms['VM.Allocate'] && !caps.vms['VM.Clone']
139 },
140 {
141 text: gettext('Migrate'),
142 iconCls: 'fa fa-fw fa-send-o',
143 hidden: standalone || !caps.vms['VM.Migrate'],
144 handler: function() {
145 var win = Ext.create('PVE.window.Migrate', {
146 vmtype: 'qemu',
147 nodename: nodename,
148 vmid: vmid
149 });
150 win.show();
151 }
152 },
153 {
154 text: gettext('Clone'),
155 iconCls: 'fa fa-fw fa-clone',
156 hidden: !caps.vms['VM.Clone'],
157 handler: function() {
158 PVE.window.Clone.wrap(nodename, vmid, me.isTemplate, 'qemu');
159 }
160 },
161 {
162 text: gettext('Convert to template'),
163 iconCls: 'fa fa-fw fa-file-o',
164 hidden: !caps.vms['VM.Allocate'],
165 handler: function() {
166 var msg = Proxmox.Utils.format_task_description('qmtemplate', vmid);
167 Ext.Msg.confirm(gettext('Confirm'), msg, function(btn) {
168 if (btn !== 'yes') {
169 return;
170 }
171
172 Proxmox.Utils.API2Request({
173 url: '/nodes/' + nodename + '/qemu/' + vmid + '/template',
174 method: 'POST',
175 failure: function(response, opts) {
176 Ext.Msg.alert('Error', response.htmlStatus);
177 }
178 });
179 });
180 }
181 },
182 { xtype: 'menuseparator' },
183 {
184 text: gettext('Console'),
185 iconCls: 'fa fa-fw fa-terminal',
186 handler: function() {
187 Proxmox.Utils.API2Request({
188 url: '/nodes/' + nodename + '/qemu/' + vmid + '/status/current',
189 failure: function(response, opts) {
190 Ext.Msg.alert('Error', response.htmlStatus);
191 },
192 success: function(response, opts) {
193 var allowSpice = response.result.data.spice;
194 var allowXtermjs = response.result.data.serial;
195 var consoles = {
196 spice: allowSpice,
197 xtermjs: allowXtermjs
198 };
199 PVE.Utils.openDefaultConsoleWindow(consoles, 'kvm', vmid, nodename, vmname);
200 }
201 });
202 }
203 }
204 ];
205
206 me.callParent();
207 }
208 });