]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/lxc/CreateWizard.js
1 Ext
.define('PVE.lxc.CreateWizard', {
2 extend
: 'PVE.window.Wizard',
3 mixins
: ['Proxmox.Mixin.CBind'],
17 subject
: gettext('LXC Container'),
22 title
: gettext('General'),
23 onlineHelp
: 'pct_general',
26 xtype
: 'pveNodeSelector',
29 selectCurNode
: '{!nodename}',
30 preferredValue
: '{nodename}',
35 fieldLabel
: gettext('Node'),
37 onlineValidator
: true,
40 xtype
: 'pveGuestIDSelector',
41 name
: 'vmid', // backend only knows vmid
45 validateExists
: false,
48 xtype
: 'proxmoxtextfield',
52 fieldLabel
: gettext('Hostname'),
57 xtype
: 'proxmoxcheckbox',
61 value
: '{unprivileged}',
63 fieldLabel
: gettext('Unprivileged container'),
68 xtype
: 'pvePoolSelector',
69 fieldLabel
: gettext('Resource Pool'),
76 inputType
: 'password',
79 fieldLabel
: gettext('Password'),
82 change: function(f
, value
) {
84 f
.up().down('field[name=confirmpw]').validate();
90 inputType
: 'password',
93 fieldLabel
: gettext('Confirm password'),
96 validator: function(value
) {
97 var pw
= this.up().down('field[name=password]').getValue();
99 return "Passwords do not match!";
105 xtype
: 'proxmoxtextfield',
106 name
: 'ssh-public-keys',
108 fieldLabel
: gettext('SSH public key'),
110 validator: function(value
) {
111 var pwfield
= this.up().down('field[name=password]');
113 var key
= PVE
.Parser
.parseSSHKey(value
);
115 return "Failed to recognize ssh key";
117 pwfield
.allowBlank
= true;
119 pwfield
.allowBlank
= false;
124 afterRender: function() {
125 if (!window
.FileReader
) {
126 // No FileReader support in this browser
129 var cancel = function(ev
) {
131 if (ev
.preventDefault
) {
136 field
.inputEl
.on('dragover', cancel
);
137 field
.inputEl
.on('dragenter', cancel
);
138 field
.inputEl
.on('drop', function(ev
) {
140 if (ev
.preventDefault
) {
143 let files
= ev
.dataTransfer
.files
;
144 PVE
.Utils
.loadSSHKeyFromFile(files
[0], v
=> field
.setValue(v
));
151 hidden
: !window
.FileReader
,
152 text
: gettext('Load SSH Key File'),
154 change: function(btn
, e
, value
) {
156 var field
= this.up().down('proxmoxtextfield[name=ssh-public-keys]');
157 PVE
.Utils
.loadSSHKeyFromFile(e
.target
.files
[0], function(v
) {
168 title
: gettext('Template'),
169 onlineHelp
: 'pct_container_images',
172 xtype
: 'pveStorageSelector',
174 fieldLabel
: gettext('Storage'),
175 storageContent
: 'vztmpl',
180 nodename
: '{nodename}',
184 xtype
: 'pveFileSelector',
186 storageContent
: 'vztmpl',
187 fieldLabel
: gettext('Template'),
189 storage
: '{storage}',
190 nodename
: '{nodename}',
197 xtype
: 'pveLxcMountPointInputPanel',
198 title
: gettext('Root Disk'),
203 nodename
: '{nodename}',
204 unprivileged
: '{unprivileged}',
209 xtype
: 'pveLxcCPUInputPanel',
210 title
: gettext('CPU'),
214 xtype
: 'pveLxcMemoryInputPanel',
215 title
: gettext('Memory'),
219 xtype
: 'pveLxcNetworkInputPanel',
220 title
: gettext('Network'),
223 nodename
: '{nodename}',
228 xtype
: 'pveLxcDNSInputPanel',
229 title
: gettext('DNS'),
233 title
: gettext('Confirm'),
246 { header
: 'Key', width
: 150, dataIndex
: 'key' },
247 { header
: 'Value', flex
: 1, dataIndex
: 'value' },
253 xtype
: 'proxmoxcheckbox',
257 boxLabel
: gettext('Start after created'),
261 show: function(panel
) {
262 var wizard
= this.up('window');
263 var kv
= wizard
.getValues();
265 Ext
.Object
.each(kv
, function(key
, value
) {
266 if (key
=== 'delete' || key
=== 'tmplstorage') { // ignore
269 if (key
=== 'password') { // don't show pw
272 var html
= Ext
.htmlEncode(Ext
.JSON
.encode(value
));
273 data
.push({ key
: key
, value
: value
});
276 var summarystore
= panel
.down('grid').getStore();
277 summarystore
.suspendEvents();
278 summarystore
.removeAll();
279 summarystore
.add(data
);
281 summarystore
.resumeEvents();
282 summarystore
.fireEvent('refresh');
285 onSubmit: function() {
286 var wizard
= this.up('window');
287 var kv
= wizard
.getValues();
290 var nodename
= kv
.nodename
;
292 delete kv
.tmplstorage
;
294 if (!kv
.pool
.length
) {
298 if (!kv
.password
.length
&& kv
['ssh-public-keys']) {
302 Proxmox
.Utils
.API2Request({
303 url
: '/nodes/' + nodename
+ '/lxc',
304 waitMsgTarget
: wizard
,
307 success: function(response
, opts
) {
308 var upid
= response
.result
.data
;
310 var win
= Ext
.create('Proxmox.window.TaskViewer', {
316 failure: function(response
, opts
) {
317 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);