UNPKG

@adopisoft/netplan

Version:

Node module for setting up network interface(s) ip address.

92 lines (83 loc) 2.75 kB
'use strict' var trim_ip_address = require('../helpers/trim_ip_address.js') exports.generate = (currentConfig, interfaceConfig) => { var iface = interfaceConfig.interface var is_vlan = typeof interfaceConfig.vlanid === 'number' var cfg = { network: { version: 2, renderer: 'networkd', ethernets: currentConfig.network.ethernets || {}, vlans: currentConfig.network.vlans || {}, bridges: currentConfig.network.bridges || {}, } } var config = {} if (interfaceConfig.optional) config.optional = true if (interfaceConfig.ip_address && !interfaceConfig.dhcp) { config.dhcp4 = false config.dhcp6 = false config.addresses = [trim_ip_address(interfaceConfig.ip_address) + '/' + interfaceConfig.prefix] // dns nameservers if (interfaceConfig.nameservers) { var ns = interfaceConfig.nameservers var r = /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/g if (typeof ns === 'string') { var addresses = ns.match(r) config.nameservers = { addresses } } else if (Array.isArray(interfaceConfig.nameservers)) { var addresses = interfaceConfig.nameservers.reduce((result, item) => { var addrs = item.match(r) return result.concat(addrs) }, []) config.nameservers = { addresses } } else { } } // end dns config if (interfaceConfig.gateway) config.routes = [{ to: 'default', via: interfaceConfig.gateway }] } else { config.dhcp4 = !!interfaceConfig.dhcp config.dhcp6 = config.dhcp4 if (interfaceConfig.dhcp) { config['dhcp-identifier'] = 'mac' } } if (!is_vlan) { if (Array.isArray(interfaceConfig.bridge_ports)) { interfaceConfig.bridge_opts = interfaceConfig.bridge_opts || {} interfaceConfig.bridge_ports.forEach(p => { if (!cfg.network.vlans[p]) { cfg.network.ethernets[p] = { dhcp4: false, dhcp6: false, optional: true } } else { var vlan = cfg.network.vlans[p] cfg.network.vlans[p] = { id: vlan.id, link: vlan.link, dhcp4: false, dhcp6: false, optional: true, } } }) var { parameters } = interfaceConfig.bridge_opts config.interfaces = interfaceConfig.bridge_ports config.parameters = parameters || {} cfg.network.bridges[iface] = config } else if (!interfaceConfig.ppp) cfg.network.ethernets[iface] = config } else { config.id = interfaceConfig.vlanid config.link = iface if (interfaceConfig.optional) { config.optional = true } cfg.network.vlans[interfaceConfig.ifname] = config } return cfg }