@adopisoft/netplan
Version:
Node module for setting up network interface(s) ip address.
50 lines (42 loc) • 1.3 kB
JavaScript
var fs = require('fs')
var yaml = require('js-yaml')
var config = require('./config.js')
var util = require('util')
var readdir = util.promisify(fs.readdir)
var writeFile = util.promisify(fs.writeFile)
var ensureDir = require('make-dir')
var { exec } = require('child_process')
var { promisify } = require("util");
var execPromise = promisify(exec)
exports.cfg_stack = {
network: {
version: 2,
renderer: 'networkd'
}
}
exports.getYamlFileName = async () => {
await ensureDir('/etc/netplan')
var files = await readdir('/etc/netplan')
return '/etc/netplan/' + (files[0] || '01-networkcfg.yaml')
}
exports.setInterface = (cfg) => {
exports.cfg_stack = config.generate(exports.cfg_stack, cfg)
}
exports.writeConfig = async () => {
var cfg_yaml = yaml.safeDump(exports.cfg_stack, { noCompatMode: true })
var filename = await exports.getYamlFileName()
await ensureDir('/etc/netplan')
await writeFile(filename, cfg_yaml)
await execPromise(`chmod 600 ${filename}`)
}
exports.configure = (configs) => {
exports.cfg_stack.network.ethernets = {}
exports.cfg_stack.network.vlans = {}
exports.cfg_stack.network.bridges = {}
configs.forEach(c => {
var cfg = Object.assign({}, c)
return exports.setInterface(cfg)
})
return exports.writeConfig()
}