pve-manager/www/manager/lxc/CreateWizard.js
Dietmar Maurer 5ceec1f57b allow all storages with content type 'images' for containers
New LXC containers can use raw images, so the distinction between 'images'
and 'rootdir' does not really makes sense now.
2015-08-07 10:34:56 +02:00

247 lines
5.4 KiB
JavaScript

/*jslint confusion: true */
Ext.define('PVE.lxc.CreateWizard', {
extend: 'PVE.window.Wizard',
initComponent: function() {
var me = this;
var summarystore = Ext.create('Ext.data.Store', {
model: 'KeyValue',
sorters: [
{
property : 'key',
direction: 'ASC'
}
]
});
var storagesel = Ext.create('PVE.form.StorageSelector', {
name: 'storage',
fieldLabel: gettext('Storage'),
storageContent: 'images,rootdir',
autoSelect: true,
allowBlank: false
});
var tmplsel = Ext.create('PVE.form.FileSelector', {
name: 'ostemplate',
storageContent: 'vztmpl',
fieldLabel: gettext('Template'),
allowBlank: false
});
var tmplstoragesel = Ext.create('PVE.form.StorageSelector', {
name: 'tmplstorage',
fieldLabel: gettext('Storage'),
storageContent: 'vztmpl',
autoSelect: true,
allowBlank: false,
listeners: {
change: function(f, value) {
tmplsel.setStorage(value);
}
}
});
var networkpanel = Ext.create('PVE.lxc.NetworkInputPanel', {
title: gettext('Network'),
insideWizard: true,
dataCache: {},
create: true,
});
Ext.applyIf(me, {
subject: gettext('LXC Container'),
items: [
{
xtype: 'inputpanel',
title: gettext('General'),
column1: [
{
xtype: 'PVE.form.NodeSelector',
name: 'nodename',
fieldLabel: gettext('Node'),
allowBlank: false,
onlineValidator: true,
listeners: {
change: function(f, value) {
tmplstoragesel.setNodename(value);
tmplsel.setStorage(undefined, value);
networkpanel.setNodename(value);
storagesel.setNodename(value);
}
}
},
{
xtype: 'pveVMIDSelector',
name: 'vmid',
value: '',
loadNextFreeVMID: true,
validateExists: false
},
{
xtype: 'pvetextfield',
name: 'hostname',
vtype: 'DnsName',
value: '',
fieldLabel: gettext('Hostname'),
skipEmptyText: true,
allowBlank: true
}
],
column2: [
{
xtype: 'pvePoolSelector',
fieldLabel: gettext('Resource Pool'),
name: 'pool',
value: '',
allowBlank: true
},
{
xtype: 'textfield',
inputType: 'password',
name: 'password',
value: '',
fieldLabel: gettext('Password'),
allowBlank: false,
minLength: 5,
change: function(f, value) {
if (!me.rendered) {
return;
}
me.down('field[name=confirmpw]').validate();
}
},
{
xtype: 'textfield',
inputType: 'password',
name: 'confirmpw',
value: '',
fieldLabel: gettext('Confirm password'),
allowBlank: false,
validator: function(value) {
var pw = me.down('field[name=password]').getValue();
if (pw !== value) {
return "Passwords does not match!";
}
return true;
}
}
],
onGetValues: function(values) {
delete values.confirmpw;
if (!values.pool) {
delete values.pool;
}
return values;
}
},
{
xtype: 'inputpanel',
title: gettext('Template'),
column1: [ tmplstoragesel, tmplsel]
},
{
xtype: 'inputpanel',
title: gettext('Root Disk'),
column1: [
storagesel,
{
xtype: 'numberfield',
name: 'size',
minValue: 0.1,
maxValue: 128*1024,
decimalPrecision: 3,
value: '8',
step: 1,
fieldLabel: gettext('Disk size') + ' (GB)',
allowBlank: false
}
]
},
{
xtype: 'pveLxcResourceInputPanel',
title: gettext('Resources'),
insideWizard: true
},
networkpanel,
{
xtype: 'pveLxcDNSInputPanel',
title: gettext('DNS'),
insideWizard: true
},
{
title: gettext('Confirm'),
layout: 'fit',
items: [
{
title: gettext('Settings'),
xtype: 'grid',
store: summarystore,
columns: [
{header: 'Key', width: 150, dataIndex: 'key'},
{header: 'Value', flex: 1, dataIndex: 'value'}
]
}
],
listeners: {
show: function(panel) {
var form = me.down('form').getForm();
var kv = me.getValues();
var data = [];
Ext.Object.each(kv, function(key, value) {
if (key === 'delete' || key === 'tmplstorage') { // ignore
return;
}
if (key === 'password') { // don't show pw
return;
}
var html = Ext.htmlEncode(Ext.JSON.encode(value));
data.push({ key: key, value: value });
});
summarystore.suspendEvents();
summarystore.removeAll();
summarystore.add(data);
summarystore.sort();
summarystore.resumeEvents();
summarystore.fireEvent('datachanged', summarystore);
}
},
onSubmit: function() {
var kv = me.getValues();
delete kv['delete'];
var nodename = kv.nodename;
delete kv.nodename;
delete kv.tmplstorage;
PVE.Utils.API2Request({
url: '/nodes/' + nodename + '/lxc',
waitMsgTarget: me,
method: 'POST',
params: kv,
success: function(response, opts){
var upid = response.result.data;
var win = Ext.create('PVE.window.TaskViewer', {
upid: upid
});
win.show();
me.close();
},
failure: function(response, opts) {
Ext.Msg.alert(gettext('Error'), response.htmlStatus);
}
});
}
}
]
});
me.callParent();
}
});