From 1d3cb6f153ef37a45f6925619dedd2bcb755abc2 Mon Sep 17 00:00:00 2001 From: Ian Kaufman Date: Tue, 10 Dec 2024 19:41:27 -0700 Subject: [PATCH] Add Netplan NIC support for Debian/Ubuntu #1463 Signed-off-by: Jonathon Anderson --- CHANGELOG.md | 1 + CONTRIBUTORS.md | 2 +- overlays/netplan/internal/netplan_test.go | 74 +++++++++++++++++++ overlays/netplan/internal/nodes.conf | 17 +++++ .../rootfs/etc/netplan/01-netcfg.yaml.ww | 13 ++++ 5 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 overlays/netplan/internal/netplan_test.go create mode 100644 overlays/netplan/internal/nodes.conf create mode 100644 overlays/netplan/rootfs/etc/netplan/01-netcfg.yaml.ww diff --git a/CHANGELOG.md b/CHANGELOG.md index ff11eadc..44fdc00a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Added +- Added Netplan NIC support for Debian/Ubuntu #1463 - Added documentation on ensuring `systemctl restart warewulfd` is ran when editing `nodes.conf` or `warewulf.conf` - Add the ability to boot nodes with `wwid=[interface]`, which replaces `interface` with the interface MAC address diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index f322e3b8..eb7b279c 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -42,5 +42,5 @@ * Brandon Biggs * Howard Van Der Wal [@metalllinux](https://github.com/metalllinux) * Nicholas Porter -* Ian Kaufman [@iankgt40](https://github.com/iankgt40) +* Ian Kaufman [@iankgt40](https://github.com/iankgt40) * Daniele Colombo [@dacolombo](https://github.com/dacolombo) diff --git a/overlays/netplan/internal/netplan_test.go b/overlays/netplan/internal/netplan_test.go new file mode 100644 index 00000000..97289b9e --- /dev/null +++ b/overlays/netplan/internal/netplan_test.go @@ -0,0 +1,74 @@ +package netplan + +import ( + "bytes" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/warewulf/warewulf/internal/app/wwctl/overlay/show" + "github.com/warewulf/warewulf/internal/pkg/testenv" + "github.com/warewulf/warewulf/internal/pkg/wwlog" +) + +func Test_netplanOverlay(t *testing.T) { + env := testenv.New(t) + defer env.RemoveAll(t) + env.ImportFile(t, "etc/warewulf/nodes.conf", "nodes.conf") + env.ImportFile(t, "var/lib/warewulf/overlays/netplan/rootfs/etc/netplan/01-netcfg.yaml.ww", "../rootfs/etc/netplan/01-netcfg.yaml.ww") + + tests := []struct { + name string + args []string + log string + }{ + { + name: "netplan", + args: []string{"--render", "node1", "netplan", "etc/netplan/01-netcfg.yaml.ww"}, + log: netplan, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + cmd := show.GetCommand() + cmd.SetArgs(tt.args) + stdout := bytes.NewBufferString("") + stderr := bytes.NewBufferString("") + logbuf := bytes.NewBufferString("") + cmd.SetOut(stdout) + cmd.SetErr(stderr) + wwlog.SetLogWriter(logbuf) + err := cmd.Execute() + assert.NoError(t, err) + assert.Empty(t, stdout.String()) + assert.Empty(t, stderr.String()) + assert.Equal(t, tt.log, logbuf.String()) + }) + } +} + +const netplan string = `backupFile: true +writeFile: true +Filename: 01-netcfg.yaml +# This file is autogenerated by warewulf +network: + version: 2 + renderer: networkd + ethernets: + wwnet0: + addresses: + - 192.168.3.21/24 + mtu: 1500 +backupFile: true +writeFile: true +Filename: 01-netcfg.yaml +# This file is autogenerated by warewulf +network: + version: 2 + renderer: networkd + ethernets: + wwnet1: + addresses: + - 192.168.3.22/24 + mtu: 9000 +` diff --git a/overlays/netplan/internal/nodes.conf b/overlays/netplan/internal/nodes.conf new file mode 100644 index 00000000..df4f7439 --- /dev/null +++ b/overlays/netplan/internal/nodes.conf @@ -0,0 +1,17 @@ +nodes: + node1: + network devices: + default: + device: wwnet0 + hwaddr: e6:92:39:49:7b:03 + ipaddr: 192.168.3.21 + netmask: 255.255.255.0 + gateway: 192.168.3.1 + mtu: 1500 + secondary: + device: wwnet1 + hwaddr: 9a:77:29:73:14:f1 + ipaddr: 192.168.3.22 + netmask: 255.255.255.0 + gateway: 192.168.3.1 + mtu: 9000 diff --git a/overlays/netplan/rootfs/etc/netplan/01-netcfg.yaml.ww b/overlays/netplan/rootfs/etc/netplan/01-netcfg.yaml.ww new file mode 100644 index 00000000..dd7252dd --- /dev/null +++ b/overlays/netplan/rootfs/etc/netplan/01-netcfg.yaml.ww @@ -0,0 +1,13 @@ +{{range $devname, $netdev := .NetDevs -}} +{{- $filename := print "01-netcfg.yaml" }} +{{- file $filename }} +# This file is autogenerated by warewulf +network: + version: 2 + renderer: networkd + ethernets: + {{$netdev.Device}}: + addresses: + - {{$netdev.IpCIDR}} + mtu: {{$netdev.MTU}} +{{end -}}