From 3aded908cecfbd78ccd634ec201b7268c1f4f83b Mon Sep 17 00:00:00 2001 From: Timothy Middelkoop Date: Thu, 27 Nov 2025 19:34:28 +0000 Subject: [PATCH] Add overlay variable NetworkCIDR6 Signed-off-by: Timothy Middelkoop --- CHANGELOG.md | 2 +- internal/pkg/config/root.go | 31 ++++++++++++--------------- internal/pkg/overlay/datastructure.go | 6 ++++-- overlays/debug/internal/debug_test.go | 19 ++++++++-------- overlays/debug/internal/nodes.conf | 4 ++-- overlays/debug/internal/warewulf.conf | 1 + overlays/debug/rootfs/tstruct.md.ww | 5 +++-- 7 files changed, 35 insertions(+), 33 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 02044fa9..237693a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,7 +20,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Dynamically write `$tftpdir/warewulf/grub.cfg` to the configured value from `warewulf.conf` - Absolute paths specified with `{{ file }}` in an overlay now write to that absolute path. - Use opencontainers/selinux to manage SELinux in wwclient. -- Replace unused/unneeded IPv6net with IpCIDR6 to align with IPv4 +- Replace unused/unneeded IPv6net with IpCIDR6 and NetworkCIDR6 to align with IPv4 - Improved IPv6 support - Add PrefixLen6 for prefix length, Gateway6, and IPv6 DHCP range - IPv6 support for Dnsmasq and NetworkManager diff --git a/internal/pkg/config/root.go b/internal/pkg/config/root.go index 142d6914..a22646b3 100644 --- a/internal/pkg/config/root.go +++ b/internal/pkg/config/root.go @@ -8,6 +8,7 @@ package config import ( "bytes" + "fmt" "net" "os" "reflect" @@ -170,6 +171,15 @@ func (config *WarewulfYaml) NetworkCIDR() string { return cidr.String() } +func (config *WarewulfYaml) NetworkCIDR6() string { + cidr := fmt.Sprintf("%s/%s", config.Ipaddr6, config.PrefixLen6) + _, ipnet, err := net.ParseCIDR(cidr) + if err != nil { + return "" + } + return ipnet.String() +} + func (config *WarewulfYaml) IpCIDR() string { if config.Ipaddr == "" || config.Netmask == "" { return "" @@ -185,25 +195,12 @@ func (config *WarewulfYaml) IpCIDR() string { } func (config *WarewulfYaml) IpCIDR6() string { - if config.Ipaddr6 == "" || config.PrefixLen6 == "" { + cidr := fmt.Sprintf("%s/%s", config.Ipaddr6, config.PrefixLen6) + ip, _, err := net.ParseCIDR(cidr) + if err != nil || ip == nil || ip.To4() != nil { return "" } - ip := net.ParseIP(config.Ipaddr6) - if ip == nil || ip.To4() != nil { - return "" - } - prefix, err := strconv.Atoi(config.PrefixLen6) - if err != nil { - return "" - } - cidr := net.IPNet{ - IP: ip, - Mask: net.CIDRMask(prefix, 128), - } - if cidr.IP == nil || cidr.Mask == nil { - return "" - } - return cidr.String() + return cidr } // InitializedFromFile returns true if [WarewulfYaml] memory was read from diff --git a/internal/pkg/overlay/datastructure.go b/internal/pkg/overlay/datastructure.go index 31750504..a6f165a6 100644 --- a/internal/pkg/overlay/datastructure.go +++ b/internal/pkg/overlay/datastructure.go @@ -30,8 +30,9 @@ type TemplateStruct struct { NetworkCIDR string Overlay string Ipaddr6 string - IpCIDR6 string PrefixLen6 string + IpCIDR6 string + NetworkCIDR6 string Ipv6 bool Dhcp warewulfconf.DHCPConf Nfs warewulfconf.NFSConf @@ -75,8 +76,9 @@ func InitStruct(overlayName string, nodeData node.Node, allNodes []node.Node) (T tstruct.Network = controller.Network tstruct.NetworkCIDR = controller.NetworkCIDR() tstruct.Ipaddr6 = controller.Ipaddr6 - tstruct.IpCIDR6 = controller.IpCIDR6() tstruct.PrefixLen6 = controller.PrefixLen6 + tstruct.IpCIDR6 = controller.IpCIDR6() + tstruct.NetworkCIDR6 = controller.NetworkCIDR6() if controller.Ipaddr6 != "" && controller.PrefixLen6 != "" { tstruct.Ipv6 = true } diff --git a/overlays/debug/internal/debug_test.go b/overlays/debug/internal/debug_test.go index 2f27d531..c497c483 100644 --- a/overlays/debug/internal/debug_test.go +++ b/overlays/debug/internal/debug_test.go @@ -93,10 +93,11 @@ data from other structures. - Netmask: 255.255.255.0 - Network: 192.168.0.0 - NetworkCIDR: 192.168.0.0/24 -- Ipaddr6: -- IpCIDR6: -- PrefixLen6: -- Ipv6: false +- Ipaddr6: 2001:db8::1 +- PrefixLen6: 64 +- IpCIDR6: 2001:db8::1/64 +- NetworkCIDR6: 2001:db8::/64 +- Ipv6: true ### DHCP @@ -180,8 +181,8 @@ node methods in addition to its fields. - Netmask: 255.255.255.0 - Gateway: 192.168.3.1 - Ipaddr6: - - IpCIDR6: - PrefixLen6: + - IpCIDR6: - Gateway6: - MTU: - Primary: false @@ -195,8 +196,8 @@ node methods in addition to its fields. - Netmask: 255.255.255.0 - Gateway: 192.168.3.1 - Ipaddr6: - - IpCIDR6: - PrefixLen6: + - IpCIDR6: - Gateway6: - MTU: - Primary: false @@ -211,10 +212,10 @@ node methods in addition to its fields. - Ipaddr: - Netmask: - Gateway: - - Ipaddr6: fd00:10::3 - - IpCIDR6: fd00:10::3/64 + - Ipaddr6: 2001:db8::3 - PrefixLen6: 64 - - Gateway6: fd00:10::1 + - IpCIDR6: 2001:db8::3/64 + - Gateway6: 2001:db8::1 - MTU: - Primary: false - Tags: diff --git a/overlays/debug/internal/nodes.conf b/overlays/debug/internal/nodes.conf index 65354ac8..4c3e0b90 100644 --- a/overlays/debug/internal/nodes.conf +++ b/overlays/debug/internal/nodes.conf @@ -54,9 +54,9 @@ nodes: tertiary: device: wwnet3 hwaddr: 9a:77:29:73:14:f8 - ipaddr6: fd00:10::3 + ipaddr6: 2001:db8::3 prefixlen6: 64 - gateway6: fd00:10::1 + gateway6: 2001:db8::1 ipmi: username: user password: password diff --git a/overlays/debug/internal/warewulf.conf b/overlays/debug/internal/warewulf.conf index 89c6ce11..e21f7bcb 100644 --- a/overlays/debug/internal/warewulf.conf +++ b/overlays/debug/internal/warewulf.conf @@ -1 +1,2 @@ ipaddr: 192.168.0.1/24 +ipaddr6: 2001:db8::1/64 diff --git a/overlays/debug/rootfs/tstruct.md.ww b/overlays/debug/rootfs/tstruct.md.ww index 100a4525..415b2e96 100644 --- a/overlays/debug/rootfs/tstruct.md.ww +++ b/overlays/debug/rootfs/tstruct.md.ww @@ -34,8 +34,9 @@ data from other structures. - Network: {{ .Network }} - NetworkCIDR: {{ .NetworkCIDR }} - Ipaddr6: {{ .Ipaddr6 }} -- IpCIDR6: {{ .IpCIDR6 }} - PrefixLen6: {{ .PrefixLen6 }} +- IpCIDR6: {{ .IpCIDR6 }} +- NetworkCIDR6: {{ .NetworkCIDR6 }} - Ipv6: {{ .Ipv6 }} ### DHCP @@ -125,8 +126,8 @@ node methods in addition to its fields. - Netmask: {{ $netdev.Netmask }} - Gateway: {{ $netdev.Gateway }} - Ipaddr6: {{ $netdev.Ipaddr6 }} - - IpCIDR6: {{ $netdev.IpCIDR6 }} - PrefixLen6: {{ $netdev.PrefixLen6 }} + - IpCIDR6: {{ $netdev.IpCIDR6 }} - Gateway6: {{ $netdev.Gateway6 }} - MTU: {{ $netdev.MTU }} - Primary: {{ $netdev.Primary }}