]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/qemu/CreateWizard.js
ui: wizards: allow adding tags in the qemu/lxc create wizard
[pve-manager.git] / www / manager6 / qemu / CreateWizard.js
CommitLineData
9bbc1e4d
DM
1Ext.define('PVE.qemu.CreateWizard', {
2 extend: 'PVE.window.Wizard',
42902182 3 alias: 'widget.pveQemuCreateWizard',
8cdfb23f 4 mixins: ['Proxmox.Mixin.CBind'],
9bbc1e4d 5
8cdfb23f
TL
6 viewModel: {
7 data: {
471d03aa
DC
8 nodename: '',
9 current: {
f6710aac
TL
10 scsihw: '',
11 },
12 },
5a2e333c
FE
13 formulas: {
14 cgroupMode: function(get) {
15 const nodeInfo = PVE.data.ResourceStore.getNodes().find(
16 node => node.node === get('nodename'),
17 );
18 return nodeInfo ? nodeInfo['cgroup-mode'] : 2;
19 },
20 },
8d4f1d4d
EK
21 },
22
8cdfb23f 23 cbindData: {
f6710aac 24 nodename: undefined,
8cdfb23f 25 },
9bbc1e4d 26
8cdfb23f 27 subject: gettext('Virtual Machine'),
9bbc1e4d 28
8cdfb23f
TL
29 items: [
30 {
31 xtype: 'inputpanel',
32 title: gettext('General'),
33 onlineHelp: 'qm_general_settings',
34 column1: [
9bbc1e4d 35 {
8cdfb23f
TL
36 xtype: 'pveNodeSelector',
37 name: 'nodename',
38 cbind: {
39 selectCurNode: '{!nodename}',
f6710aac 40 preferredValue: '{nodename}',
8d4f1d4d 41 },
8cdfb23f 42 bind: {
f6710aac 43 value: '{nodename}',
8cdfb23f
TL
44 },
45 fieldLabel: gettext('Node'),
46 allowBlank: false,
f6710aac 47 onlineValidator: true,
7da4966d 48 },
8d4f1d4d 49 {
8cdfb23f
TL
50 xtype: 'pveGuestIDSelector',
51 name: 'vmid',
52 guestType: 'qemu',
53 value: '',
54 loadNextFreeID: true,
f6710aac 55 validateExists: false,
8d4f1d4d 56 },
9bbc1e4d 57 {
8cdfb23f
TL
58 xtype: 'textfield',
59 name: 'name',
60 vtype: 'DnsName',
61 value: '',
62 fieldLabel: gettext('Name'),
f6710aac
TL
63 allowBlank: true,
64 },
8cdfb23f
TL
65 ],
66 column2: [
9bbc1e4d 67 {
8cdfb23f
TL
68 xtype: 'pvePoolSelector',
69 fieldLabel: gettext('Resource Pool'),
70 name: 'pool',
71 value: '',
f6710aac
TL
72 allowBlank: true,
73 },
8cdfb23f 74 ],
29e19e95
DC
75 advancedColumn1: [
76 {
77 xtype: 'proxmoxcheckbox',
78 name: 'onboot',
79 uncheckedValue: 0,
80 defaultValue: 0,
81 deleteDefaultValue: true,
f6710aac
TL
82 fieldLabel: gettext('Start at boot'),
83 },
29e19e95
DC
84 ],
85 advancedColumn2: [
86 {
87 xtype: 'textfield',
88 name: 'order',
89 defaultValue: '',
90 emptyText: 'any',
91 labelWidth: 120,
f6710aac 92 fieldLabel: gettext('Start/Shutdown order'),
29e19e95
DC
93 },
94 {
95 xtype: 'textfield',
96 name: 'up',
97 defaultValue: '',
98 emptyText: 'default',
99 labelWidth: 120,
f6710aac 100 fieldLabel: gettext('Startup delay'),
29e19e95
DC
101 },
102 {
103 xtype: 'textfield',
104 name: 'down',
105 defaultValue: '',
106 emptyText: 'default',
107 labelWidth: 120,
f6710aac
TL
108 fieldLabel: gettext('Shutdown timeout'),
109 },
29e19e95 110 ],
ca97f630
DC
111
112 advancedColumnB: [
113 {
114 xtype: 'pveTagFieldSet',
115 name: 'tags',
116 maxHeight: 150,
117 },
118 ],
119
29e19e95 120 onGetValues: function(values) {
29e19e95
DC
121 ['name', 'pool', 'onboot', 'agent'].forEach(function(field) {
122 if (!values[field]) {
123 delete values[field];
124 }
125 });
126
127 var res = PVE.Parser.printStartup({
128 order: values.order,
129 up: values.up,
f6710aac 130 down: values.down,
29e19e95
DC
131 });
132
133 if (res) {
134 values.startup = res;
8cdfb23f 135 }
29e19e95
DC
136
137 delete values.order;
138 delete values.up;
139 delete values.down;
140
8cdfb23f 141 return values;
f6710aac 142 },
8cdfb23f
TL
143 },
144 {
145 xtype: 'container',
146 layout: 'hbox',
147 defaults: {
148 flex: 1,
f6710aac 149 padding: '0 10',
8cdfb23f
TL
150 },
151 title: gettext('OS'),
152 items: [
8d4f1d4d 153 {
8cdfb23f
TL
154 xtype: 'pveQemuCDInputPanel',
155 bind: {
f6710aac 156 nodename: '{nodename}',
8cdfb23f
TL
157 },
158 confid: 'ide2',
f6710aac 159 insideWizard: true,
8d4f1d4d 160 },
9bbc1e4d 161 {
8cdfb23f 162 xtype: 'pveQemuOSTypePanel',
f6710aac
TL
163 insideWizard: true,
164 },
165 ],
8cdfb23f 166 },
471d03aa
DC
167 {
168 xtype: 'pveQemuSystemPanel',
169 title: gettext('System'),
170 isCreate: true,
f6710aac 171 insideWizard: true,
471d03aa 172 },
8cdfb23f 173 {
9dbc4dfa 174 xtype: 'pveMultiHDPanel',
8cdfb23f 175 bind: {
f6710aac 176 nodename: '{nodename}',
8cdfb23f 177 },
9dbc4dfa 178 title: gettext('Disks'),
8cdfb23f
TL
179 },
180 {
181 xtype: 'pveQemuProcessorPanel',
182 insideWizard: true,
f6710aac 183 title: gettext('CPU'),
8cdfb23f
TL
184 },
185 {
186 xtype: 'pveQemuMemoryPanel',
187 insideWizard: true,
f6710aac 188 title: gettext('Memory'),
8cdfb23f
TL
189 },
190 {
191 xtype: 'pveQemuNetworkInputPanel',
192 bind: {
f6710aac 193 nodename: '{nodename}',
8cdfb23f
TL
194 },
195 title: gettext('Network'),
f6710aac 196 insideWizard: true,
8cdfb23f
TL
197 },
198 {
199 title: gettext('Confirm'),
200 layout: 'fit',
201 items: [
202 {
203 xtype: 'grid',
204 store: {
205 model: 'KeyValue',
206 sorters: [{
8058410f 207 property: 'key',
f6710aac
TL
208 direction: 'ASC',
209 }],
9bbc1e4d 210 },
8cdfb23f 211 columns: [
8058410f
TL
212 { header: 'Key', width: 150, dataIndex: 'key' },
213 { header: 'Value', flex: 1, dataIndex: 'value' },
f6710aac
TL
214 ],
215 },
8cdfb23f 216 ],
d8e2ae99
TL
217 dockedItems: [
218 {
219 xtype: 'proxmoxcheckbox',
220 name: 'start',
221 dock: 'bottom',
222 margin: '5 0 0 0',
f6710aac
TL
223 boxLabel: gettext('Start after created'),
224 },
d8e2ae99 225 ],
8cdfb23f
TL
226 listeners: {
227 show: function(panel) {
228 var kv = this.up('window').getValues();
229 var data = [];
230 Ext.Object.each(kv, function(key, value) {
231 if (key === 'delete') { // ignore
232 return;
233 }
234 data.push({ key: key, value: value });
235 });
9bbc1e4d 236
8cdfb23f
TL
237 var summarystore = panel.down('grid').getStore();
238 summarystore.suspendEvents();
239 summarystore.removeAll();
240 summarystore.add(data);
241 summarystore.sort();
242 summarystore.resumeEvents();
243 summarystore.fireEvent('refresh');
f6710aac 244 },
8cdfb23f
TL
245 },
246 onSubmit: function() {
247 var wizard = this.up('window');
248 var kv = wizard.getValues();
399ffa76 249 delete kv.delete;
8cdfb23f
TL
250
251 var nodename = kv.nodename;
252 delete kv.nodename;
9bbc1e4d 253
8cdfb23f
TL
254 Proxmox.Utils.API2Request({
255 url: '/nodes/' + nodename + '/qemu',
256 waitMsgTarget: wizard,
257 method: 'POST',
258 params: kv,
8058410f 259 success: function(response) {
8cdfb23f
TL
260 wizard.close();
261 },
262 failure: function(response, opts) {
263 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
f6710aac 264 },
8cdfb23f 265 });
f6710aac
TL
266 },
267 },
268 ],
9bbc1e4d
DM
269});
270
271