]> git.proxmox.com Git - pve-manager.git/blame - www/manager/openvz/CreateWizard.js
use standard titles for create/edit dialogs
[pve-manager.git] / www / manager / openvz / CreateWizard.js
CommitLineData
a2f57991 1/*jslint confusion: true */
aff192e6
DM
2Ext.define('PVE.openvz.CreateWizard', {
3 extend: 'PVE.window.Wizard',
c6594d0e
DM
4 requires: [
5 'Ext.form.*',
6 'PVE.data.ResourceStore'
7 ],
aff192e6
DM
8
9 initComponent: function() {
10 var me = this;
11
c6594d0e
DM
12 var nextvmid = PVE.data.ResourceStore.findNextVMID();
13
14 var summarystore = Ext.create('Ext.data.Store', {
15 model: 'KeyValue',
16 sorters: [
17 {
18 property : 'key',
19 direction: 'ASC'
20 }
21 ]
22 });
23
9f767883
DM
24 var storagesel = Ext.create('PVE.form.StorageSelector', {
25 name: 'storage',
26 fieldLabel: 'Storage',
27 storageContent: 'rootdir',
28 autoSelect: true,
29 allowBlank: false
30 });
31
c6594d0e
DM
32 var tmplsel = Ext.create('PVE.form.FileSelector', {
33 name: 'ostemplate',
34 storageContent: 'vztmpl',
35 fieldLabel: 'OS template',
36 allowBlank: false
37 });
38
df4bd3ad
DM
39 var tmplstoragesel = Ext.create('PVE.form.StorageSelector', {
40 name: 'tmplstorage',
41 fieldLabel: 'Storage',
42 storageContent: 'vztmpl',
43 autoSelect: true,
44 allowBlank: false,
45 listeners: {
46 change: function(f, value) {
47 tmplsel.setStorage(value);
48 }
49 }
50 });
51
c6594d0e
DM
52 var bridgesel = Ext.create('PVE.form.BridgeSelector', {
53 name: 'bridge',
54 fieldLabel: 'Bridge',
55 labelAlign: 'right',
56 autoSelect: true,
57 disabled: true,
58 allowBlank: false
59 });
60
aff192e6 61 Ext.applyIf(me, {
58eb5905 62 subject: gettext('OpenVZ Container'),
aff192e6
DM
63 items: [
64 {
c6594d0e
DM
65 xtype: 'inputpanel',
66 title: 'General',
67 column1: [
68 {
69 xtype: 'PVE.form.NodeSelector',
70 name: 'nodename',
71 fieldLabel: 'Node',
72 allowBlank: false,
73 onlineValidator: true,
74 listeners: {
75 change: function(f, value) {
df4bd3ad
DM
76 tmplstoragesel.setNodename(value);
77 tmplsel.setStorage(undefined, value);
c6594d0e 78 bridgesel.setNodename(value);
9f767883 79 storagesel.setNodename(value);
c6594d0e
DM
80 }
81 }
82 },
83 {
04f5d98e 84 xtype: 'pveVMIDSelector',
c6594d0e
DM
85 name: 'vmid',
86 value: nextvmid,
04f5d98e 87 validateExists: false
c6594d0e
DM
88 },
89 {
90 xtype: 'pvetextfield',
91 name: 'hostname',
92 value: '',
93 fieldLabel: 'Hostname',
94 skipEmptyText: true,
95 allowBlank: true
96 }
97 ],
98 column2: [
9f767883 99 storagesel,
c6594d0e
DM
100 {
101 xtype: 'textfield',
102 inputType: 'password',
103 name: 'password',
104 value: '',
105 fieldLabel: 'Password',
106 allowBlank: false,
107 minLength: 5,
108 change: function(f, value) {
109 if (!me.rendered) {
110 return;
111 }
112 me.down('field[name=confirmpw]').validate();
113 }
114 },
115 {
116 xtype: 'textfield',
117 inputType: 'password',
118 name: 'confirmpw',
119 value: '',
120 fieldLabel: 'Confirm password',
121 allowBlank: false,
122 validator: function(value) {
123 var pw = me.down('field[name=password]').getValue();
124 if (pw !== value) {
125 return "Passowords does not match!";
126 }
127 return true;
128 }
129 }
130 ],
131 onGetValues: function(values) {
132 delete values.confirmpw;
133 return values;
134 }
135 },
136 {
137 xtype: 'inputpanel',
138 title: 'Template',
df4bd3ad 139 column1: [ tmplstoragesel, tmplsel]
c6594d0e
DM
140 },
141 {
d9f0ffa9 142 xtype: 'pveOpenVZResourceInputPanel',
a2f57991 143 title: 'Resources'
c6594d0e
DM
144 },
145 {
146 xtype: 'inputpanel',
147 title: 'Network',
148 column1: [
149 {
150 xtype: 'radiofield',
151 name: 'networkmode',
152 inputValue: 'routed',
153 boxLabel: 'Routed mode (venet)',
154 checked: true,
155 listeners: {
156 change: function(f, value) {
157 if (!me.rendered) {
158 return;
159 }
160 me.down('field[name=ip_address]').setDisabled(!value);
161 me.down('field[name=ip_address]').validate();
162 }
163 }
164 },
165 {
166 xtype: 'textfield',
167 name: 'ip_address',
168 vtype: 'IPAddress',
169 value: '',
170 fieldLabel: 'IP address',
171 labelAlign: 'right',
172 allowBlank: false
173 }
174 ],
175 column2: [
176 {
177 xtype: 'radiofield',
178 name: 'networkmode',
179 inputValue: 'bridge',
180 boxLabel: 'Bridged mode',
181 checked: false,
182 listeners: {
183 change: function(f, value) {
184 if (!me.rendered) {
185 return;
186 }
187 me.down('field[name=bridge]').setDisabled(!value);
188 me.down('field[name=bridge]').validate();
189 }
190 }
191 },
192 bridgesel
193 ],
194 onGetValues: function(values) {
877d3f6d
DM
195 if (values.networkmode === 'bridge') {
196 return { netif: 'ifname=eth0,bridge=' + values.bridge };
197 } else {
198 return { ip_address: values.ip_address };
199 }
c6594d0e
DM
200 }
201 },
202 {
203 xtype: 'inputpanel',
204 title: 'DNS',
205 column1: [
206 {
207 xtype: 'pvetextfield',
208 name: 'searchdomain',
209 skipEmptyText: true,
210 fieldLabel: 'DNS domain',
211 emptyText: 'use host settings',
212 allowBlank: true,
213 listeners: {
214 change: function(f, value) {
215 if (!me.rendered) {
216 return;
217 }
a2f57991 218 var field = me.down('#dns1');
c6594d0e
DM
219 field.setDisabled(!value);
220 field.clearInvalid();
a2f57991 221 field = me.down('#dns2');
c6594d0e
DM
222 field.setDisabled(!value);
223 field.clearInvalid();
224 }
225 }
226 },
227 {
228 xtype: 'pvetextfield',
229 fieldLabel: 'DNS server 1',
230 vtype: 'IPAddress',
231 allowBlank: true,
232 disabled: true,
233 name: 'nameserver',
234 itemId: 'dns1'
235 },
236 {
237 xtype: 'pvetextfield',
238 fieldLabel: 'DNS server 2',
239 vtype: 'IPAddress',
240 skipEmptyText: true,
241 disabled: true,
242 name: 'nameserver',
243 itemId: 'dns2'
244 }
245 ]
246 },
247 {
248 title: 'Confirm',
aff192e6 249 layout: 'fit',
c6594d0e
DM
250 items: [
251 {
252 title: 'Settings',
253 xtype: 'grid',
254 store: summarystore,
255 columns: [
256 {header: 'Key', width: 150, dataIndex: 'key'},
257 {header: 'Value', flex: 1, dataIndex: 'value'}
258 ]
259 }
260 ],
261 listeners: {
262 show: function(panel) {
263 var form = me.down('form').getForm();
264 var kv = me.getValues();
265 var data = [];
266 Ext.Object.each(kv, function(key, value) {
df4bd3ad 267 if (key === 'delete' || key === 'tmplstorage') { // ignore
c6594d0e
DM
268 return;
269 }
270 if (key === 'password') { // don't show pw
271 return;
272 }
273 var html = Ext.htmlEncode(Ext.JSON.encode(value));
274 data.push({ key: key, value: value });
275 });
276 summarystore.suspendEvents();
277 summarystore.removeAll();
278 summarystore.add(data);
279 summarystore.sort();
280 summarystore.resumeEvents();
281 summarystore.fireEvent('datachanged', summarystore);
282 }
283 },
284 onSubmit: function() {
285 var kv = me.getValues();
286 delete kv['delete'];
287
288 var nodename = kv.nodename;
289 delete kv.nodename;
df4bd3ad 290 delete kv.tmplstorage;
c6594d0e
DM
291
292 PVE.Utils.API2Request({
293 url: '/nodes/' + nodename + '/openvz',
294 waitMsgTarget: me,
295 method: 'POST',
296 params: kv,
4545bfda
DM
297 success: function(response, opts){
298 var upid = response.result.data;
299
300 var win = Ext.create('PVE.window.TaskViewer', {
301 upid: upid
302 });
303 win.show();
c6594d0e
DM
304 me.close();
305 },
306 failure: function(response, opts) {
307 Ext.Msg.alert('Error', response.htmlStatus);
308 }
309 });
310 }
aff192e6
DM
311 }
312 ]
313 });
314
315 me.callParent();
316 }
317});
318
319
320