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