diff --git a/CHANGELOG.md b/CHANGELOG.md index 26f771f2..6152df44 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Fixed - Fix "address already in use" in `wwclient` when `secure: true`. #2009 +- Use device names in netplan bonds. #2013 ## v4.6.4, 2025-09-05 diff --git a/overlays/netplan/internal/netplan_test.go b/overlays/netplan/internal/netplan_test.go index b6105a83..32835706 100644 --- a/overlays/netplan/internal/netplan_test.go +++ b/overlays/netplan/internal/netplan_test.go @@ -13,41 +13,68 @@ import ( func Test_netplanOverlay(t *testing.T) { env := testenv.New(t) defer env.RemoveAll() - env.ImportFile("etc/warewulf/nodes.conf", "nodes.conf") env.ImportFile("var/lib/warewulf/overlays/netplan/rootfs/etc/netplan/warewulf.yaml.ww", "../rootfs/etc/netplan/warewulf.yaml.ww") tests := []struct { - name string - args []string - log string + name string + args []string + nodesConf string + log string }{ { - name: "netplan", + name: "one interface", args: []string{"--render", "node1", "netplan", "etc/netplan/warewulf.yaml.ww"}, - log: netplan, + nodesConf: ` +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 +`, + log: `backupFile: true +writeFile: true +Filename: etc/netplan/warewulf.yaml +# This file is autogenerated by warewulf +network: + version: 2 + renderer: networkd + ethernets: + wwnet0: + dhcp4: no + optional: true + addresses: + - 192.168.3.21/24 + mtu: 1500 +`, }, - } - - 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 + { + name: "two interfaces", + args: []string{"--render", "node1", "netplan", "etc/netplan/warewulf.yaml.ww"}, + nodesConf: ` +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 +`, + log: `backupFile: true writeFile: true Filename: etc/netplan/warewulf.yaml # This file is autogenerated by warewulf @@ -67,4 +94,76 @@ network: addresses: - 192.168.3.22/24 mtu: 9000 -` +`, + }, + { + name: "bond", + args: []string{"--render", "node1", "netplan", "etc/netplan/warewulf.yaml.ww"}, + nodesConf: ` +nodes: + node1: + network devices: + bond0: + type: Bond + device: bond0 + ipaddr: 192.168.3.100 + netmask: 255.255.255.0 + primary: + device: en1 + hwaddr: e6:92:39:49:7b:03 + tags: + master: bond0 + secondary: + device: en2 + hwaddr: 9a:77:29:73:14:f1 + tags: + master: bond0 +`, + log: `backupFile: true +writeFile: true +Filename: etc/netplan/warewulf.yaml +# This file is autogenerated by warewulf +network: + version: 2 + renderer: networkd + ethernets: + en1: + dhcp4: no + optional: true + en2: + dhcp4: no + optional: true + bonds: + bond0: + dhcp4: no + optional: true + addresses: + - 192.168.3.100/24 + parameters: + mode: balance-rr + mii-monitor-interval: 100 + interfaces: + - en1 + - en2 +`}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + env.WriteFile("etc/warewulf/nodes.conf", tt.nodesConf) + 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()) + }) + } +} diff --git a/overlays/netplan/rootfs/etc/netplan/warewulf.yaml.ww b/overlays/netplan/rootfs/etc/netplan/warewulf.yaml.ww index df69360d..f68a618e 100644 --- a/overlays/netplan/rootfs/etc/netplan/warewulf.yaml.ww +++ b/overlays/netplan/rootfs/etc/netplan/warewulf.yaml.ww @@ -48,9 +48,9 @@ network: mode: {{ default "balance-rr" $netdev.Tags.mode }} mii-monitor-interval: {{ default 100 $netdev.Tags.miimon }} {{- $interfaces := list }} -{{- range $ifacename, $iface := $NetDevs }} -{{- if eq $iface.Tags.master $devname }} -{{- $interfaces = append $interfaces $ifacename }} +{{- range $iface := $NetDevs }} +{{- if eq $iface.Tags.master $netdev.Device }} +{{- $interfaces = append $interfaces $iface.Device }} {{- end }} {{- end }} {{- if $interfaces }}