]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/qemu/CmdMenu.js
allow xtermjs to be the default console
[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 'paused':
44 stopped = false;
45 suspended = true;
46 break;
47 default: break;
48 }
49
50 me.title = "VM " + vmid;
51
52 me.items = [
53 {
54 text: gettext('Start'),
55 iconCls: 'fa fa-fw fa-play',
56 disabled: running || suspended,
57 handler: function() {
58 vm_command('start');
59 }
60 },
61 {
62 text: gettext('Suspend'),
63 iconCls: 'fa fa-fw fa-pause',
64 hidden: suspended,
65 disabled: stopped || suspended,
66 handler: function() {
67 var msg = Proxmox.Utils.format_task_description('qmsuspend', vmid);
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'),
78 iconCls: 'fa fa-fw fa-play',
79 hidden: !suspended,
80 handler: function() {
81 vm_command('resume');
82 }
83 },
84 {
85 text: gettext('Shutdown'),
86 iconCls: 'fa fa-fw fa-power-off',
87 disabled: stopped || suspended,
88 handler: function() {
89 var msg = Proxmox.Utils.format_task_description('qmshutdown', vmid);
90 Ext.Msg.confirm(gettext('Confirm'), msg, function(btn) {
91 if (btn !== 'yes') {
92 return;
93 }
94
95 vm_command('shutdown');
96 });
97 }
98 },
99 {
100 text: gettext('Stop'),
101 iconCls: 'fa fa-fw fa-stop',
102 disabled: stopped,
103 handler: function() {
104 var msg = Proxmox.Utils.format_task_description('qmstop', vmid);
105 Ext.Msg.confirm(gettext('Confirm'), msg, function(btn) {
106 if (btn !== 'yes') {
107 return;
108 }
109
110 vm_command("stop");
111 });
112 }
113 },
114 {
115 xtype: 'menuseparator',
116 hidden: (standalone || !caps.vms['VM.Migrate']) && !caps.vms['VM.Allocate'] && !caps.vms['VM.Clone']
117 },
118 {
119 text: gettext('Migrate'),
120 iconCls: 'fa fa-fw fa-send-o',
121 hidden: standalone || !caps.vms['VM.Migrate'],
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 },
131 {
132 text: gettext('Clone'),
133 iconCls: 'fa fa-fw fa-clone',
134 hidden: !caps.vms['VM.Clone'],
135 handler: function() {
136 PVE.window.Clone.wrap(nodename, vmid, me.isTemplate, 'qemu');
137 }
138 },
139 {
140 text: gettext('Convert to template'),
141 iconCls: 'fa fa-fw fa-file-o',
142 hidden: !caps.vms['VM.Allocate'],
143 handler: function() {
144 var msg = Proxmox.Utils.format_task_description('qmtemplate', vmid);
145 Ext.Msg.confirm(gettext('Confirm'), msg, function(btn) {
146 if (btn !== 'yes') {
147 return;
148 }
149
150 Proxmox.Utils.API2Request({
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 },
160 { xtype: 'menuseparator' },
161 {
162 text: gettext('Console'),
163 iconCls: 'fa fa-fw fa-terminal',
164 handler: function() {
165 Proxmox.Utils.API2Request({
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;
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);
178 }
179 });
180 }
181 }
182 ];
183
184 me.callParent();
185 }
186 });