mirror of
				https://git.proxmox.com/git/pve-manager
				synced 2025-11-04 01:49:36 +00:00 
			
		
		
		
	nocloud configuration does not support SLAAC option, only static or dhcp so this option shouldn't be available Signed-off-by: David Limbeck <d.limbeck@proxmox.com>
		
			
				
	
	
		
			241 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			241 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
Ext.define('PVE.qemu.IPConfigPanel', {
 | 
						|
    extend: 'Proxmox.panel.InputPanel',
 | 
						|
    xtype: 'pveIPConfigPanel',
 | 
						|
 | 
						|
    insideWizard: false,
 | 
						|
 | 
						|
    vmconfig: {},
 | 
						|
 | 
						|
    onGetValues: function(values) {
 | 
						|
	var me = this;
 | 
						|
 | 
						|
	if (values.ipv4mode !== 'static') {
 | 
						|
	    values.ip = values.ipv4mode;
 | 
						|
	}
 | 
						|
 | 
						|
	if (values.ipv6mode !== 'static') {
 | 
						|
	    values.ip6 = values.ipv6mode;
 | 
						|
	}
 | 
						|
 | 
						|
	var params = {};
 | 
						|
 | 
						|
	var cfg = PVE.Parser.printIPConfig(values);
 | 
						|
	if (cfg === '') {
 | 
						|
	    params['delete'] = [me.confid];
 | 
						|
	} else {
 | 
						|
	    params[me.confid] = cfg;
 | 
						|
	}
 | 
						|
	return params;
 | 
						|
    },
 | 
						|
 | 
						|
    setVMConfig: function(config) {
 | 
						|
	var me = this;
 | 
						|
	me.vmconfig = config;
 | 
						|
    },
 | 
						|
 | 
						|
    setIPConfig: function(confid, data) {
 | 
						|
	var me = this;
 | 
						|
 | 
						|
	me.confid = confid;
 | 
						|
 | 
						|
	if (data.ip === 'dhcp') {
 | 
						|
	    data.ipv4mode = data.ip;
 | 
						|
	    data.ip = '';
 | 
						|
	} else {
 | 
						|
	    data.ipv4mode = 'static';
 | 
						|
	}
 | 
						|
	if (data.ip6 === 'dhcp' || data.ip6 === 'auto') {
 | 
						|
	    data.ipv6mode = data.ip6;
 | 
						|
	    data.ip6 = '';
 | 
						|
	} else {
 | 
						|
	    data.ipv6mode = 'static';
 | 
						|
	}
 | 
						|
 | 
						|
	me.ipconfig = data;
 | 
						|
	me.setValues(me.ipconfig);
 | 
						|
    },
 | 
						|
 | 
						|
    initComponent : function() {
 | 
						|
	var me = this;
 | 
						|
 | 
						|
	me.ipconfig = {};
 | 
						|
 | 
						|
	me.column1 = [
 | 
						|
	    {
 | 
						|
		xtype: 'displayfield',
 | 
						|
		fieldLabel: gettext('Network Device'),
 | 
						|
		value: me.netid
 | 
						|
	    },
 | 
						|
	    {
 | 
						|
		layout: {
 | 
						|
		    type: 'hbox',
 | 
						|
		    align: 'middle'
 | 
						|
		},
 | 
						|
		border: false,
 | 
						|
		margin: '0 0 5 0',
 | 
						|
		items: [
 | 
						|
		    {
 | 
						|
			xtype: 'label',
 | 
						|
			text: gettext('IPv4') + ':'
 | 
						|
		    },
 | 
						|
		    {
 | 
						|
			xtype: 'radiofield',
 | 
						|
			boxLabel: gettext('Static'),
 | 
						|
			name: 'ipv4mode',
 | 
						|
			inputValue: 'static',
 | 
						|
			checked: false,
 | 
						|
			margin: '0 0 0 10',
 | 
						|
			listeners: {
 | 
						|
			    change: function(cb, value) {
 | 
						|
				me.down('field[name=ip]').setDisabled(!value);
 | 
						|
				me.down('field[name=gw]').setDisabled(!value);
 | 
						|
			    }
 | 
						|
			}
 | 
						|
		    },
 | 
						|
		    {
 | 
						|
			xtype: 'radiofield',
 | 
						|
			boxLabel: gettext('DHCP'),
 | 
						|
			name: 'ipv4mode',
 | 
						|
			inputValue: 'dhcp',
 | 
						|
			checked: false,
 | 
						|
			margin: '0 0 0 10'
 | 
						|
		    }
 | 
						|
		]
 | 
						|
	    },
 | 
						|
	    {
 | 
						|
		xtype: 'textfield',
 | 
						|
		name: 'ip',
 | 
						|
		vtype: 'IPCIDRAddress',
 | 
						|
		value: '',
 | 
						|
		disabled: true,
 | 
						|
		fieldLabel: gettext('IPv4/CIDR')
 | 
						|
	    },
 | 
						|
	    {
 | 
						|
		xtype: 'textfield',
 | 
						|
		name: 'gw',
 | 
						|
		value: '',
 | 
						|
		vtype: 'IPAddress',
 | 
						|
		disabled: true,
 | 
						|
		fieldLabel: gettext('Gateway') + ' (' + gettext('IPv4') +')'
 | 
						|
	    }
 | 
						|
	];
 | 
						|
 | 
						|
	me.column2 = [
 | 
						|
	    {
 | 
						|
		xtype: 'displayfield'
 | 
						|
	    },
 | 
						|
	    {
 | 
						|
		layout: {
 | 
						|
		    type: 'hbox',
 | 
						|
		    align: 'middle'
 | 
						|
		},
 | 
						|
		border: false,
 | 
						|
		margin: '0 0 5 0',
 | 
						|
		items: [
 | 
						|
		    {
 | 
						|
			xtype: 'label',
 | 
						|
			text: gettext('IPv6') + ':'
 | 
						|
		    },
 | 
						|
		    {
 | 
						|
			xtype: 'radiofield',
 | 
						|
			boxLabel: gettext('Static'),
 | 
						|
			name: 'ipv6mode',
 | 
						|
			inputValue: 'static',
 | 
						|
			checked: false,
 | 
						|
			margin: '0 0 0 10',
 | 
						|
			listeners: {
 | 
						|
			    change: function(cb, value) {
 | 
						|
				me.down('field[name=ip6]').setDisabled(!value);
 | 
						|
				me.down('field[name=gw6]').setDisabled(!value);
 | 
						|
			    }
 | 
						|
			}
 | 
						|
		    },
 | 
						|
		    {
 | 
						|
			xtype: 'radiofield',
 | 
						|
			boxLabel: gettext('DHCP'),
 | 
						|
			name: 'ipv6mode',
 | 
						|
			inputValue: 'dhcp',
 | 
						|
			checked: false,
 | 
						|
			margin: '0 0 0 10'
 | 
						|
		    }
 | 
						|
		]
 | 
						|
	    },
 | 
						|
	    {
 | 
						|
		xtype: 'textfield',
 | 
						|
		name: 'ip6',
 | 
						|
		value: '',
 | 
						|
		vtype: 'IP6CIDRAddress',
 | 
						|
		disabled: true,
 | 
						|
		fieldLabel: gettext('IPv6/CIDR')
 | 
						|
	    },
 | 
						|
	    {
 | 
						|
		xtype: 'textfield',
 | 
						|
		name: 'gw6',
 | 
						|
		vtype: 'IP6Address',
 | 
						|
		value: '',
 | 
						|
		disabled: true,
 | 
						|
		fieldLabel: gettext('Gateway') + ' (' + gettext('IPv6') +')'
 | 
						|
	    }
 | 
						|
	];
 | 
						|
 | 
						|
	me.callParent();
 | 
						|
    }
 | 
						|
});
 | 
						|
 | 
						|
Ext.define('PVE.qemu.IPConfigEdit', {
 | 
						|
    extend: 'Proxmox.window.Edit',
 | 
						|
 | 
						|
    isAdd: true,
 | 
						|
 | 
						|
    initComponent : function() {
 | 
						|
	/*jslint confusion: true */
 | 
						|
 | 
						|
	var me = this;
 | 
						|
 | 
						|
	// convert confid from netX to ipconfigX
 | 
						|
	var match = me.confid.match(/^net(\d+)$/);
 | 
						|
	if (match) {
 | 
						|
	    me.netid = me.confid;
 | 
						|
	    me.confid = 'ipconfig' + match[1];
 | 
						|
	}
 | 
						|
 | 
						|
	var nodename = me.pveSelNode.data.node;
 | 
						|
	if (!nodename) {
 | 
						|
	    throw "no node name specified";
 | 
						|
	}
 | 
						|
 | 
						|
	me.isCreate = me.confid ? false : true;
 | 
						|
 | 
						|
	var ipanel = Ext.create('PVE.qemu.IPConfigPanel', {
 | 
						|
	    confid: me.confid,
 | 
						|
	    netid: me.netid,
 | 
						|
	    nodename: nodename
 | 
						|
	});
 | 
						|
 | 
						|
	Ext.applyIf(me, {
 | 
						|
	    subject: gettext('Network Config'),
 | 
						|
	    items: ipanel
 | 
						|
	});
 | 
						|
 | 
						|
	me.callParent();
 | 
						|
 | 
						|
	me.load({
 | 
						|
	    success: function(response, options) {
 | 
						|
		me.vmconfig = response.result.data;
 | 
						|
		var ipconfig = {};
 | 
						|
		var value = me.vmconfig[me.confid];
 | 
						|
		if (value) {
 | 
						|
		    ipconfig = PVE.Parser.parseIPConfig(me.confid, value);
 | 
						|
		    if (!ipconfig) {
 | 
						|
			Ext.Msg.alert(gettext('Error'), gettext('Unable to parse network configuration'));
 | 
						|
			me.close();
 | 
						|
			return;
 | 
						|
		    }
 | 
						|
		}
 | 
						|
		ipanel.setIPConfig(me.confid, ipconfig);
 | 
						|
		ipanel.setVMConfig(me.vmconfig);
 | 
						|
	    }
 | 
						|
	});
 | 
						|
    }
 | 
						|
});
 |