diff --git a/CHANGELOG.md b/CHANGELOG.md index d9e8b1d0..59281c08 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Changed - `warewulfd` overlay autobuild rebuilds overlays after node discovery. #1468 +### Fixed + +- Improved netplan support. #1873 ## v4.6.2, 2025-07-09 diff --git a/overlays/netplan/internal/netplan_test.go b/overlays/netplan/internal/netplan_test.go index 5fffc3a8..b6105a83 100644 --- a/overlays/netplan/internal/netplan_test.go +++ b/overlays/netplan/internal/netplan_test.go @@ -14,7 +14,7 @@ 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/01-netcfg.yaml.ww", "../rootfs/etc/netplan/01-netcfg.yaml.ww") + env.ImportFile("var/lib/warewulf/overlays/netplan/rootfs/etc/netplan/warewulf.yaml.ww", "../rootfs/etc/netplan/warewulf.yaml.ww") tests := []struct { name string @@ -23,7 +23,7 @@ func Test_netplanOverlay(t *testing.T) { }{ { name: "netplan", - args: []string{"--render", "node1", "netplan", "etc/netplan/01-netcfg.yaml.ww"}, + args: []string{"--render", "node1", "netplan", "etc/netplan/warewulf.yaml.ww"}, log: netplan, }, } @@ -49,26 +49,22 @@ func Test_netplanOverlay(t *testing.T) { const netplan string = `backupFile: true writeFile: true -Filename: 01-netcfg.yaml +Filename: etc/netplan/warewulf.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 + wwnet0: + dhcp4: no + optional: true + addresses: + - 192.168.3.21/24 + mtu: 1500 + wwnet1: + dhcp4: no + optional: true + addresses: + - 192.168.3.22/24 + mtu: 9000 ` diff --git a/overlays/netplan/rootfs/etc/netplan/01-netcfg.yaml.ww b/overlays/netplan/rootfs/etc/netplan/01-netcfg.yaml.ww deleted file mode 100644 index 7bc5572e..00000000 --- a/overlays/netplan/rootfs/etc/netplan/01-netcfg.yaml.ww +++ /dev/null @@ -1,12 +0,0 @@ -{{range $devname, $netdev := .NetDevs -}} -{{ file "01-netcfg.yaml" }} -# This file is autogenerated by warewulf -network: - version: 2 - renderer: networkd - ethernets: - {{$netdev.Device}}: - addresses: - - {{$netdev.IpCIDR}} - mtu: {{$netdev.MTU}} -{{end -}} diff --git a/overlays/netplan/rootfs/etc/netplan/warewulf.yaml.ww b/overlays/netplan/rootfs/etc/netplan/warewulf.yaml.ww new file mode 100644 index 00000000..df69360d --- /dev/null +++ b/overlays/netplan/rootfs/etc/netplan/warewulf.yaml.ww @@ -0,0 +1,63 @@ +# This file is autogenerated by warewulf +network: + version: 2 + renderer: networkd +{{- $ethernets := list }} +{{- $bonds := list }} +{{- $NetDevs := .NetDevs }} +{{- range $devname, $netdev := .NetDevs }} +{{- if $netdev.Device }} +{{- if eq (default "ethernet" (lower $netdev.Type)) "ethernet" }} +{{- $ethernets = append $ethernets $devname }} +{{- else if eq (lower $netdev.Type) "bond" }} +{{- $bonds = append $bonds $devname }} +{{- end }} +{{- end }} +{{- end }} +{{- if $ethernets }} + ethernets: +{{- range $devname := $ethernets }} +{{- $netdev := (index $NetDevs $devname) }} + {{$netdev.Device}}: + dhcp4: no + optional: true +{{- if $netdev.IpCIDR }} + addresses: + - {{$netdev.IpCIDR}} +{{- end }} +{{- if $netdev.MTU}} + mtu: {{$netdev.MTU}} +{{- end }} +{{- end }} +{{- end }} +{{- if $bonds }} + bonds: +{{- range $devname := $bonds }} +{{- $netdev := (index $NetDevs $devname) }} + {{$netdev.Device}}: + dhcp4: no + optional: true +{{- if $netdev.IpCIDR }} + addresses: + - {{$netdev.IpCIDR}} +{{- end }} +{{- if $netdev.MTU}} + mtu: {{$netdev.MTU}} +{{- end }} + parameters: + 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 }} +{{- end }} +{{- end }} +{{- if $interfaces }} + interfaces: +{{- range $ifacename := $interfaces }} + - {{ $ifacename }} +{{- end }} +{{- end }} +{{- end }} +{{- end }}