]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/qemu/Config.js
1 Ext
.define('PVE.qemu.Config', {
2 extend
: 'PVE.panel.Config',
3 alias
: 'widget.PVE.qemu.Config',
5 initComponent: function() {
8 var nodename
= me
.pveSelNode
.data
.node
;
10 throw "no node name specified";
13 var vmid
= me
.pveSelNode
.data
.vmid
;
15 throw "no VM ID specified";
18 var template
= me
.pveSelNode
.data
.template
;
20 var caps
= Ext
.state
.Manager
.get('GuiCap');
22 var base_url
= '/nodes/' + nodename
+ "/qemu/" + vmid
;
24 me
.statusStore
= Ext
.create('PVE.data.ObjectStore', {
25 url
: '/api2/json' + base_url
+ '/status/current',
29 var vm_command = function(cmd
, params
) {
30 PVE
.Utils
.API2Request({
32 url
: base_url
+ '/status/' + cmd
,
35 failure: function(response
, opts
) {
36 Ext
.Msg
.alert('Error', response
.htmlStatus
);
41 var resumeBtn
= Ext
.create('Ext.Button', {
42 text
: gettext('Resume'),
43 disabled
: !caps
.vms
['VM.PowerMgmt'],
51 var startBtn
= Ext
.create('Ext.Button', {
52 text
: gettext('Start'),
53 disabled
: !caps
.vms
['VM.PowerMgmt'],
60 var migrateBtn
= Ext
.create('Ext.Button', {
61 text
: gettext('Migrate'),
62 disabled
: !caps
.vms
['VM.Migrate'],
64 var win
= Ext
.create('PVE.window.Migrate', {
71 iconCls
: 'fa fa-send-o'
74 var resetBtn
= Ext
.create('PVE.button.Button', {
75 text
: gettext('Reset'),
76 disabled
: !caps
.vms
['VM.PowerMgmt'],
77 confirmMsg
: PVE
.Utils
.format_task_description('qmreset', vmid
),
84 var shutdownBtn
= Ext
.create('PVE.button.Split', {
85 text
: gettext('Shutdown'),
86 disabled
: !caps
.vms
['VM.PowerMgmt'],
87 confirmMsg
: PVE
.Utils
.format_task_description('qmshutdown', vmid
),
89 vm_command('shutdown');
93 text
: gettext('Stop'),
94 disabled
: !caps
.vms
['VM.PowerMgmt'],
96 confirmMsg
: PVE
.Utils
.format_task_description('qmstop', vmid
),
98 vm_command("stop", { timeout
: 30 });
100 iconCls
: 'fa fa-stop'
103 iconCls
: 'fa fa-power-off'
106 var removeBtn
= Ext
.create('PVE.button.Button', {
107 text
: gettext('Remove'),
108 disabled
: !caps
.vms
['VM.Allocate'],
109 handler: function() {
110 Ext
.create('PVE.window.SafeDestroy', {
112 item
: { type
: 'VM', id
: vmid
}
115 iconCls
: 'fa fa-trash-o'
118 var vmname
= me
.pveSelNode
.data
.name
;
120 var consoleBtn
= Ext
.create('PVE.button.ConsoleButton', {
121 disabled
: !caps
.vms
['VM.Console'],
126 iconCls
: 'fa fa-terminal'
129 var descr
= vmid
+ " (" + (vmname
? "'" + vmname
+ "' " : "'VM " + vmid
+ "'") + ")";
132 title
: Ext
.String
.format(gettext("Virtual Machine {0} on node {1}"), descr
, "'" + nodename
+ "'"),
134 tbar
: [ resumeBtn
, startBtn
, shutdownBtn
, resetBtn
,
135 removeBtn
, migrateBtn
, consoleBtn
],
136 defaults
: { statusStore
: me
.statusStore
},
139 title
: gettext('Summary'),
140 xtype
: 'pveQemuSummary',
141 iconCls
: 'fa fa-book',
145 title
: gettext('System'),
147 expandedOnInit
: true,
148 iconCls
: 'fa fa-desktop',
149 xtype
: 'PVE.qemu.HardwareView'
152 title
: gettext('Options'),
154 iconCls
: 'fa fa-gear',
156 xtype
: 'PVE.qemu.Options'
159 title
: gettext('Task History'),
161 xtype
: 'pveNodeTasks',
162 iconCls
: 'fa fa-list',
168 if (caps
.vms
['VM.Monitor'] && !template
) {
170 title
: gettext('Monitor'),
172 iconCls
: 'fa fa-eye',
174 xtype
: 'pveQemuMonitor'
178 if (caps
.vms
['VM.Backup']) {
180 title
: gettext('Backup'),
181 iconCls
: 'fa fa-floppy-o',
182 xtype
: 'pveBackupView',
187 if (caps
.vms
['VM.Snapshot'] && !template
) {
189 title
: gettext('Snapshots'),
190 iconCls
: 'fa fa-history',
191 xtype
: 'pveQemuSnapshotTree',
196 if (caps
.vms
['VM.Console'] && !template
) {
198 title
: gettext('Console'),
200 iconCls
: 'fa fa-terminal',
202 xtype
: 'pveNoVncConsole',
209 if (caps
.vms
['VM.Console']) {
212 xtype
: 'pveFirewallRules',
213 title
: gettext('Firewall'),
214 iconCls
: 'fa fa-shield',
216 base_url
: base_url
+ '/firewall/rules',
217 list_refs_url
: base_url
+ '/refs',
221 xtype
: 'pveFirewallOptions',
222 groups
: ['firewall'],
223 iconCls
: 'fa fa-gear',
224 title
: gettext('Options'),
225 base_url
: base_url
+ '/firewall/options',
227 itemId
: 'firewall-options'
230 xtype
: 'pveFirewallAliases',
231 title
: gettext('Alias'),
232 groups
: ['firewall'],
233 iconCls
: 'fa fa-external-link',
234 base_url
: base_url
+ '/firewall/aliases',
235 itemId
: 'firewall-aliases'
239 title
: gettext('IPSet'),
240 groups
: ['firewall'],
241 iconCls
: 'fa fa-list-ol',
242 base_url
: base_url
+ '/firewall/ipset',
243 list_refs_url
: base_url
+ '/refs',
244 itemId
: 'firewall-ipset'
247 title
: gettext('Log'),
248 groups
: ['firewall'],
249 iconCls
: 'fa fa-list',
250 itemId
: 'firewall-fwlog',
252 url
: '/api2/extjs' + base_url
+ '/firewall/log'
257 if (caps
.vms
['Permissions.Modify']) {
260 title
: gettext('Permissions'),
261 iconCls
: 'fa fa-unlock',
262 itemId
: 'permissions',
269 me
.mon(me
.statusStore
, 'load', function(s
, records
, success
) {
275 me
.workspace
.checkVmMigration(me
.pveSelNode
);
276 status
= qmpstatus
= 'unknown';
278 var rec
= s
.data
.get('status');
279 status
= rec
? rec
.data
.value
: 'unknown';
280 rec
= s
.data
.get('qmpstatus');
281 qmpstatus
= rec
? rec
.data
.value
: 'unknown';
282 rec
= s
.data
.get('template');
283 template
= rec
.data
.value
|| false;
285 spice
= s
.data
.get('spice') ? true : false;
289 if (qmpstatus
=== 'prelaunch' || qmpstatus
=== 'paused') {
290 startBtn
.setVisible(false);
291 resumeBtn
.setVisible(true);
293 startBtn
.setVisible(true);
294 resumeBtn
.setVisible(false);
297 consoleBtn
.setEnableSpice(spice
);
299 startBtn
.setDisabled(!caps
.vms
['VM.PowerMgmt'] || status
=== 'running' || template
);
300 resetBtn
.setDisabled(!caps
.vms
['VM.PowerMgmt'] || status
!== 'running' || template
);
301 shutdownBtn
.setDisabled(!caps
.vms
['VM.PowerMgmt'] || status
!== 'running');
302 removeBtn
.setDisabled(!caps
.vms
['VM.Allocate'] || status
!== 'stopped');
303 consoleBtn
.setDisabled(template
);
306 me
.on('afterrender', function() {
307 me
.statusStore
.startUpdate();
310 me
.on('destroy', function() {
311 me
.statusStore
.stopUpdate();