]>
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'),
66 xtype
: 'proxmoxcheckbox',
68 inputValue
: 'nesting=1',
71 disabled
: '{!unprivileged}',
73 fieldLabel
: gettext('Nesting'),
78 xtype
: 'pvePoolSelector',
79 fieldLabel
: gettext('Resource Pool'),
86 inputType
: 'password',
89 fieldLabel
: gettext('Password'),
92 change: function(f
, value
) {
94 f
.up().down('field[name=confirmpw]').validate();
100 inputType
: 'password',
103 fieldLabel
: gettext('Confirm password'),
106 validator: function(value
) {
107 var pw
= this.up().down('field[name=password]').getValue();
109 return "Passwords do not match!";
115 xtype
: 'proxmoxtextfield',
116 name
: 'ssh-public-keys',
118 fieldLabel
: gettext('SSH public key'),
120 validator: function(value
) {
121 let pwfield
= this.up().down('field[name=password]');
123 let key
= PVE
.Parser
.parseSSHKey(value
);
125 return "Failed to recognize ssh key";
127 pwfield
.allowBlank
= true;
129 pwfield
.allowBlank
= false;
134 afterRender: function() {
135 if (!window
.FileReader
) {
136 return; // No FileReader support in this browser
138 let cancelEvent
= ev
=> {
140 if (ev
.preventDefault
) {
144 this.inputEl
.on('dragover', cancelEvent
);
145 this.inputEl
.on('dragenter', cancelEvent
);
146 this.inputEl
.on('drop', ev
=> {
148 let files
= ev
.event
.dataTransfer
.files
;
149 PVE
.Utils
.loadSSHKeyFromFile(files
[0], v
=> this.setValue(v
));
156 hidden
: !window
.FileReader
,
157 text
: gettext('Load SSH Key File'),
159 change: function(btn
, e
, value
) {
161 let field
= this.up().down('proxmoxtextfield[name=ssh-public-keys]');
162 PVE
.Utils
.loadSSHKeyFromFile(e
.target
.files
[0], v
=> field
.setValue(v
));
171 title
: gettext('Template'),
172 onlineHelp
: 'pct_container_images',
175 xtype
: 'pveStorageSelector',
177 fieldLabel
: gettext('Storage'),
178 storageContent
: 'vztmpl',
183 nodename
: '{nodename}',
187 xtype
: 'pveFileSelector',
189 storageContent
: 'vztmpl',
190 fieldLabel
: gettext('Template'),
192 storage
: '{storage}',
193 nodename
: '{nodename}',
200 xtype
: 'pveMultiMPPanel',
201 title
: gettext('Disks'),
208 xtype
: 'pveLxcCPUInputPanel',
209 title
: gettext('CPU'),
213 xtype
: 'pveLxcMemoryInputPanel',
214 title
: gettext('Memory'),
218 xtype
: 'pveLxcNetworkInputPanel',
219 title
: gettext('Network'),
222 nodename
: '{nodename}',
227 xtype
: 'pveLxcDNSInputPanel',
228 title
: gettext('DNS'),
232 title
: gettext('Confirm'),
245 { header
: 'Key', width
: 150, dataIndex
: 'key' },
246 { header
: 'Value', flex
: 1, dataIndex
: 'value' },
252 xtype
: 'proxmoxcheckbox',
256 boxLabel
: gettext('Start after created'),
260 show: function(panel
) {
261 let wizard
= this.up('window');
262 let kv
= wizard
.getValues();
264 Ext
.Object
.each(kv
, function(key
, value
) {
265 if (key
=== 'delete' || key
=== 'tmplstorage') { // ignore
268 if (key
=== 'password') { // don't show pw
271 data
.push({ key
: key
, value
: value
});
274 let summaryStore
= panel
.down('grid').getStore();
275 summaryStore
.suspendEvents();
276 summaryStore
.removeAll();
277 summaryStore
.add(data
);
279 summaryStore
.resumeEvents();
280 summaryStore
.fireEvent('refresh');
283 onSubmit: function() {
284 let wizard
= this.up('window');
285 let kv
= wizard
.getValues();
288 let nodename
= kv
.nodename
;
290 delete kv
.tmplstorage
;
292 if (!kv
.pool
.length
) {
295 if (!kv
.password
.length
&& kv
['ssh-public-keys']) {
299 Proxmox
.Utils
.API2Request({
300 url
: `/nodes/${nodename}/lxc`,
301 waitMsgTarget
: wizard
,
304 success: function(response
, opts
) {
305 Ext
.create('Proxmox.window.TaskViewer', {
307 upid
: response
.result
.data
,
311 failure
: (response
, opts
) => Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
),