]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/qemu/CreateWizard.js
303d2914030eb8b04191f0cf57292922fa20916a
[pve-manager.git] / www / manager6 / qemu / CreateWizard.js
1 Ext.define('PVE.qemu.CreateWizard', {
2 extend: 'PVE.window.Wizard',
3 alias: 'widget.pveQemuCreateWizard',
4 qemuScsiController: undefined,
5
6 controller: {
7
8 xclass: 'Ext.app.ViewController',
9
10 control: {
11 'field[name=nodename]': {
12 change: function(f, value) {
13 var me = this;
14 ['networkpanel', 'hdpanel', 'cdpanel'].forEach(function(reference) {
15 me.lookup(reference).setNodename(value);
16 });
17 }
18 }
19 }
20 },
21
22 initComponent: function() {
23 var me = this;
24
25 var summarystore = Ext.create('Ext.data.Store', {
26 model: 'KeyValue',
27 sorters: [
28 {
29 property : 'key',
30 direction: 'ASC'
31 }
32 ]
33 });
34
35 Ext.applyIf(me, {
36 subject: gettext('Virtual Machine'),
37 items: [
38 {
39 xtype: 'inputpanel',
40 title: gettext('General'),
41 onlineHelp: 'qm_general_settings',
42 column1: [
43 {
44 xtype: 'pveNodeSelector',
45 name: 'nodename',
46 selectCurNode: !me.nodename,
47 preferredValue: me.nodename,
48 fieldLabel: gettext('Node'),
49 allowBlank: false,
50 onlineValidator: true
51 },
52 {
53 xtype: 'pveGuestIDSelector',
54 name: 'vmid',
55 guestType: 'qemu',
56 value: '',
57 loadNextFreeID: true,
58 validateExists: false
59 },
60 {
61 xtype: 'textfield',
62 name: 'name',
63 vtype: 'DnsName',
64 value: '',
65 fieldLabel: gettext('Name'),
66 allowBlank: true
67 }
68 ],
69 column2: [
70 {
71 xtype: 'pvePoolSelector',
72 fieldLabel: gettext('Resource Pool'),
73 name: 'pool',
74 value: '',
75 allowBlank: true
76 }
77 ],
78 onGetValues: function(values) {
79 if (!values.name) {
80 delete values.name;
81 }
82 if (!values.pool) {
83 delete values.pool;
84 }
85 return values;
86 }
87 },
88 {
89 xtype: 'pveQemuCDInputPanel',
90 reference: 'cdpanel',
91 title: gettext('CD/DVD'),
92 confid: 'ide2',
93 fieldDefaults: {
94 labelWidth: 160
95 },
96 insideWizard: true
97 },
98 {
99 title: gettext('OS'),
100 xtype: 'pveQemuOSTypePanel',
101 insideWizard: true
102 },
103 {
104 xtype: 'pveQemuHDInputPanel',
105 reference: 'hdpanel',
106 title: gettext('Hard Disk'),
107 isCreate: true,
108 insideWizard: true
109 },
110 {
111 xtype: 'pveQemuProcessorPanel',
112 title: gettext('CPU')
113 },
114 {
115 xtype: 'pveQemuMemoryPanel',
116 insideWizard: true,
117 title: gettext('Memory')
118 },
119 {
120 xtype: 'pveQemuNetworkInputPanel',
121 reference: 'networkpanel',
122 title: gettext('Network'),
123 insideWizard: true
124 },
125 {
126 title: gettext('Confirm'),
127 layout: 'fit',
128 items: [
129 {
130 xtype: 'grid',
131 store: summarystore,
132 columns: [
133 {header: 'Key', width: 150, dataIndex: 'key'},
134 {header: 'Value', flex: 1, dataIndex: 'value'}
135 ]
136 }
137 ],
138 listeners: {
139 show: function(panel) {
140 var form = me.down('form').getForm();
141 var kv = me.getValues();
142 var data = [];
143 Ext.Object.each(kv, function(key, value) {
144 if (key === 'delete') { // ignore
145 return;
146 }
147 var html = Ext.htmlEncode(Ext.JSON.encode(value));
148 data.push({ key: key, value: value });
149 });
150 summarystore.suspendEvents();
151 summarystore.removeAll();
152 summarystore.add(data);
153 summarystore.sort();
154 summarystore.resumeEvents();
155 summarystore.fireEvent('refresh');
156
157 }
158 },
159 onSubmit: function() {
160 var kv = me.getValues();
161 delete kv['delete'];
162
163 var nodename = kv.nodename;
164 delete kv.nodename;
165
166 if (me.qemuScsiController && !kv.scsihw) {
167 kv.scsihw = me.qemuScsiController;
168 }
169
170 PVE.Utils.API2Request({
171 url: '/nodes/' + nodename + '/qemu',
172 waitMsgTarget: me,
173 method: 'POST',
174 params: kv,
175 success: function(response){
176 me.close();
177 },
178 failure: function(response, opts) {
179 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
180 }
181 });
182 }
183 }
184 ]
185 });
186
187 me.callParent();
188 }
189 });
190
191
192
193