]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/qemu/ProcessorEdit.js
gui: vm: add CPU flag selector with tri-state awareness
[pve-manager.git] / www / manager6 / qemu / ProcessorEdit.js
1 Ext.define('PVE.qemu.ProcessorInputPanel', {
2 extend: 'Proxmox.panel.InputPanel',
3 alias: 'widget.pveQemuProcessorPanel',
4 onlineHelp: 'qm_cpu',
5
6 insideWizard: false,
7
8 controller: {
9 xclass: 'Ext.app.ViewController',
10
11 updateCores: function() {
12 var me = this.getView();
13 var sockets = me.down('field[name=sockets]').getValue();
14 var cores = me.down('field[name=cores]').getValue();
15 me.down('field[name=totalcores]').setValue(sockets*cores);
16 var vcpus = me.down('field[name=vcpus]');
17 vcpus.setMaxValue(sockets*cores);
18 vcpus.setEmptyText(sockets*cores);
19 vcpus.validate();
20 },
21
22 control: {
23 'field[name=sockets]': {
24 change: 'updateCores'
25 },
26 'field[name=cores]': {
27 change: 'updateCores'
28 }
29 }
30 },
31
32 onGetValues: function(values) {
33 var me = this;
34
35 if (Array.isArray(values['delete'])) {
36 values['delete'] = values['delete'].join(',');
37 }
38
39 PVE.Utils.delete_if_default(values, 'cpulimit', '0', 0);
40 PVE.Utils.delete_if_default(values, 'cpuunits', '1024', 0);
41
42 // build the cpu options:
43 me.cpu.cputype = values.cputype;
44
45 if (values.flags) {
46 me.cpu.flags = values.flags;
47 } else {
48 delete me.cpu.flags;
49 }
50
51 delete values.cputype;
52 delete values.flags;
53 var cpustring = PVE.Parser.printQemuCpu(me.cpu);
54
55 // remove cputype delete request:
56 var del = values['delete'];
57 delete values['delete'];
58 if (del) {
59 del = del.split(',');
60 Ext.Array.remove(del, 'cputype');
61 } else {
62 del = [];
63 }
64
65 if (cpustring) {
66 values.cpu = cpustring;
67 } else {
68 del.push('cpu');
69 }
70
71 var delarr = del.join(',');
72 if (delarr) {
73 values['delete'] = delarr;
74 }
75
76 return values;
77 },
78
79 cpu: {},
80
81 column1: [
82 {
83 xtype: 'proxmoxintegerfield',
84 name: 'sockets',
85 minValue: 1,
86 maxValue: 4,
87 value: '1',
88 fieldLabel: gettext('Sockets'),
89 allowBlank: false
90 },
91 {
92 xtype: 'proxmoxintegerfield',
93 name: 'cores',
94 minValue: 1,
95 maxValue: 128,
96 value: '1',
97 fieldLabel: gettext('Cores'),
98 allowBlank: false
99 }
100 ],
101
102 column2: [
103 {
104 xtype: 'CPUModelSelector',
105 name: 'cputype',
106 value: '__default__',
107 fieldLabel: gettext('Type')
108 },
109 {
110 xtype: 'displayfield',
111 fieldLabel: gettext('Total cores'),
112 name: 'totalcores',
113 value: '1'
114 }
115 ],
116
117 advancedColumn1: [
118 {
119 xtype: 'proxmoxintegerfield',
120 name: 'vcpus',
121 minValue: 1,
122 maxValue: 1,
123 value: '',
124 fieldLabel: gettext('VCPUs'),
125 deleteEmpty: true,
126 allowBlank: true,
127 emptyText: '1'
128 },
129 {
130 xtype: 'numberfield',
131 name: 'cpulimit',
132 minValue: 0,
133 maxValue: 128, // api maximum
134 value: '',
135 step: 1,
136 fieldLabel: gettext('CPU limit'),
137 allowBlank: true,
138 emptyText: gettext('unlimited')
139 }
140 ],
141
142 advancedColumn2: [
143 {
144 xtype: 'proxmoxintegerfield',
145 name: 'cpuunits',
146 fieldLabel: gettext('CPU units'),
147 minValue: 8,
148 maxValue: 500000,
149 value: '1024',
150 deleteEmpty: true,
151 allowBlank: true
152 },
153 {
154 xtype: 'proxmoxcheckbox',
155 fieldLabel: gettext('Enable NUMA'),
156 name: 'numa',
157 uncheckedValue: 0
158 }
159 ],
160 advancedColumnB: [
161 {
162 xtype: 'label',
163 text: 'Extra CPU Flags:'
164 },
165 {
166 xtype: 'vmcpuflagselector',
167 name: 'flags'
168 }
169 ]
170 });
171
172 Ext.define('PVE.qemu.ProcessorEdit', {
173 extend: 'Proxmox.window.Edit',
174
175 width: 700,
176
177 initComponent : function() {
178 var me = this;
179
180 var ipanel = Ext.create('PVE.qemu.ProcessorInputPanel');
181
182 Ext.apply(me, {
183 subject: gettext('Processors'),
184 items: ipanel
185 });
186
187 me.callParent();
188
189 me.load({
190 success: function(response, options) {
191 var data = response.result.data;
192 var value = data.cpu;
193 if (value) {
194 var cpu = PVE.Parser.parseQemuCpu(value);
195 ipanel.cpu = cpu;
196 data.cputype = cpu.cputype;
197 if (cpu.flags) {
198 data.flags = cpu.flags;
199 }
200 }
201 me.setValues(data);
202 }
203 });
204 }
205 });