1 /*jslint confusion: true */
2 Ext
.define('PVE.qemu.Options', {
3 extend
: 'Proxmox.grid.PendingObjectGrid',
4 alias
: ['widget.PVE.qemu.Options'],
6 onlineHelp
: 'qm_options',
8 initComponent : function() {
12 var nodename
= me
.pveSelNode
.data
.node
;
14 throw "no node name specified";
17 var vmid
= me
.pveSelNode
.data
.vmid
;
19 throw "no VM ID specified";
22 var caps
= Ext
.state
.Manager
.get('GuiCap');
27 defaultValue
: me
.pveSelNode
.data
.name
,
28 header
: gettext('Name'),
29 editor
: caps
.vms
['VM.Config.Options'] ? {
30 xtype
: 'proxmoxWindowEdit',
31 subject
: gettext('Name'),
39 fieldLabel
: gettext('Name'),
42 onGetValues: function(values
) {
44 if (values
.name
=== undefined ||
45 values
.name
=== null ||
47 params
= { 'delete':'name'};
55 header
: gettext('Start at boot'),
57 renderer
: Proxmox
.Utils
.format_boolean
,
58 editor
: caps
.vms
['VM.Config.Options'] ? {
59 xtype
: 'proxmoxWindowEdit',
60 subject
: gettext('Start at boot'),
62 xtype
: 'proxmoxcheckbox',
66 deleteDefaultValue
: true,
67 fieldLabel
: gettext('Start at boot')
72 header
: gettext('Start/Shutdown order'),
74 renderer
: PVE
.Utils
.render_kvm_startup
,
75 editor
: caps
.vms
['VM.Config.Options'] && caps
.nodes
['Sys.Modify'] ?
77 xtype
: 'pveWindowStartupEdit',
78 onlineHelp
: 'qm_startup_and_shutdown'
82 header
: gettext('OS Type'),
83 editor
: caps
.vms
['VM.Config.Options'] ? 'PVE.qemu.OSTypeEdit' : undefined,
84 renderer
: PVE
.Utils
.render_kvm_ostype
,
91 header
: gettext('Boot Order'),
93 editor
: caps
.vms
['VM.Config.Disk'] ? 'PVE.qemu.BootOrderEdit' : undefined,
94 multiKey
: ['boot', 'bootdisk'],
95 renderer: function(order
, metaData
, record
, rowIndex
, colIndex
, store
, pending
) {
98 var bootdisk
= me
.getObjectValue('bootdisk', undefined, pending
);
99 order
= order
|| 'cdn';
100 for (i
= 0; i
< order
.length
; i
++) {
101 var sel
= order
.substring(i
, i
+ 1);
107 text
+= "Disk '" + bootdisk
+ "'";
111 } else if (sel
=== 'n') {
113 } else if (sel
=== 'a') {
115 } else if (sel
=== 'd') {
125 header
: gettext('Use tablet for pointer'),
127 renderer
: Proxmox
.Utils
.format_boolean
,
128 editor
: caps
.vms
['VM.Config.HWType'] ? {
129 xtype
: 'proxmoxWindowEdit',
130 subject
: gettext('Use tablet for pointer'),
132 xtype
: 'proxmoxcheckbox',
137 deleteDefaultValue
: true,
138 fieldLabel
: gettext('Enabled')
143 header
: gettext('Hotplug'),
144 defaultValue
: 'disk,network,usb',
145 renderer
: PVE
.Utils
.render_hotplug_features
,
146 editor
: caps
.vms
['VM.Config.HWType'] ? {
147 xtype
: 'proxmoxWindowEdit',
148 subject
: gettext('Hotplug'),
150 xtype
: 'pveHotplugFeatureSelector',
154 fieldLabel
: gettext('Hotplug'),
160 header
: gettext('ACPI support'),
162 renderer
: Proxmox
.Utils
.format_boolean
,
163 editor
: caps
.vms
['VM.Config.HWType'] ? {
164 xtype
: 'proxmoxWindowEdit',
165 subject
: gettext('ACPI support'),
167 xtype
: 'proxmoxcheckbox',
172 deleteDefaultValue
: true,
173 fieldLabel
: gettext('Enabled')
178 header
: gettext('KVM hardware virtualization'),
180 renderer
: Proxmox
.Utils
.format_boolean
,
181 editor
: caps
.vms
['VM.Config.HWType'] ? {
182 xtype
: 'proxmoxWindowEdit',
183 subject
: gettext('KVM hardware virtualization'),
185 xtype
: 'proxmoxcheckbox',
190 deleteDefaultValue
: true,
191 fieldLabel
: gettext('Enabled')
196 header
: gettext('Freeze CPU at startup'),
198 renderer
: Proxmox
.Utils
.format_boolean
,
199 editor
: caps
.vms
['VM.PowerMgmt'] ? {
200 xtype
: 'proxmoxWindowEdit',
201 subject
: gettext('Freeze CPU at startup'),
203 xtype
: 'proxmoxcheckbox',
207 deleteDefaultValue
: true,
209 fieldLabel
: gettext('Freeze CPU at startup')
214 header
: gettext('Use local time for RTC'),
215 defaultValue
: '__default__',
216 renderer
: PVE
.Utils
.render_localtime
,
217 editor
: caps
.vms
['VM.Config.Options'] ? {
218 xtype
: 'proxmoxWindowEdit',
219 subject
: gettext('Use local time for RTC'),
222 xtype
: 'proxmoxKVComboBox',
224 value
: '__default__',
226 ['__default__', PVE
.Utils
.render_localtime('__default__')],
227 [1, PVE
.Utils
.render_localtime(1)],
228 [0, PVE
.Utils
.render_localtime(0)],
231 fieldLabel
: gettext('Use local time for RTC')
236 header
: gettext('RTC start date'),
238 editor
: caps
.vms
['VM.Config.Options'] ? {
239 xtype
: 'proxmoxWindowEdit',
240 subject
: gettext('RTC start date'),
242 xtype
: 'proxmoxtextfield',
246 fieldLabel
: gettext('RTC start date'),
247 vtype
: 'QemuStartDate',
253 header
: gettext('SMBIOS settings (type1)'),
255 renderer
: Ext
.String
.htmlEncode
,
256 editor
: caps
.vms
['VM.Config.HWType'] ? 'PVE.qemu.Smbios1Edit' : undefined
259 header
: 'QEMU Guest Agent',
261 renderer
: PVE
.Utils
.render_qga_features
,
262 editor
: caps
.vms
['VM.Config.Options'] ? {
263 xtype
: 'proxmoxWindowEdit',
264 subject
: gettext('Qemu Agent'),
267 xtype
: 'pveAgentFeatureSelector',
273 header
: gettext('Protection'),
275 renderer
: Proxmox
.Utils
.format_boolean
,
276 editor
: caps
.vms
['VM.Config.Options'] ? {
277 xtype
: 'proxmoxWindowEdit',
278 subject
: gettext('Protection'),
280 xtype
: 'proxmoxcheckbox',
284 deleteDefaultValue
: true,
285 fieldLabel
: gettext('Enabled')
289 spice_enhancements
: {
290 header
: gettext('Spice Enhancements'),
292 renderer
: PVE
.Utils
.render_spice_enhancements
,
293 editor
: caps
.vms
['VM.Config.Options'] ? {
294 xtype
: 'proxmoxWindowEdit',
295 subject
: gettext('Spice Enhancements'),
296 onlineHelp
: 'qm_spice_enhancements',
298 xtype
: 'pveSpiceEnhancementSelector',
299 name
: 'spice_enhancements',
304 header
: gettext('VM State storage'),
306 renderer
: val
=> val
|| gettext('Automatic'),
307 editor
: caps
.vms
['VM.Config.Options'] ? {
308 xtype
: 'proxmoxWindowEdit',
309 subject
: gettext('VM State storage'),
310 onlineHelp
: 'chapter_virtual_machines', // FIXME: use 'qm_vmstatestorage' once available
313 xtype
: 'pveStorageSelector',
314 storageContent
: 'images',
316 emptyText
: gettext("Automatic (Storage used by the VM, or 'local')"),
321 name
: 'vmstatestorage',
326 header
: gettext('Hookscript')
330 var baseurl
= 'nodes/' + nodename
+ '/qemu/' + vmid
+ '/config';
332 var edit_btn
= new Ext
.Button({
333 text
: gettext('Edit'),
335 handler: function() { me
.run_editor(); }
338 var revert_btn
= new PVE
.button
.PendingRevert();
340 var set_button_status = function() {
341 var sm
= me
.getSelectionModel();
342 var rec
= sm
.getSelection()[0];
349 var key
= rec
.data
.key
;
350 var pending
= rec
.data
['delete'] || me
.hasPendingChanges(key
);
351 var rowdef
= rows
[key
];
353 edit_btn
.setDisabled(!rowdef
.editor
);
354 revert_btn
.setDisabled(!pending
);
358 url
: "/api2/json/nodes/" + nodename
+ "/qemu/" + vmid
+ "/pending",
361 tbar
: [ edit_btn
, revert_btn
],
364 url
: "/api2/extjs/" + baseurl
367 itemdblclick
: me
.run_editor
,
368 selectionchange
: set_button_status
374 me
.on('activate', () => me
.rstore
.startUpdate());
375 me
.on('destroy', () => me
.rstore
.stopUpdate());
376 me
.on('deactivate', () => me
.rstore
.stopUpdate());
378 me
.mon(me
.getStore(), 'datachanged', function() {