]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/qemu/CmdMenu.js
use Button from widget toolkit
[pve-manager.git] / www / manager6 / qemu / CmdMenu.js
CommitLineData
dc56cd13
DM
1Ext.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) {
21 PVE.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
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() {
16152937 67 var msg = PVE.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() {
16152937 89 var msg = PVE.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() {
16152937 104 var msg = PVE.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() {
4e2b6cc8 136 PVE.window.Clone.wrap(nodename, vmid, me.isTemplate);
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() {
16152937 144 var msg = PVE.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
150 PVE.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 },
efbc9f5d 160 { xtype: 'menuseparator' },
dc56cd13
DM
161 {
162 text: gettext('Console'),
d4333933 163 iconCls: 'fa fa-fw fa-terminal',
dc56cd13
DM
164 handler: function() {
165 PVE.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 PVE.Utils.openDefaultConsoleWindow(allowSpice, 'kvm', vmid, nodename, vmname);
173 }
174 });
175 }
176 }
177 ];
178
179 me.callParent();
180 }
181});