pve-manager/www/manager/node/NetworkEdit.js
2012-03-20 11:11:36 +01:00

158 lines
3.2 KiB
JavaScript

Ext.define('PVE.node.NetworkEdit', {
extend: 'PVE.window.Edit',
alias: ['widget.pveNodeNetworkEdit'],
initComponent : function() {
var me = this;
var nodename = me.pveSelNode.data.node;
if (!nodename) {
throw "no node name specified";
}
if (!me.iftype) {
throw "no network device type specified";
}
me.create = !me.iface;
var iface_vtype;
if (me.iftype === 'bridge') {
me.subject = "Bridge";
iface_vtype = 'BridgeName';
} else if (me.iftype === 'bond') {
me.subject = "Bond";
iface_vtype = 'BondName';
} else if (me.iftype === 'eth' && !me.create) {
me.subject = gettext("Network Device");
} else {
throw "no known network device type specified";
}
var column2 = [
{
xtype: 'pvecheckbox',
fieldLabel: 'Autostart',
name: 'autostart',
uncheckedValue: 0,
checked: me.create ? true : undefined
}
];
if (me.iftype === 'bridge') {
column2.push({
xtype: 'textfield',
fieldLabel: 'Bridge ports',
name: 'bridge_ports'
});
} else if (me.iftype === 'bond') {
column2.push({
xtype: 'textfield',
fieldLabel: 'Slaves',
name: 'slaves'
});
column2.push({
xtype: 'bondModeSelector',
fieldLabel: 'Mode',
name: 'bond_mode',
value: me.create ? 'balance-rr' : undefined,
allowBlank: false
});
}
var url;
var method;
if (me.create) {
url = "/api2/extjs/nodes/" + nodename + "/network";
method = 'POST';
} else {
url = "/api2/extjs/nodes/" + nodename + "/network/" + me.iface;
method = 'PUT';
}
var column1 = [
{
xtype: me.create ? 'textfield' : 'displayfield',
fieldLabel: gettext('Name'),
height: 22, // hack: set same height as text fields
name: 'iface',
value: me.iface,
vtype: iface_vtype,
allowBlank: false
},
{
xtype: 'pvetextfield',
deleteEmpty: !me.create,
fieldLabel: gettext('IP address'),
vtype: 'IPAddress',
name: 'address'
},
{
xtype: 'pvetextfield',
deleteEmpty: !me.create,
fieldLabel: gettext('Subnet mask'),
vtype: 'IPAddress',
name: 'netmask',
validator: function(value) {
/*jslint confusion: true */
if (!me.items) {
return true;
}
var address = me.down('field[name=address]').getValue();
if (value !== '') {
if (address === '') {
return "Subnet mask requires option 'IP address'";
}
} else {
if (address !== '') {
return "Option 'IP address' requires a subnet mask";
}
}
return true;
}
},
{
xtype: 'pvetextfield',
deleteEmpty: !me.create,
fieldLabel: 'Gateway',
vtype: 'IPAddress',
name: 'gateway'
}
];
Ext.applyIf(me, {
url: url,
method: method,
items: {
xtype: 'inputpanel',
column1: column1,
column2: column2
}
});
me.callParent();
if (me.create) {
me.down('field[name=iface]').setValue(me.iface_default);
} else {
me.load({
success: function(response, options) {
var data = response.result.data;
if (data.type !== me.iftype) {
var msg = "Got unexpected device type";
Ext.Msg.alert(gettext('Error'), msg, function() {
me.close();
});
return;
}
me.setValues(data);
me.isValid(); // trigger validation
}
});
}
}
});