mirror of
https://git.proxmox.com/git/pve-manager
synced 2025-05-21 09:41:13 +00:00
158 lines
3.2 KiB
JavaScript
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
|
|
}
|
|
});
|
|
}
|
|
}
|
|
});
|