Improved netplan support

Amother other things, implements support for bonds.

- Fixes: #1873

Signed-off-by: Jonathon Anderson <janderson@ciq.com>
This commit is contained in:
Jonathon Anderson
2025-07-09 23:01:34 -06:00
committed by Christian Goll
parent 947bd1625e
commit cd14ee146f
4 changed files with 81 additions and 31 deletions

View File

@@ -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
`

View File

@@ -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 -}}

View File

@@ -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 }}