]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/qemu/CmdMenu.js
df7b593d567b11784191345d695f24fb9232ae94
[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('Resume'),
83 iconCls: 'fa fa-fw fa-play',
84 hidden: !suspended,
85 handler: function() {
86 vm_command('resume');
87 }
88 },
89 {
90 text: gettext('Shutdown'),
91 iconCls: 'fa fa-fw fa-power-off',
92 disabled: stopped || suspended,
93 handler: function() {
94 var msg = Proxmox.Utils.format_task_description('qmshutdown', vmid);
95 Ext.Msg.confirm(gettext('Confirm'), msg, function(btn) {
96 if (btn !== 'yes') {
97 return;
98 }
99
100 vm_command('shutdown');
101 });
102 }
103 },
104 {
105 text: gettext('Stop'),
106 iconCls: 'fa fa-fw fa-stop',
107 disabled: stopped,
108 handler: function() {
109 var msg = Proxmox.Utils.format_task_description('qmstop', vmid);
110 Ext.Msg.confirm(gettext('Confirm'), msg, function(btn) {
111 if (btn !== 'yes') {
112 return;
113 }
114
115 vm_command("stop");
116 });
117 }
118 },
119 {
120 xtype: 'menuseparator',
121 hidden: (standalone || !caps.vms['VM.Migrate']) && !caps.vms['VM.Allocate'] && !caps.vms['VM.Clone']
122 },
123 {
124 text: gettext('Migrate'),
125 iconCls: 'fa fa-fw fa-send-o',
126 hidden: standalone || !caps.vms['VM.Migrate'],
127 handler: function() {
128 var win = Ext.create('PVE.window.Migrate', {
129 vmtype: 'qemu',
130 nodename: nodename,
131 vmid: vmid
132 });
133 win.show();
134 }
135 },
136 {
137 text: gettext('Clone'),
138 iconCls: 'fa fa-fw fa-clone',
139 hidden: !caps.vms['VM.Clone'],
140 handler: function() {
141 PVE.window.Clone.wrap(nodename, vmid, me.isTemplate, 'qemu');
142 }
143 },
144 {
145 text: gettext('Convert to template'),
146 iconCls: 'fa fa-fw fa-file-o',
147 hidden: !caps.vms['VM.Allocate'],
148 handler: function() {
149 var msg = Proxmox.Utils.format_task_description('qmtemplate', vmid);
150 Ext.Msg.confirm(gettext('Confirm'), msg, function(btn) {
151 if (btn !== 'yes') {
152 return;
153 }
154
155 Proxmox.Utils.API2Request({
156 url: '/nodes/' + nodename + '/qemu/' + vmid + '/template',
157 method: 'POST',
158 failure: function(response, opts) {
159 Ext.Msg.alert('Error', response.htmlStatus);
160 }
161 });
162 });
163 }
164 },
165 { xtype: 'menuseparator' },
166 {
167 text: gettext('Console'),
168 iconCls: 'fa fa-fw fa-terminal',
169 handler: function() {
170 Proxmox.Utils.API2Request({
171 url: '/nodes/' + nodename + '/qemu/' + vmid + '/status/current',
172 failure: function(response, opts) {
173 Ext.Msg.alert('Error', response.htmlStatus);
174 },
175 success: function(response, opts) {
176 var allowSpice = response.result.data.spice;
177 var allowXtermjs = response.result.data.serial;
178 var consoles = {
179 spice: allowSpice,
180 xtermjs: allowXtermjs
181 };
182 PVE.Utils.openDefaultConsoleWindow(consoles, 'kvm', vmid, nodename, vmname);
183 }
184 });
185 }
186 }
187 ];
188
189 me.callParent();
190 }
191 });